RGB颜色量化从8位到6位

时间:2015-02-04 09:23:52

标签: java image rgb quantization 24-bit

我想将RGB颜色从​​8位量化为6位。我编写了如下代码:

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 个答案:

答案 0 :(得分:0)

这里有两个问题:

  1. 您是否正确访问R,G,B组件和
  2. 您是否正确组合组件。
  3. 您的访问代码有点奇怪,所以我无法保证,但这应该很容易修复:您的代码是否适用于使您的图像灰度?如果没有,那么先修复它。

    现在,将8位通道转换为6位通道的代码看起来不正确。您正在使用0xff对字节值进行AND运算,这是没有意义的,然后您无法将这些值缩小到6位,然后将它们进行OR运算。缩小到6位是通过右移2来完成的。所以,我认为你需要这样的东西:

    r >>= 2;
    g >>= 2;
    b >>= 2;
    int pix = (r << 12) | (g << 6) | b;