Использование getPixels () класса Bitmap Android и как его использовать

Я пытаюсь сделать некоторую обработку изображений в Android. Мне нужно получить кусок пиксельной информации растрового изображения. Поэтому я попытался использовать один из методов класса Bitmap getPixels (). Однако, похоже, я не использую его правильно или я неправильно понял единственную цель поведения метода.

например, я делаю следующее, Чтобы получить информацию о пикселях области 10 на 10 растрового изображения из произвольного местоположения (координата растрового изображения) x, y.

Bitmap bitmap = BitmapFactory.decodeFile(filePath);
int[] pixels = new int[100];
bitmap.getPixels(pixels, 0, bitmap.getWidth(), x, y, 10, 10);

и я получаю ArrayIndexOutOfBoundsException. Я погуглил вокруг, чтобы увидеть, что я делаю неправильно, но я невежествен. Большинство примеров или вопросов, касающихся использования getPixels (), обычно относятся к случаю извлечения пиксельной информации всего изображения. Следовательно, размер массива int обычно является растровым.getWidth()*рисунок.getHeight (), X и y значения 0, 0, а ширина, высота-ширина и высота растрового изображения.

является getPixels растрового изображения() не предназначен для моего использования (получение куска пиксельной информации под-области растрового изображения)? Или я неправильно его использую? Есть ли альтернативный способ сделать это, возможно, используя другой класс?

Я был бы признателен, если бы у кого-нибудь было что сказать об этом. Спасибо.

2 ответов


getPixels () возвращает полный массив int[] исходного растрового изображения, поэтому должен быть инициализирован с той же длиной, что и высота исходного растрового изображения x Ширина.

используя так,bitmap.getPixels(pixels, 0, bitmap.getWidth(), 0, 0, 10, 10); фактически захватывает нужные пиксели из растрового изображения и заполняет остальную часть массива 0. Так с 10 х 10 подмножество изображение 100 х 10, начиная с 0,0 100 первых значений будет нужное значение инт, остальное будет 0.

вы всегда можете попробовать использовать Bitmap.createBitmap() to создайте свое подмножество растровых изображений, затем используйте getPixels() на Вашем новом растровом изображении, чтобы захватить полный массив.


большинство парней хотят использовать getPixels (), получая определенные пиксели региона, но на самом деле он вернул полный размер исходного растрового изображения. Допустимая область помещается в левый угол, а другие-полупрозрачные цвета. Я предлагаю вам использовать режим отладки Android Studio для просмотра визуальных пикселей путем создания растрового изображения.

и следующая моя версия getPixels (), чтобы получить определенные пиксели региона:

public class BitmapHelper {

public static int[] getBitmapPixels(Bitmap bitmap, int x, int y, int width, int height) {
    int[] pixels = new int[bitmap.getWidth() * bitmap.getHeight()];
    bitmap.getPixels(pixels, 0, bitmap.getWidth(), x, y,
            width, height);
    final int[] subsetPixels = new int[width * height];
    for (int row = 0; row < height; row++) {
        System.arraycopy(pixels, (row * bitmap.getWidth()),
                subsetPixels, row * width, width);
    }
    return subsetPixels;
}
}