Вот обходной путь, который сработал для меня. Это не очень хорошее решение. Это может работать не во всех случаях, и при обработке изображений возникают значительные накладные расходы. Надеюсь, кто-то другой найдет лучшее решение.
В моем тестировании изображения GIF в 4.4 имеют значения прозрачности либо белого (-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. Даже при загрузке растрового изображения как изменяемого я все равно не мог изменить пиксели. Отчасти поэтому так много накладных расходов.
person
paul
schedule
18.11.2013