ICS上的位图加载了错误的像素格式

a.c*_*ch. 12 android drawable android-4.0-ice-cream-sandwich

我遇到了以下问题.当任何位图从资源由冰淇淋三明治运行的应用程序加载时,它可能会被不正确地,如果它已经被解码的格式,这不同于当前窗口的格式,在没有施加抖动呈现.但是,解码格式和窗口格式都已明确设置:

BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inPreferredConfig = Bitmap.Config.RGBA_8888;
Run Code Online (Sandbox Code Playgroud)

getWindow().setFormat(PixelFormat.RGBA_8888);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER);
Run Code Online (Sandbox Code Playgroud)

以下是从使用ICS 4.0.3的仿真器上运行的本文中获取的测试应用程序的屏幕截图(它在HTC HD2上提供相同的结果):

RGBA_8888(32位)窗口格式,各种位图解码格式: 32位窗口格式

RGB_565(16位)窗口格式,各种位图解码格式: 16位窗口格式

有几点可以注意到:

  • 不时不考虑抖动标志;
  • ICS的默认窗口格式似乎是RGB_565;
  • RGB_565 窗口格式RGBA_8888 位图解码格式出现唯一好看的渐变.

在这些问题中也报告了这个问题,但仍然没有找到解决方案:

渐变兼容性问题 - ICS默认的颜色比以前的所有Android版本都少

Android中糟糕的背景图像质量

该quistion是,如何处理所有这些格式在ICS,更准确地说,如何使ICS负载与位图RGBA_8888格式,以及如何设置窗口格式RGBA_8888,以便这些位图显示正确?

hac*_*bod 7

我绝对可以向你保证默认的窗口格式是RGB888.这实际上是Android 2.3中的默认设置,并且自从它们没有更改.此时我会考虑弃用RGB565窗口,因为基本上所有当前设备都有32bpp显示器.

你说你也在HTC HD2上运行它,但由于没有官方版本,我会怀疑你到达那里的任何结果.

我认为模拟器仍然可以使用16bpp显示器,所以在这个领域我不会依赖它的结果来完全匹配你通常会在设备上看到的结果.