我试图在我的应用程序中显示透明的 GIF 图像,但没有成功。我可以下载并在 ImageView 中显示图标,但使用白色背景而不是透明。
我已经尝试过这些解决方案但没有成功: Convert GIF to PNG programatically
有没有人想出如何以透明度显示 GIF 图像?我正在使用 Android 18 SDK。
我试图在我的应用程序中显示透明的 GIF 图像,但没有成功。我可以下载并在 ImageView 中显示图标,但使用白色背景而不是透明。
我已经尝试过这些解决方案但没有成功: Convert GIF to PNG programatically
有没有人想出如何以透明度显示 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;
}
注意:我必须将位图复制到一个新的 ARGB_8888 图像才能工作。即使将位图加载为可变的,我仍然无法修改像素。这就是为什么会有这么多开销的部分原因。
您可以使用 GIMP(操作源 GNU 软件)将 GIF 转换为 PNG。安装软件,打开 GIF,然后将其导出为 PNG。
您可以使用android-gifview中的 GifDecoder而不是 BitmapFactory 来解码 GIF:
GifDecoder gd = new GifDecoder();
gd.read(new FileInputStream(filename));
return gd.getBitmap();
这个对我有用。