【问题标题】:RGB Color Quantization from 8bit to 6bitRGB 颜色量化从 8bit 到 6bit
【发布时间】:2015-02-04 09:23:52
【问题描述】:

我想将 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位,我不知道我的理解是对还是错,输出图像真的很奇怪。我希望有人能帮我弄清楚

【问题讨论】:

    标签: java image rgb quantization 24-bit


    【解决方案1】:

    这里有两个问题:

    1. 您是否正确访问了R、G、B组件,以及
    2. 您是否正确组合了组件。

    您的访问代码有点奇怪,所以我不能保证,但这应该很容易解决:您的代码是否适用于使您的图像灰度化?如果没有,那就先解决这个问题。

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

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

    【讨论】:

      猜你喜欢
      • 2011-11-22
      • 2018-12-23
      • 1970-01-01
      • 2021-08-24
      • 1970-01-01
      • 1970-01-01
      • 2014-04-25
      • 1970-01-01
      • 2011-09-18
      相关资源
      最近更新 更多