颜色量化稀释纯白色

时间:2016-03-04 05:46:00

标签: java graphics colors java-2d quantization

我有一个简单的量化函数

public static int quantize(int oldpixel) {

    int r = (oldpixel >> 16) & 0xff;
    int g = (oldpixel >> 8) & 0xff;
    int b = (oldpixel >> 0) & 0xff;

    int color = 0xff << 24 | (((int) ((r) / 32) * 32) & 0xff) << 16 | 
            (((int) ((g) / 32) * 32) & 0xff) << 8 | 
            (((int) ((b) / 32) * 32)& 0xff) << 0;
    return color;
}

它的作用是将颜色减少到较低的细节颜色,然后展开它,这会人为地限制托盘,我将它用于抖动过滤器,通过该功能的图像产生这个

在: Unquantized hue wheel 日期: Quantized hue wheel

这几乎是完美的结果,除了白色减少为灰色,我明白原因是我的算法分区颜色的地板,但我不知道如何解决这个问题,任何建议都会受到赞赏< / p>

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

将每个分量除以32后,您将得到一个介于0和7之间的整数。您试图将其映射回0到255的范围,因此0为0,7为255。

你可以将它乘以255/7,这恰好是36.428。

你可以使用像(int)((r / 32) * (255.0 / 7.0))这样的东西,但是Java中的演员阵容很难看。要改进它,您可以将其包装在函数中,并quantizeChannel(r)quantizeChannel(g)quantizeChannel(b)。或者您可以交换订单并使用整数算术:r / 32 * 255 / 7