[AS3]as3.0处理视频截图源代码示例
第一步:让舞台能够显示连接的视频,让你的光辉形象显示出来。这一步很简单,你首先建立一个FLA文档后,按F11,让库面版显示出来,然后在面版的下部,右键-新建VIDEO,命名随意,完成后,把
这个视频从库拖到舞台上,由于初始大小为:160*120,你可以按照你的喜欢,设置为任何大小,我这里就设置为:320*240。并且命名此VIDEO的
实例名为:cameraVideo
接着在时间面版上,新建一个时间轴,并且命名为:action,按F9,开始写代码(后面的代码全都写在里面)。
//这是定义个新的相机视频,然后从当前的视频头取得内容。
var myCamera:Camera =Camera.getCamera();
//这个就比较简单了,把定义的相机视频绑定到放置的VIDEO上就可以了
cameraVideo.attachCamera(myCamera);
测试下,看看,是否你的光辉形象出现了。注意:在测试的时候,跳出的设置,你应该选择:允许
第二步:事情没那么简单,我们需要填坑。
ok,视频是出来了,但是事情还没那么简单,因为你需要考虑万一没装视频头怎么办?总需要来个提示吧。所以我们要把刚才的代码进
行完善,弄个辨别语句。
- var myCamera:Camera=Camera.getCamera();
- if (myCamera==null) {
- //意思就是,未检测到视频头,然后该干嘛,当然你想干嘛就干嘛。
- trace(“你还没安装视频头,或者视频头未连接“);
- } else {
- //这是检测成功了
- cameraVideo.attachCamera(myCamera);
- trace(“视频头检测成功“);
- }
上面的测试是有一点小问题的,因为刚才已经测试成功过有视频头了,现在虽然拔掉视频头,但是他还是会显示连接正确,为啥呢,因为
刚才的连接数据他还是存在 了本地上。你可以关掉FLASH,然后再重新测试下看看。这个没关系,因为,一般而言在网页上这个错误倒不会出
现了。
第三步:换种做法。
其实,我写这部分,还是有原因的,因为如果按照刚才的从库里拉VIDEO,后面截图会有点小问题,为了方便讲解,再来另一种方法,首先
把舞台上的VIDEO删除掉,然后代码如下:
- var cameraVideo:Video = new Video();
- addChild(cameraVideo);
- cameraVideo.width =320;
- cameraVideo.height =240;
- var myCamera:Camera=Camera.getCamera();
- if (myCamera==null) {
- //意思就是,未检测到视频头,然后该干嘛,当然你想干嘛就干嘛。
- //trace(“你还没安装视频头,或者视频头未连接“);
- } else {
- //这是检测成功了
- cameraVideo.attachCamera(myCamera);
- //trace(“视频头检测成功“);
- }
可以注意到,这里是用代码去直接召唤VIDEO了,这样更符合代码写作。
很简单吧,非常简单。第一部分算完成了,下一部分就是专门讲tileList这个组件,和截图。
下面让我们讲讲截图和TileList的应用。
拍照,拍照,当然要拍很多张,然后放在一起,让自己去挑一些好的,然后再保存到电脑上。
所以,我们需要想个办法,把当前的样子拍下来,这就是截图。
第一步:截图
那怎么截图呢?也很简单,用BitmapData就可以搞定。首先在舞台上加个Button,实例命名为:btn,作为截图触发按钮。代码如下:
- var cameraVideo:Video = new Video();
- addChild(cameraVideo);
- cameraVideo.width =320;
- cameraVideo.height =240;
- var myCamera:Camera=Camera.getCamera();
- if (myCamera==null) {
- //trace(“你还没安装视频头,或者视频头未连接“);
- } else {
- cameraVideo.attachCamera(myCamera);
- btn.addEventListener(MouseEvent.CLICK,beginSnap);
- }
- //main做为测试截图容器,只是测试用,下一步就不需要这个了。
- var main:Sprite = new Sprite();
- main.y=260;
- addChild(main);
- function beginSnap(event:MouseEvent):void {
- //trace(cameraVideo.width);
- var bitmapdata:BitmapData=new BitmapData(320,240);
- bitmapdata.draw(cameraVideo);
- var bitmap:Bitmap=new Bitmap(bitmapdata);
- main.addChild(bitmap);
- }
如果你测试成功的话,应该就是可以看到点击按钮后,截图自然会出现在下方,当然目前只是在测试,只是让你明白每一步的做法。
完成截图后,我们需要停下来想一下。想象一下:我们拍了很多照片,然后把拍的无论是好的坏的,都扔到一个篮子里,然后我们再从
里面挑选出好的,去打印成大照片。思路很清晰,那么我们需要做的,就是这个篮子问题。FLASH的魅力就是在这个篮子上的表现上,我们可以
把照片横着排,竖着排,甚至是:一会儿排成人字形,一会儿排成大字形。我想这就是FLASH的乐趣,当然,这里我只说其中一种,最工业化的
一种,直接放到FLASH自带的TileList组件上。
第二步:感受下TileList组件
如何使用TileList组件呢,其实帮助里说的很清楚,而且这里也非常详细的说明了使用方法,如果你愿意认真的看下,后面的教程就很
简单了。不过我这里还是放一个比较贴近的小教程,这样下一步,我就不用解释的那么费劲了。
新建一个FLA文件,然后在舞台上,随意画一个圆形,或者方形,然后选择按F8转化为实例,命名:mc,然后选择:Export for
Actionscript,在Class里也命名为:mc,这样就方便在代码里调用这个图。
好,接着从组件里把TileList组件拉到舞台,长度设置为400,其他暂时默认,命名为:lists。
开始在新的时间轴上加代码:
- 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);
- }
运行下看看,你所画的小图,有10张出现在这个组件上,而且有标签名字,别忘了Object我还可以加很多乱七八糟的自定义属性,比如
toolTip这种,意思就是移动到图片上自动出现提示标签,这个都是题外话,你感觉一下上面的代码,应该对titleList组件有点感觉了吧。
那么好,我们回到视频照相程序上,我们要做的就是把每次截图都放到这个LIST上,但是我们目前截图是320*240的,好象太大了吧,
不过你不要担心,放在LIST上的话,一切都会以LIST定义的高宽为主,意思就是:你想让截图以多大的大小放在tileList上,是要在tileList
组件上设置的。
那么怎么设置tileList呢,这个就简单了,点击下这个组件,然后按SHIFT+F7,就会出现组件检查器,随便你怎么设置。
第三步:组装
这步就是把说过的东西给组装起来,拍照,截图,把图放到tileList上。代码如下:
- //只要加一句,然后修改beginSnap构造函数就可以
- //先建立一个数组,用来放截图数据
- var contents:Array = new Array();
- function beginSnap(event:MouseEvent):void {
- var bitmapdata:BitmapData=new BitmapData(320,240);
- bitmapdata.draw(cameraVideo);
- var bitmap:Bitmap=new Bitmap(bitmapdata);
- addChild(bitmap);
- contents.push(bitmap);
- var i:uint;
- for (i=0; i
- var tempObj:Object = new Object();
- tempObj.source=contents;
- tempObj.label=“image“+;
- }
- //lists就是tileList的实例名,我把里面的columnWidth设置为120;rowHeight设置为90
- lists.addItemAt(tempObj,0);
- }
热门文章推荐
- [HLS]做自己的m3u8点播系统使用HTTP Live Streaming(HLS技术)
- [FMS]FMS流媒体服务器配置与使用相关的介绍
- [AS3]什么是M3U8,与HTML5的区别是什么
- AS2.0 让flash自适应全屏,并且不自动缩放
- [AS3]as3.0的sound类常用技巧整理
- [AS3]as3与ByteArray详解、ByteArray介绍、ByteArray用法
- 关于RTMP,RTMPT,RTMPS,RTMPE,RTMPTE协议的介绍
- [JS]分享浏览器弹出窗口不被拦截JS示例