BitmapRegionDecode.decodeRegion, ошибка skia при попытке создать плитку из растрового изображения

Привет я получаю сообщение об ошибке: --- decoder->decodeRegion вернул false, когда я пытаюсь декодировать второй регион с помощью BitmapRegionDeocde.decodeRegion. Мне удается получить первое растровое изображение региона, но если получить нулевое значение для второго региона.

Как мне получить растровое изображение всех моих регионов без этой ошибки?

Вот пример моего кода:

public void createTiles(String fileAssetPath) {
    mfileAssetpath = fileAssetPath;
    try {
        BufferedInputStream is = new BufferedInputStream(getContext().getAssets().open(mfileAssetpath));
        BitmapRegionDecoder decoder = BitmapRegionDecoder.newInstance(is, true);

        mBitmapHeight = decoder.getHeight();
        mBitmapWidth = decoder.getWidth();

        // ************

        Tile[] rects;
        int width = decoder.getWidth();
        int height = decoder.getHeight();

        int nbSameDimTile = 0;
        int nbEvenWidthTile = 0;
        int nbEvenHeightTile = 0;

        final int nbPartWidth = width / DEFAULT_TILE_WIDTH;
        final int nbPartHeight = height / DEFAULT_TILE_HEIGHT;

        final int moduloWidth = width % DEFAULT_TILE_WIDTH;
        final int moduloHeight = height % DEFAULT_TILE_HEIGHT;

        nbSameDimTile = nbPartWidth * nbPartHeight;
        if (moduloHeight > 0)
            nbEvenWidthTile = nbPartWidth;
        if (moduloWidth > 0)
            nbEvenHeightTile = nbPartHeight;

        // rects = new Rect[nbSameDimTile + nbEvenWidthTile +
        // nbEvenHeightTile];
        rects = new Tile[nbSameDimTile];
        int index = 0;
        for (int i = 0; i < nbPartWidth; i++) {

            for (int j = 0; j < nbPartHeight; j++) {
                Tile t = new Tile();
                Rect rect = new Rect(i * DEFAULT_TILE_WIDTH, j * DEFAULT_TILE_HEIGHT, DEFAULT_TILE_WIDTH, DEFAULT_TILE_HEIGHT);
                System.out.println("This rect : " + rect);

                t.bitmap = decoder.decodeRegion(rect, null);
                t.rect = rect;
                rects[index] = t;
                index++;
            }

        }
        mRects = rects;

        // ************
        decoder.recycle();
        mLoaded = true;
    } catch (IOException e) {
        mLoaded = false;
        Log.e("System.out", "", e);
    }




}

1 ответ

Решение

У меня была ошибка в определении прямоугольника для декодирования. Рект был недействительным. это было Rect rect = new Rect(i * DEFAULT_TILE_WIDTH, j * DEFAULT_TILE_HEIGHT, DEFAULT_TILE_WIDTH, DEFAULT_TILE_HEIGHT);

Но если должно быть Rect rect = new Rect(i * DEFAULT_TILE_WIDTH, j * DEFAULT_TILE_HEIGHT, DEFAULT_TILE_WIDTH * (i+1), DEFAULT_TILE_HEIGHT * (j+1));

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