令人困惑的PNG绑定解决方案

时间:2011-02-07 14:05:59

标签: android png

我遇到了关于PNG文件绑定的问题。深入研究这个问题已经产生了两个解决方案。两者都是有意义的,但他们并没有。我发现的解决方案:

1)将PNG文件移动到“raw”文件夹中。这可以防止AAPT“优化”图像,从而导致条带化。

2)将Activity的窗口的像素格式更改为RGBA_8888(即在onCreate中添加此行“getWindow()。setFormat(PixelFormat.RGBA_8888)”)。在Android 2.2及更低版本中,默认像素格式为16位(565)。

我已经尝试过这两种方法并且它们在我的图像中纠正了条带效果,但是现在我对Android正在做的事情更加困惑。

一方面,如果我将PNG留在可绘制文件夹中,它将被“优化”,从而在图像中产生条带效果。当我将像素格式更改为32位时,它会神奇地消失。如果图像是“优化的”,我会期望保留条带。

另一方面,如果我将PNG移动到原始文件夹,它将保留漂亮的渐变并显示良好,即使pixelFormat应该是16位。

如果有人对正在发生的事情有任何了解,我将不胜感激。

谢谢,

-Dan

1 个答案:

答案 0 :(得分:8)

我相信它非常简单:

您必须将Activity的像素格式(RGBA_8888)视为位图的DEFAULT优化。

如果未设置,则在2.2之前,默认情况下会将位图压缩为RGB_565。

但是如果您要以编程方式创建位图并将其设置为RGBA_8888,则应用程序将使用它。

将位图放在原始文件夹中时也是如此:即使默认的PixelFormat设置为RGB_565,活动也会按原样使用它而不“优化”它。

当你将位图放在原始文件夹中时,它根本不会被压缩并按原样使用,即使默认的PixelFormat仍然是RGB_565。