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可以是0xff
或0b1111_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 的格式的主要内容,如果未能解决你的问题,请参考以下文章