blob: 5852704bd0d52ea29040a40909c9478f8749729a [file] [log] [blame]
cristy3ed852e2009-09-05 21:47:34 +00001<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE thresholds [
3<!ELEMENT thresholds (threshold)+>
4<!ELEMENT threshold (description , levels)>
5<!ELEMENT description (CDATA)>
6<!ELEMENT levels (CDATA)>
7<!ATTLIST threshold map ID #REQUIRED>
8<!ATTLIST levels width CDATA #REQUIRED>
9<!ATTLIST levels height CDATA #REQUIRED>
10<!ATTLIST levels divisor CDATA #REQUIRED>
11]>
12<!--
13 Threshold Maps for Ordered Posterized Dither
14
15 Each "<threshold>" element defines the map name, description, and an array
16 of "levels" used to provide the threshold map for ordered dithering and
17 digital halftoning.
18
19 The "alias" attribute provides a backward compatible name for this threshold
20 map (pre-dating IM v6.2.9-6), and are deprecated.
21
22 The description is a english description of what the threshold map achieves
23 and is only used for 'listing' the maps.
24
25 The map itself is a rectangular array of integers or threshold "levels"
26 of the given "width" and "height" declared within the enclosing <levels>
27 element. That is "width*height" integers or "levels" *must* be provided
28 within each map.
29
30 Each of the "levels" integer values (each value representing the threshold
31 intensity "level/divisor" at which that pixel is turned on. The "levels"
32 integers given can be any postive integers between "0" and the "divisor",
33 excluding those limits.
34
35 The "divisor" not only defines the upper limit and threshold divisor for each
36 "level" but also the total number of pseudo-levels the threshold mapping
37 creates and fills with a dither pattern. That is a ordered bitmap dither
38 of a pure greyscale gradient will use a maximum of "divisor" ordered bitmap
39 patterns, including the patterns with all the pixels 'on' and all the pixel
40 'off'. It may define less patterns than that, but the color channels will
41 be thresholded in units based on "divisor".
42
43 Alternatively for a multi-level posterization, ImageMagick inserts
44 "divisor-2" dither patterns (as defined by the threshold map) between each of
45 channel color level produced.
46
47 For example the map "o2x2" has a divisor of 5, which will define 3 bitmap
48 patterns plus the patterns with all pixels 'on' and 'off'. A greyscale
49 gradient will thus have 5 distinct areas.
50-->
51<thresholds>
52
53<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
54 Minimal Dither and Non-Dither Threshold Maps
55-->
56 <threshold map="threshold" alias="1x1">
cristy510c82a2010-11-06 18:51:35 +000057 <description>Threshold 1x1 (non-dither)</description>
cristy3ed852e2009-09-05 21:47:34 +000058 <levels width="1" height="1" divisor="2">
59 1
60 </levels>
61 </threshold>
62
63 <threshold map="checks" alias="2x1">
cristy510c82a2010-11-06 18:51:35 +000064 <description>Checkerboard 2x1 (dither)</description>
cristy3ed852e2009-09-05 21:47:34 +000065 <levels width="2" height="2" divisor="3">
66 1 2
67 2 1
68 </levels>
69 </threshold>
70
71<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
cristy510c82a2010-11-06 18:51:35 +000072 (dispersed) Ordered Dither Patterns
cristy3ed852e2009-09-05 21:47:34 +000073-->
74 <threshold map="o2x2" alias="2x2">
cristy510c82a2010-11-06 18:51:35 +000075 <description>Ordered 2x2 (dispersed)</description>
cristy3ed852e2009-09-05 21:47:34 +000076 <levels width="2" height="2" divisor="5">
77 1 3
78 4 2
79 </levels>
80 </threshold>
81
82 <threshold map="o3x3" alias="3x3">
cristy510c82a2010-11-06 18:51:35 +000083 <description>Ordered 3x3 (dispersed)</description>
cristy3ed852e2009-09-05 21:47:34 +000084 <levels width="3" height="3" divisor="10">
85 3 7 4
86 6 1 9
87 2 8 5
88 </levels>
89 </threshold>
90
91 <threshold map="o4x4" alias="4x4">
92 <!--
93 From "Dithering Algorithms"
94 http://www.efg2.com/Lab/Library/ImageProcessing/DHALF.TXT
95 -->
cristy510c82a2010-11-06 18:51:35 +000096 <description>Ordered 4x4 (dispersed)</description>
cristy3ed852e2009-09-05 21:47:34 +000097 <levels width="4" height="4" divisor="17">
98 1 9 3 11
99 13 5 15 7
100 4 12 2 10
101 16 8 14 6
102 </levels>
103 </threshold>
104
cristy3ed852e2009-09-05 21:47:34 +0000105 <threshold map="o8x8" alias="8x8">
106 <!-- Extracted from original 'OrderedDither()' Function -->
cristy510c82a2010-11-06 18:51:35 +0000107 <description>Ordered 8x8 (dispersed)</description>
cristy3ed852e2009-09-05 21:47:34 +0000108 <levels width="8" height="8" divisor="65">
109 1 49 13 61 4 52 16 64
110 33 17 45 29 36 20 48 32
111 9 57 5 53 12 60 8 56
112 41 25 37 21 44 28 40 24
113 3 51 15 63 2 50 14 62
114 35 19 47 31 34 18 46 30
115 11 59 7 55 10 58 6 54
116 43 27 39 23 42 26 38 22
117 </levels>
118 </threshold>
119
120<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
121 Halftones - Angled 45 degrees
122
123 Initially added to ImageMagick by Glenn Randers-Pehrson, IM v6.2.8-6,
anthonyb76eda02010-11-07 01:58:06 +0000124 modified to be more symmetrical with intensity by Anthony, IM v6.2.9-7
125
126 These patterns initially start as circles, but then form diamonds
127 pattern at the 50% threshold level, before forming negated circles,
128 as it approached the other threshold extereme.
cristy3ed852e2009-09-05 21:47:34 +0000129-->
130 <threshold map="h4x4a" alias="4x1">
131 <description>Halftone 4x4 (angled)</description>
132 <levels width="4" height="4" divisor="9">
133 4 2 7 5
134 3 1 8 6
135 7 5 4 2
136 8 6 3 1
137 </levels>
138 </threshold>
139
140 <threshold map="h6x6a" alias="6x1">
141 <description>Halftone 6x6 (angled)</description>
142 <levels width="6" height="6" divisor="19">
143 14 13 10 8 2 3
144 16 18 12 7 1 4
145 15 17 11 9 6 5
146 8 2 3 14 13 10
147 7 1 4 16 18 12
148 9 6 5 15 17 11
149 </levels>
150 </threshold>
151
152 <threshold map="h8x8a" alias="8x1">
153 <description>Halftone 8x8 (angled)</description>
154 <levels width="8" height="8" divisor="33">
155 13 7 8 14 17 21 22 18
156 6 1 3 9 28 31 29 23
157 5 2 4 10 27 32 30 24
158 16 12 11 15 20 26 25 19
159 17 21 22 18 13 7 8 14
160 28 31 29 23 6 1 3 9
161 27 32 30 24 5 2 4 10
162 20 26 25 19 16 12 11 15
163 </levels>
164 </threshold>
165
166<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
167 Halftones - Orthogonally Aligned, or Un-angled
168
169 Initially added by Anthony Thyssen, IM v6.2.9-5 using techniques from
170 "Dithering & Halftoning" by Gernot Haffmann
171 http://www.fho-emden.de/~hoffmann/hilb010101.pdf
anthonyb76eda02010-11-07 01:58:06 +0000172
173 These patterns initially start as circles, but then form square
174 pattern at the 50% threshold level, before forming negated circles,
175 as it approached the other threshold extereme.
cristy3ed852e2009-09-05 21:47:34 +0000176-->
177 <threshold map="h4x4o">
178 <description>Halftone 4x4 (orthogonal)</description>
179 <levels width="4" height="4" divisor="17">
180 7 13 11 4
181 12 16 14 8
182 10 15 6 2
183 5 9 3 1
184 </levels>
185 </threshold>
186
187 <threshold map="h6x6o">
188 <description>Halftone 6x6 (orthogonal)</description>
189 <levels width="6" height="6" divisor="37">
190 7 17 27 14 9 4
191 21 29 33 31 18 11
192 24 32 36 34 25 22
193 19 30 35 28 20 10
194 8 15 26 16 6 2
195 5 13 23 12 3 1
196 </levels>
197 </threshold>
198
199 <threshold map="h8x8o">
200 <description>Halftone 8x8 (orthogonal)</description>
201 <levels width="8" height="8" divisor="65">
202 7 21 33 43 36 19 9 4
203 16 27 51 55 49 29 14 11
204 31 47 57 61 59 45 35 23
205 41 53 60 64 62 52 40 38
206 37 44 58 63 56 46 30 22
207 15 28 48 54 50 26 17 10
208 8 18 34 42 32 20 6 2
209 5 13 25 39 24 12 3 1
210 </levels>
211 </threshold>
212
213 <threshold map="h16x16o">
214 <!--
215 Direct extract from "Dithering & Halftoning" by Gernot Haffmann.
216 This may need some fine tuning for symmetry of the halftone dots,
217 as it was a mathematically formulated pattern.
218 -->
219 <description>Halftone 16x16 (orthogonal)</description>
220 <levels width="16" height="16" divisor="257">
221 4 12 24 44 72 100 136 152 150 134 98 70 42 23 11 3
222 7 16 32 52 76 104 144 160 158 142 102 74 50 31 15 6
223 19 27 40 60 92 132 168 180 178 166 130 90 58 39 26 18
224 36 48 56 80 124 176 188 204 203 187 175 122 79 55 47 35
225 64 68 84 116 164 200 212 224 223 211 199 162 114 83 67 63
226 88 96 112 156 192 216 232 240 239 231 214 190 154 111 95 87
227 108 120 148 184 208 228 244 252 251 243 226 206 182 147 119 107
228 128 140 172 196 219 235 247 256 255 246 234 218 194 171 139 127
229 126 138 170 195 220 236 248 253 254 245 233 217 193 169 137 125
230 106 118 146 183 207 227 242 249 250 241 225 205 181 145 117 105
231 86 94 110 155 191 215 229 238 237 230 213 189 153 109 93 85
232 62 66 82 115 163 198 210 221 222 209 197 161 113 81 65 61
233 34 46 54 78 123 174 186 202 201 185 173 121 77 53 45 33
234 20 28 37 59 91 131 167 179 177 165 129 89 57 38 25 17
235 8 13 29 51 75 103 143 159 157 141 101 73 49 30 14 5
236 1 9 21 43 71 99 135 151 149 133 97 69 41 22 10 2
237 </levels>
238 </threshold>
239
240<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
anthonyb76eda02010-11-07 01:58:06 +0000241 Halftones - Orthogonally Expanding Circle Patterns
242
243 Added by Glenn Randers-Pehrson, 4 Nov 2010, ImageMagick 6.6.5-6
244
245 Rather than producing a diamond 50% threshold pattern, these
246 continue to generate larger (overlapping) circles. They are
247 more like a true halftone pattern formed by covering a surface
248 with either pure white or pure black circular dots.
249
250 WARNING: true halftone patterns only use true circles even in
251 areas of highly varying intensity. Threshold dither patterns
252 can generate distorted circles in such areas.
253-->
254
255 <threshold map="c5x5b" alias="5x5">
256 <description>Circles 5x5 (black)</description>
257 <levels width="5" height="5" divisor="26">
258 1 21 16 15 4
259 5 17 20 19 14
260 6 21 25 24 12
261 7 18 22 23 11
262 2 8 9 10 3
263 </levels>
264 </threshold>
265
266
267 <threshold map="c5x5w">
268 <description>Circles 5x5 (white)</description>
269 <levels width="5" height="5" divisor="26">
270 25 21 10 11 22
271 20 9 6 7 12
272 19 5 1 2 13
273 18 8 4 3 14
274 24 17 16 15 23
275 </levels>
276 </threshold>
277
278 <threshold map="c6x6b" alias="6x6">
279 <description>Circles 6x6 (black)</description>
280 <levels width="6" height="6" divisor="37">
281 1 5 14 13 12 4
282 6 22 28 27 21 11
283 15 29 35 34 26 20
284 16 30 36 33 25 19
285 7 23 31 32 24 10
286 2 8 17 18 9 3
287 </levels>
288 </threshold>
289
290 <threshold map="c6x6w">
291 <description>Circles 6x6 (white)</description>
292 <levels width="6" height="6" divisor="37">
293 36 32 23 24 25 33
294 31 15 9 10 16 26
295 22 8 2 3 11 17
296 21 7 1 4 12 18
297 30 14 6 5 13 27
298 35 29 20 19 28 34
299 </levels>
300 </threshold>
301
302 <threshold map="c7x7b" alias="7x7">
303 <description>Circles 7x7 (black)</description>
304 <levels width="7" height="7" divisor="50">
305 2 7 17 26 15 6 1
306 8 16 33 39 32 13 5
307 18 34 44 48 43 31 14
308 27 40 45 49 47 38 25
309 20 35 41 46 42 30 24
310 9 19 36 37 29 22 12
311 3 10 21 28 23 11 4
312 </levels>
313 </threshold>
314
315
316 <threshold map="c7x7w">
317 <description>Circles 7x7 (white)</description>
318 <levels width="7" height="7" divisor="50">
319 49 42 32 18 19 33 48
320 41 31 17 10 11 20 34
321 40 30 9 2 3 12 21
322 39 29 8 1 4 5 22
323 43 28 16 7 6 13 23
324 44 38 27 15 14 24 35
325 46 45 37 26 25 36 47
326 </levels>
327 </threshold>
328
329
330<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
cristy3ed852e2009-09-05 21:47:34 +0000331 Special Purpose Dithers
332-->
333
334</thresholds>