我们使用过屏幕录制的软件会了解怎样录制,之前想过一下怎样做,大概一个假设,采用flash复制位图的技术,就能够录制flash当中的舞台的帧。今天,我们开一个无聊话题“flash舞台屏幕录制”,把舞台当中桌面,看看怎样录制一个过程。在flash 当中,复制位图技术是一种常用的技术。
复制位图的办法有使用位图当中的draw方法,有 copyPixels,看下面的两个方法,都是针对位图数据而设立的
我们使用其中一种办法实现这种录制的效果,录制的图片通过保存在一个数组当中,这样下来。我们就能够有效管理每一帧图片。然后通过检索数组的每一帧的内容则能够做出一种连贯的动画的效果。
好,我们先准备一些画笔,用于这次制作。
下面我们先准备一支画笔:用于制作绘制图形的画笔类;
然后写一个屏幕类,用于记录flash舞台的屏幕,包括常见的复制位图的方法
public class FScreen extends EventDispatcher;继承EventDispatcher类
public function copyScreen(sorce:IBitmapDrawable,Width:Number,Height:Number):void
开始播放的方法
public function play():void
清除画面的办法
public function removeScreen():void
还有获取图片阵列的办法
public function getImageList():Vector.<BitmapData>
代码测试:
其中:
Btn_end.addEventListener(MouseEvent.MOUSE_DOWN,keyEndHandler);
Btn_start.addEventListener(MouseEvent.MOUSE_DOWN,keyStartHandler);
两个按钮在舞台里面创建,并分别在属性面板命名为Btn_end.,和Btn_start。使用影片剪辑即可
运行的效果:
我们按了开始录制的时候,先随便的使用画笔绘制一张画面,然后按停止绘制画面。进行播放
addChild(myscreen.contain);
myscreen.play();//进行播放
我们使用的Timer 来复制图片,而不是每一帧执行事件来复制,这样做好处,减少图片每一帧的复制,减少内存。但是无论如何使用都好,这种保存的办法,最终会导致内存增大。程序会变得越来越慢。而这个是必然结果。 不知道是否存在一种图形压缩算法减少图片的大小。
不过,对这个程序来讲,知道flash 复制位图的使用,这样就可以了。或者我们制造的air 程序 外部保存到外部,这样会减少内存占用量
或者可以尝试制作一下。
绘制一个老虎,看看自己如何画的?呵呵