到了这一步,基本上算是差不多了,在大体的框架上,就剩下预览与保存的做法了。
第一步:预览
在我们已经把视频,TileList组装完成后,就需要实现一个功能,就是我们需要重新预览下以前拍的照片,那么由此所引申出来的动作必然就是我们需要点 击在TileList里的小图,这一步很简单,我们先来玩一个TileList点击的小代码,后面就套一下,就很容易了。
按照第二部分,认识TileList刚开始的那段小代码,新的代码如下:
var i:uint;
for(i=0;i<10;i++){
var tempMc:Object= new Object();
tempMc.label = "PIC"+i;
tempMc.source = new mc();
lists.addItem(tempMc);
}
lists.addEventListener(ListEvent.ITEM_CLICK,thumbClick);
function thumbClick(event:ListEvent):void{
trace(event.item.label);
}
从上面简单的代码,就能知道在TileList里单击其中的图标,该怎么去实现。
好,那么重新我们回到原来的例子上,我们已经知道TileList点击怎么实现,那么我们需要在舞台上放一个空的实例,用于加载点击图标后,传输过来的具体内容,我们这里只需要图,别的不需要。当然你可以同样传送其他信息。
我的打算是新的预览实例放在X轴为340,Y轴为0,同时在舞台上再放一个BUTTON,实例名:down_btn,用于保存事件的触发
预览的做法也是跟截图的做法一样,用Bitmap,和BitmapData,在前面的教程代码上继续加代码:
var review:Sprite;
function thumbClick(event:ListEvent):void {
var bmd:BitmapData=new BitmapData(320,240);
bmd.draw(event.item.source);
var bit:Bitmap=new Bitmap(bmd);
review = new Sprite();
addChild(review);
review.x = 340;
review.addChild(bit);
//用于下载当前的图片
//down_btn.addEventListener(MouseEvent.CLICK,downJpg);
}
这样,这部分的功能算是完成了,也不难。下一部分的内容在于把当前的图保存到本地上,这个有很多方法,我说的是其中一种,但是大体的思路都是一样的。我先说下我的思路。
还记得我以前写的Flash简易聊天室教程里的三板斧教程吗? 这个主要讲的是FLASH里的数据传输到外部服务器的,这里我要保存图片,那么也是把当前的图片数据传输出去,那么我们就需要CORDLIB里的一个 类:JPGEncoder类,把当前的图片数据转化成ByteArray,传输出去,如果你像我用的是PHP的话,就可以用PHP把ByteArray写 到本地上,变回原来的图片。
第二步:保存
首先我们要去http://code.google.com/p/as3corelib/把JPGEncoder类下下来。
然后下一步就是继续完成down_btn按钮触发的下载事件构造函数:downJpg
import com.adobe.encoding.JPEGEncoder;
function downJpg(event:MouseEvent):void {
//?name=@@@@@@就是设置下载下来的图片名字,这个可以根据你自己想要的来修改。
var url:String="http://localhost/downjpg.php?name=testJpg.jpg";
var bmd:BitmapData = new BitmapData(320,240);
bmd.draw(review);
//下载截图质量设置
var jpgEncoder:JPEGEncoder=new JPEGEncoder(100);
var myByteArray:ByteArray=jpgEncoder.encode(bmd);
//发送数据到PHP服务器端,然后自动弹出,我下面会提供一个PHP文件,供你测试,反正
//根据我以前的做的很多东西来看,方法有N多。这是其中之一
var header:URLRequestHeader = new URLRequestHeader ("Content-type", "application/octet-stream");
var request:URLRequest=new URLRequest(url);
request.requestHeaders.push(header);
request.method=URLRequestMethod.POST;
request.data=myByteArray;
var loader:URLLoader = new URLLoader();
navigateToURL(request, "_blank");
}
PHP端的代码:
if ( isset ( $GLOBALS["HTTP_RAW_POST_DATA"] )) {
$im = $GLOBALS["HTTP_RAW_POST_DATA"];
header('Content-Type: image/jpeg');
header("Content-Disposition: attachment; filename=".$_GET['name']);
echo $im;
} else echo 'An error occured.';
?>
你能测试出来吗?如果在下载弹出有错误的时候,你可以按F12发布,在网页上直接来试试。基本上,我这里是测试成功了。
这个系列的教程算是圆满结束了,大体的框架我已经算是讲完了,当然小细节还有很多要做,这个就需要你去努力了。因为我最近时间不多,写的可能比较匆忙,有什么地方不对,或者你看不懂,你可以发E-MAIL给我,注意是E-MAIL。