有关使用Canvas.rotate旋转位图的问题

时间:2010-09-24 12:22:06

标签: android

众所周知,我们可以通过两种方式旋转位图。

第一种方式是:

Matrix mt = new Matrix(); 
mt.postRotate(degree); 
Bitmap bitmap = CreateBitmap(src, 0, 0, w, h, mt, true); 
canvs.drawBitmap(bitmap, 0, 0, paint); 

通过这种方式,我们总是需要为每次旋转创建新的位图,这对于高性能游戏或应用程序来说并不好。

第二种方式是:

canvas.save(); 
canvas.rotate(degree); 
canvas.drawBitmap(bitmap, 0, 0, paint); 
canvas.restore(); 

通过这种方式,我们避免频繁创建新的位图,但旋转位图是失真,位图质量比第一种方式差。

那么,有没有第三种方法可以高性能和高质量地旋转位图?

您的任何评论都非常感谢!

3 个答案:

答案 0 :(得分:2)

确保您向Paint提供canvas.drawBitmap(bitmap, 0, 0, paint)

不要忘记使用反别名和位图过滤:

paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);

答案 1 :(得分:0)

如果你真的想要高速图形应用程序(甚至2D),你应该在Android上使用OpenGL。

我相信Replica Island使用OpenGL和VBO(如果可用)来渲染它的2D场景。但我找不到参考。

答案 2 :(得分:0)