【发布时间】:2013-02-11 04:15:54
【问题描述】:
我有一个简单的字节数组,我想从中获取颜色。我的计划是三个位来自红色,三个位为绿色,两个位为蓝色。 8 位。
我觉得颜色是对的:
如果我错了,请纠正我,
byte[] colours = new byte[256]; //256 different colours, 8 * 8 * 4
//(3 bits(red) + 3 bits(green) + 2 bits(blue)
int index = 0;
for(byte r = 0; r < 8; r++){
for(byte g = 0; g < 8; g++){
for(byte b = 0; b < 4; b++){
byte rr = (r & 255);
byte gg = (g & 255);
byte bb = (b & 255);
colours[index++] = (rr << 5 | gg << 2 | bb);
}
}
}
我的目标是制作一个 getColor(byte r, byte g, byte b) 之类的
public static byte getColor(byte r, byte g, byte b){
return colours[return the right color using r g b];
}
但我不知道怎么做。这是我需要帮助的地方。
如果可能的话,我宁愿不使用 Color 类。
其他信息: 我正在使用 BufferedImage.TYPE.BYTE.INDEXED 进行绘画。
对不起,如果我的英语不好:)
编辑 修正了错误的地方
【问题讨论】:
-
colours[(rr << 5 | gg << 2 | bb)];这条线的目的是什么? -
你的
getColor不应该是void,因为它会返回一个值。 -
@ogzd 这是一种古老的技术,使用较大值的各个位来存储每个通道。在处理模式 13h 之类的事情时,您曾经在旧 ASM 代码中看到这一点
-
什么是
int index?它从未使用过。 -
colours[(rr << 5 | gg << 2 | bb)];在数组 colours 中命名一个位置,然后什么也不做。 @ogzd 是对的,看起来很奇怪。
标签: java colors byte rgb 8-bit