canvas.save/restore或canvas.drawBitmap(Bitmap,Matrix,Paint)更好吗?

时间:2011-08-20 20:28:27

标签: android performance graphics matrix

这两个代码段之间有什么区别?

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中缓存Matrix?

1 个答案:

答案 0 :(得分:1)

我不确定您为什么只在其中一个示例中调用canvas.save()canvas.restore(),但我已经完成了性能测试并显示:

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

因此,如果您需要加载几次,请使用Matrix 如果您需要加载数十万次 - 最好只使用Canvas(或者至少重复使用相同的Matrix实例)。