7yue's Weblog

Thinking in RIA Solutions...2470,8514,1020的生活演绎

« 如何去掉PNG的Alpha通道使用最新的AIR3 Beta2的运行时绑定功能 »

Flash与Mobile Camera的简单交互方式

Flash Player 从10.1开始正式对主流智能手机提供支持,在10.3时,Adobe统一了Flash Player 和 AIR内置的Flash Runtime。所以,今天我所提及的部分,是通过使用Flash的API,操作手机摄像头,对于不同的手机系统,只需要通过AIR SDK打包成不同的文件格式即可已Native app(Android APK,BlackBerry Tablet OS bar, iOS ipa)的形式使用Flash Camera API了。

使用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;//显示照片
}

上面代码提供了最基本的功能,操作CameraUI,并将返回的图片文件显示在photoloader的容器中。Flash除了能操作CameraUI类来实现对摄像头的访问,还能操作CameraRoll这个类,就是直接对Mobile系统的相册进行操作,这是我要说的第二部分。这部分的逻辑简单极了,我来大致描述一下,你就会懂。
首先,声明一个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

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Powered By Z-Blog 1.8 Walle Build 91204

Copyright 2007 www.7yue.com. Some Rights Reserved.
京ICP备05064035号