Подтвердить что ты не робот

Объяснение метода 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. Если вы спрашиваете себя: "что он пытается сделать?" Я пытаюсь выяснить способ динамического изменения цвета растрового изображения.

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

int mColor = 0xffffffff;

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

Ответ 3

Еще больше:

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

Ответ 4

Если у вас есть ваши значения альфа, красный, зеленый и синий, ваш цвет равен (альфа < 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));

Ответ 5

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

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

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