此时,我有一个生成三个随机整数的方法,范围是0到255。
我使用这三个整数来表示颜色:红色、绿色和蓝色。
如果我想要用这些生成的颜色来设置某物的颜色,我会使用以下代码:
Color.argb(255, r, g, b); //255 =max intensity and after ,there are red green blue
我需要做的是将这3个整数或者强度值转换为8位整数。
如果有任何文档或指导,我都非常感激!
如果需要更多信息,我会在评论或修改问题正文。
此时,我有一个生成三个随机整数的方法,范围是0到255。
我使用这三个整数来表示颜色:红色、绿色和蓝色。
如果我想要用这些生成的颜色来设置某物的颜色,我会使用以下代码:
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-255
到0-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
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
。我们想要解码它。首先,我们需要通过将其向右移位并模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)
3 * 64 = 192 (Alpha)
0 * 64 = 0 (Red)
2 * 64 = 128 (Green)
1 * 64 = 64 (Blue)
将它们放回到Color
对象中。如您所见,颜色是不同的:在此过程中丢失了一些关于颜色的信息。这被称为有损压缩。