2010-09-24 38 views
6

如我们所知,我们可以通过2种方式旋转位图。使用Canvas.rotate旋转位图的问题

的第一个方法是:

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(); 

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

那么,有没有第三种方式来高性能和高质量旋转位图?

您的任何意见都非常感谢!

回答

0

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

我相信副本岛使用OpenGL和VBO的(如果有的话),用于渲染它的2D场景。但我找不到参考。

+0

非常感谢!我之前已经考虑过GL,但我不想使用它,因为我的应用程序不仅仅是一个应用程序。 – user457210 2010-09-24 13:58:38

2

确保您提供Paintcanvas.drawBitmap(bitmap, 0, 0, paint)

而且不要忘了使用抗混叠和位图过滤:

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