6

在我的应用程序中,我在缩小时使用 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 bitmap, Rect src, RectF dst, Paint paint) 我会得到相同的结果。

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

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

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

Nexus 7:Nexus 7 屏幕截图

Xoom(或 Galaxy Tab、Kindle Fire):Xoom 屏幕截图

4

1 回答 1

1

您可以按照Stack Overflow 文章中的说明有选择地关闭 Canvas 的硬件加速

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

于 2013-01-22T21:14:18.850 回答