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

时间:2011-01-10 10:48:16

标签: java android bitmap image-scaling android-image

我目前正在开发我的第一个Android应用,并且在呈现图像方面存在一些问题。图像本身的质量很高,但在渲染时质量会大幅降低。边缘变得锯齿状,看起来很糟糕。到目前为止,我所展示的每个人几乎都立即注意到它,没有任何提示。 [从左侧开始,在右侧结束:]

http://i.stack.imgur.com/gld5A.png

我正在尝试我所知道的一切以及我通过在线浏览找到的每一个提示,但似乎没有任何解决方法。

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

Bitmap holeImage = BitmapFactory.decodeResource(res, R.drawable.hole_image);
Bitmap holeImageBMP = Bitmap.createScaledBitmap(holeImage, width, height, true);

获得图像后,我创建了一个Paint,将一些平滑属性设置为true,然后在画布上绘制它:

Paint smoothingPaint = new Paint();
smoothingPaint.setAntiAlias(true);
smoothingPaint.setFilterBitmap(true);
smoothingPaint.setDither(true);
canvas.drawBitmap(holeImageBMP, 0, 0, smoothingPaint);

然而,正如您可以在上面看到的那样,图像质量急剧下降。我已经看到大量的图像呈现得很漂亮,老实说我不确定发生了什么,所以任何建议都会很棒!

其他说明:我使用SurfaceView方法处理绘图,与SDK中给出的LunarLander示例的性质类似。

再次感谢!

2 个答案:

答案 0 :(得分:1)

这可能与将图像从一种格式转换为另一种格式有关。此外,Android屏幕因设备而异。尝试使用其他设备,它可能看起来更好......几乎可以肯定它会有不同的音调。

尝试阅读这篇关于此问题(以及条带和抖动)的精彩文章,并考虑调整您为其创建的图像,以便在Android设备中更好地工作:http://www.curious-creature.org/2010/12/08/bitmap-quality-banding-and-dithering/

答案 1 :(得分:0)

如果您的颜色不比原始图片少得多(Android有256色模式吗?),我建议您禁用dithering,如果放大图片,它确实有一种可见的效果,可能会破坏光滑的外观。

我认为在你的情况下,抖动通过破坏消除锯齿所需的额外颜色以获得平滑外观来消除抗锯齿。对图片进行快速颜色计数(左边一个约850,右边一个约140)证实了这一点。