Объяснение метода getPixels для растрового изображения в Android - PullRequest
11 голосов
/ 13 ноября 2010

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

Вот мой код:

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 и alpha, которые составляют цвет.

Спасибо.

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

Ответы [ 5 ]

14 голосов
/ 18 января 2011

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

int mColor = 0xffffffff;

int alpha = Color.alpha(mColor);
int red = Color.red(mColor);
int green = Color.green(mColor);
int blue = Color.blue(mColor);
10 голосов
/ 13 ноября 2010

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

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

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

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

setColor ожидает int. Color.RED - это значение int для предопределенного значения «red».

5 голосов
/ 06 декабря 2010

Еще больше:

int alpha=argb>>24;
int red=(argb & 0x00FF0000)>>16;
int green=(argb & 0x0000FF00)>>8;
int blue=(argb & 0x000000FF);
1 голос
/ 13 ноября 2010

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

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

int alpha=argb>>24;
int red=(argb-alpha)>>16;
int green=(argb-(alpha+red))>>8;
int blue=(argb-(alpha+red+green));
0 голосов
/ 29 августа 2011

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

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

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

...