·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

[AS3]as3下BitmapData.draw用法

时间:2014-10-31 16:249ria.com
[AS3]as3下BitmapData.draw用法

  SP位图引擎制作中,目前刚写完MC逐帧转连续BitmapData,正着手于MC的结构分析生成BitmapData的关联数据。但是这里就碰到一 个不得不面对的问题。就是纯位图引擎一般为了提高效率都普遍使用BitmapData.copyPixels()方法来绘制每一帧的图像。但是 copyPixels并不带Matrix参数,也就是说如果要把于一个BitmapData缩放和旋转copyPixels就无能为力了。普通的做法是把 一个BitmapData穷举出所有角度比如0到360度生成一个图像序列,但是结合缩放的话就没这么简单了,特别是即便能够穷举出序列占用的内存也会是 原先的几十几百倍。

虽然现在还没做到这一步,但是总归是要面对的。本来是打算借由Alcamy的高速数据处理能力来解决旋转的图像数据变换问题。但是今天一个一 直存在的疑问驱使我简单的做了个测试,那就是BitmapData.draw()虽然效率比不上copyPixels但是他真的就是那么差么?以往我们做 的效率比较都是draw的一个实际容器对象(比如MovieClip),很少会去拿BitmapData做参数。今天经过简单的测试发现,如果用 BitmapData做参数即便加上Matrix参数带旋转和缩放的话也比直接draw容器要快70%,比copyPixels带透明绘制慢30%。

以一个150*150尺寸的图像做测试源,5000次循环:

1、copyPixels(bitmapData,rect,point,null,null,false) 消耗 120 ms; // 平均每次 0.024 ms

2、copyPixels(bitmapData,rect,point,null,null,true) 消耗 330 ms;  // 平均每次 0.066 ms

3、draw(bitmapData,matrix)  消耗  460 ms;                         // 平均每次 0.092 ms

4、draw(MovieClip) 消耗 1700 ms;                                 // 平均每次 0.34  ms

可见如果考虑到图形旋转缩放的话直接使用draw(bitmapData,matrix)其实并没太多的额外消耗,最重要的是如果自己写旋转变换然后copyPixels未必能比它快。那么剩下的就是在引擎中如何正确判断该用1 2 3哪种方式来进行绘制了。

今天的发现一来改观了我对draw效率的看法,它的效率并不低实际要看怎么使用。2来也基本解决了位图引擎的缩放和旋转问题,节省了这部分自行开发的时间。

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器