diff --git a/lib/GfxRenderer/BitmapHelpers.cpp b/lib/GfxRenderer/BitmapHelpers.cpp index e9dbb64d..07e985f3 100644 --- a/lib/GfxRenderer/BitmapHelpers.cpp +++ b/lib/GfxRenderer/BitmapHelpers.cpp @@ -52,14 +52,13 @@ int adjustPixel(int gray) { return gray; } -// Simple quantization without dithering - divide into 4 levels -// The thresholds are fine-tuned to the X4 display +// Simple quantization without dithering — evenly-spaced midpoint thresholds for factory LUT uint8_t quantizeSimple(int gray) { - if (gray < 45) { + if (gray < 43) { return 0; - } else if (gray < 70) { + } else if (gray < 128) { return 1; - } else if (gray < 140) { + } else if (gray < 213) { return 2; } else { return 3; diff --git a/lib/GfxRenderer/BitmapHelpers.h b/lib/GfxRenderer/BitmapHelpers.h index 8f49124c..8220fc22 100644 --- a/lib/GfxRenderer/BitmapHelpers.h +++ b/lib/GfxRenderer/BitmapHelpers.h @@ -125,37 +125,21 @@ class AtkinsonDitherer { if (adjusted < 0) adjusted = 0; if (adjusted > 255) adjusted = 255; - // Quantize to 4 levels + // Quantize to 4 levels — evenly-spaced midpoint thresholds for factory LUT uint8_t quantized; int quantizedValue; - if (false) { // original thresholds - if (adjusted < 43) { - quantized = 0; - quantizedValue = 0; - } else if (adjusted < 128) { - quantized = 1; - quantizedValue = 85; - } else if (adjusted < 213) { - quantized = 2; - quantizedValue = 170; - } else { - quantized = 3; - quantizedValue = 255; - } - } else { // fine-tuned to X4 eink display - if (adjusted < 30) { - quantized = 0; - quantizedValue = 15; - } else if (adjusted < 50) { - quantized = 1; - quantizedValue = 30; - } else if (adjusted < 140) { - quantized = 2; - quantizedValue = 80; - } else { - quantized = 3; - quantizedValue = 210; - } + if (adjusted < 43) { + quantized = 0; + quantizedValue = 0; + } else if (adjusted < 128) { + quantized = 1; + quantizedValue = 85; + } else if (adjusted < 213) { + quantized = 2; + quantizedValue = 170; + } else { + quantized = 3; + quantizedValue = 255; } // Calculate error (only distribute 6/8 = 75%) @@ -229,37 +213,21 @@ class FloydSteinbergDitherer { if (adjusted < 0) adjusted = 0; if (adjusted > 255) adjusted = 255; - // Quantize to 4 levels (0, 85, 170, 255) + // Quantize to 4 levels — evenly-spaced midpoint thresholds for factory LUT uint8_t quantized; int quantizedValue; - if (false) { // original thresholds - if (adjusted < 43) { - quantized = 0; - quantizedValue = 0; - } else if (adjusted < 128) { - quantized = 1; - quantizedValue = 85; - } else if (adjusted < 213) { - quantized = 2; - quantizedValue = 170; - } else { - quantized = 3; - quantizedValue = 255; - } - } else { // fine-tuned to X4 eink display - if (adjusted < 30) { - quantized = 0; - quantizedValue = 15; - } else if (adjusted < 50) { - quantized = 1; - quantizedValue = 30; - } else if (adjusted < 140) { - quantized = 2; - quantizedValue = 80; - } else { - quantized = 3; - quantizedValue = 210; - } + if (adjusted < 43) { + quantized = 0; + quantizedValue = 0; + } else if (adjusted < 128) { + quantized = 1; + quantizedValue = 85; + } else if (adjusted < 213) { + quantized = 2; + quantizedValue = 170; + } else { + quantized = 3; + quantizedValue = 255; } // Calculate error