为什么Android,Canvas和DrawBitmap的性能不同?

时间:2011-12-18 13:04:34

标签: android bitmap android-canvas

我必须从int数组中绘制一个位图,并且正在寻找实现这一目标的最快方法。我用canvas和drawbitmap做了一些性能测试。

我做了一个循环的调用:

canvas.drawBitmap(a1, 0, b1.getWidth(), x, y, cx, cy, true, null);

针对相同的循环:

canvas.drawBitmap(b1, new Rect(0,0,cx,cy), new Rect(x,y,cx+x,cy+y), null);

具有以下值:

b1    -> transparent 8888 bitmap
a1    -> int array with the color values of the b1
x,y   -> position 
cx/cy -> size

使用int值调用drawbitmap的描述如下:

“将指定的颜色数组视为位图,并绘制它。这与首先从数组创建位图然后绘制它的结果相同,但此方法避免显式创建位图对象,如果颜色经常变化,效率会更高。“

我现在的问题是,使用int数组或位图直接绘制位图看起来完全相同,但使用位图的速度是int数组的两倍(43 fps而不是20)。它确实声明它不会创建位图,因此我希望它避免不必要和耗时的数据复制并将其直接绘制到画布上。

我的代码中是否存在错误或疏忽(我只交换一行,看起来确实相同)或者我做错了什么?

0 个答案:

没有答案