Мусор отображается вместо прозрачного цвета при использовании BitmapRegionDecoder

Итак, простая задача: у меня большая картинка, в которой есть прозрачные части. Я хочу декодировать часть прямоугольника как растровое изображение, используя метод BitmapRegionDecoder decodeRegion. Хотя непрозрачные части изображения хорошо декодируются, вместо прозрачных частей я получаю немного дерьма. Кто-нибудь сталкивался с чем-то знакомым? Код, который я использую:

// colNumber, rowNumber are some proper integers from 0 to 4
InputStream is = playingTable.getResources().openRawResource(R.drawable.picture);
        try {
            BitmapRegionDecoder decoder = BitmapRegionDecoder.newInstance(is, false);
            int cellWidth = decoder.getWidth() / 5;
            int cellHeight = decoder.getHeight() / 5;
            Rect rect = new Rect(colNumber * cellWidth, rowNumber * cellHeight, (colNumber + 1) * cellWidth, (rowNumber + 1) * cellHeight);
            bmp = decoder.decodeRegion(rect, null);
            is.close();
        } catch (IOException e) {
            Log.i("Exception: ", e.toString());
        }

// in draw method:
        canvas.drawBitmap(bmp, x, y, null);

1 ответ

Решение

Используйте объект Paint для рисования. Он поддерживает альфа-каналы. Возможно, вам придется проходить пиксель за пикселем во вложенном цикле.

Разработчики Android - Paint

Другие вопросы по тегам