我无法在 Android 上干净地缩小图像。我正在寻找在大约 10-100% 的原始大小的任意大小之间缩放小的 PNG 图像。
我创建了一个示例图像来演示问题并加剧我在 Android 的图像缩放器中看到的异常行为:
上图是 Android 设备的屏幕截图,添加了一些注释。我还在左侧的第二列中添加了相同的图像,显示了它们是如何通过“GIMP”(GNU 图像操作程序)以线性缩放呈现的。
基本图像由红色和蓝色像素的棋盘图案背景组成。在那个背景上,我画了一些 1px 宽的黄线和相当细的绿色文字。图像为 288x288 像素。
当将图像缩放到其原始尺寸的 1/3 时,Android 似乎只是抓取了九分之一的像素,而丢弃了所有其他数据。结果,一些黄线完全消失了。值得注意的是,棋盘图案保持不变(这只是每使用 3 个像素的结果)。
当将图像缩放到接近其原始大小的 50%(例如 142x142 或 143x143)的尺寸时,缩放器会在图像上产生一些相当大的异常/伪影。
在 50% 尺寸 (144x144) 下,图像看起来正确。
测试图像确实带出了最差的图像缩放器,但“正常”的 PNG 图标图像也受到了严重影响。10-33% 左右的图像没有正确重新采样,因此看起来非常“位图”。并且某些较大尺寸的图像在某些尺寸下具有非常奇怪的异常。
如果有人知道禁用这种奇怪的缩放行为的方法,即使是以性能为代价,我也会非常感激知道它。它当然可以通过编写一个直接作用于位图像素的算法来解决,但我希望这不是唯一的选择。
同样值得注意的是,所有图像工作都是使用 ARGB_8888 Bitmap.Configs 完成的。我尝试通过在 ImageViews 上设置 maxwidth/maxheight、使用 Bitmap.createScaledBitmap() 以及使用带有 Matrix 的 Bitmap.createBitmap 来操纵图像大小。所有尝试都有相同的结果。位图过滤已启用。
再次感谢您的任何建议!