Формат TYPE_INT_RGB и TYPE_INT_ARGB - PullRequest
16 голосов
/ 14 мая 2011

Может ли кто-нибудь объяснить мне, как 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?

Ответы [ 3 ]

27 голосов
/ 14 мая 2011

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 .

11 голосов
/ 25 декабря 2011

Вы верны для 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, отсюда и название.

0 голосов
/ 14 мая 2011

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

...