我目前正在尝试在 Java 中实现 Floyd-Steinberg-Dithering 算法。经过几次失败的尝试后,我在阅读了Wikipedia上列出的伪代码后遇到了一个问题。
for each y from top to bottom
for each x from left to right
oldpixel := pixel[x][y]
newpixel := find_closest_palette_color(oldpixel)
pixel[x][y] := newpixel
quant_error := oldpixel - newpixel
pixel[x+1][y ] := pixel[x+1][y ] + 7/16 * quant_error
pixel[x-1][y+1] := pixel[x-1][y+1] + 3/16 * quant_error
pixel[x ][y+1] := pixel[x ][y+1] + 5/16 * quant_error
pixel[x+1][y+1] := pixel[x+1][y+1] + 1/16 * quant_error
我想要实现的是将图像压缩成 16 色调色板。然而,在添加错误像素之后,我不是创建了调色板中甚至不存在的全新颜色吗?
但是最终将整个图像强制返回到调色板中就足以使这项工作吗?
提前致谢!