gpt4 book ai didi

java - 创建自定义 getColor(byte r, byte g, byte b) 方法

转载 作者:行者123 更新时间:2023-12-01 19:53:55 29 4
gpt4 key购买 nike

我有一个简单的字节数组,我想从中获取颜色。我的计划是用红色表示三位,绿色表示三位,蓝色表示两位。 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 进行绘画。

抱歉,如果我的英语不好:)

编辑修复了错误的地方

最佳答案

Java 的 byte 是有符号的,以 2 的补码表示,所以你不能直接这样移动。
从 128 开始,您必须使用负值反转位模式。

byte[] colours = new byte[256];

for(int i = 0; i < colours.length; i++){
colours[i] = (byte) (i < 128 ? i : i - 256);
}

你的方法应该是这样的:

public static byte getColour(byte r, byte g, byte b)
throws InvalidColourException {
if (r >= 8 || r < 0)
throw new InvalidColourException("Red is out of range.");
if (g >= 8 || g < 0)
throw new InvalidColourException("Green is out of range.");
if (b >= 4 || b < 0)
throw new InvalidColourException("Blue is out of range.");
int i = (int) r << 5;
i += (int) g << 2;
i += (int) b;
return colours[i];
}

不过,您可以将其全部缩小为单个方法,并丢弃数组:

public static byte getColour(byte r, byte g, byte b)
throws InvalidColourException {
if (r >= 8 || r < 0)
throw new InvalidColourException("Red is out of range.");
if (g >= 8 || g < 0)
throw new InvalidColourException("Green is out of range.");
if (b >= 4 || b < 0)
throw new InvalidColourException("Blue is out of range.");
int c = (int) r << 5;
c += (int) g << 2;
c += (int) b;
return (byte) c;
}

关于java - 创建自定义 getColor(byte r, byte g, byte b) 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15076813/

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