我试图在我的应用中显示透明的GIF图像,但没有成功。我可以通过ImageView下载和显示图标,但背景是白色而不是透明的。
我已经尝试过这些解决方案,但都没有成功:将GIF转换为PNG 有人找到了如何显示带透明度的GIF图像吗?我正在使用Android 18 SDK。
我已经尝试过这些解决方案,但都没有成功:将GIF转换为PNG 有人找到了如何显示带透明度的GIF图像吗?我正在使用Android 18 SDK。
这是一项对我有效的解决方法。虽然它并不是一个好的解决方案,而且在图像处理中存在显着的开销,也不能适用于所有情况。希望其他人能够找到更好的解决方案。
在我的测试中,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;
}
注意:为了使这个工作,我不得不将Bitmap复制到一个新的ARGB_8888图像中。即使将位图加载为可变的,我仍然无法修改像素。这部分是为什么会有这么多开销的原因。
你可以使用android-gifview中的GifDecoder解码GIF图像,而不是使用BitmapFactory:
GifDecoder gd = new GifDecoder();
gd.read(new FileInputStream(filename));
return gd.getBitmap();
对我来说它有效。