TYPE_INT_RGB和TYPE_INT_ARGB的格式

2022-09-02 20:06:05

谁能为我解释一下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

将 Color 表示为(4 个字节),其中 Alpha 通道位于位 24-31 中,红色通道表示为 16-23,绿色通道表示为 8-15,蓝色表示为 0-7。TYPE_INT_ARGBint

将 Color 表示为 (4 字节) int,与 相同的方式,但忽略 alpha 通道(或位 24-31 为 0)。TYPE_INT_RGBintTYPE_INT_ARGB

看看java.awt.Colorjava.awt.image.BufferedImage的javadoc


答案 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,因此得名。