【问题标题】:Jagged edges on images rendered in Android在 Android 中呈现的图像上的锯齿状边缘
【发布时间】:2011-06-06 11:14:00
【问题描述】:

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

我正在尝试我所知道的一切以及我通过网上四处寻找能够找到的所有提示,但似乎没有任何解决办法。

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

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 示例。

再次感谢!

【问题讨论】:

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


    【解决方案1】:

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

    我认为在您的情况下,抖动通过破坏抗锯齿需要平滑外观的其他颜色来推断抗锯齿。快速对图片进行颜色计数(左图约 850,右图约 140)证实了这一点。

    【讨论】:

    • 我已经尝试过了,但并没有真正的区别。我承认它存在的唯一原因是因为另一个 stackoverflow.com 线程中的某人建议它:P 我很欣赏这个想法!真的任何想法都是有帮助的。
    • 好的,我认为佩德罗的回答在这种情况下更有帮助。我还没有对 Android 做过任何事情,所以我不知道存在抖动/条带问题,只是给出了与图形相关的一般答案。
    • 很公平。那就再次感谢! :D
    【解决方案2】:

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

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

    【讨论】:

    • 感谢您的建议!我已经在几种不同的设备上进行了尝试(主要是 Incredible 和 Droid X,尽管上面拍摄的图像来自模拟器)并且它在所有方面都非常一致。我想知道是否将文件保存为位图而不是 PNG?我会读那篇文章——它看起来很有希望。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 2016-05-10
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    相关资源
    最近更新 更多