具有不同渲染输出的drawBitmap(Nexus 7与其他设备相比)

时间:2013-01-07 23:19:23

标签: android android-canvas hardware-acceleration

在我的应用程序中,我使用drawBitmap()来显示低分辨率位图,同时我将其缩小。我在几个设备上测试了它(Galaxy Tab,Kindle Fire,Moto Xoom和Nexus 7)。在所有这些中,我获得了相同的渲染质量,除了在Nexus 7中。您可以在附加的屏幕截图上看到差异。外部区域是我使用drawBitmap的那个,如下所示:

mSrcRectF.set(src_x1, src_y1, src_x2, src_y2);
mDesRectF.set(view_x1, view_y1, view_x2, view_y2);
mMatrix.setRectToRect(mSrcRectF, mDesRectF, Matrix.ScaleToFit.CENTER);
canvas.drawBitmap(bmp, mMatrix, mPagePaint);

如果我尝试使用其他变量drawBitmap(Bitmap位图,Rect src,RectF dst,Paint paint)而没有矩阵,我会得到相同的结果。

我认为这个问题/差异可能与硬件加速有关。如果我将其关闭(在清单文件中),我会得到所有设备相同的结果。如果我打开它,除了Nexus之外,所有这些渲染都会得到改善,而Nexus仍会显示更多像素化的'位图。我已经读过HA中不支持某些例程,但即便如此,我也无法理解在这种情况下发生了什么。在Romain Guy最近的一篇博客中,他评论说:

  

请注意,在调用drawBitmap()的“简单”版本时,alpha位图仅适用于着色器。目前,硬件加速不支持采用Matrix或源和目标矩形的变体。

有人可以对此有所了解吗?

Nexus 7:Nexus 7 screen shot

Xoom(或Galaxy Tab,Kindle Fire):Xoom screen shot

1 个答案:

答案 0 :(得分:1)

您可以按照this Stack Overflow article

中的说明有选择地关闭Canvas的硬件加速

这不是一个理想的解决方案,但它可以让你的应用程序的其余部分获得硬件加速的好处,直到drawBitmap()的所有选项都支持硬件加速。