2011-08-20 19 views
0

这两个代码片段之间的区别是什么?canvas.save/restore或canvas.drawBitmap(Bitmap,Matrix,Paint)更好吗?

Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.image) 
Matrix m = new Matrix(); 
m.postRotate(angle, bmp.getWidth()/2, bmp.getHeight()/2); 
m.postTranslate(x,y); 
canvas.drawBitmap(bmp,m,null); 

或者:

Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.image) 
canvas.save(); 
canvas.rotate(angle, bmp.getWidth()/2, bmp.getHeight()/2); 
canvas.drawBitmap(bmp, x, y, null); 
canvas.restore(); 

是否有性能差异?如果我试图达到高帧率,是否值得在选项1中缓存矩阵?

+1

对于性能问题,正确的答案通常是“衡量它”。如果差异足够小,以至于不确定哪个更好,那么只需要更清晰的版本即可。 –

回答

1

我不知道你为什么只在其中一个例子调用canvas.save()canvas.restore(),但我已经做了性能测试,并显示:

  • 使用Matrix似乎始终快(通常为30-50%) ,用于加载相同的图像。
  • 但是,一些测试显示Canvas最终更快:300,000后 测试 - 由4-15%。

所以,如果你需要加载它几次,使用Matrix
如果您需要加载它几十万次 - 您最好只使用Canvas(或至少重复使用相同的Matrix实例)。

+0

我的结果并没有太大的差别,但是我得到了相同的趋势,Canvas方法似乎更快,并且渲染负载也更快。我想可能没有足够的担心。 – Liazy

+0

很高兴它帮助,如果不仅仅是为了确认你所看到的。 – CrackerJack9