《flash AIR保存图片到Camera相册》由会员分享,可在线阅读,更多相关《flash AIR保存图片到Camera相册(2页珍藏版)》请在金锄头文库上搜索。
1、之前写过一篇帖子:“通过 BitmapData 生成图片到本地“,使用了 adobe 官方的JPGEncoder/PNGEncoder,创建本地图片。这里测试 android 平板下如何在相册路径下创建图片,一开始想到的是在 as 里使用 encode的方式,只要能获取到相册目录的路径就能做到,结果发现一个叫做 CameraRoll 的类,只需传入 bitmapdata,就可在 camera 目录下创建图片!,而且图片的生成时间超级快,我猜测 CameraRoll 不是用的上层 as 做的,而是使用底层android 实现的,所以速度会快很多。这样可以得出 CameraRoll 速度速度 PN
2、GEncoder 编码速度编码速度 JPGEncoder 编码速编码速度度 (可见我之前帖子“AIR 通过 BitmapData 生成图片到本地)var bmpData:BitmapData = new BitmapData(width,height);bmpData.draw(this);if(CameraRoll.supportsAddBitmapData)var roll:CameraRoll = new CameraRoll();roll.addEventListener(Event.COMPLETE,onCreatePicComlete);roll.addEventListener(
3、ErrorEvent.ERROR, onCreatePicError);roll.addBitmapData(bmpData);else/设备不支持 Flex 中设置 Camera 的视频清晰质量的最佳配合 今天需要设置 Flex 中的 Camera 组件的一些属性,后来发现清晰度不是很高,于是鼓捣了 上 午半天,设置了很多的参数,竟然发现手册上就是现成的一些设置方法,郁闷!不过我还 是专门设置了几个有用和必要的属性,为自己的程序中应用,其实很简单!以此为例:Camera.setMode(320,24,15); 就是要设置一个宽 320、高 240、播放速率是 15fps,他的带宽消耗: (3
4、20*240*15)/1000000 = 1.2(Mbps) = 1152000(Bps) /1000000 是 1024*1024 的取 舍写法即:1000*1000 而获得的; 关于所消耗的带宽,换成我们能看懂的带宽计算就是:320*240*15/8000 = 144K/s(也即 每秒 144K) /由此可见,画面的尺寸和播放率的播放效果是跟带宽有一定的关系的 接下来可以这样设置视频的质量:由于在设置的时候 function setQuality(bandwidth:int, quality:int)使用的单位是不一样的,bandwidth 使用的是 kbps,而不是 Bps,要转换(8
5、bits 1 byte ),所以要转换一下 1152000/8 = 144000(Kbps), 接下来要设置播放的质量的时候必须这样设置: Camera.setQuality(144000,85); /(85 为常规的视频质量。最好就采用这个数值)接下来就是设置传输的视频关键帧了,可以根据实际的带宽情况来设置,记住:关键帧数 值越小带宽使用率越大,反之关键帧数值越大带宽使用率越小。值 例如:1 表示每一帧都 是关键帧,那么就是每帧都要传输出去,就会加大带宽的使用了,依此类推。可接受值为 1 至 48。对于画面质量要求不高的话,可以设置到 48;对于质量要求很高的话,最好设 置到 5-10 左右
6、;Camera.setKeyFrameInterval(48); 对于摄像头来说,最佳的成像比例是 4:3,所以最好是将所成像的比例按照这个最小比例 设置!下面是网络摄像头和数字视频摄像头内置的典型设置: 160 * 120 ; 176 * 144 ; 320 * 240 ; 360 * 240 ;352 * 288 ; 640 * 480 本地视频捕捉分辨率一般都设置为 4:3(宽和高)的比例。虽然没有操作比例的必要,当你入 门它不是一个坏的想法。用 4:3 的比例,您能够优化你的摄像头看到的东西。 一些 Flex 的 Camera 的常规设定: 打开摄像头: Camera camera =
7、 Camera.getCamera(); /将 摄像头的捕获模式设置为最符合指定要求的本机模式 camera.setMode(240,180,15); /指定进行完整传输 而不由视频压缩算法进行插值处理的视频帧(成为关键帧) 。 camera.setKeyFrameInterval(60); /设置每秒的最大宽 带或当前输出视频输入信号所需的画面质量 camera.setQuality(144,85);Video video = new Video(camera.width * 2, camera.height * 2); /正在捕获视频数据的 Camera 对象video.attachCamera(camera); 关闭摄像头:/如果 getCamra()返回 null,则表明摄像 头正由另一个应用程序使用,或者系统上没有安装摄像头。camera = Camera.getCamera(null); camera = null; /正在捕获视频数据的 Camera 对象。若要切 断与该 Video 对象的连接,请传递 null video.attachCamera(null);