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