Skip to content

Commit 243c2ce

Browse files
committed
Adding dithering algorithms, examples, and documentation to IMGADJ lib.
- Implement Floyd-Steinberg dithering test with adjustable amount and reset functionality. - Create comprehensive dithering test showcasing all 22 dithering algorithms with interactive controls. - Introduce random and noise dithering test featuring random and blue noise algorithms with seed control. - Develop ordered dithering test demonstrating various Bayer matrices and their effects on images. - Add special pattern dithering test highlighting halftone, spiral, and clustered dot dithering techniques.
1 parent 8f931ca commit 243c2ce

9 files changed

+2198
-1
lines changed

IMGADJ/IMGADJ.BI

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,43 @@ CONST GJ_IMGADJ_PIXELSCALER_HQ2XB = 5
4242
CONST GJ_IMGADJ_PIXELSCALER_HQ3XA = 6
4343
CONST GJ_IMGADJ_PIXELSCALER_HQ3XB = 7
4444

45+
' Dithering Algorithm Constants
46+
CONST GJ_IMGADJ_DITHER_ORDERED_2X2 = 0
47+
CONST GJ_IMGADJ_DITHER_ORDERED_4X4 = 1
48+
CONST GJ_IMGADJ_DITHER_ORDERED_8X8 = 2
49+
CONST GJ_IMGADJ_DITHER_ORDERED_16X16 = 3
50+
CONST GJ_IMGADJ_DITHER_FLOYD_STEINBERG = 4
51+
CONST GJ_IMGADJ_DITHER_JARVIS_JUDICE_NINKE = 5
52+
CONST GJ_IMGADJ_DITHER_STUCKI = 6
53+
CONST GJ_IMGADJ_DITHER_BURKES = 7
54+
CONST GJ_IMGADJ_DITHER_SIERRA = 8
55+
CONST GJ_IMGADJ_DITHER_SIERRA_LITE = 9
56+
CONST GJ_IMGADJ_DITHER_ATKINSON = 10
57+
CONST GJ_IMGADJ_DITHER_FALSE_FLOYD_STEINBERG = 11
58+
CONST GJ_IMGADJ_DITHER_FAN = 12
59+
CONST GJ_IMGADJ_DITHER_STEVENSON_ARCE = 13
60+
CONST GJ_IMGADJ_DITHER_TWO_ROW_SIERRA = 14
61+
CONST GJ_IMGADJ_DITHER_SHIAU_FAN = 15
62+
CONST GJ_IMGADJ_DITHER_RANDOM = 16
63+
CONST GJ_IMGADJ_DITHER_BLUE_NOISE = 17
64+
CONST GJ_IMGADJ_DITHER_CLUSTERED_DOT = 18
65+
CONST GJ_IMGADJ_DITHER_HALFTONE = 19
66+
CONST GJ_IMGADJ_DITHER_SPIRAL = 20
67+
CONST GJ_IMGADJ_DITHER_INTERLEAVED_GRADIENT = 21
68+
4569
''
4670
' SHARED STATE FOR OPTIMIZATIONS
4771
'
4872

4973
DIM SHARED GJ_IMGADJ_noise(0 TO 65535) AS INTEGER
5074
DIM SHARED GJ_IMGADJ_noiseInit AS INTEGER
5175

