IllegalArgumentException при разделении растрового изображения в Android - PullRequest
1 голос
/ 08 марта 2011

Может кто-нибудь сказать мне, почему я получаю эту ошибку при разделении растрового изображения. Код:

 public static List<Bitmap> ScambleImage(Bitmap image, int rows, int cols){
    List<Bitmap> scambledImage =  new ArrayList<Bitmap>();
    int chunkWidth = image.getWidth(); //cols
    int chunkHeight = image.getHeight(); //rows
    int finalSize = chunkWidth/rows;

    Bitmap bMapScaled = Bitmap.createScaledBitmap(image, chunkWidth, chunkHeight, true);
    int yCoord = 0;//The y coordinate of the first pixel in source
    for(int x = 0; x < rows; x++){
        int xCoord = 0;//The x coordinate of the first pixel in source
        for(int y = 0; y < cols; y++){
            scambledImage.add(Bitmap.createBitmap(bMapScaled, xCoord, yCoord, finalSize, finalSize));
            xCoord = finalSize + xCoord;
        }
        yCoord = finalSize + yCoord;//The y coordinate of the first pixel in source
    }

    return scambledImage;
}

строки = 6 и столбцы = 6; размер изображения = 648 х 484

это исключение, но я не знаю, как это исправить:

java.lang.IllegalArgumentException: y + height must be <= bitmap.height()

Изображение, которое я разделяю

Спасибо!

Ответы [ 2 ]

1 голос
/ 08 марта 2011

Вы пытаетесь получить разделы исходного растрового изображения, которые не существуют.

Поставьте точку останова на линии:

scambledImage.add(Bitmap.createBitmap(bMapScaled, xCoord, yCoord, finalSize,  finalSize));  

И вы увидите, что он когда-нибудь выйдет из строя после первой итерации массива, потому что каждый раз, когда вы смещаете начальную точку, какой "фрагмент" большой карты вы захватываете xCoord / yCoord.

Моя догадка говорит, что ваш расчет для finalSize неверен, но я могу только догадываться, поскольку мы не знаем точно, чего вы пытаетесь достичь.

0 голосов
/ 13 февраля 2012

Я попробовал ваш код и немного изменился, и он работает для меня.

private ArrayList<Bitmap> splitImage(Bitmap bitmap, int rows, int cols){
    int chunks = rows*cols;
    int chunkHeight,chunkWidth;
    ArrayList<Bitmap> splittedImages = null;
    splittedImages = new ArrayList<Bitmap>(chunks);
    chunkHeight = bitmap.getHeight()/rows;
    chunkWidth = bitmap.getWidth()/cols;
    Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap,bitmap.getWidth(), bitmap.getHeight(), true);
    int yCoord = 0;
    for(int x=0; x<rows; x++){
        int xCoord = 0;
        for(int y=0; y<cols; y++){
            splittedImages.add(Bitmap.createBitmap(scaledBitmap, xCoord, yCoord, chunkWidth, chunkHeight));
            xCoord += chunkWidth;
        }
        yCoord += chunkHeight;
    }
    return splittedImages;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...