【发布时间】:2010-10-28 19:12:00
【问题描述】:
我有一个单通道 PNG 文件,我想将其用作 Porter-Duff 绘图操作的 alpha 蒙版。如果我在没有任何选项的情况下加载它,则生成的位图具有 RGB_565 配置,即视为灰度。如果我将首选配置设置为 ALPHA_8,它会将其加载为灰度 ARGB_8888。
如何说服 Android 将此文件视为 alpha 蒙版而不是灰度图像?
mask1 = BitmapFactory.decodeStream(pngStream);
// mask1.getConfig() is now RGB_565
BitmapFactory.Options maskOpts = new BitmapFactory.Options();
maskOpts.inPreferredConfig = Bitmap.Config.ALPHA_8;
mask2 = BitmapFactory.decodeStream(pngStream, null, maskOpts);
// mask2.getConfig() is now ARGB_8888 (the alpha channel is fully opaque)
【问题讨论】:
-
将首选配置设置为 ARGB_8888 时会发生什么?
-
与 ALPHA_8 的结果相同。我得到一个带有不透明 alpha 通道的 ARGB_8888 位图。
-
您的 png 是什么颜色类型的?我猜是0,也就是灰度。据我所知,没有“仅限 alpha”的 png 文件。你能得到的最接近的将是一个 8 位调色板,它具有索引到 alpha 的标识映射 - 用于文件大小。但可能不值得。下面的解决方法可能是您能得到的最好的解决方法。但我讨厌成为那种人:API 试图在这里告诉你一些事情!将 alpha 和 RGB 保持在一起。总是。它将更快,更好的支持。通过使用 ALPHA_8,您离开了良好的道路。如果可能,请尝试将您的设计更改为 RGBA。
-
@starmole 正确,它是灰度 PNG。在这种特殊情况下,我有带有 Alpha 通道的大型动画精灵。就应用程序大小而言,使用 JPEG 压缩 RGB 数据和使用 PNG 压缩 alpha 通道是非常值得的。