最近一直在研究ActionScript3(AS3)Flash的摄像头高清拍照,网络上大多介绍320*240的拍照方法,但1280*720这种高清的时候就没有介绍到,本来经过几天的研究将成果给大家分享,其中Jpeg部分的实现是通过第三方的库来实现的,下载方法以及安装方法会分享给大家。
首先在flash中新建一个AS3的Flash文件,在文档的属性中定义基类为PhotoSnap 在文件中加入一个button组件,并命名为btn1 。再创建一个AS3脚本文件,文件名为:PhotoSnap.as将下面的代码复制到脚本文件中。保存,运行就可以了。
package
{
import flash.media.*;
import flash.display.*;
import flash.net.*;
import fl.controls.*;
import flash.events.*;
import flash.geom.*;
import com.adobe.images.JPGEncoder;
public class PhotoSnap extends Sprite
{
var Cam:Camera;
var vid:Video;
public function PhotoSnap():void
{
Cam=Camera.getCamera("0");
if(Cam==null){trace("无摄像头\n");}
Cam.setMode(1280,720,10);
Cam.setQuality(0,100);
vid=new Video(160,90);
vid.x=20;
vid.y=50;
vid.attachCamera(Cam);
addChild(vid);
btn1.addEventListener(MouseEvent.CLICK, savepic);
}
public function savepic(event:MouseEvent)
{
var jpgSource = new BitmapData(Cam.width,Cam.height);
var myMatrix:Matrix=new Matrix();
myMatrix.scale(8,8);//关键处,该处的值应该是由video的大小和camera设置的大小决定的。
jpgSource.draw(vid,myMatrix);
var file:FileReference = new FileReference();
var jpg:JPGEncoder = new JPGEncoder(100);
file.save(jpg.encode(jpgSource),"b.jpg");
}
}
}
其中import com.adobe.images.JPGEncoder; 的jpeg开发包的下载地址是 http://code.google.com/p/as3corelib/
下载后解压,找到目录as3corelib-.92.1\as3corelib-.92.1\lib\as3corelib.swc文件复制到flash安装目录下的Common\Configuration\ActionScript 3.0\libs 就可以了。
经过我的测试,不管显示的video对像是多大,保存下来的都是原始的1280*720图像大小,效果就是原来摄像头输出的效果一样,不会因为video对像显示的小就质量下降,放大系数可以根据你个人对video定义的大小来改变,不一定非要是4 中国很多网站都没有这方面的资料是我本来看了很多洋文网站后的成果。现分享给大家,有看到的人别忘了留言一下。