Android ImageView中的透明GIF

时间:2013-11-18 19:23:37

标签: android imageview transparent gif android-4.4-kitkat

我正在尝试在我的应用中显示透明的GIF图像但没有成功。我可以在ImageView中下载并显示图标,但是使用白色背景而不是透明。

我已经尝试过这些解决方案而没有成功: Convert GIF to PNG programatically

有没有人想出如何以透明度显示GIF图像?我使用的是Android 18 SDK。

3 个答案:

答案 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();

它对我有用。