Формат TYPE_INT_RGB и TYPE_INT_ARGB

Может ли кто-нибудь объяснить мне, как java хранит цвет в TYPE_INT_RGB и TYPE_INT_ARGB?
Правильно ли работают эти строки кода для расчета красного, зеленого и синего?

int red= (RGB>>16)&255;
int green= (RGB>>8)&255;
int blue= (RGB)&255;

А как насчет TYPE_INT_ARGB? Как я могу получить красный, зеленый и синий цвета от TYPE_INT_ARGB?

Ответы

Ответ 1

TYPE_INT_ARGB представляет цвет как int (4 байта) с альфа-каналом в битах 24-31, красные каналы в 16-23, зеленые в 8-15 и синие в 0-7.

TYPE_INT_RGB представляет цвет как int (4 байта) таким же образом TYPE_INT_ARGB, но альфа-канал игнорируется (или биты 24-31 равны 0).

Посмотрите javadoc java.awt.Color и java.awt.image.BufferedImage.

Ответ 2

Вы правы для TYPE_INT_RGB. Эквивалентный код TYPE_INT_ARGB:

int rgb = rgbColor.getRGB(); //always returns TYPE_INT_ARGB
int alpha = (rgb >> 24) & 0xFF;
int red =   (rgb >> 16) & 0xFF;
int green = (rgb >>  8) & 0xFF;
int blue =  (rgb      ) & 0xFF;

Выделение цветовых элементов для байтов от наиболее значимых до наименее значимых, вы получаете ARGB, отсюда и название.

Ответ 3

Это постоянные значения, указывающие цветовую модель экземпляра BufferedImage. Эти значения сами не сохраняют цвет.