【问题标题】:Bitmaps on ICS are loaded with wrong pixel formatICS 上的位图加载了错误的像素格式
【发布时间】:2012-02-24 06:07:12
【问题描述】:

我遇到了以下问题。当运行在 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位)窗口格式,各种位图解码格式:

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

有几点可以注意到:

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

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

Gradient compatibility issue - ICS defaults to fewer colors than all the previous versions of Android

Awful background image quality in Android

问题是,如何在 ICS 上处理所有这些格式,更准确地说,如何使 ICS 加载具有RGBA_8888 格式的位图以及如何将窗口格式设置为RGBA_8888 以便正确显示这些位图?

【问题讨论】:

  • 在这些条件下模拟器和设备有区别吗?
  • 不,它们都表现出相同的行为

标签: android drawable android-4.0-ice-cream-sandwich


【解决方案1】:

我可以肯定地向您保证,默认的窗口格式是 RGB888。这实际上是 Android 2.3 中的默认设置,此后一直没有更改。在这一点上,我认为 RGB565 窗口已弃用,因为基本上所有当前设备都有 32bpp 显示器。

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

我认为模拟器可能仍然使用 16bpp 显示器,因此在这方面我不会依赖它的结果来完全匹配您通常在设备上看到的结果。

【讨论】:

  • 是的,dl:ed BitmapConfig.apk 测试应用程序 - RGB888 和抖动在“正确”的 ICS 构建上运行良好。
【解决方案2】:

那个演示应用有点奇怪……它有两个过滤启动器意图的活动,一个用于 16bpp,一个用于 32bpp。不确定是什么决定了您在启动应用程序时会选择哪一个。

在 ICS 设备(Nexus S 运行库存 4.0.3)上按原样运行应用程序会导致始终选择 16bpp 版本。如果从清单中删除 16bpp 活动声明,则不出所料地会启动 32bpp 版本。这对我来说看起来不错。 'dither' 选项在 32bpp 中没有效果,但正如预期的那样......只有当显示表面深度低于图像深度时,dithering 才会发挥作用。

至于显示表面深度,我的理解是窗口表面深度过去默认为 16bpp,直到 Android 3.0 (Honeycomb) 时默认悄悄切换到 32bpp。默认值始终可以通过Window.setFormat() 覆盖。

【讨论】:

  • 您在模拟器/设备的应用程序菜单中按下的图标决定了启动哪个活动:该菜单中出现了两个应用程序图标,BitmapConfig 和 BitmapConfig32。所以,这个演示应用程序一切正常,它给出了如下截图所示的结果:setFormat(..) 没有做它的工作。
  • 啊当然。我已经习惯了从 Eclipse 运行,它大概会选择清单中声明的​​第一个启动器处理活动。
猜你喜欢
  • 1970-01-01
  • 2018-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
相关资源
最近更新 更多