java - 在 Android 中呈现的图像上的锯齿状边缘

标签 java android bitmap image-scaling android-image

我目前正在开发我的第一个 Android 应用程序,但在渲染图像时遇到了一些问题。图像本身质量很好,但渲染后质量急剧下降。边缘变得参差不齐,看起来做得很差。到目前为止,我向其展示过的每个人几乎都立即注意到了它,而无需任何提示。 [从左开始,在右结束:]

Sample Image

我正在尝试我所知道的一切,以及我在网上四处寻找的每条提示,但似乎没有什么可以解决的。

目前,我将图像作为位图获取并对其进行缩放:

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/

相关文章:

java - 如何在java中制作没有长度的数组?

java - 如何删除 Android/libgdx 中的 ChangeListener

java - jsoup android java.lang.RuntimeException : Unable to find form

android - 地点自动完成状态代码 9001

android - 为什么文档样本除以2来计算位图加载的inSampleSize?

c# - 尝试将图像保存到 MemoryStream 时 GDI+ 异常中发生一般错误

java - Eclipse RCP 应用程序中编辑器的(取消)对接

java - 我的 Android 应用程序在 Activity 生命周期方面无法正常工作

Android - PhoneGap 应用程序( keystore 文件错误)

android - 使用矩阵旋转位图