Объяснение метода getPixels для растрового изображения в Android

Как интерпретировать возвращенный массив из встроенного метода getPixels для Bitmap?

Вот мой код:

public void foo() { int[] pixels; Bitmap bitmapFoo = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.test2); int height = bitmapFoo.getHeight(); int width = bitmapFoo.getWidth(); pixels = new int[height * width]; bitmapFoo.getPixels(pixels, 0, width, 1, 1, width - 1, height - 1); } 

Массив «пикселей» возвращается с значениями от -988,602,635 до 1,242,635,509, и это было всего лишь из нескольких цветов в простейшем файле PNG, который я сделал. Как я могу интерпретировать числа, возвращаемые из этого метода?

Изменить: я понимаю, что это единственное целое представляет цвет. Я просто не понимаю, как интерпретировать это одиночное целое в значения RBG и альфа, которые составляют цвет.

Благодарю.

PS. Если вы спросите себя: «что он пытается сделать?» Я пытаюсь выяснить способ динамического изменения цвета растрового изображения.

Solutions Collecting From Web of "Объяснение метода getPixels для растрового изображения в Android"

Он возвращает int для класса Color.

Класс Color определяет методы для создания и преобразования цветов int. Цвета представлены как упакованные ints , состоящие из 4 байтов: альфа, красный, зеленый, синий. Значения не преломляются, то есть любая прозрачность сохраняется только в альфа-компоненте, а не в цветовых компонентах. Компоненты хранятся следующим образом (альфа << 24) | (Красный << 16) | (Зеленый << 8) | Синий . Каждый компонент находится в диапазоне от 0,255 до 0, что означает отсутствие вклада для этого компонента, а 255 означает 100% вклад. Таким образом, непрозрачный черный был бы 0xFF000000 (100% непрозрачный, но не вносит вклад в красный, серый, синий и непрозрачный белый будет 0xFFFFFFFF

Например, когда вы используете объект Paint:

 Paint pRed = new Paint(); pRed.setColor(Color.RED); 

setColor ожидает int. Color.RED – это значение int для их заданного значения «красный».

Вы также можете сделать следующее, чтобы получить цвета из int:

 int mColor = 0xffffffff; int alpha = Color.alpha(mColor); int red = Color.red(mColor); int green = Color.green(mColor); int blue = Color.blue(mColor); 

Даже больше:

 int alpha=argb>>24; int red=(argb & 0x00FF0000)>>16; int green=(argb & 0x0000FF00)>>8; int blue=(argb & 0x000000FF); 

Если у вас есть ваши значения альфа, красный, зеленый и синий, ваш цвет равен (альфа << 24) + (красный << 16) + (зеленый << 8) + синий.

Чтобы получить значения альфа, красного, зеленого и синего из int, скажем, argb:

 int alpha=argb>>24; int red=(argb-alpha)>>16; int green=(argb-(alpha+red))>>8; int blue=(argb-(alpha+red+green)); 

Кроме того, я думаю, что это должно быть

 bitmapFoo.getPixels(pixels, 0, width, 0, 0, width, height); 

Координаты начинаются с 0, правильно?