首页 > 代码库 > 关于 flash像素操作setPixels,setVector,copyPixels,draw性能比较
关于 flash像素操作setPixels,setVector,copyPixels,draw性能比较
针对博文 http://www.cnblogs.com/heycup/archive/2011/01/24/1943012.html 做一些修正
原文中 setVector setPixels 的测试是有问题的 他把getVector getPixels 误导了一些同学,也不知道多少看了这个博文的的对其深信不疑,不过最后的那就“动手才更有意义”我非常的赞同。
我对里面的代码做了一下修改,去掉所有额外的性能消耗。
1 var shape:Shape = new Shape(); 2 shape.graphics.beginFill(0xff0000); 3 shape.graphics.drawRect(0, 0, 300, 300); 4 shape.graphics.endFill(); 5 6 var bmd1:BitmapData = http://www.mamicode.com/new BitmapData(2000, 2000); 7 var bmd2:BitmapData = http://www.mamicode.com/new BitmapData(300, 300); 8 bmd2.draw(shape); 9 10 var rect:Rectangle = new Rectangle(10,10,80,80);11 12 var arr:Vector.<uint> = bmd2.getVector(new Rectangle(10, 20, 80, 80));13 var start:int = getTimer();14 for (var j:int = 0; j < 9999; j++) {15 bmd1.setVector(rect, arr); 16 }17 trace("setVector", getTimer() - start);18 19 var arr2:ByteArray = bmd2.getPixels(new Rectangle(10, 20, 80, 80));20 start = getTimer();21 for (j = 0; j < 9999; j++) {22 arr2.position = 0;23 bmd1.setPixels(rect, arr2); 24 }25 trace("setPixels", getTimer() - start);26 27 var point:Point = new Point(10, 10);28 start = getTimer();29 for (j = 0; j < 9999; j++) {30 bmd1.copyPixels(bmd2, rect, point);31 }32 trace("copyPixels", getTimer() - start);33 34 var matrix:Matrix = new Matrix(0.8,0,0,0.8);35 start = getTimer();36 for (j = 0; j < 9999; j++) {37 bmd1.draw(bmd2,matrix ,null,null,rect);38 }39 trace("draw", getTimer() - start);
测试结果如下
因为是使用 flash cs 所以是发布版的效果。
得出结论 copyPixels>setVector>draw>setPixels 虽然结果和原文一致但是其中的性能差异切没有原文中那样夸张
我试着把循环数加到99999
可以看到 setVector draw setPixels 三个方法差距其实是不大的
关于 flash像素操作setPixels,setVector,copyPixels,draw性能比较
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。