BitmapFactory decode() 中的 Android 位图是不是包含透明信息?
Posted
技术标签:
【中文标题】BitmapFactory decode() 中的 Android 位图是不是包含透明信息?【英文标题】:Does an Android Bitmap from BitmapFactory decode() contain transparent information?BitmapFactory decode() 中的 Android 位图是否包含透明信息? 【发布时间】:2015-10-27 18:53:48 【问题描述】:我已将 AnimateGIFWriter 的 Java 实现移植到 android here。它工作正常,除了我没有得到透明度。我尝试将Options
传递给 decode() 方法,如下所示:
Options opts = new Options();
opts.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap bitmap = BitmapFactory.decodeStream(fin, null, opts);
将输入图像读入位图后,我将通过Bitmap.getPixels()
将数据作为int 数组抓取,并自动检测alpha 值的透明度。但这不起作用 - 生成的动画 GIF 不透明(输入图像都是透明的,我的代码应该通过自动透明检测来保持它们。这适用于桌面应用程序)。
我对 Android 相关的东西不太熟悉。我的问题是上面的配置,BitmapFactory.decode()
会保留输入图片的透明度信息吗?
更新:我发现图像支持完全 alpha 透明度,如 PNG 图像,它确实保留了透明度信息。但是对于像 GIF 这样的单色透明图像,似乎不是。这需要进一步确认。
【问题讨论】:
【参考方案1】:我的问题是上面的配置,BitmapFactory.decode()会保留输入图片的透明度信息吗?
是的,应该将透明度/alpha 加载到该位图中。
要验证这一点,您可以尝试获取单个像素的值(可能是 (0,0))并将其打印到日志中。
我没有时间(或不想)深入了解您的全部 1600 行代码,但我会怀疑 writeFrame
方法中的这一部分:
if(frame.getTransparencyFlag() == GIFFrame.TRANSPARENCY_INDEX_SET && frame.getTransparentColor() != -1)
【讨论】:
谢谢,斯尼尔德。可疑线是自动透明度检测的一部分。这不太可能产生任何问题。 对于像 PNG 图像这样的全 alpha 透明度,我发现加载的位图确实保持了透明度。但是对于像 GIF 图像这样的单色透明度,它似乎不是。以上是关于BitmapFactory decode() 中的 Android 位图是不是包含透明信息?的主要内容,如果未能解决你的问题,请参考以下文章