Android绘制位图时,显示的质量低于原始图片

3
我有一张预定用作背景图片的图像,需要填满整个屏幕。问题在于,手机上显示的图像质量比原始图像差得多。我已将图像保存为320x480的jpg格式,因为我的手机显示分辨率也是320x480,所以这与图像的重设大小无关。
这是我所看到的画面。左侧是在我的台式电脑上打开的图像,右侧是从我的android手机截取的屏幕截图。
手机上的图像质量可以通过添加抖动来改善,但仍然不理想。我很难理解发生了什么。似乎图像被以降低的保真度加载。尽管手机能够显示16m种颜色并应该能够正常显示图像,但它似乎是以RGB_565格式绘制图像的。
3个回答

0

你的图片在哪个目录下?

在处理像素密度时需要小心。 例如,如果你的屏幕密度较低,而你将图片放置在drawable-mdpi中,即使它的尺寸与屏幕尺寸完全相同,它也会变得模糊。

尝试将图片放置在drawable-nodpi中。


我把它放在了 /drawable 文件夹中,我尝试将其移动到不同的文件夹中,包括 -nodpi 文件夹,但仍然没有改变。 - user1095142
图像查看器是否像桌面一样显示图像? 你的手机是什么?许多设备只能显示262144种颜色,而不是1600万种。 - HighFlyer
Ace有16m,但只有165 PPI的屏幕密度,这可能是原因。 - Bill Gary
我不明白,480x320是像素的数量。这不会改变或受屏幕密度的影响吗? - user1095142
PPI是屏幕尺寸与像素的比率,即每英寸像素数。iPhone 1、2和3的分辨率为480x320,PPI为163,HTC Dream的分辨率也是480x320,但PPI为180。 - Bill Gary
那么图片会完美适配吗?只有HTC Dream将拥有较小的物理显示屏。 - user1095142

0

这可能是由于jpg压缩导致的,它是有损压缩,这意味着每次将其保存为jpg时都会失去质量,尝试使用png替代。


感谢您的输入。我已经尝试了各种格式的jpg、png和bmp,但问题仍然存在。 - user1095142

0

很多人在渐变方面都会遇到类似的问题。尝试将以下代码放入您的活动中:

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接