Ето заобиколно решение, което работи за мен. Не е добро решение. Може да не работи във всички случаи и има значителни разходи при обработката на изображенията. Дано някой друг намери по-добро решение.
При моето тестване GIF изображенията в 4.4 имат стойности на прозрачност като бяло (-1) или черно (-16777216). След като заредите Bitmap, можете да конвертирате белите/черните пиксели обратно в прозрачни. Разбира се, това ще работи само ако останалата част от изображението не използва същия цвят. Ако това стане, вие също ще конвертирате части от вашето изображение в прозрачни, които не са били прозрачни в оригиналното изображение. В моя случай това не беше проблем.
Можете да използвате следния код, за да конвертирате бели или черни пиксели в прозрачни.
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, за да работи това. Дори когато заредих растерното изображение като променливо, пак не можах да променя пикселите. Отчасти това е причината да има толкова много режийни разходи.
person
paul
schedule
18.11.2013