 到了这一步,基本上算是差不多了,在大体的框架上,就剩下预览与保存的做法了。
第一步:预览
在我们已经把视频,TileList组装完成后,就需要实现一个功能,就是我们需要重新预览下以前拍的照片,那么由此所引申出来的动作必然就是我们需要点击在TileList里的小图,这一步很简单,我们先来玩一个TileList点击的小代码,后面就套一下,就很容易了。 按照第二部分,认识TileList刚开始的那段小代码,新的代码如下:
import fl.events.ListEvent; 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,在前面的教程代码上继续加代码:
import fl.events.ListEvent; 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 flash.utils.ByteArray; 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端的代码:
<?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发布,在网页上直接来试试。基本上,我这里是测试成功了。
|