java RGB颜色量化从8位到6位
我想把RGB颜色从8位量化到6位。我编写了如下java代码:
int ind = 0;
for(int y = 0; y < height; y++){
for(int x = 0; x < width; x++){
byte a = 0;
byte r = bytes[ind];
byte g = bytes[ind+height*width];
byte b = bytes[ind+height*width*2];
int pix = 0xff000000 | ((r & 0xff) << 16) | ((g & 0xff) << 8) | (b & 0xff);
img.setRGB(x,y,pix);
ind++;
}
}
然后,我改变了:
int pix = 0xff000000 | ((r & 0xff) << 16) | ((g & 0xff) << 8) | (b & 0xff);
致:
int pix = 0xff000000 | ((r & 0xff) << 12) | ((g & 0xff) << 6) | (b & 0xff);
因为我认为这意味着每个通道每像素6位,我不知道我的理解是对还是错,输出的图像真的很奇怪。我希望有人能帮我弄清楚
# 1 楼答案
这里有两个问题:
你的访问代码有点奇怪,所以我不能担保,但这应该很容易修复:你的代码可以使你的图像灰度化吗?如果没有,那就从解决这个问题开始
现在,将8位通道转换为6位通道的代码看起来不正确。将字节值与0xff进行and运算,这是毫无意义的,然后在将这些值进行ORing运算之前,无法将它们收缩到6位。缩小到6位是通过右移2来完成的。所以,我认为你需要这样的东西: