drawBitmap和createScaledBitmap之间的性能差异

时间:2014-02-16 15:21:45

标签: android bitmap surfaceview drawbitmap

为了支持不同大小的屏幕分辨率,我使用SurfaceView以编程方式缩放我的Android游戏应用程序中的位图。我使用drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint)方法执行了它。我看到了一个名为createScaledBitmap的Bitmap方法,它可以创建一个从现有位图缩放的新位图。它们之间是否存在性能差异?

2 个答案:

答案 0 :(得分:2)

是的,有。他们做不同的事情。 createScaledBitmap采用位图并在内存中创建新的缩放副本。它不会将它放在画布上,这是一个新的位图对象,以后可以绘制到画布上。 drawBitmap将位图绘制到画布(可能由位图,曲面或屏幕支持),缩放它,应用绘制对象的效果,尊重剪切区域等。

你不应该使用drawBitmap,除非你真的想把它画到画布上 - 使用它只是为了缩放是低效的。如果您需要绘制并缩放它 - 如果您需要重复缩放它并且内存不是问题,请先使用createScaledBitmap然后绘制该缩放位图。如果您不需要再次绘制或内存是个问题,请在绘制时使用drawBitmap进行缩放。

答案 1 :(得分:2)

创建缩放位图不会绘制位图。它提供了一种在绘制之前包含选项的方法。例如,您可以根据原始图像的大小,旋转等与其绘制位置使用不同的插值技术:

What does the filter parameter to createScaledBitmap do?

因此,如果您对drawBitmap的结果不满意,可以尝试使用缩放选项改进Bitmap。 drawBitmap使用“自动”缩放,但不指定使用的内容。

与性能特别相关,createScaledBitmap使用本机方法“nativeCreate”,而drawBitmap使用“native_drawBitmap” - 因此它将因本机方法的平台实现而异。无论如何,一旦缩放,您将需要将位图绘制到画布上,因此无论哪种方式都需要“drawBitmap”,即使位图已经缩放,也不太可能提高性能。但是,如果您没有绘制它,那么使用“drawBitmap”是没有意义的,因为它会自动缩放并使用资源来执行绘制。