gpt4 book ai didi

java - 如何获得 8 位颜色?

转载 作者:搜寻专家 更新时间:2023-11-01 01:42:36 25 4
gpt4 key购买 nike

所以,此时此刻,我得到了一个生成 3 个随机整数的方法,从 0 到 255。

我使用 3 个整数表示颜色。红色、绿色、蓝色。

所以,此时此刻,如果我想使用生成的颜色设置某些东西的颜色,我会使用:

 Color.argb(255, r, g, b); //255 =max intensity and after ,there are red green blue

我需要做的是将 3 个整数或最终强度值也转换为 8 位整数。

非常感谢任何类型的文档或指南!

如果需要更多信息,我会评论或修改问题的正文。

最佳答案

您可以通过以下方式对颜色进行编码:

Bits    0### 1### 2### 3### 4### 5### 6### 7###
Alpha---- Red------ Green---- Blue-----

请注意,您会丢失大量有关颜色的信息(但我认为这就是您想要获得的信息)。

为了编码你需要做的事情:

  • 更改颜色范围(0-2550-3)
  • 适当移动颜色并相加得到8位值。

下面是一些示例代码:

import java.awt.Color;

abstract class EightBit {
public static int fromColor(Color c) {
return ((c.getAlpha() >> 6) << 6)
+ ((c.getRed() >> 6) << 4)
+ ((c.getGreen() >> 6) << 2)
+ (c.getBlue() >> 6);
}
public static Color toColor(int i) {
return new Color(((i >> 4) % 4) * 64,
((i >> 2) % 4) * 64,
(i % 4) * 64,
(i >> 6) * 64);
}
}

解释

编码

让我们从一个示例颜色开始:new Color(200, 59, 148, 72)。现在我们将其转换为整数。颜色的二进制表示是:

Alpha 200 -- 11001000
Red 59 -- 00111011
Green 148 -- 10010100
Blue 72 -- 01001000

现在,我们将它们向右移动 6 位(因此我们得到前 2 位):

Alpha 3 -- 11
Red 0 -- 00
Green 2 -- 10
Blue 1 -- 01

现在我们把它们放在一起:

Bits  [ 1 ][ 1 ][ 0 ][ 0 ][ 1 ][ 0 ][ 0 ][ 1 ] -- 209
ALPHA--- RED----- GREEN--- BLUE----

它是 209。看?

解码

所以我们回到了 8 位数字:209。我们想解码它。首先,我们需要通过将 2 位颜色右移并取模 4 来取回 2 位颜色:

Bits  [ 1 ][ 1 ][ 0 ][ 0 ][ 1 ][ 0 ][ 0 ][ 1 ]
\_shift_by_6_bits_____________[ 1 ][ 1 ] -- 3 (Alpha)
\_by_4_bits_________[ 0 ][ 0 ] -- 0 (Red)
\_by_2____[ 1 ][ 0 ] -- 2 (Green)
shift by 0 bits: [ 0 ][ 1 ] -- 1 (Blue)

现在我们将它们乘以 64:

3 * 64 = 192 (Alpha)
0 * 64 = 0 (Red)
2 * 64 = 128 (Green)
1 * 64 = 64 (Blue)

然后将它们放回 Color 对象中。正如您所看到的,颜色是不同的:一些关于颜色的信息在这个过程中丢失了。这叫做 lossy compression .

关于java - 如何获得 8 位颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27290729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com