it-swarm.com.ru

Формат 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?

15
Pro.Hessam

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

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

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

26
Alberto

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

10
Falkreon

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

0
Nathan Ryan