§ Матрица дизеринга

Матрица 8x8

§ Вычисление

Каждый цветовой компонент рассчитывается путем вычисления формулы:
new_clrgb = old_clrgb + k*(lookup[y & 7][x & 7] - m);
  • m = 32 (зависит от разрядности, здесь 8*8/2=32)
  • k = коэффициент размаха, например k=4 будет выдавать -128..127
  • old_cl = старый цвет от 0 до 255 (к примеру)
  • new_cl = полученный цвет
После того, как получили новый цвет, надо найти ближайший к нему цвет из индексной палитры.
Можно сделать проще, если это черно-белая картинка:
  • index_cl = 0, если new_cl < 128
  • indec_cl = 1, если new_cl >= 128

§ Пример программы


§ Цветной вариант

...

  ' ---
  r = y \ 2 MOD 256
  g = y \ 2 MOD 256
  b = 255
  ' ---

  clr = (pat(x MOD 8, y MOD 8) - 32) * k + r
  clg = (pat(x MOD 8, y MOD 8) - 32) * k + g
  clb = (pat(x MOD 8, y MOD 8) - 32) * k + b

  IF clr > 128 THEN r = 1 ELSE r = 0
  IF clg > 128 THEN g = 1 ELSE g = 0
  IF clb > 128 THEN b = 1 ELSE b = 0

  PSET (x, y), 8 + (b + g * 2 + r * 4)

...