我遇到了以下问题。当 Ice Cream Sandwich 上运行的应用程序从资源加载任何位图时,它可能会被错误地呈现,就好像它已被解码为与当前窗口格式不同的格式,没有应用抖动。但是,解码格式和窗口格式都已明确设置:
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inPreferredConfig = Bitmap.Config.RGBA_8888;
和
getWindow().setFormat(PixelFormat.RGBA_8888);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER);
以下是 test app 的屏幕截图取自 this article在带有 ICS 4.0.3 的模拟器上运行(它在 HTC HD2 上给出相同的结果):
RGBA_8888
(32-bits) 窗口格式,各种位图解码格式:
RGB_565
(16位)窗口格式,各种位图解码格式:
可以注意到几件事:
- 不时考虑抖动标志;
- ICS 的默认窗口格式似乎是
RGB_565
; - 唯一好看的渐变出现在
RGB_565
窗口格式 和RGBA_8888
位图解码格式。
这个问题在这些问题中也有反射(reflect),但仍然没有找到解决方案:
Awful background image quality in Android
问题是,如何在 ICS 上处理所有这些格式,更准确地说,如何使 ICS 加载具有 RGBA_8888
格式的位图以及如何将窗口格式设置为 RGBA_8888
所以这些位图显示正确?
最佳答案
我可以肯定地向您保证,默认的窗口格式是 RGB888。这实际上是 Android 2.3 中的默认设置,此后一直没有更改。在这一点上,我会考虑弃用 RGB565 窗口,因为基本上所有当前设备都有 32bpp 显示器。
你说你也在 HTC HD2 上运行它,但由于没有官方版本,我会怀疑你得到的任何结果。
我认为模拟器可能仍会使用 16bpp 显示器,因此在这方面我不会依赖它的结果来完全匹配您通常在设备上看到的内容。
关于android - ICS 上的位图以错误的像素格式加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9097887/