Intereting Posts
Динамическое изменение фона AppWidget с помощью 9 патчей Предварительный просмотр камеры на текстуре с целью GL_TEXTURE_2D Получение значения радиокнопки при нажатии кнопки не работает angularjs Как контролировать поток активности – кнопка «Назад» и «Домой» Поддержка фрагментов для Mapsforge Вызов LibGDX – Camera.update () ничего не делает Студия Android для вызова кодов USSD Корневой объект или нет? Какова наилучшая практика для ответов API? Строка состояния Android ожидает значков размером 25x25dp, а рекомендации рекомендуют 32x32dp. Кто не прав? Страница разработчика Android: понимание примера профилирования traceview Установите приложение GooglePlay из NFC Как установить стиль в progressBar программно на Android Как отправить данные в текущую активность из широковещательного приемника, Какой браузер использует Galaxy Galaxy? Отправьте комбинацию клавиш (мета-ключ и код клавиатуры) через API Android

Использование 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; } }