【问题标题】:Android drawing bitmap in lower quality than original imageAndroid绘制位图的质量低于原始图像
【发布时间】:2011-12-13 06:24:00
【问题描述】:

我有一张用作背景图片的图片,它会填满整个屏幕。我遇到的问题是手机上显示的图像质量比原始图像差得多。我已经将图片保存为 320x480 jpg 图片,因为我手机的显示分辨率也是 320x480,所以与调整图片大小无关。

这是我所看到的图片。左边是我桌面上打开的图片,右边是我的安卓手机截图。

手机上的画质可以通过添加dither来提升,但还是不够理想。我正在努力理解发生了什么。看起来好像正在以降低的保真度加载图像。这几乎就像是在以 RGB_565 格式绘制图像,即使手机能够支持 16m 色并且应该能够很好地显示图像

【问题讨论】:

    标签: android image


    【解决方案1】:

    很多人都有带有渐变的similar problems。尝试将其放入您的活动中:

    @Override
    public void onAttachedToWindow() {
        super.onAttachedToWindow();
        Window window = getWindow();
        window.setFormat(PixelFormat.RGBA_8888);
    }
    

    【讨论】:

    • 嗯,我试过这个,但它似乎不起作用。不过谢谢
    • 我认为这个答案已经足够接近了。我设法通过将holder.setFormat(PixelFormat.RGBA_8888) 添加到我的SurfaceView 类中的onSurfaceChanged(SurfaceHolder holder) 方法来解决这个问题。我也许应该提到我正在使用surfaceView 来绘制我的图像。据我了解,默认行为是以 RGBA_8888 模式加载/修改位图。但是,默认情况下,它们最终会以 16 位颜色深度而不是 24 位绘制到屏幕上。即使设备支持 24 位颜色。奇怪。
    • 我在 SurfaceView 上绘制位图时遇到了类似的问题,当调整图像大小时质量下降,如果我使用 canvas.scale 调整大小或在我的 canvas.drawbitmap 中使用目标矩形,就会发生这种情况方法,我尝试这个 holder.setFormat(PixelFormat.RGBA_8888) 到 onSurfaceChange(SurfaceHolder holder) 方法,但这只会让我的应用程序崩溃。有什么想法吗?
    • 好的,我在使用 Bitmap.createScaledBitmap 时发现,如果布尔参数设置为 true,则质量下降不存在
    【解决方案2】:

    哪个目录包含您的图像?

    您应该注意密度。 例如,如果您的屏幕密度较低,并且您将图像放到 drawable-mdpi 中,即使它的大小与第一个屏幕完全相同,它也会变得模糊。

    尝试将图像放入drawable-nodpi。

    【讨论】:

    • 我在/drawable 有它,我尝试在不同的文件夹中移动它,在-nodpi 但仍然没有变化
    • 图像查看器在桌面上显示图像?你的电话是什么?许多设备仅具有 262144 色的显示能力,而不是 1600 万色。
    • Ace 有 16m,但只有 165 PPI 屏幕密度,可能是这个原因
    • 看不懂,480x320是像素数。这不会改变屏幕密度或受其影响吗?
    • PPI 是屏幕尺寸与像素的比率,即每英寸像素数。 iPhone 1、2 和 3 是 480x320,PPI 为 163,HTC 梦想是 480x320,PPI 为 180。
    【解决方案3】:

    这可能是 jpg 压缩的结果,这是有损的,这意味着每次将其保存为 jpg 时都会丢失质量,请尝试改用 png。

    【讨论】:

    • 感谢您的意见。我尝试过各种jpg、png、bmps。还是一样的问题
    猜你喜欢
    • 2017-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    相关资源
    最近更新 更多