dither是为了降低颜色量化时引入的信息损失,利用有限的颜色数目,生成一个视觉上和支持更多颜色数目的图相似的近似图。
loyd–Steinberg dithering是比较早期的dither算法,但也是应用最为广泛的算法,以下是其伪码。背后的思想是把量化误差按照固定比例扩散到相邻的后续几个像素上
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 ] + quant_error * 7 / 16
pixel[x - 1][y + 1] := pixel[x - 1][y + 1] + quant_error * 3 / 16
pixel[x ][y + 1] := pixel[x ][y + 1] + quant_error * 5 / 16
pixel[x + 1][y + 1] := pixel[x + 1][y + 1] + quant_error * 1 / 16