我有一个简单的量化函数
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>
答案 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
。