Использование 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 обычно равен bitmap.getWidth () * bitmap.getHeight (), значения x и y равны 0, 0, а ширина, высота – ширина и высота битмапа.

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

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

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

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

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

Большинство парней хотят использовать 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; } }