·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

[AS3]as3.0处理视频截图源代码示例

时间:2013-08-01 09:12CuPlayer.com
[AS3]as3.0处理视频截图源代码示例,让舞台能够显示连接的视频,让你的光辉形象显示出来。这一步很简单,你首先建立一个FLA文档后,按F11,让库面版显示出来,然后在面版的下部,右键-新建VIDEO

      第一步:让舞台能够显示连接的视频,让你的光辉形象显示出来。这一步很简单,你首先建立一个FLA文档后,按F11,让库面版显示出来,然后在面版的下部,右键-新建VIDEO,命名随意,完成后,把

这个视频从库拖到舞台上,由于初始大小为:160*120,你可以按照你的喜欢,设置为任何大小,我这里就设置为:320*240。并且命名此VIDEO的

实例名为:cameraVideo
       接着在时间面版上,新建一个时间轴,并且命名为:action,按F9,开始写代码(后面的代码全都写在里面)。
//这是定义个新的相机视频,然后从当前的视频头取得内容。
var myCamera:Camera =Camera.getCamera();
//这个就比较简单了,把定义的相机视频绑定到放置的VIDEO上就可以了
cameraVideo.attachCamera(myCamera);
       测试下,看看,是否你的光辉形象出现了。注意:在测试的时候,跳出的设置,你应该选择:允许
      第二步:事情没那么简单,我们需要填坑。
       ok,视频是出来了,但是事情还没那么简单,因为你需要考虑万一没装视频头怎么办?总需要来个提示吧。所以我们要把刚才的代码进

