【发布时间】:2016-06-17 18:18:42
【问题描述】:
我有一个简单的量化函数
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
结果这几乎是完美的,除了白色被减少为灰色,我理解原因是我在算法中的分色地板,但我不知道如何解决这个问题,任何建议将不胜感激
【问题讨论】:
-
试试
/ 32 * 32,而不是/ 32 * 33。 -
33 有一点帮助,在玩过它之后,36 位是上限并产生接近白色,尽管使用颜色选择工具进行检查显示它并不完全,但这将作为临时解决方法工作得很好不影响黑色,谢谢!
-
实际上是的,36 对 8 个级别是正确的。 (我在考虑 *17 为 16 个级别)
-
你真的想做
/ 32 * (255.0 / 7.0),它恰好是大约 36.428,但它不是一个整数。 -
顺便说一句,那些
(int)演员表是多余的。
标签: java graphics colors java-2d quantization