В настоящее время я пытаюсь реализовать алгоритм Флойда-Стейнберга-дизеринга на Java. После нескольких неудачных попыток я столкнулся с вопросом после прочтения псевдокода, указанного в Википедии а>.
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-цветную палитру. Однако после добавления ошибки в пиксели, разве я не создаю совершенно новые цвета, которых даже не существует в палитре?
Но будет ли достаточно вернуть все изображение в цветовую палитру в конце, чтобы это сработало?
Заранее спасибо!