Подтвердить что ты не робот

Прозрачный GIF в Android ImageView

Я пытаюсь показать прозрачный GIF-образ в своем приложении без успеха. Я могу загрузить и отобразить значок в ImageView, но на белом фоне вместо прозрачного.

Я уже пробовал эти решения без успеха: Конвертировать GIF в PNG программно

Кто-нибудь понял, как отображать GIF-изображение с прозрачностью? Я использую Android 18 SDK.

4b9b3361

Ответ 1

Вот обходной путь, который сработал у меня. Это нехорошее решение. Он может не работать во всех случаях, и в обработке изображений имеются значительные накладные расходы. Надеюсь, кто-то найдет лучшее решение.

В моем тестировании изображения 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, чтобы это работало. Даже при загрузке растрового изображения как изменчивого, я все еще не мог изменять пиксели. Отчасти это объясняется тем, что накладные расходы слишком много.

Ответ 2

Для преобразования GIF в PNG вы можете использовать GIMP (программное обеспечение GNU для операционных ресурсов). Установите программное обеспечение, откройте GIF, затем экспортируйте его как PNG.

Ответ 3

Вы можете использовать GifDecoder из android-gifview вместо BitmapFactory для декодирования GIF:

GifDecoder gd = new GifDecoder();
gd.read(new FileInputStream(filename));
return gd.getBitmap();

Это работает для меня.