我正在尝试在我的应用中显示透明的GIF图像但没有成功。我可以在ImageView中下载并显示图标,但是使用白色背景而不是透明。
我已经尝试过这些解决方案而没有成功: Convert GIF to PNG programatically
有没有人想出如何以透明度显示GIF图像?我使用的是Android 18 SDK。
答案 0 :(得分:19)
这是一个对我有用的解决方法。这不是一个好的解决方案。它可能不适用于所有情况,并且图像处理有很大的开销。希望其他人能找到更好的解决方案。
在我的测试中,4.4中的GIF图像的透明度值为白色(-1)或黑色(-16777216)。加载位图后,您可以将白/黑像素转换回透明。当然,这仅在图像的其余部分不使用相同颜色时才有效。如果是,那么您还将图像的部分转换为透明,在原始图像中不透明。就我而言,这不是问题。
您可以使用以下代码将白色或黑色像素转换为透明。
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
bitmap = eraseBG(bitmap, -1); // use for white background
bitmap = eraseBG(bitmap, -16777216); // use for black background
private static Bitmap eraseBG(Bitmap src, int color) {
int width = src.getWidth();
int height = src.getHeight();
Bitmap b = src.copy(Config.ARGB_8888, true);
b.setHasAlpha(true);
int[] pixels = new int[width * height];
src.getPixels(pixels, 0, width, 0, 0, width, height);
for (int i = 0; i < width * height; i++) {
if (pixels[i] == color) {
pixels[i] = 0;
}
}
b.setPixels(pixels, 0, width, 0, 0, width, height);
return b;
}
注意:我必须将位图复制到新的ARGB_8888图像才能生效。即使将位图加载为可变,我仍然无法修改像素。这就是为什么会有这么多开销的原因。
答案 1 :(得分:3)
您可以使用GIMP(开源GNU软件)将GIF转换为PNG。安装软件,打开GIF,然后将其导出为PNG。
答案 2 :(得分:2)
您可以使用GifDecoder from android-gifview代替BitmapFactory来解码GIF:
GifDecoder gd = new GifDecoder();
gd.read(new FileInputStream(filename));
return gd.getBitmap();
它对我有用。