TYPE_INT_RGB 和 TYPE_INT_ARGB 的格式

Posted

技术标签:

【中文标题】TYPE_INT_RGB 和 TYPE_INT_ARGB 的格式【英文标题】:Format of TYPE_INT_RGB and TYPE_INT_ARGB 【发布时间】:2022-01-23 02:55:41 【问题描述】:

谁能为我解释一下 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 中获得红色、绿色和蓝色?

【问题讨论】:

为了更好的代码,255可以是0xff0b1111_1111 【参考方案1】:

TYPE_INT_ARGB 将 Color 表示为 int(4 字节),alpha 通道在 24-31 位,红色通道在 16-23,绿色在 8-15,蓝色在 0-7。

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

查看java.awt.Color 和java.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,因此得名。

【讨论】:

【参考方案3】:

这些是指示BufferedImage 实例的颜色模型的常量值。这些值本身并不存储颜色。

【讨论】:

以上是关于TYPE_INT_RGB 和 TYPE_INT_ARGB 的格式的主要内容,如果未能解决你的问题,请参考以下文章

图片验证码jsp

图像的读取缩小保存

输出随机认证图片

按时打发士大夫

Java - 没有图形的 FontMetrics

验证码的旋转与放缩代码