我目前正在开发我的第一个 Android 应用程序,但在渲染图像时遇到了一些问题。图像本身质量很好,但渲染后质量急剧下降。边缘变得参差不齐,看起来做得很差。到目前为止,我向其展示过的每个人几乎都立即注意到了它,而无需任何提示。 [从左开始,在右结束:]
我正在尝试我所知道的一切,以及我在网上四处寻找的每条提示,但似乎没有什么可以解决的。
目前,我将图像作为位图获取并对其进行缩放:
Bitmap holeImage = BitmapFactory.decodeResource(res, R.drawable.hole_image);
Bitmap holeImageBMP = Bitmap.createScaledBitmap(holeImage, width, height, true);
获得图像后,我创建一个 Paint,将一些平滑属性设置为 true,然后将其绘制在 Canvas 上:
Paint smoothingPaint = new Paint();
smoothingPaint.setAntiAlias(true);
smoothingPaint.setFilterBitmap(true);
smoothingPaint.setDither(true);
canvas.drawBitmap(holeImageBMP, 0, 0, smoothingPaint);
然而,正如您在上面明显看到的那样,图像质量急剧下降。我见过很多渲染精美的图像,老实说,我只是不确定发生了什么,所以任何建议都很好!
其他注意事项:我正在使用 SurfaceView 方法来处理绘图,本质上类似于 SDK 中给出的 LunarLander 示例。
再次感谢!
最佳答案
如果您不限制比原始图片少得多的颜色(Android 有 256 种颜色模式吗?),我建议禁用 dithering ,如果放大图片,它确实会产生可能会破坏平滑外观的可见效果。
我认为在您的情况下,抖动通过破坏抗锯齿获得平滑外观所需的额外颜色来推断抗锯齿。对您的照片进行快速颜色计数(左一张约 850,右一张约 140)证实了这一点。
关于java - 在 Android 中呈现的图像上的锯齿状边缘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4645967/