76+
' Dithering cache for palette color lookups
77+
DIM SHARED GJ_IMGADJ_dither_cache_r(0 TO 255) AS INTEGER
78+
DIM SHARED GJ_IMGADJ_dither_cache_g(0 TO 255) AS INTEGER
79+
DIM SHARED GJ_IMGADJ_dither_cache_b(0 TO 255) AS INTEGER
80+
DIM SHARED GJ_IMGADJ_dither_cache_valid AS INTEGER
81+
5282
' --- Function Declarations ---
5383
DECLARE SUB GJ_IMGADJ_Init
5484
DECLARE SUB GJ_IMGADJ_RGBtoHSV (r AS INTEGER, g AS INTEGER, b AS INTEGER, hue AS SINGLE, sat AS SINGLE, value AS SINGLE)
@@ -79,3 +109,27 @@ DECLARE FUNCTION GJ_IMGADJ_ColorBalance (sourceImg AS LONG, redShift AS INTEGER,
79109
DECLARE FUNCTION GJ_IMGADJ_Colorize (sourceImg AS LONG, hue AS INTEGER, saturation AS SINGLE) AS LONG
80110
DECLARE FUNCTION GJ_IMGADJ_Pixelate (sourceImg AS LONG, pixelSize AS INTEGER) AS LONG
81111
DECLARE FUNCTION GJ_IMGADJ_PixelScaler (sourceImg AS LONG, scalerType AS INTEGER) AS LONG
112+
113+
' --- Dithering Functions ---
114+
DECLARE FUNCTION GJ_IMGADJ_DitherOrdered2x2 (sourceImg AS LONG, amount AS SINGLE) AS LONG
115+
DECLARE FUNCTION GJ_IMGADJ_DitherOrdered4x4 (sourceImg AS LONG, amount AS SINGLE) AS LONG
116+
DECLARE FUNCTION GJ_IMGADJ_DitherOrdered8x8 (sourceImg AS LONG, amount AS SINGLE) AS LONG
117+
DECLARE FUNCTION GJ_IMGADJ_DitherOrdered16x16 (sourceImg AS LONG, amount AS SINGLE) AS LONG
118+
DECLARE FUNCTION GJ_IMGADJ_DitherFloydSteinberg (sourceImg AS LONG, amount AS SINGLE) AS LONG
119+
DECLARE FUNCTION GJ_IMGADJ_DitherJarvisJudiceNinke (sourceImg AS LONG, amount AS SINGLE) AS LONG
120+
DECLARE FUNCTION GJ_IMGADJ_DitherStucki (sourceImg AS LONG, amount AS SINGLE) AS LONG
121+
DECLARE FUNCTION GJ_IMGADJ_DitherBurkes (sourceImg AS LONG, amount AS SINGLE) AS LONG
122+
DECLARE FUNCTION GJ_IMGADJ_DitherSierra (sourceImg AS LONG, amount AS SINGLE) AS LONG
123+
DECLARE FUNCTION GJ_IMGADJ_DitherSierraLite (sourceImg AS LONG, amount AS SINGLE) AS LONG
124+
DECLARE FUNCTION GJ_IMGADJ_DitherAtkinson (sourceImg AS LONG, amount AS SINGLE) AS LONG
125+
DECLARE FUNCTION GJ_IMGADJ_DitherFalseFloydSteinberg (sourceImg AS LONG, amount AS SINGLE) AS LONG
126+
DECLARE FUNCTION GJ_IMGADJ_DitherFan (sourceImg AS LONG, amount AS SINGLE) AS LONG
127+
DECLARE FUNCTION GJ_IMGADJ_DitherStevensonArce (sourceImg AS LONG, amount AS SINGLE) AS LONG
128+
DECLARE FUNCTION GJ_IMGADJ_DitherTwoRowSierra (sourceImg AS LONG, amount AS SINGLE) AS LONG
129+
DECLARE FUNCTION GJ_IMGADJ_DitherShiauFan (sourceImg AS LONG, amount AS SINGLE) AS LONG
130+
DECLARE FUNCTION GJ_IMGADJ_DitherRandom (sourceImg AS LONG, amount AS SINGLE) AS LONG
131+
DECLARE FUNCTION GJ_IMGADJ_DitherBlueNoise (sourceImg AS LONG, amount AS SINGLE) AS LONG
132+
DECLARE FUNCTION GJ_IMGADJ_DitherClusteredDot (sourceImg AS LONG, amount AS SINGLE) AS LONG
133+
DECLARE FUNCTION GJ_IMGADJ_DitherHalftone (sourceImg AS LONG, amount AS SINGLE) AS LONG
134+
DECLARE FUNCTION GJ_IMGADJ_DitherSpiral (sourceImg AS LONG, amount AS SINGLE) AS LONG
135+
DECLARE FUNCTION GJ_IMGADJ_DitherInterleavedGradientNoise (sourceImg AS LONG, amount AS SINGLE) AS LONG

0 commit comments

Comments
 (0)