使用Flash操作Mobile系统的Camera基本分成两部分,第一部分比较重要,就是如何使用Flash AS3 API操作Mobile Camera。原理没必要多讲,这里用实例说话。在此我使用了Flash CS 5.5,当你学习完毕后,你会觉得使用Flash Builder 4.5进行创作也不是什么难事,我们使用Flash CS 5.5或Flash Builder 4.5无非是希望降低我们额外创作组件的开销,如果你是一个Flash Develop使用者,你完全可以从0开始创作场景舞台上的每一个组件。
回到Camera部分,在Flash CS 5.5中,我的场景上已经有了以下的几个组件,如图所示。

三个组件分别是label(cameralabel),button(shoot_btn)和URLLoader(photoloader)。值得一提的是最后一个,URLLoader是Flash CS 5.5提供的位于fl.containers里的一个组件,是个能够将外部source源加载并显示在该容器绘图区域的一个合成组件,如果你使用纯粹的AS3,自己来分开处理URLLoader和Sprite容器的关系也能实现,这里是为了突出介绍Camera功能,而非其他部分才使用了这个组件。
在Flash CS 5.5 场景舞台对应的Timeline上,我们创建一个action层,用于放置AS3脚本。具体的代码如下:
import flash.media.CameraUI;
import flash.events.MediaEvent;
import flash.events.ErrorEvent;
import flash.events.MouseEvent;
import flash.media.MediaType;
import flash.filesystem.File;
shoot_btn.addEventListener(MouseEvent.CLICK,onClick);
function onClick(event:MouseEvent):void
{
if (CameraUI.isSupported)
{
var cameraui:CameraUI=new CameraUI(); // 使用CameraUI来调用摄像头
cameraui.addEventListener(MediaEvent.COMPLETE,onComplete);//每次摄像头完成一次拍摄操作后,均会派发Complete事件
//cameraui.addEventListener(ErrorEvent.ERROR,onError);
cameralabel.text = "支持摄像头";
cameraui.launch(MediaType.IMAGE);//指定是拍照类型
}
else
{
cameralabel.text = "不支持摄像头";
}
}
function onComplete(event:MediaEvent):void{
var file:File=event.data.file;//访问拍下来的照片文件
cameralabel.text=file.url;//显示文件存储的路径
photoloader.source=file.url;//显示照片
}
首先,声明一个BitmapData实例。第二,声明一个CameraRoll实例。第三,在场景中对某一个DisplayObject(比如用来显示你的照片的Sprite)进行BitmapData.draw的操作。最后一步,对声明的CameraRoll实例进行addBitmapData的操作,将刚才进行过draw操作的BitmapData实例作为参数传进去。大功告成。
单从操作Camera这个部分来比较,Flash是不是方便极了?Flash Player 11还将加入对于前置摄像头的支持,使用了CameraPosition等新增的类,对于Flash开发者而言,更方便。
刚才的Demo下载(记得使用时,先行在Flash CS 5.5里进行Android相关发布设定)。cameraui.fla