行完善,弄个辨别语句。

  1. var myCamera:Camera=Camera.getCamera(); 
  2. if (myCamera==null) { 
  3.   //意思就是,未检测到视频头,然后该干嘛,当然你想干嘛就干嘛。 
  4.   trace(“你还没安装视频头,或者视频头未连接“); 
  5. } else { 
  6.   //这是检测成功了 
  7.   cameraVideo.attachCamera(myCamera); 
  8.     trace(“视频头检测成功“); 


    上面的测试是有一点小问题的,因为刚才已经测试成功过有视频头了,现在虽然拔掉视频头,但是他还是会显示连接正确,为啥呢,因为

刚才的连接数据他还是存在 了本地上。你可以关掉FLASH,然后再重新测试下看看。这个没关系,因为,一般而言在网页上这个错误倒不会出

现了。
    第三步:换种做法。
    其实,我写这部分,还是有原因的,因为如果按照刚才的从库里拉VIDEO,后面截图会有点小问题,为了方便讲解,再来另一种方法,首先

把舞台上的VIDEO删除掉,然后代码如下:

  1. var cameraVideo:Video = new Video(); 
  2. addChild(cameraVideo); 
  3. cameraVideo.width =320
  4. cameraVideo.height =240
  5.  
  6. var myCamera:Camera=Camera.getCamera(); 
  7. if (myCamera==null) { 
  8.   //意思就是,未检测到视频头,然后该干嘛,当然你想干嘛就干嘛。 
  9.   //trace(“你还没安装视频头,或者视频头未连接“); 
  10. } else { 
  11.   //这是检测成功了  
  12.   cameraVideo.attachCamera(myCamera); 
  13.   //trace(“视频头检测成功“); 
  14.   } 

     可以注意到,这里是用代码去直接召唤VIDEO了,这样更符合代码写作。

很简单吧,非常简单。第一部分算完成了,下一部分就是专门讲tileList这个组件,和截图。


下面让我们讲讲截图和TileList的应用。
 
       拍照,拍照,当然要拍很多张,然后放在一起,让自己去挑一些好的,然后再保存到电脑上。
       所以,我们需要想个办法,把当前的样子拍下来,这就是截图。

       第一步:截图
       那怎么截图呢?也很简单,用BitmapData就可以搞定。首先在舞台上加个Button,实例命名为:btn,作为截图触发按钮。代码如下:

  1. var cameraVideo:Video = new Video(); 
  2. addChild(cameraVideo); 
  3. cameraVideo.width =320
  4. cameraVideo.height =240
  5.  
  6. var myCamera:Camera=Camera.getCamera(); 
  7. if (myCamera==null) { 
  8.   //trace(“你还没安装视频头,或者视频头未连接“); 
  9. } else { 
  10.   cameraVideo.attachCamera(myCamera); 
  11.   btn.addEventListener(MouseEvent.CLICK,beginSnap); 
  12. //main做为测试截图容器,只是测试用,下一步就不需要这个了。 
  13. var main:Sprite = new Sprite(); 
  14. main.y=260
  15. addChild(main); 
  16.  
  17. function beginSnap(event:MouseEvent):void { 
  18.   //trace(cameraVideo.width); 
  19.   var bitmapdata:BitmapData=new BitmapData(320,240); 
  20.   bitmapdata.draw(cameraVideo); 
  21.   var bitmap:Bitmap=new Bitmap(bitmapdata); 
  22.   main.addChild(bitmap); 

      如果你测试成功的话,应该就是可以看到点击按钮后,截图自然会出现在下方,当然目前只是在测试,只是让你明白每一步的做法。
 
       完成截图后,我们需要停下来想一下。想象一下:我们拍了很多照片,然后把拍的无论是好的坏的,都扔到一个篮子里,然后我们再从

里面挑选出好的,去打印成大照片。思路很清晰,那么我们需要做的,就是这个篮子问题。FLASH的魅力就是在这个篮子上的表现上,我们可以

把照片横着排,竖着排,甚至是:一会儿排成人字形,一会儿排成大字形。我想这就是FLASH的乐趣,当然,这里我只说其中一种,最工业化的

一种,直接放到FLASH自带的TileList组件上。

      第二步:感受下TileList组件

      如何使用TileList组件呢,其实帮助里说的很清楚,而且这里也非常详细的说明了使用方法,如果你愿意认真的看下,后面的教程就很

简单了。不过我这里还是放一个比较贴近的小教程,这样下一步,我就不用解释的那么费劲了。

      新建一个FLA文件,然后在舞台上,随意画一个圆形,或者方形,然后选择按F8转化为实例,命名:mc,然后选择:Export for

Actionscript,在Class里也命名为:mc,这样就方便在代码里调用这个图。

      好,接着从组件里把TileList组件拉到舞台,长度设置为400,其他暂时默认,命名为:lists。
      开始在新的时间轴上加代码:

  1. var i:uint; 
  2. for(i=0;i<10;i++){ 
  3.   var tempMc:Objectnew Object(); 
  4.   tempMc.label = “PIC“+i; 
  5.   tempMc.source = new mc(); 
  6.   lists.addItem(tempMc); 


         运行下看看,你所画的小图,有10张出现在这个组件上,而且有标签名字,别忘了Object我还可以加很多乱七八糟的自定义属性,比如

toolTip这种,意思就是移动到图片上自动出现提示标签,这个都是题外话,你感觉一下上面的代码,应该对titleList组件有点感觉了吧。

       那么好,我们回到视频照相程序上,我们要做的就是把每次截图都放到这个LIST上,但是我们目前截图是320*240的,好象太大了吧,

不过你不要担心,放在LIST上的话,一切都会以LIST定义的高宽为主,意思就是:你想让截图以多大的大小放在tileList上,是要在tileList

组件上设置的。 
       那么怎么设置tileList呢,这个就简单了,点击下这个组件,然后按SHIFT+F7,就会出现组件检查器,随便你怎么设置。

       第三步:组装
       这步就是把说过的东西给组装起来,拍照,截图,把图放到tileList上。代码如下:

  1. //只要加一句,然后修改beginSnap构造函数就可以 
  2. //先建立一个数组,用来放截图数据 
  3. var contents:Array = new Array(); 
  4. function beginSnap(event:MouseEvent):void { 
  5.   var bitmapdata:BitmapData=new BitmapData(320,240); 
  6.   bitmapdata.draw(cameraVideo); 
  7.   var bitmap:Bitmap=new Bitmap(bitmapdata); 
  8.   addChild(bitmap); 
  9.  
  10.   contents.push(bitmap); 
  11.   var i:uint; 
  12.   for (i=0; i 
  13.     var tempObj:Object = new Object(); 
  14.     tempObj.source=contents
  15.     tempObj.label=“image“+; 
  16.   } 
  17.                //lists就是tileList的实例名,我把里面的columnWidth设置为120;rowHeight设置为90 
  18.   lists.addItemAt(tempObj,0); 

 

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器