Формат 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
. Эти значения сами не сохраняют цвет.