43#include "magick/studio.h"
44#include "magick/blob.h"
45#include "magick/cache-view.h"
46#include "magick/cache.h"
47#include "magick/color.h"
48#include "magick/color-private.h"
49#include "magick/colorspace-private.h"
50#include "magick/client.h"
51#include "magick/configure.h"
52#include "magick/exception.h"
53#include "magick/exception-private.h"
54#include "magick/gem.h"
55#include "magick/geometry.h"
56#include "magick/image-private.h"
57#include "magick/memory_.h"
58#include "magick/monitor.h"
59#include "magick/monitor-private.h"
60#include "magick/option.h"
61#include "magick/pixel-private.h"
62#include "magick/quantize.h"
63#include "magick/quantum.h"
64#include "magick/semaphore.h"
65#include "magick/string_.h"
66#include "magick/string-private.h"
67#include "magick/token.h"
68#include "magick/utility.h"
69#include "magick/xml-tree.h"
70#include "magick/xml-tree-private.h"
75#define ColorFilename "colors.xml"
103 {
"none", 0, 0, 0, 0, SVGCompliance | XPMCompliance },
104 {
"black", 0, 0, 0, 1, SVGCompliance | X11Compliance | XPMCompliance },
105 {
"red", 255, 0, 0, 1, SVGCompliance | X11Compliance | XPMCompliance },
106 {
"magenta", 255, 0, 255, 1, SVGCompliance | X11Compliance | XPMCompliance },
107 {
"green", 0, 128, 0, 1, SVGCompliance },
108 {
"cyan", 0, 255, 255, 1, SVGCompliance | X11Compliance | XPMCompliance },
109 {
"blue", 0, 0, 255, 1, SVGCompliance | X11Compliance | XPMCompliance },
110 {
"yellow", 255, 255, 0, 1, SVGCompliance | X11Compliance | XPMCompliance },
111 {
"white", 255, 255, 255, 1, SVGCompliance | X11Compliance | XPMCompliance },
112 {
"AliceBlue", 240, 248, 255, 1, SVGCompliance | X11Compliance | XPMCompliance },
113 {
"AntiqueWhite", 250, 235, 215, 1, SVGCompliance | X11Compliance | XPMCompliance },
114 {
"AntiqueWhite1", 255, 239, 219, 1, X11Compliance },
115 {
"AntiqueWhite2", 238, 223, 204, 1, X11Compliance },
116 {
"AntiqueWhite3", 205, 192, 176, 1, X11Compliance },
117 {
"AntiqueWhite4", 139, 131, 120, 1, X11Compliance },
118 {
"aqua", 0, 255, 255, 1, SVGCompliance },
119 {
"aquamarine", 127, 255, 212, 1, SVGCompliance | X11Compliance | XPMCompliance },
120 {
"aquamarine1", 127, 255, 212, 1, X11Compliance },
121 {
"aquamarine2", 118, 238, 198, 1, X11Compliance },
122 {
"aquamarine3", 102, 205, 170, 1, X11Compliance },
123 {
"aquamarine4", 69, 139, 116, 1, X11Compliance },
124 {
"azure", 240, 255, 255, 1, SVGCompliance | X11Compliance | XPMCompliance },
125 {
"azure1", 240, 255, 255, 1, X11Compliance },
126 {
"azure2", 224, 238, 238, 1, X11Compliance },
127 {
"azure3", 193, 205, 205, 1, X11Compliance },
128 {
"azure4", 131, 139, 139, 1, X11Compliance },
129 {
"beige", 245, 245, 220, 1, SVGCompliance | X11Compliance | XPMCompliance },
130 {
"bisque", 255, 228, 196, 1, SVGCompliance | X11Compliance | XPMCompliance },
131 {
"bisque1", 255, 228, 196, 1, X11Compliance },
132 {
"bisque2", 238, 213, 183, 1, X11Compliance },
133 {
"bisque3", 205, 183, 158, 1, X11Compliance },
134 {
"bisque4", 139, 125, 107, 1, X11Compliance },
135 {
"BlanchedAlmond", 255, 235, 205, 1, SVGCompliance | X11Compliance | XPMCompliance },
136 {
"blue1", 0, 0, 255, 1, X11Compliance },
137 {
"blue2", 0, 0, 238, 1, X11Compliance },
138 {
"blue3", 0, 0, 205, 1, X11Compliance },
139 {
"blue4", 0, 0, 139, 1, X11Compliance },
140 {
"BlueViolet", 138, 43, 226, 1, SVGCompliance | X11Compliance | XPMCompliance },
141 {
"brown", 165, 42, 42, 1, SVGCompliance | X11Compliance | XPMCompliance },
142 {
"brown1", 255, 64, 64, 1, X11Compliance },
143 {
"brown2", 238, 59, 59, 1, X11Compliance },
144 {
"brown3", 205, 51, 51, 1, X11Compliance },
145 {
"brown4", 139, 35, 35, 1, X11Compliance },
146 {
"burlywood", 222, 184, 135, 1, SVGCompliance | X11Compliance | XPMCompliance },
147 {
"burlywood1", 255, 211, 155, 1, X11Compliance },
148 {
"burlywood2", 238, 197, 145, 1, X11Compliance },
149 {
"burlywood3", 205, 170, 125, 1, X11Compliance },
150 {
"burlywood4", 139, 115, 85, 1, X11Compliance },
151 {
"CadetBlue", 95, 158, 160, 1, SVGCompliance | X11Compliance | XPMCompliance },
152 {
"CadetBlue1", 152, 245, 255, 1, X11Compliance },
153 {
"CadetBlue2", 142, 229, 238, 1, X11Compliance },
154 {
"CadetBlue3", 122, 197, 205, 1, X11Compliance },
155 {
"CadetBlue4", 83, 134, 139, 1, X11Compliance },
156 {
"chartreuse", 127, 255, 0, 1, SVGCompliance | X11Compliance | XPMCompliance },
157 {
"chartreuse1", 127, 255, 0, 1, X11Compliance },
158 {
"chartreuse2", 118, 238, 0, 1, X11Compliance },
159 {
"chartreuse3", 102, 205, 0, 1, X11Compliance },
160 {
"chartreuse4", 69, 139, 0, 1, X11Compliance },
161 {
"chocolate", 210, 105, 30, 1, SVGCompliance | X11Compliance | XPMCompliance },
162 {
"chocolate1", 255, 127, 36, 1, X11Compliance },
163 {
"chocolate2", 238, 118, 33, 1, X11Compliance },
164 {
"chocolate3", 205, 102, 29, 1, X11Compliance },
165 {
"chocolate4", 139, 69, 19, 1, X11Compliance },
166 {
"coral", 255, 127, 80, 1, SVGCompliance | X11Compliance | XPMCompliance },
167 {
"coral1", 255, 114, 86, 1, X11Compliance },
168 {
"coral2", 238, 106, 80, 1, X11Compliance },
169 {
"coral3", 205, 91, 69, 1, X11Compliance },
170 {
"coral4", 139, 62, 47, 1, X11Compliance },
171 {
"CornflowerBlue", 100, 149, 237, 1, SVGCompliance | X11Compliance | XPMCompliance },
172 {
"cornsilk", 255, 248, 220, 1, SVGCompliance | X11Compliance | XPMCompliance },
173 {
"cornsilk1", 255, 248, 220, 1, X11Compliance },
174 {
"cornsilk2", 238, 232, 205, 1, X11Compliance },
175 {
"cornsilk3", 205, 200, 177, 1, X11Compliance },
176 {
"cornsilk4", 139, 136, 120, 1, X11Compliance },
177 {
"crimson", 220, 20, 60, 1, SVGCompliance },
178 {
"cyan1", 0, 255, 255, 1, X11Compliance },
179 {
"cyan2", 0, 238, 238, 1, X11Compliance },
180 {
"cyan3", 0, 205, 205, 1, X11Compliance },
181 {
"cyan4", 0, 139, 139, 1, X11Compliance },
182 {
"DarkBlue", 0, 0, 139, 1, SVGCompliance | X11Compliance },
183 {
"DarkCyan", 0, 139, 139, 1, SVGCompliance | X11Compliance },
184 {
"DarkGoldenrod", 184, 134, 11, 1, SVGCompliance | X11Compliance | XPMCompliance },
185 {
"DarkGoldenrod1", 255, 185, 15, 1, X11Compliance },
186 {
"DarkGoldenrod2", 238, 173, 14, 1, X11Compliance },
187 {
"DarkGoldenrod3", 205, 149, 12, 1, X11Compliance },
188 {
"DarkGoldenrod4", 139, 101, 8, 1, X11Compliance },
189 {
"DarkGray", 169, 169, 169, 1, SVGCompliance | X11Compliance },
190 {
"DarkGreen", 0, 100, 0, 1, SVGCompliance | X11Compliance | XPMCompliance },
191 {
"DarkGrey", 169, 169, 169, 1, SVGCompliance | X11Compliance },
192 {
"DarkKhaki", 189, 183, 107, 1, SVGCompliance | X11Compliance | XPMCompliance },
193 {
"DarkMagenta", 139, 0, 139, 1, SVGCompliance | X11Compliance },
194 {
"DarkOliveGreen", 85, 107, 47, 1, SVGCompliance | X11Compliance | XPMCompliance },
195 {
"DarkOliveGreen1", 202, 255, 112, 1, X11Compliance },
196 {
"DarkOliveGreen2", 188, 238, 104, 1, X11Compliance },
197 {
"DarkOliveGreen3", 162, 205, 90, 1, X11Compliance },
198 {
"DarkOliveGreen4", 110, 139, 61, 1, X11Compliance },
199 {
"DarkOrange", 255, 140, 0, 1, SVGCompliance | X11Compliance | XPMCompliance },
200 {
"DarkOrange1", 255, 127, 0, 1, X11Compliance },
201 {
"DarkOrange2", 238, 118, 0, 1, X11Compliance },
202 {
"DarkOrange3", 205, 102, 0, 1, X11Compliance },
203 {
"DarkOrange4", 139, 69, 0, 1, X11Compliance },
204 {
"DarkOrchid", 153, 50, 204, 1, SVGCompliance | X11Compliance | XPMCompliance },
205 {
"DarkOrchid1", 191, 62, 255, 1, X11Compliance },
206 {
"DarkOrchid2", 178, 58, 238, 1, X11Compliance },
207 {
"DarkOrchid3", 154, 50, 205, 1, X11Compliance },
208 {
"DarkOrchid4", 104, 34, 139, 1, X11Compliance },
209 {
"DarkRed", 139, 0, 0, 1, SVGCompliance | X11Compliance },
210 {
"DarkSalmon", 233, 150, 122, 1, SVGCompliance | X11Compliance | XPMCompliance },
211 {
"DarkSeaGreen", 143, 188, 143, 1, SVGCompliance | X11Compliance | XPMCompliance },
212 {
"DarkSeaGreen1", 193, 255, 193, 1, X11Compliance },
213 {
"DarkSeaGreen2", 180, 238, 180, 1, X11Compliance },
214 {
"DarkSeaGreen3", 155, 205, 155, 1, X11Compliance },
215 {
"DarkSeaGreen4", 105, 139, 105, 1, X11Compliance },
216 {
"DarkSlateBlue", 72, 61, 139, 1, SVGCompliance | X11Compliance | XPMCompliance },
217 {
"DarkSlateGray", 47, 79, 79, 1, SVGCompliance | X11Compliance | XPMCompliance },
218 {
"DarkSlateGray1", 151, 255, 255, 1, X11Compliance },
219 {
"DarkSlateGray2", 141, 238, 238, 1, X11Compliance },
220 {
"DarkSlateGray3", 121, 205, 205, 1, X11Compliance },
221 {
"DarkSlateGray4", 82, 139, 139, 1, X11Compliance },
222 {
"DarkSlateGrey", 47, 79, 79, 1, SVGCompliance | X11Compliance },
223 {
"DarkTurquoise", 0, 206, 209, 1, SVGCompliance | X11Compliance | XPMCompliance },
224 {
"DarkViolet", 148, 0, 211, 1, SVGCompliance | X11Compliance | XPMCompliance },
225 {
"DeepPink", 255, 20, 147, 1, SVGCompliance | X11Compliance | XPMCompliance },
226 {
"DeepPink1", 255, 20, 147, 1, X11Compliance },
227 {
"DeepPink2", 238, 18, 137, 1, X11Compliance },
228 {
"DeepPink3", 205, 16, 118, 1, X11Compliance },
229 {
"DeepPink4", 139, 10, 80, 1, X11Compliance },
230 {
"DeepSkyBlue", 0, 191, 255, 1, SVGCompliance | X11Compliance | XPMCompliance },
231 {
"DeepSkyBlue1", 0, 191, 255, 1, X11Compliance },
232 {
"DeepSkyBlue2", 0, 178, 238, 1, X11Compliance },
233 {
"DeepSkyBlue3", 0, 154, 205, 1, X11Compliance },
234 {
"DeepSkyBlue4", 0, 104, 139, 1, X11Compliance },
235 {
"DimGray", 105, 105, 105, 1, SVGCompliance | X11Compliance | XPMCompliance },
236 {
"DimGrey", 105, 105, 105, 1, SVGCompliance | X11Compliance },
237 {
"DodgerBlue", 30, 144, 255, 1, SVGCompliance | X11Compliance | XPMCompliance },
238 {
"DodgerBlue1", 30, 144, 255, 1, X11Compliance },
239 {
"DodgerBlue2", 28, 134, 238, 1, X11Compliance },
240 {
"DodgerBlue3", 24, 116, 205, 1, X11Compliance },
241 {
"DodgerBlue4", 16, 78, 139, 1, X11Compliance },
242 {
"firebrick", 178, 34, 34, 1, SVGCompliance | X11Compliance | XPMCompliance },
243 {
"firebrick1", 255, 48, 48, 1, X11Compliance },
244 {
"firebrick2", 238, 44, 44, 1, X11Compliance },
245 {
"firebrick3", 205, 38, 38, 1, X11Compliance },
246 {
"firebrick4", 139, 26, 26, 1, X11Compliance },
247 {
"FloralWhite", 255, 250, 240, 1, SVGCompliance | X11Compliance | XPMCompliance },
248 {
"ForestGreen", 34, 139, 34, 1, SVGCompliance | X11Compliance | XPMCompliance },
249 {
"fractal", 128, 128, 128, 1, SVGCompliance },
250 {
"freeze", 0, 0, 0, 0, SVGCompliance },
251 {
"fuchsia", 255, 0, 255, 1, SVGCompliance },
252 {
"gainsboro", 220, 220, 220, 1, SVGCompliance | X11Compliance | XPMCompliance },
253 {
"GhostWhite", 248, 248, 255, 1, SVGCompliance | X11Compliance | XPMCompliance },
254 {
"gold", 255, 215, 0, 1, SVGCompliance | X11Compliance | XPMCompliance },
255 {
"gold1", 255, 215, 0, 1, X11Compliance },
256 {
"gold2", 238, 201, 0, 1, X11Compliance },
257 {
"gold3", 205, 173, 0, 1, X11Compliance },
258 {
"gold4", 139, 117, 0, 1, X11Compliance },
259 {
"goldenrod", 218, 165, 32, 1, SVGCompliance | X11Compliance | XPMCompliance },
260 {
"goldenrod1", 255, 193, 37, 1, X11Compliance },
261 {
"goldenrod2", 238, 180, 34, 1, X11Compliance },
262 {
"goldenrod3", 205, 155, 29, 1, X11Compliance },
263 {
"goldenrod4", 139, 105, 20, 1, X11Compliance },
264 {
"gray", 126, 126, 126, 1, SVGCompliance },
265 {
"gray", 190, 190, 190, 1, X11Compliance | XPMCompliance },
266 {
"gray0", 0, 0, 0, 1, X11Compliance | XPMCompliance },
267 {
"gray1", 3, 3, 3, 1, X11Compliance | XPMCompliance },
268 {
"gray10", 26, 26, 26, 1, X11Compliance | XPMCompliance },
269 {
"gray100", 255, 255, 255, 1, X11Compliance | XPMCompliance },
270 {
"gray100", 255, 255, 255, 1, X11Compliance | XPMCompliance },
271 {
"gray11", 28, 28, 28, 1, X11Compliance | XPMCompliance },
272 {
"gray12", 31, 31, 31, 1, X11Compliance | XPMCompliance },
273 {
"gray13", 33, 33, 33, 1, X11Compliance | XPMCompliance },
274 {
"gray14", 36, 36, 36, 1, X11Compliance | XPMCompliance },
275 {
"gray15", 38, 38, 38, 1, X11Compliance | XPMCompliance },
276 {
"gray16", 41, 41, 41, 1, X11Compliance | XPMCompliance },
277 {
"gray17", 43, 43, 43, 1, X11Compliance | XPMCompliance },
278 {
"gray18", 46, 46, 46, 1, X11Compliance | XPMCompliance },
279 {
"gray19", 48, 48, 48, 1, X11Compliance | XPMCompliance },
280 {
"gray2", 5, 5, 5, 1, X11Compliance | XPMCompliance },
281 {
"gray20", 51, 51, 51, 1, X11Compliance | XPMCompliance },
282 {
"gray21", 54, 54, 54, 1, X11Compliance | XPMCompliance },
283 {
"gray22", 56, 56, 56, 1, X11Compliance | XPMCompliance },
284 {
"gray23", 59, 59, 59, 1, X11Compliance | XPMCompliance },
285 {
"gray24", 61, 61, 61, 1, X11Compliance | XPMCompliance },
286 {
"gray25", 64, 64, 64, 1, X11Compliance | XPMCompliance },
287 {
"gray26", 66, 66, 66, 1, X11Compliance | XPMCompliance },
288 {
"gray27", 69, 69, 69, 1, X11Compliance | XPMCompliance },
289 {
"gray28", 71, 71, 71, 1, X11Compliance | XPMCompliance },
290 {
"gray29", 74, 74, 74, 1, X11Compliance | XPMCompliance },
291 {
"gray3", 8, 8, 8, 1, X11Compliance | XPMCompliance },
292 {
"gray30", 77, 77, 77, 1, X11Compliance | XPMCompliance },
293 {
"gray31", 79, 79, 79, 1, X11Compliance | XPMCompliance },
294 {
"gray32", 82, 82, 82, 1, X11Compliance | XPMCompliance },
295 {
"gray33", 84, 84, 84, 1, X11Compliance | XPMCompliance },
296 {
"gray34", 87, 87, 87, 1, X11Compliance | XPMCompliance },
297 {
"gray35", 89, 89, 89, 1, X11Compliance | XPMCompliance },
298 {
"gray36", 92, 92, 92, 1, X11Compliance | XPMCompliance },
299 {
"gray37", 94, 94, 94, 1, X11Compliance | XPMCompliance },
300 {
"gray38", 97, 97, 97, 1, X11Compliance | XPMCompliance },
301 {
"gray39", 99, 99, 99, 1, X11Compliance | XPMCompliance },
302 {
"gray4", 10, 10, 10, 1, X11Compliance | XPMCompliance },
303 {
"gray40", 102, 102, 102, 1, X11Compliance | XPMCompliance },
304 {
"gray41", 105, 105, 105, 1, X11Compliance | XPMCompliance },
305 {
"gray42", 107, 107, 107, 1, X11Compliance | XPMCompliance },
306 {
"gray43", 110, 110, 110, 1, X11Compliance | XPMCompliance },
307 {
"gray44", 112, 112, 112, 1, X11Compliance | XPMCompliance },
308 {
"gray45", 115, 115, 115, 1, X11Compliance | XPMCompliance },
309 {
"gray46", 117, 117, 117, 1, X11Compliance | XPMCompliance },
310 {
"gray47", 120, 120, 120, 1, X11Compliance | XPMCompliance },
311 {
"gray48", 122, 122, 122, 1, X11Compliance | XPMCompliance },
312 {
"gray49", 125, 125, 125, 1, X11Compliance | XPMCompliance },
313 {
"gray5", 13, 13, 13, 1, X11Compliance | XPMCompliance },
314 {
"gray50", 127, 127, 127, 1, X11Compliance | XPMCompliance },
315 {
"gray51", 130, 130, 130, 1, X11Compliance | XPMCompliance },
316 {
"gray52", 133, 133, 133, 1, X11Compliance | XPMCompliance },
317 {
"gray53", 135, 135, 135, 1, X11Compliance | XPMCompliance },
318 {
"gray54", 138, 138, 138, 1, X11Compliance | XPMCompliance },
319 {
"gray55", 140, 140, 140, 1, X11Compliance | XPMCompliance },
320 {
"gray56", 143, 143, 143, 1, X11Compliance | XPMCompliance },
321 {
"gray57", 145, 145, 145, 1, X11Compliance | XPMCompliance },
322 {
"gray58", 148, 148, 148, 1, X11Compliance | XPMCompliance },
323 {
"gray59", 150, 150, 150, 1, X11Compliance | XPMCompliance },
324 {
"gray6", 15, 15, 15, 1, X11Compliance | XPMCompliance },
325 {
"gray60", 153, 153, 153, 1, X11Compliance | XPMCompliance },
326 {
"gray61", 156, 156, 156, 1, X11Compliance | XPMCompliance },
327 {
"gray62", 158, 158, 158, 1, X11Compliance | XPMCompliance },
328 {
"gray63", 161, 161, 161, 1, X11Compliance | XPMCompliance },
329 {
"gray64", 163, 163, 163, 1, X11Compliance | XPMCompliance },
330 {
"gray65", 166, 166, 166, 1, X11Compliance | XPMCompliance },
331 {
"gray66", 168, 168, 168, 1, X11Compliance | XPMCompliance },
332 {
"gray67", 171, 171, 171, 1, X11Compliance | XPMCompliance },
333 {
"gray68", 173, 173, 173, 1, X11Compliance | XPMCompliance },
334 {
"gray69", 176, 176, 176, 1, X11Compliance | XPMCompliance },
335 {
"gray7", 18, 18, 18, 1, X11Compliance | XPMCompliance },
336 {
"gray70", 179, 179, 179, 1, X11Compliance | XPMCompliance },
337 {
"gray71", 181, 181, 181, 1, X11Compliance | XPMCompliance },
338 {
"gray72", 184, 184, 184, 1, X11Compliance | XPMCompliance },
339 {
"gray73", 186, 186, 186, 1, X11Compliance | XPMCompliance },
340 {
"gray74", 189, 189, 189, 1, X11Compliance | XPMCompliance },
341 {
"gray75", 191, 191, 191, 1, X11Compliance | XPMCompliance },
342 {
"gray76", 194, 194, 194, 1, X11Compliance | XPMCompliance },
343 {
"gray77", 196, 196, 196, 1, X11Compliance | XPMCompliance },
344 {
"gray78", 199, 199, 199, 1, X11Compliance | XPMCompliance },
345 {
"gray79", 201, 201, 201, 1, X11Compliance | XPMCompliance },
346 {
"gray8", 20, 20, 20, 1, X11Compliance | XPMCompliance },
347 {
"gray80", 204, 204, 204, 1, X11Compliance | XPMCompliance },
348 {
"gray81", 207, 207, 207, 1, X11Compliance | XPMCompliance },
349 {
"gray82", 209, 209, 209, 1, X11Compliance | XPMCompliance },
350 {
"gray83", 212, 212, 212, 1, X11Compliance | XPMCompliance },
351 {
"gray84", 214, 214, 214, 1, X11Compliance | XPMCompliance },
352 {
"gray85", 217, 217, 217, 1, X11Compliance | XPMCompliance },
353 {
"gray86", 219, 219, 219, 1, X11Compliance | XPMCompliance },
354 {
"gray87", 222, 222, 222, 1, X11Compliance | XPMCompliance },
355 {
"gray88", 224, 224, 224, 1, X11Compliance | XPMCompliance },
356 {
"gray89", 227, 227, 227, 1, X11Compliance | XPMCompliance },
357 {
"gray9", 23, 23, 23, 1, X11Compliance | XPMCompliance },
358 {
"gray90", 229, 229, 229, 1, X11Compliance | XPMCompliance },
359 {
"gray91", 232, 232, 232, 1, X11Compliance | XPMCompliance },
360 {
"gray92", 235, 235, 235, 1, X11Compliance | XPMCompliance },
361 {
"gray93", 237, 237, 237, 1, X11Compliance | XPMCompliance },
362 {
"gray94", 240, 240, 240, 1, X11Compliance | XPMCompliance },
363 {
"gray95", 242, 242, 242, 1, X11Compliance | XPMCompliance },
364 {
"gray96", 245, 245, 245, 1, X11Compliance | XPMCompliance },
365 {
"gray97", 247, 247, 247, 1, X11Compliance | XPMCompliance },
366 {
"gray98", 250, 250, 250, 1, X11Compliance | XPMCompliance },
367 {
"gray99", 252, 252, 252, 1, X11Compliance | XPMCompliance },
368 {
"green", 0, 255, 0, 1, X11Compliance | XPMCompliance },
369 {
"green1", 0, 255, 0, 1, X11Compliance },
370 {
"green2", 0, 238, 0, 1, X11Compliance },
371 {
"green3", 0, 205, 0, 1, X11Compliance },
372 {
"green4", 0, 139, 0, 1, X11Compliance },
373 {
"GreenYellow", 173, 255, 47, 1, X11Compliance | XPMCompliance },
374 {
"grey", 190, 190, 190, 1, SVGCompliance | X11Compliance },
375 {
"grey0", 0, 0, 0, 1, SVGCompliance | X11Compliance },
376 {
"grey1", 3, 3, 3, 1, SVGCompliance | X11Compliance },
377 {
"grey10", 26, 26, 26, 1, SVGCompliance | X11Compliance },
378 {
"grey100", 255, 255, 255, 1, SVGCompliance | X11Compliance },
379 {
"grey11", 28, 28, 28, 1, SVGCompliance | X11Compliance },
380 {
"grey12", 31, 31, 31, 1, SVGCompliance | X11Compliance },
381 {
"grey13", 33, 33, 33, 1, SVGCompliance | X11Compliance },
382 {
"grey14", 36, 36, 36, 1, SVGCompliance | X11Compliance },
383 {
"grey15", 38, 38, 38, 1, SVGCompliance | X11Compliance },
384 {
"grey16", 41, 41, 41, 1, SVGCompliance | X11Compliance },
385 {
"grey17", 43, 43, 43, 1, SVGCompliance | X11Compliance },
386 {
"grey18", 46, 46, 46, 1, SVGCompliance | X11Compliance },
387 {
"grey19", 48, 48, 48, 1, SVGCompliance | X11Compliance },
388 {
"grey2", 5, 5, 5, 1, SVGCompliance | X11Compliance },
389 {
"grey20", 51, 51, 51, 1, SVGCompliance | X11Compliance },
390 {
"grey21", 54, 54, 54, 1, SVGCompliance | X11Compliance },
391 {
"grey22", 56, 56, 56, 1, SVGCompliance | X11Compliance },
392 {
"grey23", 59, 59, 59, 1, SVGCompliance | X11Compliance },
393 {
"grey24", 61, 61, 61, 1, SVGCompliance | X11Compliance },
394 {
"grey25", 64, 64, 64, 1, SVGCompliance | X11Compliance },
395 {
"grey26", 66, 66, 66, 1, SVGCompliance | X11Compliance },
396 {
"grey27", 69, 69, 69, 1, SVGCompliance | X11Compliance },
397 {
"grey28", 71, 71, 71, 1, SVGCompliance | X11Compliance },
398 {
"grey29", 74, 74, 74, 1, SVGCompliance | X11Compliance },
399 {
"grey3", 8, 8, 8, 1, SVGCompliance | X11Compliance },
400 {
"grey30", 77, 77, 77, 1, SVGCompliance | X11Compliance },
401 {
"grey31", 79, 79, 79, 1, SVGCompliance | X11Compliance },
402 {
"grey32", 82, 82, 82, 1, SVGCompliance | X11Compliance },
403 {
"grey33", 84, 84, 84, 1, SVGCompliance | X11Compliance },
404 {
"grey34", 87, 87, 87, 1, SVGCompliance | X11Compliance },
405 {
"grey35", 89, 89, 89, 1, SVGCompliance | X11Compliance },
406 {
"grey36", 92, 92, 92, 1, SVGCompliance | X11Compliance },
407 {
"grey37", 94, 94, 94, 1, SVGCompliance | X11Compliance },
408 {
"grey38", 97, 97, 97, 1, SVGCompliance | X11Compliance },
409 {
"grey39", 99, 99, 99, 1, SVGCompliance | X11Compliance },
410 {
"grey4", 10, 10, 10, 1, SVGCompliance | X11Compliance },
411 {
"grey40", 102, 102, 102, 1, SVGCompliance | X11Compliance },
412 {
"grey41", 105, 105, 105, 1, SVGCompliance | X11Compliance },
413 {
"grey42", 107, 107, 107, 1, SVGCompliance | X11Compliance },
414 {
"grey43", 110, 110, 110, 1, SVGCompliance | X11Compliance },
415 {
"grey44", 112, 112, 112, 1, SVGCompliance | X11Compliance },
416 {
"grey45", 115, 115, 115, 1, SVGCompliance | X11Compliance },
417 {
"grey46", 117, 117, 117, 1, SVGCompliance | X11Compliance },
418 {
"grey47", 120, 120, 120, 1, SVGCompliance | X11Compliance },
419 {
"grey48", 122, 122, 122, 1, SVGCompliance | X11Compliance },
420 {
"grey49", 125, 125, 125, 1, SVGCompliance | X11Compliance },
421 {
"grey5", 13, 13, 13, 1, SVGCompliance | X11Compliance },
422 {
"grey50", 127, 127, 127, 1, SVGCompliance | X11Compliance },
423 {
"grey51", 130, 130, 130, 1, SVGCompliance | X11Compliance },
424 {
"grey52", 133, 133, 133, 1, SVGCompliance | X11Compliance },
425 {
"grey53", 135, 135, 135, 1, SVGCompliance | X11Compliance },
426 {
"grey54", 138, 138, 138, 1, SVGCompliance | X11Compliance },
427 {
"grey55", 140, 140, 140, 1, SVGCompliance | X11Compliance },
428 {
"grey56", 143, 143, 143, 1, SVGCompliance | X11Compliance },
429 {
"grey57", 145, 145, 145, 1, SVGCompliance | X11Compliance },
430 {
"grey58", 148, 148, 148, 1, SVGCompliance | X11Compliance },
431 {
"grey59", 150, 150, 150, 1, SVGCompliance | X11Compliance },
432 {
"grey6", 15, 15, 15, 1, SVGCompliance | X11Compliance },
433 {
"grey60", 153, 153, 153, 1, SVGCompliance | X11Compliance },
434 {
"grey61", 156, 156, 156, 1, SVGCompliance | X11Compliance },
435 {
"grey62", 158, 158, 158, 1, SVGCompliance | X11Compliance },
436 {
"grey63", 161, 161, 161, 1, SVGCompliance | X11Compliance },
437 {
"grey64", 163, 163, 163, 1, SVGCompliance | X11Compliance },
438 {
"grey65", 166, 166, 166, 1, SVGCompliance | X11Compliance },
439 {
"grey66", 168, 168, 168, 1, SVGCompliance | X11Compliance },
440 {
"grey67", 171, 171, 171, 1, SVGCompliance | X11Compliance },
441 {
"grey68", 173, 173, 173, 1, SVGCompliance | X11Compliance },
442 {
"grey69", 176, 176, 176, 1, SVGCompliance | X11Compliance },
443 {
"grey7", 18, 18, 18, 1, SVGCompliance | X11Compliance },
444 {
"grey70", 179, 179, 179, 1, SVGCompliance | X11Compliance },
445 {
"grey71", 181, 181, 181, 1, SVGCompliance | X11Compliance },
446 {
"grey72", 184, 184, 184, 1, SVGCompliance | X11Compliance },
447 {
"grey73", 186, 186, 186, 1, SVGCompliance | X11Compliance },
448 {
"grey74", 189, 189, 189, 1, SVGCompliance | X11Compliance },
449 {
"grey75", 191, 191, 191, 1, SVGCompliance | X11Compliance },
450 {
"grey76", 194, 194, 194, 1, SVGCompliance | X11Compliance },
451 {
"grey77", 196, 196, 196, 1, SVGCompliance | X11Compliance },
452 {
"grey78", 199, 199, 199, 1, SVGCompliance | X11Compliance },
453 {
"grey79", 201, 201, 201, 1, SVGCompliance | X11Compliance },
454 {
"grey8", 20, 20, 20, 1, SVGCompliance | X11Compliance },
455 {
"grey80", 204, 204, 204, 1, SVGCompliance | X11Compliance },
456 {
"grey81", 207, 207, 207, 1, SVGCompliance | X11Compliance },
457 {
"grey82", 209, 209, 209, 1, SVGCompliance | X11Compliance },
458 {
"grey83", 212, 212, 212, 1, SVGCompliance | X11Compliance },
459 {
"grey84", 214, 214, 214, 1, SVGCompliance | X11Compliance },
460 {
"grey85", 217, 217, 217, 1, SVGCompliance | X11Compliance },
461 {
"grey86", 219, 219, 219, 1, SVGCompliance | X11Compliance },
462 {
"grey87", 222, 222, 222, 1, SVGCompliance | X11Compliance },
463 {
"grey88", 224, 224, 224, 1, SVGCompliance | X11Compliance },
464 {
"grey89", 227, 227, 227, 1, SVGCompliance | X11Compliance },
465 {
"grey9", 23, 23, 23, 1, SVGCompliance | X11Compliance },
466 {
"grey90", 229, 229, 229, 1, SVGCompliance | X11Compliance },
467 {
"grey91", 232, 232, 232, 1, SVGCompliance | X11Compliance },
468 {
"grey92", 235, 235, 235, 1, SVGCompliance | X11Compliance },
469 {
"grey93", 237, 237, 237, 1, SVGCompliance | X11Compliance },
470 {
"grey94", 240, 240, 240, 1, SVGCompliance | X11Compliance },
471 {
"grey95", 242, 242, 242, 1, SVGCompliance | X11Compliance },
472 {
"grey96", 245, 245, 245, 1, SVGCompliance | X11Compliance },
473 {
"grey97", 247, 247, 247, 1, SVGCompliance | X11Compliance },
474 {
"grey98", 250, 250, 250, 1, SVGCompliance | X11Compliance },
475 {
"grey99", 252, 252, 252, 1, SVGCompliance | X11Compliance },
476 {
"honeydew", 240, 255, 240, 1, SVGCompliance | X11Compliance | XPMCompliance },
477 {
"honeydew1", 240, 255, 240, 1, X11Compliance },
478 {
"honeydew2", 224, 238, 224, 1, X11Compliance },
479 {
"honeydew3", 193, 205, 193, 1, X11Compliance },
480 {
"honeydew4", 131, 139, 131, 1, X11Compliance },
481 {
"HotPink", 255, 105, 180, 1, SVGCompliance | X11Compliance | XPMCompliance },
482 {
"HotPink1", 255, 110, 180, 1, X11Compliance },
483 {
"HotPink2", 238, 106, 167, 1, X11Compliance },
484 {
"HotPink3", 205, 96, 144, 1, X11Compliance },
485 {
"HotPink4", 139, 58, 98, 1, X11Compliance },
486 {
"IndianRed", 205, 92, 92, 1, SVGCompliance | X11Compliance | XPMCompliance },
487 {
"IndianRed1", 255, 106, 106, 1, X11Compliance },
488 {
"IndianRed2", 238, 99, 99, 1, X11Compliance },
489 {
"IndianRed3", 205, 85, 85, 1, X11Compliance },
490 {
"IndianRed4", 139, 58, 58, 1, X11Compliance },
491 {
"indigo", 75, 0, 130, 1, SVGCompliance },
492 {
"ivory", 255, 255, 240, 1, SVGCompliance | X11Compliance | XPMCompliance },
493 {
"ivory1", 255, 255, 240, 1, X11Compliance },
494 {
"ivory2", 238, 238, 224, 1, X11Compliance },
495 {
"ivory3", 205, 205, 193, 1, X11Compliance },
496 {
"ivory4", 139, 139, 131, 1, X11Compliance },
497 {
"khaki", 240, 230, 140, 1, SVGCompliance | X11Compliance | XPMCompliance },
498 {
"khaki1", 255, 246, 143, 1, X11Compliance },
499 {
"khaki2", 238, 230, 133, 1, X11Compliance },
500 {
"khaki3", 205, 198, 115, 1, X11Compliance },
501 {
"khaki4", 139, 134, 78, 1, X11Compliance },
502 {
"lavender", 230, 230, 250, 1, SVGCompliance | X11Compliance | XPMCompliance },
503 {
"LavenderBlush", 255, 240, 245, 1, SVGCompliance | X11Compliance | XPMCompliance },
504 {
"LavenderBlush1", 255, 240, 245, 1, X11Compliance },
505 {
"LavenderBlush2", 238, 224, 229, 1, X11Compliance },
506 {
"LavenderBlush3", 205, 193, 197, 1, X11Compliance },
507 {
"LavenderBlush4", 139, 131, 134, 1, X11Compliance },
508 {
"LawnGreen", 124, 252, 0, 1, SVGCompliance | X11Compliance | XPMCompliance },
509 {
"LemonChiffon", 255, 250, 205, 1, SVGCompliance | X11Compliance | XPMCompliance },
510 {
"LemonChiffon1", 255, 250, 205, 1, X11Compliance },
511 {
"LemonChiffon2", 238, 233, 191, 1, X11Compliance },
512 {
"LemonChiffon3", 205, 201, 165, 1, X11Compliance },
513 {
"LemonChiffon4", 139, 137, 112, 1, X11Compliance },
514 {
"LightBlue", 173, 216, 230, 1, SVGCompliance | X11Compliance | XPMCompliance },
515 {
"LightBlue1", 191, 239, 255, 1, X11Compliance },
516 {
"LightBlue2", 178, 223, 238, 1, X11Compliance },
517 {
"LightBlue3", 154, 192, 205, 1, X11Compliance },
518 {
"LightBlue4", 104, 131, 139, 1, X11Compliance },
519 {
"LightCoral", 240, 128, 128, 1, SVGCompliance | X11Compliance | XPMCompliance },
520 {
"LightCyan", 224, 255, 255, 1, SVGCompliance | X11Compliance | XPMCompliance },
521 {
"LightCyan1", 224, 255, 255, 1, X11Compliance },
522 {
"LightCyan2", 209, 238, 238, 1, X11Compliance },
523 {
"LightCyan3", 180, 205, 205, 1, X11Compliance },
524 {
"LightCyan4", 122, 139, 139, 1, X11Compliance },
525 {
"LightGoldenrod", 238, 221, 130, 1, X11Compliance | XPMCompliance },
526 {
"LightGoldenrod1", 255, 236, 139, 1, X11Compliance },
527 {
"LightGoldenrod2", 238, 220, 130, 1, X11Compliance },
528 {
"LightGoldenrod3", 205, 190, 112, 1, X11Compliance },
529 {
"LightGoldenrod4", 139, 129, 76, 1, X11Compliance },
530 {
"LightGoldenrodYellow", 250, 250, 210, 1, SVGCompliance | X11Compliance | XPMCompliance },
531 {
"LightGray", 211, 211, 211, 1, SVGCompliance | X11Compliance | XPMCompliance },
532 {
"LightGreen", 144, 238, 144, 1, SVGCompliance | X11Compliance },
533 {
"LightGrey", 211, 211, 211, 1, SVGCompliance | X11Compliance },
534 {
"LightPink", 255, 182, 193, 1, SVGCompliance | X11Compliance | XPMCompliance },
535 {
"LightPink1", 255, 174, 185, 1, X11Compliance },
536 {
"LightPink2", 238, 162, 173, 1, X11Compliance },
537 {
"LightPink3", 205, 140, 149, 1, X11Compliance },
538 {
"LightPink4", 139, 95, 101, 1, X11Compliance },
539 {
"LightSalmon", 255, 160, 122, 1, SVGCompliance | X11Compliance | XPMCompliance },
540 {
"LightSalmon1", 255, 160, 122, 1, X11Compliance },
541 {
"LightSalmon2", 238, 149, 114, 1, X11Compliance },
542 {
"LightSalmon3", 205, 129, 98, 1, X11Compliance },
543 {
"LightSalmon4", 139, 87, 66, 1, X11Compliance },
544 {
"LightSeaGreen", 32, 178, 170, 1, SVGCompliance | X11Compliance | XPMCompliance },
545 {
"LightSkyBlue", 135, 206, 250, 1, SVGCompliance | X11Compliance | XPMCompliance },
546 {
"LightSkyBlue1", 176, 226, 255, 1, X11Compliance },
547 {
"LightSkyBlue2", 164, 211, 238, 1, X11Compliance },
548 {
"LightSkyBlue3", 141, 182, 205, 1, X11Compliance },
549 {
"LightSkyBlue4", 96, 123, 139, 1, X11Compliance },
550 {
"LightSlateBlue", 132, 112, 255, 1, X11Compliance | XPMCompliance },
551 {
"LightSlateGray", 119, 136, 153, 1, SVGCompliance | X11Compliance | XPMCompliance },
552 {
"LightSlateGrey", 119, 136, 153, 1, SVGCompliance | X11Compliance },
553 {
"LightSteelBlue", 176, 196, 222, 1, SVGCompliance | X11Compliance | XPMCompliance },
554 {
"LightSteelBlue1", 202, 225, 255, 1, X11Compliance },
555 {
"LightSteelBlue2", 188, 210, 238, 1, X11Compliance },
556 {
"LightSteelBlue3", 162, 181, 205, 1, X11Compliance },
557 {
"LightSteelBlue4", 110, 123, 139, 1, X11Compliance },
558 {
"LightYellow", 255, 255, 224, 1, SVGCompliance | X11Compliance | XPMCompliance },
559 {
"LightYellow1", 255, 255, 224, 1, X11Compliance },
560 {
"LightYellow2", 238, 238, 209, 1, X11Compliance },
561 {
"LightYellow3", 205, 205, 180, 1, X11Compliance },
562 {
"LightYellow4", 139, 139, 122, 1, X11Compliance },
563 {
"lime", 0, 255, 0, 1, SVGCompliance },
564 {
"LimeGreen", 50, 205, 50, 1, SVGCompliance | X11Compliance | XPMCompliance },
565 {
"linen", 250, 240, 230, 1, SVGCompliance | X11Compliance | XPMCompliance },
566 {
"magenta1", 255, 0, 255, 1, X11Compliance },
567 {
"magenta2", 238, 0, 238, 1, X11Compliance },
568 {
"magenta3", 205, 0, 205, 1, X11Compliance },
569 {
"magenta4", 139, 0, 139, 1, X11Compliance },
570 {
"maroon", 128, 0, 0, 1, SVGCompliance },
571 {
"maroon", 176, 48, 96, 1, X11Compliance | XPMCompliance },
572 {
"maroon1", 255, 52, 179, 1, X11Compliance },
573 {
"maroon2", 238, 48, 167, 1, X11Compliance },
574 {
"maroon3", 205, 41, 144, 1, X11Compliance },
575 {
"maroon4", 139, 28, 98, 1, X11Compliance },
576 {
"MediumAquamarine", 102, 205, 170, 1, SVGCompliance | X11Compliance | XPMCompliance },
577 {
"MediumBlue", 0, 0, 205, 1, SVGCompliance | X11Compliance | XPMCompliance },
578 {
"MediumForestGreen", 50, 129, 75, 1, X11Compliance | XPMCompliance },
579 {
"MediumGoldenRod", 209, 193, 102, 1, X11Compliance | XPMCompliance },
580 {
"MediumOrchid", 186, 85, 211, 1, SVGCompliance | X11Compliance | XPMCompliance },
581 {
"MediumOrchid1", 224, 102, 255, 1, X11Compliance },
582 {
"MediumOrchid2", 209, 95, 238, 1, X11Compliance },
583 {
"MediumOrchid3", 180, 82, 205, 1, X11Compliance },
584 {
"MediumOrchid4", 122, 55, 139, 1, X11Compliance },
585 {
"MediumPurple", 147, 112, 219, 1, SVGCompliance | X11Compliance | XPMCompliance },
586 {
"MediumPurple1", 171, 130, 255, 1, X11Compliance },
587 {
"MediumPurple2", 159, 121, 238, 1, X11Compliance },
588 {
"MediumPurple3", 137, 104, 205, 1, X11Compliance },
589 {
"MediumPurple4", 93, 71, 139, 1, X11Compliance },
590 {
"MediumSeaGreen", 60, 179, 113, 1, SVGCompliance | X11Compliance | XPMCompliance },
591 {
"MediumSlateBlue", 123, 104, 238, 1, SVGCompliance | X11Compliance | XPMCompliance },
592 {
"MediumSpringGreen", 0, 250, 154, 1, SVGCompliance | X11Compliance | XPMCompliance },
593 {
"MediumTurquoise", 72, 209, 204, 1, SVGCompliance | X11Compliance | XPMCompliance },
594 {
"MediumVioletRed", 199, 21, 133, 1, SVGCompliance | X11Compliance | XPMCompliance },
595 {
"MidnightBlue", 25, 25, 112, 1, SVGCompliance | X11Compliance | XPMCompliance },
596 {
"MintCream", 245, 255, 250, 1, SVGCompliance | X11Compliance | XPMCompliance },
597 {
"MistyRose", 255, 228, 225, 1, SVGCompliance | X11Compliance | XPMCompliance },
598 {
"MistyRose1", 255, 228, 225, 1, X11Compliance },
599 {
"MistyRose2", 238, 213, 210, 1, X11Compliance },
600 {
"MistyRose3", 205, 183, 181, 1, X11Compliance },
601 {
"MistyRose4", 139, 125, 123, 1, X11Compliance },
602 {
"moccasin", 255, 228, 181, 1, SVGCompliance | X11Compliance | XPMCompliance },
603 {
"NavajoWhite", 255, 222, 173, 1, SVGCompliance | X11Compliance | XPMCompliance },
604 {
"NavajoWhite1", 255, 222, 173, 1, X11Compliance },
605 {
"NavajoWhite2", 238, 207, 161, 1, X11Compliance },
606 {
"NavajoWhite3", 205, 179, 139, 1, X11Compliance },
607 {
"NavajoWhite4", 139, 121, 94, 1, X11Compliance },
608 {
"navy", 0, 0, 128, 1, SVGCompliance | X11Compliance | XPMCompliance },
609 {
"NavyBlue", 0, 0, 128, 1, X11Compliance | XPMCompliance },
610 {
"matte", 0, 0, 0, 0, SVGCompliance },
611 {
"OldLace", 253, 245, 230, 1, SVGCompliance | X11Compliance | XPMCompliance },
612 {
"olive", 128, 128, 0, 1, SVGCompliance },
613 {
"OliveDrab", 107, 142, 35, 1, SVGCompliance | X11Compliance | XPMCompliance },
614 {
"OliveDrab1", 192, 255, 62, 1, X11Compliance },
615 {
"OliveDrab2", 179, 238, 58, 1, X11Compliance },
616 {
"OliveDrab3", 154, 205, 50, 1, X11Compliance },
617 {
"OliveDrab4", 105, 139, 34, 1, X11Compliance },
618 {
"opaque", 0, 0, 0, 1, SVGCompliance },
619 {
"orange", 255, 165, 0, 1, SVGCompliance | X11Compliance | XPMCompliance },
620 {
"orange1", 255, 165, 0, 1, X11Compliance },
621 {
"orange2", 238, 154, 0, 1, X11Compliance },
622 {
"orange3", 205, 133, 0, 1, X11Compliance },
623 {
"orange4", 139, 90, 0, 1, X11Compliance },
624 {
"OrangeRed", 255, 69, 0, 1, SVGCompliance | X11Compliance | XPMCompliance },
625 {
"OrangeRed1", 255, 69, 0, 1, X11Compliance },
626 {
"OrangeRed2", 238, 64, 0, 1, X11Compliance },
627 {
"OrangeRed3", 205, 55, 0, 1, X11Compliance },
628 {
"OrangeRed4", 139, 37, 0, 1, X11Compliance },
629 {
"orchid", 218, 112, 214, 1, SVGCompliance | X11Compliance | XPMCompliance },
630 {
"orchid1", 255, 131, 250, 1, X11Compliance },
631 {
"orchid2", 238, 122, 233, 1, X11Compliance },
632 {
"orchid3", 205, 105, 201, 1, X11Compliance },
633 {
"orchid4", 139, 71, 137, 1, X11Compliance },
634 {
"PaleGoldenrod", 238, 232, 170, 1, SVGCompliance | X11Compliance | XPMCompliance },
635 {
"PaleGreen", 152, 251, 152, 1, SVGCompliance | X11Compliance | XPMCompliance },
636 {
"PaleGreen1", 154, 255, 154, 1, X11Compliance },
637 {
"PaleGreen2", 144, 238, 144, 1, X11Compliance },
638 {
"PaleGreen3", 124, 205, 124, 1, X11Compliance },
639 {
"PaleGreen4", 84, 139, 84, 1, X11Compliance },
640 {
"PaleTurquoise", 175, 238, 238, 1, SVGCompliance | X11Compliance | XPMCompliance },
641 {
"PaleTurquoise1", 187, 255, 255, 1, X11Compliance },
642 {
"PaleTurquoise2", 174, 238, 238, 1, X11Compliance },
643 {
"PaleTurquoise3", 150, 205, 205, 1, X11Compliance },
644 {
"PaleTurquoise4", 102, 139, 139, 1, X11Compliance },
645 {
"PaleVioletRed", 219, 112, 147, 1, SVGCompliance | X11Compliance | XPMCompliance },
646 {
"PaleVioletRed1", 255, 130, 171, 1, X11Compliance },
647 {
"PaleVioletRed2", 238, 121, 159, 1, X11Compliance },
648 {
"PaleVioletRed3", 205, 104, 137, 1, X11Compliance },
649 {
"PaleVioletRed4", 139, 71, 93, 1, X11Compliance },
650 {
"PapayaWhip", 255, 239, 213, 1, SVGCompliance | X11Compliance | XPMCompliance },
651 {
"PeachPuff", 255, 218, 185, 1, SVGCompliance | X11Compliance | XPMCompliance },
652 {
"PeachPuff1", 255, 218, 185, 1, X11Compliance },
653 {
"PeachPuff2", 238, 203, 173, 1, X11Compliance },
654 {
"PeachPuff3", 205, 175, 149, 1, X11Compliance },
655 {
"PeachPuff4", 139, 119, 101, 1, X11Compliance },
656 {
"peru", 205, 133, 63, 1, SVGCompliance | X11Compliance | XPMCompliance },
657 {
"pink", 255, 192, 203, 1, SVGCompliance | X11Compliance | XPMCompliance },
658 {
"pink1", 255, 181, 197, 1, X11Compliance },
659 {
"pink2", 238, 169, 184, 1, X11Compliance },
660 {
"pink3", 205, 145, 158, 1, X11Compliance },
661 {
"pink4", 139, 99, 108, 1, X11Compliance },
662 {
"plum", 221, 160, 221, 1, SVGCompliance | X11Compliance | XPMCompliance },
663 {
"plum1", 255, 187, 255, 1, X11Compliance },
664 {
"plum2", 238, 174, 238, 1, X11Compliance },
665 {
"plum3", 205, 150, 205, 1, X11Compliance },
666 {
"plum4", 139, 102, 139, 1, X11Compliance },
667 {
"PowderBlue", 176, 224, 230, 1, SVGCompliance | X11Compliance | XPMCompliance },
668 {
"purple", 128, 0, 128, 1, SVGCompliance },
669 {
"purple", 160, 32, 240, 1, X11Compliance | XPMCompliance },
670 {
"purple1", 155, 48, 255, 1, X11Compliance },
671 {
"purple2", 145, 44, 238, 1, X11Compliance },
672 {
"purple3", 125, 38, 205, 1, X11Compliance },
673 {
"purple4", 85, 26, 139, 1, X11Compliance },
674 {
"red1", 255, 0, 0, 1, X11Compliance },
675 {
"red2", 238, 0, 0, 1, X11Compliance },
676 {
"red3", 205, 0, 0, 1, X11Compliance },
677 {
"red4", 139, 0, 0, 1, X11Compliance },
678 {
"RosyBrown", 188, 143, 143, 1, SVGCompliance | X11Compliance | XPMCompliance },
679 {
"RosyBrown1", 255, 193, 193, 1, X11Compliance },
680 {
"RosyBrown2", 238, 180, 180, 1, X11Compliance },
681 {
"RosyBrown3", 205, 155, 155, 1, X11Compliance },
682 {
"RosyBrown4", 139, 105, 105, 1, X11Compliance },
683 {
"RoyalBlue", 65, 105, 225, 1, SVGCompliance | X11Compliance | XPMCompliance },
684 {
"RoyalBlue1", 72, 118, 255, 1, X11Compliance },
685 {
"RoyalBlue2", 67, 110, 238, 1, X11Compliance },
686 {
"RoyalBlue3", 58, 95, 205, 1, X11Compliance },
687 {
"RoyalBlue4", 39, 64, 139, 1, X11Compliance },
688 {
"SaddleBrown", 139, 69, 19, 1, SVGCompliance | X11Compliance | XPMCompliance },
689 {
"salmon", 250, 128, 114, 1, SVGCompliance | X11Compliance | XPMCompliance },
690 {
"salmon1", 255, 140, 105, 1, X11Compliance },
691 {
"salmon2", 238, 130, 98, 1, X11Compliance },
692 {
"salmon3", 205, 112, 84, 1, X11Compliance },
693 {
"salmon4", 139, 76, 57, 1, X11Compliance },
694 {
"SandyBrown", 244, 164, 96, 1, SVGCompliance | X11Compliance | XPMCompliance },
695 {
"SeaGreen", 46, 139, 87, 1, SVGCompliance | X11Compliance | XPMCompliance },
696 {
"SeaGreen1", 84, 255, 159, 1, X11Compliance },
697 {
"SeaGreen2", 78, 238, 148, 1, X11Compliance },
698 {
"SeaGreen3", 67, 205, 128, 1, X11Compliance },
699 {
"SeaGreen4", 46, 139, 87, 1, X11Compliance },
700 {
"seashell", 255, 245, 238, 1, SVGCompliance | X11Compliance | XPMCompliance },
701 {
"seashell1", 255, 245, 238, 1, X11Compliance },
702 {
"seashell2", 238, 229, 222, 1, X11Compliance },
703 {
"seashell3", 205, 197, 191, 1, X11Compliance },
704 {
"seashell4", 139, 134, 130, 1, X11Compliance },
705 {
"sienna", 160, 82, 45, 1, SVGCompliance | X11Compliance | XPMCompliance },
706 {
"sienna1", 255, 130, 71, 1, X11Compliance },
707 {
"sienna2", 238, 121, 66, 1, X11Compliance },
708 {
"sienna3", 205, 104, 57, 1, X11Compliance },
709 {
"sienna4", 139, 71, 38, 1, X11Compliance },
710 {
"silver", 192, 192, 192, 1, SVGCompliance },
711 {
"SkyBlue", 135, 206, 235, 1, SVGCompliance | X11Compliance | XPMCompliance },
712 {
"SkyBlue1", 135, 206, 255, 1, X11Compliance },
713 {
"SkyBlue2", 126, 192, 238, 1, X11Compliance },
714 {
"SkyBlue3", 108, 166, 205, 1, X11Compliance },
715 {
"SkyBlue4", 74, 112, 139, 1, X11Compliance },
716 {
"SlateBlue", 106, 90, 205, 1, SVGCompliance | X11Compliance | XPMCompliance },
717 {
"SlateBlue1", 131, 111, 255, 1, X11Compliance },
718 {
"SlateBlue2", 122, 103, 238, 1, X11Compliance },
719 {
"SlateBlue3", 105, 89, 205, 1, X11Compliance },
720 {
"SlateBlue4", 71, 60, 139, 1, X11Compliance },
721 {
"SlateGray", 112, 128, 144, 1, SVGCompliance | X11Compliance | XPMCompliance },
722 {
"SlateGray1", 198, 226, 255, 1, X11Compliance },
723 {
"SlateGray2", 185, 211, 238, 1, X11Compliance },
724 {
"SlateGray3", 159, 182, 205, 1, X11Compliance },
725 {
"SlateGray4", 108, 123, 139, 1, X11Compliance },
726 {
"SlateGrey", 112, 128, 144, 1, SVGCompliance | X11Compliance },
727 {
"snow", 255, 250, 250, 1, SVGCompliance | X11Compliance | XPMCompliance },
728 {
"snow1", 255, 250, 250, 1, X11Compliance },
729 {
"snow2", 238, 233, 233, 1, X11Compliance },
730 {
"snow3", 205, 201, 201, 1, X11Compliance },
731 {
"snow4", 139, 137, 137, 1, X11Compliance },
732 {
"SpringGreen", 0, 255, 127, 1, SVGCompliance | X11Compliance | XPMCompliance },
733 {
"SpringGreen1", 0, 255, 127, 1, X11Compliance },
734 {
"SpringGreen2", 0, 238, 118, 1, X11Compliance },
735 {
"SpringGreen3", 0, 205, 102, 1, X11Compliance },
736 {
"SpringGreen4", 0, 139, 69, 1, X11Compliance },
737 {
"SteelBlue", 70, 130, 180, 1, SVGCompliance | X11Compliance | XPMCompliance },
738 {
"SteelBlue1", 99, 184, 255, 1, X11Compliance },
739 {
"SteelBlue2", 92, 172, 238, 1, X11Compliance },
740 {
"SteelBlue3", 79, 148, 205, 1, X11Compliance },
741 {
"SteelBlue4", 54, 100, 139, 1, X11Compliance },
742 {
"tan", 210, 180, 140, 1, SVGCompliance | X11Compliance | XPMCompliance },
743 {
"tan1", 255, 165, 79, 1, X11Compliance },
744 {
"tan2", 238, 154, 73, 1, X11Compliance },
745 {
"tan3", 205, 133, 63, 1, X11Compliance },
746 {
"tan4", 139, 90, 43, 1, X11Compliance },
747 {
"teal", 0, 128, 128, 1, SVGCompliance },
748 {
"thistle", 216, 191, 216, 1, SVGCompliance | X11Compliance | XPMCompliance },
749 {
"thistle1", 255, 225, 255, 1, X11Compliance },
750 {
"thistle2", 238, 210, 238, 1, X11Compliance },
751 {
"thistle3", 205, 181, 205, 1, X11Compliance },
752 {
"thistle4", 139, 123, 139, 1, X11Compliance },
753 {
"tomato", 255, 99, 71, 1, SVGCompliance | X11Compliance | XPMCompliance },
754 {
"tomato1", 255, 99, 71, 1, X11Compliance },
755 {
"tomato2", 238, 92, 66, 1, X11Compliance },
756 {
"tomato3", 205, 79, 57, 1, X11Compliance },
757 {
"tomato4", 139, 54, 38, 1, X11Compliance },
758 {
"transparent", 0, 0, 0, 0, SVGCompliance },
759 {
"turquoise", 64, 224, 208, 1, SVGCompliance | X11Compliance | XPMCompliance },
760 {
"turquoise1", 0, 245, 255, 1, X11Compliance },
761 {
"turquoise2", 0, 229, 238, 1, X11Compliance },
762 {
"turquoise3", 0, 197, 205, 1, X11Compliance },
763 {
"turquoise4", 0, 134, 139, 1, X11Compliance },
764 {
"violet", 238, 130, 238, 1, SVGCompliance | X11Compliance | XPMCompliance },
765 {
"VioletRed", 208, 32, 144, 1, X11Compliance | XPMCompliance },
766 {
"VioletRed1", 255, 62, 150, 1, X11Compliance },
767 {
"VioletRed2", 238, 58, 140, 1, X11Compliance },
768 {
"VioletRed3", 205, 50, 120, 1, X11Compliance },
769 {
"VioletRed4", 139, 34, 82, 1, X11Compliance },
770 {
"wheat", 245, 222, 179, 1, SVGCompliance | X11Compliance | XPMCompliance },
771 {
"wheat1", 255, 231, 186, 1, X11Compliance },
772 {
"wheat2", 238, 216, 174, 1, X11Compliance },
773 {
"wheat3", 205, 186, 150, 1, X11Compliance },
774 {
"wheat4", 139, 126, 102, 1, X11Compliance },
775 {
"WhiteSmoke", 245, 245, 245, 1, SVGCompliance | X11Compliance | XPMCompliance },
776 {
"yellow1", 255, 255, 0, 1, X11Compliance },
777 {
"yellow2", 238, 238, 0, 1, X11Compliance },
778 {
"yellow3", 205, 205, 0, 1, X11Compliance },
779 {
"yellow4", 139, 139, 0, 1, X11Compliance },
780 {
"YellowGreen", 154, 205, 50, 1, SVGCompliance | X11Compliance | XPMCompliance }
795static MagickBooleanType
798#if !MAGICKCORE_ZERO_CONFIGURATION_SUPPORT
799static MagickBooleanType
800 LoadColorCache(
LinkedListInfo *,
const char *,
const char *,
const size_t,
845 cache=NewLinkedList(0);
847 ThrowFatalException(ResourceLimitFatalError,
"MemoryAllocationFailed");
849#if !MAGICKCORE_ZERO_CONFIGURATION_SUPPORT
857 options=GetConfigureOptions(filename,exception);
858 option=(
const StringInfo *) GetNextValueInLinkedList(options);
861 status&=LoadColorCache(cache,(
const char *) GetStringInfoDatum(option),
862 GetStringInfoPath(option),0,exception);
863 option=(
const StringInfo *) GetNextValueInLinkedList(options);
865 options=DestroyConfigureOptions(options);
871 for (i=0; i < (ssize_t) (
sizeof(Colormap)/
sizeof(*Colormap)); i++)
880 color_info=(
ColorInfo *) AcquireMagickMemory(
sizeof(*color_info));
883 (void) ThrowMagickException(exception,GetMagickModule(),
884 ResourceLimitError,
"MemoryAllocationFailed",
"`%s'",p->name);
887 (void) memset(color_info,0,
sizeof(*color_info));
888 color_info->path=(
char *)
"[built-in]";
889 color_info->name=(
char *) p->name;
890 GetMagickPixelPacket((
Image *) NULL,&color_info->color);
891 color_info->color.red=(MagickRealType) ScaleCharToQuantum(
893 color_info->color.green=(MagickRealType) ScaleCharToQuantum(
895 color_info->color.blue=(MagickRealType) ScaleCharToQuantum(
897 color_info->color.opacity=((double) QuantumRange-(double) QuantumRange*
899 color_info->compliance=(ComplianceType) p->compliance;
900 color_info->exempt=MagickTrue;
901 color_info->signature=MagickCoreSignature;
902 status&=AppendValueToLinkedList(cache,color_info);
903 if (status == MagickFalse)
904 (void) ThrowMagickException(exception,GetMagickModule(),
905 ResourceLimitError,
"MemoryAllocationFailed",
"`%s'",color_info->name);
928MagickExport MagickBooleanType ColorComponentGenesis(
void)
931 color_semaphore=AllocateSemaphoreInfo();
954static void *DestroyColorElement(
void *color_info)
960 if (p->exempt == MagickFalse)
962 if (p->path != (
char *) NULL)
963 p->path=DestroyString(p->path);
964 if (p->name != (
char *) NULL)
965 p->name=DestroyString(p->name);
967 p=(
ColorInfo *) RelinquishMagickMemory(p);
968 return((
void *) NULL);
971MagickExport
void ColorComponentTerminus(
void)
974 ActivateSemaphoreInfo(&color_semaphore);
975 LockSemaphoreInfo(color_semaphore);
977 color_cache=DestroyLinkedList(color_cache,DestroyColorElement);
978 UnlockSemaphoreInfo(color_semaphore);
979 DestroySemaphoreInfo(&color_semaphore);
1010MagickExport
const ColorInfo *GetColorCompliance(
const char *name,
1014 colorname[MaxTextExtent];
1023 if (IsColorCacheInstantiated(exception) == MagickFalse)
1029 if (name != (
const char *) NULL)
1030 (void) CopyMagickString(colorname,name,MaxTextExtent);
1031 for (q=colorname; *q !=
'\0'; q++)
1033 if (isspace((
int) ((
unsigned char) *q)) == 0)
1035 (void) CopyMagickString(q,q+1,MaxTextExtent);
1041 LockSemaphoreInfo(color_semaphore);
1042 ResetLinkedListIterator(color_cache);
1043 p=(
const ColorInfo *) GetNextValueInLinkedList(color_cache);
1044 if ((name == (
const char *) NULL) || (LocaleCompare(name,
"*") == 0))
1046 UnlockSemaphoreInfo(color_semaphore);
1051 if (((p->compliance & compliance) != 0) &&
1052 (LocaleCompare(colorname,p->name) == 0))
1054 p=(
const ColorInfo *) GetNextValueInLinkedList(color_cache);
1057 (void) ThrowMagickException(exception,GetMagickModule(),OptionWarning,
1058 "UnrecognizedColor",
"`%s'",name);
1060 (
void) InsertValueInLinkedList(color_cache,0,
1061 RemoveElementByValueFromLinkedList(color_cache,p));
1062 UnlockSemaphoreInfo(color_semaphore);
1095MagickExport
const ColorInfo *GetColorInfo(
const char *name,
1098 return(GetColorCompliance(name,AllCompliance,exception));
1133#define SVGCompliant(component) ((double) \
1134 ScaleCharToQuantum(ScaleQuantumToChar(ClampToQuantum(component))))
1135#define SVGEpsilon 1.0e-6
1140 if (fabs((
double) (SVGCompliant(pixel->red)-pixel->red)) >= SVGEpsilon)
1141 return(MagickFalse);
1142 if (fabs((
double) (SVGCompliant(pixel->green)-pixel->green)) >= SVGEpsilon)
1143 return(MagickFalse);
1144 if (fabs((
double) (SVGCompliant(pixel->blue)-pixel->blue)) >= SVGEpsilon)
1145 return(MagickFalse);
1146 if ((pixel->colorspace == CMYKColorspace) &&
1147 (fabs((
double) (SVGCompliant(pixel->index)-pixel->index)) >= SVGEpsilon))
1148 return(MagickFalse);
1153 const ChannelType channel,
const ComplianceType compliance,
char *tuple)
1156 component[MagickPathExtent];
1164 if ((compliance != NoCompliance) || (pixel->depth <= 8))
1166 if ((compliance != NoCompliance) &&
1167 (IssRGBCompatibleColorspace(pixel->colorspace) != MagickFalse) &&
1168 (IsSVGCompliant(pixel) == MagickFalse))
1175 if (IsHueCompatibleColorspace(pixel->colorspace) != MagickFalse)
1177 if ((compliance != NoCompliance) &&
1178 (IsLabCompatibleColorspace(pixel->colorspace) != MagickFalse))
1180 if (pixel->colorspace == XYZColorspace)
1187 if (IsHueCompatibleColorspace(pixel->colorspace) != MagickFalse)
1189 if ((compliance != NoCompliance) &&
1190 (IsLabCompatibleColorspace(pixel->colorspace) != MagickFalse))
1191 color-=QuantumRange/2.0f;
1192 if (pixel->colorspace == XYZColorspace)
1199 if (IsHueCompatibleColorspace(pixel->colorspace) != MagickFalse)
1201 if (pixel->colorspace == LabColorspace)
1202 color-=QuantumRange/2.0f;
1203 if ((pixel->colorspace == LCHColorspace) ||
1204 (pixel->colorspace == LCHabColorspace) ||
1205 (pixel->colorspace == LCHuvColorspace))
1206 color*=360.0f/255.0f;
1207 if (pixel->colorspace == XYZColorspace)
1213 color=(double) QuantumRange-(
double) pixel->opacity;
1214 if (compliance != NoCompliance)
1226 if ((scale != 100.0f) ||
1227 (IsLabCompatibleColorspace(pixel->colorspace) != MagickFalse))
1228 (void) FormatLocaleString(component,MagickPathExtent,
"%.*g",
1229 GetMagickPrecision(),(
double) scale*QuantumScale*(
double) color);
1231 (
void) FormatLocaleString(component,MagickPathExtent,
"%.*g%%",
1232 GetMagickPrecision(),(
double) scale*QuantumScale*(
double) color);
1233 (void) ConcatenateMagickString(tuple,component,MagickPathExtent);
1264#if defined(__cplusplus) || defined(c_plusplus)
1268static int ColorInfoCompare(
const void *x,
const void *y)
1279 cmp=LocaleCompare((*p)->path,(*q)->path);
1281 return(LocaleCompare((*p)->name,(*q)->name));
1285#if defined(__cplusplus) || defined(c_plusplus)
1289MagickExport
const ColorInfo **GetColorInfoList(
const char *pattern,
1304 assert(pattern != (
char *) NULL);
1305 assert(number_colors != (
size_t *) NULL);
1306 if (IsEventLogging() != MagickFalse)
1307 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",pattern);
1309 p=GetColorInfo(
"*",exception);
1312 colors=(
const ColorInfo **) AcquireQuantumMemory((
size_t)
1313 GetNumberOfElementsInLinkedList(color_cache)+1UL,
sizeof(*colors));
1314 if (colors == (
const ColorInfo **) NULL)
1319 LockSemaphoreInfo(color_semaphore);
1320 ResetLinkedListIterator(color_cache);
1321 p=(
const ColorInfo *) GetNextValueInLinkedList(color_cache);
1322 for (i=0; p != (
const ColorInfo *) NULL; )
1324 if ((p->stealth == MagickFalse) &&
1325 (GlobExpression(p->name,pattern,MagickFalse) != MagickFalse))
1327 p=(
const ColorInfo *) GetNextValueInLinkedList(color_cache);
1329 UnlockSemaphoreInfo(color_semaphore);
1330 qsort((
void *) colors,(
size_t) i,
sizeof(*colors),ColorInfoCompare);
1332 *number_colors=(size_t) i;
1364#if defined(__cplusplus) || defined(c_plusplus)
1368static int ColorCompare(
const void *x,
const void *y)
1374 p=(
const char **) x;
1375 q=(
const char **) y;
1376 return(LocaleCompare(*p,*q));
1379#if defined(__cplusplus) || defined(c_plusplus)
1383MagickExport
char **GetColorList(
const char *pattern,
1398 assert(pattern != (
char *) NULL);
1399 assert(number_colors != (
size_t *) NULL);
1400 if (IsEventLogging() != MagickFalse)
1401 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",pattern);
1403 p=GetColorInfo(
"*",exception);
1405 return((
char **) NULL);
1406 colors=(
char **) AcquireQuantumMemory((
size_t)
1407 GetNumberOfElementsInLinkedList(color_cache)+1UL,
sizeof(*colors));
1408 if (colors == (
char **) NULL)
1409 return((
char **) NULL);
1413 LockSemaphoreInfo(color_semaphore);
1414 ResetLinkedListIterator(color_cache);
1415 p=(
const ColorInfo *) GetNextValueInLinkedList(color_cache);
1416 for (i=0; p != (
const ColorInfo *) NULL; )
1418 if ((p->stealth == MagickFalse) &&
1419 (GlobExpression(p->name,pattern,MagickFalse) != MagickFalse))
1420 colors[i++]=ConstantString(p->name);
1421 p=(
const ColorInfo *) GetNextValueInLinkedList(color_cache);
1423 UnlockSemaphoreInfo(color_semaphore);
1424 qsort((
void *) colors,(
size_t) i,
sizeof(*colors),ColorCompare);
1425 colors[i]=(
char *) NULL;
1426 *number_colors=(size_t) i;
1460 const ChannelType channel,
char *tuple)
1463 component[MaxTextExtent];
1486 case OpacityChannel:
1488 color=(MagickRealType) QuantumRange-pixel->opacity;
1499 if (pixel->depth > 32)
1501 (void) FormatLocaleString(component,MaxTextExtent,
"%08lX%08lX",
1502 (
unsigned long) ScaleQuantumToLong(ClampToQuantum(color)),
1503 (
unsigned long) ScaleQuantumToLong(ClampToQuantum(color)));
1504 (void) ConcatenateMagickString(tuple,component,MaxTextExtent);
1507 if (pixel->depth > 16)
1509 (void) FormatLocaleString(component,MaxTextExtent,
"%08X",
1510 (
unsigned int) ScaleQuantumToLong(ClampToQuantum(color)));
1511 (void) ConcatenateMagickString(tuple,component,MaxTextExtent);
1514 if (pixel->depth > 8)
1516 (void) FormatLocaleString(component,MaxTextExtent,
"%04X",
1517 ScaleQuantumToShort(ClampToQuantum(color)));
1518 (void) ConcatenateMagickString(tuple,component,MaxTextExtent);
1521 (void) FormatLocaleString(component,MaxTextExtent,
"%02X",
1522 ScaleQuantumToChar(ClampToQuantum(color)));
1523 (void) ConcatenateMagickString(tuple,component,MaxTextExtent);
1528 const MagickBooleanType hex,
char *tuple)
1534 assert(tuple != (
char *) NULL);
1535 if (IsEventLogging() != MagickFalse)
1536 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",tuple);
1538 if (hex != MagickFalse)
1543 (void) ConcatenateMagickString(tuple,
"#",MaxTextExtent);
1544 ConcatentateHexColorComponent(pixel,RedChannel,tuple);
1545 ConcatentateHexColorComponent(pixel,GreenChannel,tuple);
1546 ConcatentateHexColorComponent(pixel,BlueChannel,tuple);
1547 if (pixel->colorspace == CMYKColorspace)
1548 ConcatentateHexColorComponent(pixel,IndexChannel,tuple);
1549 if (pixel->matte != MagickFalse)
1550 ConcatentateHexColorComponent(pixel,OpacityChannel,tuple);
1557 if (color.depth > 8)
1565 status=color.red == SVGCompliant(color.red);
1566 status&=color.green == SVGCompliant(color.green);
1567 status&=color.blue == SVGCompliant(color.blue);
1568 if (color.colorspace != CMYKColorspace)
1569 status&=color.index == SVGCompliant(color.index);
1570 if (color.matte != MagickFalse)
1571 status&=color.opacity == SVGCompliant(color.opacity);
1572 if (status != MagickFalse)
1575 (void) ConcatenateMagickString(tuple,CommandOptionToMnemonic(
1576 MagickColorspaceOptions,(ssize_t) color.colorspace),MaxTextExtent);
1577 if (color.matte != MagickFalse)
1578 (void) ConcatenateMagickString(tuple,
"a",MaxTextExtent);
1579 (void) ConcatenateMagickString(tuple,
"(",MaxTextExtent);
1580 if ((color.colorspace == LinearGRAYColorspace) ||
1581 (color.colorspace == GRAYColorspace))
1582 ConcatenateColorComponent(&color,GrayChannel,SVGCompliance,tuple);
1585 ConcatenateColorComponent(&color,RedChannel,SVGCompliance,tuple);
1586 (void) ConcatenateMagickString(tuple,
",",MaxTextExtent);
1587 ConcatenateColorComponent(&color,GreenChannel,SVGCompliance,tuple);
1588 (void) ConcatenateMagickString(tuple,
",",MaxTextExtent);
1589 ConcatenateColorComponent(&color,BlueChannel,SVGCompliance,tuple);
1591 if (color.colorspace == CMYKColorspace)
1593 (void) ConcatenateMagickString(tuple,
",",MaxTextExtent);
1594 ConcatenateColorComponent(&color,IndexChannel,SVGCompliance,tuple);
1596 if (color.matte != MagickFalse)
1598 (void) ConcatenateMagickString(tuple,
",",MaxTextExtent);
1599 ConcatenateColorComponent(&color,AlphaChannel,SVGCompliance,tuple);
1601 (void) ConcatenateMagickString(tuple,
")",MaxTextExtent);
1629static MagickBooleanType IsColorCacheInstantiated(
ExceptionInfo *exception)
1634 ActivateSemaphoreInfo(&color_semaphore);
1635 LockSemaphoreInfo(color_semaphore);
1637 color_cache=AcquireColorCache(ColorFilename,exception);
1638 UnlockSemaphoreInfo(color_semaphore);
1640 return(color_cache != (
LinkedListInfo *) NULL ? MagickTrue : MagickFalse);
1673MagickExport MagickBooleanType IsColorSimilar(
const Image *image,
1684 fuzz=(double) MagickMax(image->fuzz,(MagickRealType) MagickSQ1_2);
1688 if (image->matte != MagickFalse)
1693 pixel=(MagickRealType) ((image->matte != MagickFalse ?
1694 GetPixelOpacity(p) : OpaqueOpacity)-(image->matte != MagickFalse ?
1695 q->opacity : OpaqueOpacity));
1696 distance=pixel*pixel;
1697 if (distance > fuzz)
1698 return(MagickFalse);
1703 scale=(QuantumScale*(double) GetPixelAlpha(p));
1704 scale*=(QuantumScale*(double) GetPixelAlpha(q));
1705 if (scale <= MagickEpsilon)
1713 pixel=(double) GetPixelRed(p)-(double) GetPixelRed(q);
1714 if (IsHueCompatibleColorspace(image->colorspace) != MagickFalse)
1721 if (fabs((
double) pixel) > ((
double) QuantumRange/2.0))
1722 pixel-=(double) QuantumRange;
1725 distance+=scale*pixel*pixel;
1726 if (distance > fuzz)
1727 return(MagickFalse);
1728 pixel=(double) GetPixelGreen(p)-(double) q->green;
1729 distance+=scale*pixel*pixel;
1730 if (distance > fuzz)
1731 return(MagickFalse);
1732 pixel=(double) GetPixelBlue(p)-(double) q->blue;
1733 distance+=scale*pixel*pixel;
1734 if (distance > fuzz)
1735 return(MagickFalse);
1774MagickExport MagickBooleanType IsImageSimilar(
const Image *image,
1775 const Image *target_image,ssize_t *x_offset,ssize_t *y_offset,
1778#define SearchImageText " Searching image... "
1807 assert(image != (
Image *) NULL);
1808 assert(image->signature == MagickCoreSignature);
1809 assert(target_image != (
Image *) NULL);
1810 assert(target_image->signature == MagickCoreSignature);
1811 assert(x_offset != (ssize_t *) NULL);
1812 assert(y_offset != (ssize_t *) NULL);
1814 if (IsEventLogging() != MagickFalse)
1815 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
1818 GetMagickPixelPacket(image,&pixel);
1819 GetMagickPixelPacket(image,&target);
1820 image_view=AcquireVirtualCacheView(image,exception);
1821 target_view=AcquireVirtualCacheView(target_image,exception);
1822 for (y=(*y_offset); y < (ssize_t) image->rows; y++)
1824 for (x=y == 0 ? *x_offset : 0; x < (ssize_t) image->columns; x++)
1826 for (j=0; j < (ssize_t) target_image->rows; j++)
1828 for (i=0; i < (ssize_t) target_image->columns; i++)
1830 p=GetCacheViewVirtualPixels(image_view,x+i,y+j,1,1,exception);
1833 indexes=GetCacheViewVirtualIndexQueue(image_view);
1834 SetMagickPixelPacket(image,p,indexes,&pixel);
1835 q=GetCacheViewVirtualPixels(target_view,i,j,1,1,exception);
1838 target_indexes=GetCacheViewVirtualIndexQueue(target_view);
1839 SetMagickPixelPacket(image,q,target_indexes,&target);
1840 if (IsMagickColorSimilar(&pixel,&target) == MagickFalse)
1843 if (i < (ssize_t) target_image->columns)
1846 if (j == (ssize_t) target_image->rows)
1849 if (x < (ssize_t) image->columns)
1851 if (image->progress_monitor != (MagickProgressMonitor) NULL)
1856 proceed=SetImageProgress(image,SearchImageText,(MagickOffsetType) y,
1858 if (proceed == MagickFalse)
1862 target_view=DestroyCacheView(target_view);
1863 image_view=DestroyCacheView(image_view);
1866 if (status == MagickFalse)
1868 return(y < (ssize_t) image->rows ? MagickTrue : MagickFalse);
1899MagickPrivate MagickBooleanType IsIntensitySimilar(
const Image *image,
1909 if (GetPixelIntensity(image,p) == GetPixelIntensity(image,q))
1911 fuzz=(MagickRealType) MagickMax(image->fuzz,MagickSQ1_2);
1913 pixel=GetPixelIntensity(image,p)-GetPixelIntensity(image,q);
1914 distance=pixel*pixel;
1915 if (distance > fuzz)
1916 return(MagickFalse);
1974 if ((p->fuzz == 0.0) && (q->fuzz == 0.0))
1975 return(IsMagickColorEqual(p,q));
1976 fuzz=(MagickRealType) MagickMax(MagickMax(p->fuzz,q->fuzz),(
double)
1981 if ((p->matte != MagickFalse) || (q->matte != MagickFalse))
1986 pixel=(p->matte != MagickFalse ? (double) GetPixelOpacity(p) : (double)
1987 OpaqueOpacity)-(q->matte != MagickFalse ? (double) q->opacity :
1988 (double) OpaqueOpacity);
1989 distance=pixel*pixel;
1990 if (distance > fuzz)
1991 return(MagickFalse);
1996 if (p->matte != MagickFalse)
1997 scale=(QuantumScale*(
double) GetPixelAlpha(p));
1998 if (q->matte != MagickFalse)
1999 scale*=(QuantumScale*(
double) GetPixelAlpha(q));
2000 if (scale <= MagickEpsilon)
2006 if (p->colorspace == CMYKColorspace)
2008 pixel=p->index-q->index;
2009 distance+=pixel*pixel*scale;
2010 if (distance > fuzz)
2011 return(MagickFalse);
2012 scale*=(MagickRealType) (QuantumScale*((
double) QuantumRange-p->index));
2013 scale*=(MagickRealType) (QuantumScale*((
double) QuantumRange-q->index));
2020 pixel=p->red-q->red;
2021 if (IsHueCompatibleColorspace(p->colorspace) != MagickFalse)
2028 if (fabs((
double) pixel) > ((
double) QuantumRange/2.0))
2029 pixel-=(double) QuantumRange;
2032 distance+=pixel*pixel*scale;
2033 if (distance > fuzz)
2034 return(MagickFalse);
2035 pixel=GetPixelGreen(p)-q->green;
2036 distance+=pixel*pixel*scale;
2037 if (distance > fuzz)
2038 return(MagickFalse);
2039 pixel=GetPixelBlue(p)-q->blue;
2040 distance+=pixel*pixel*scale;
2041 if (distance > fuzz)
2042 return(MagickFalse);
2076MagickExport MagickBooleanType IsOpacitySimilar(
const Image *image,
2086 if (image->matte == MagickFalse)
2088 if (GetPixelOpacity(p) == GetPixelOpacity(q))
2090 fuzz=MagickMax(image->fuzz,(
double) MagickSQ1_2);
2092 pixel=(MagickRealType) GetPixelOpacity(p)-(MagickRealType) GetPixelOpacity(q);
2093 distance=pixel*pixel;
2094 if (distance > fuzz)
2095 return(MagickFalse);
2125MagickExport MagickBooleanType ListColorInfo(FILE *file,
2129 tuple[MaxTextExtent];
2146 if (file == (
const FILE *) NULL)
2148 color_info=GetColorInfoList(
"*",&number_colors,exception);
2149 if (color_info == (
const ColorInfo **) NULL)
2150 return(MagickFalse);
2151 path=(
const char *) NULL;
2152 for (i=0; i < (ssize_t) number_colors; i++)
2154 if (color_info[i]->stealth != MagickFalse)
2156 if ((path == (
const char *) NULL) ||
2157 (LocaleCompare(path,color_info[i]->path) != 0))
2159 if (color_info[i]->path != (
char *) NULL)
2160 (void) FormatLocaleFile(file,
"\nPath: %s\n\n",color_info[i]->path);
2161 (void) FormatLocaleFile(file,
2164 (void) FormatLocaleFile(file,
2165 "-------------------------------------------------"
2166 "------------------------------\n");
2168 path=color_info[i]->path;
2169 (void) FormatLocaleFile(file,
"%-21.21s ",color_info[i]->name);
2170 GetColorTuple(&color_info[i]->color,MagickFalse,tuple);
2171 (void) FormatLocaleFile(file,
"%-45.45s ",tuple);
2172 if ((color_info[i]->compliance & SVGCompliance) != 0)
2173 (void) FormatLocaleFile(file,
"SVG ");
2174 if ((color_info[i]->compliance & X11Compliance) != 0)
2175 (void) FormatLocaleFile(file,
"X11 ");
2176 if ((color_info[i]->compliance & XPMCompliance) != 0)
2177 (void) FormatLocaleFile(file,
"XPM ");
2178 (void) FormatLocaleFile(file,
"\n");
2180 color_info=(
const ColorInfo **) RelinquishMagickMemory((
void *) color_info);
2181 (void) fflush(file);
2185#if !MAGICKCORE_ZERO_CONFIGURATION_SUPPORT
2216static MagickBooleanType LoadColorCache(
LinkedListInfo *cache,
const char *xml,
2217 const char *filename,
const size_t depth,
ExceptionInfo *exception)
2220 keyword[MaxTextExtent],
2238 (void) LogMagickEvent(ConfigureEvent,GetMagickModule(),
2239 "Loading color file \"%s\" ...",filename);
2240 if (xml == (
char *) NULL)
2241 return(MagickFalse);
2244 token=AcquireString(xml);
2245 extent=strlen(token)+MaxTextExtent;
2246 for (q=(
char *) xml; *q !=
'\0'; )
2251 (void) GetNextToken(q,&q,extent,token);
2254 (void) CopyMagickString(keyword,token,MaxTextExtent);
2255 if (LocaleNCompare(keyword,
"<!DOCTYPE",9) == 0)
2260 while ((LocaleNCompare(q,
"]>",2) != 0) && (*q !=
'\0'))
2261 (void) GetNextToken(q,&q,extent,token);
2264 if (LocaleNCompare(keyword,
"<!--",4) == 0)
2269 while ((LocaleNCompare(q,
"->",2) != 0) && (*q !=
'\0'))
2270 (void) GetNextToken(q,&q,extent,token);
2273 if (LocaleCompare(keyword,
"<include") == 0)
2278 while (((*token !=
'/') && (*(token+1) !=
'>')) && (*q !=
'\0'))
2280 (void) CopyMagickString(keyword,token,MaxTextExtent);
2281 (void) GetNextToken(q,&q,extent,token);
2284 (void) GetNextToken(q,&q,extent,token);
2285 if (LocaleCompare(keyword,
"file") == 0)
2287 if (depth > MagickMaxRecursionDepth)
2288 (void) ThrowMagickException(exception,GetMagickModule(),
2289 ConfigureError,
"IncludeElementNestedTooDeeply",
"`%s'",token);
2293 path[MaxTextExtent],
2296 GetPathComponent(filename,HeadPath,path);
2298 (void) ConcatenateMagickString(path,DirectorySeparator,
2300 if (*token == *DirectorySeparator)
2301 (void) CopyMagickString(path,token,MaxTextExtent);
2303 (
void) ConcatenateMagickString(path,token,MaxTextExtent);
2304 xml=FileToXML(path,~0UL);
2305 if (xml != (
char *) NULL)
2307 status&=LoadColorCache(cache,xml,path,depth+1,exception);
2308 xml=(
char *) RelinquishMagickMemory(xml);
2315 if (LocaleCompare(keyword,
"<color") == 0)
2320 color_info=(
ColorInfo *) AcquireMagickMemory(
sizeof(*color_info));
2322 ThrowFatalException(ResourceLimitFatalError,
"MemoryAllocationFailed");
2323 (void) memset(color_info,0,
sizeof(*color_info));
2324 color_info->path=ConstantString(filename);
2325 color_info->exempt=MagickFalse;
2326 color_info->signature=MagickCoreSignature;
2331 if ((LocaleCompare(keyword,
"/>") == 0) ||
2332 (LocaleCompare(keyword,
"</policy>") == 0))
2334 status=AppendValueToLinkedList(cache,color_info);
2335 if (status == MagickFalse)
2336 (void) ThrowMagickException(exception,GetMagickModule(),
2337 ResourceLimitError,
"MemoryAllocationFailed",
"`%s'",
2342 (void) GetNextToken(q,(
const char **) NULL,extent,token);
2345 (void) GetNextToken(q,&q,extent,token);
2346 (void) GetNextToken(q,&q,extent,token);
2352 if (LocaleCompare((
char *) keyword,
"color") == 0)
2354 (void) QueryMagickColor(token,&color_info->color,exception);
2357 if (LocaleCompare((
char *) keyword,
"compliance") == 0)
2362 compliance=color_info->compliance;
2363 if (StringLocateSubstring(token,
"*SVG*") != (
char *) NULL)
2364 compliance|=SVGCompliance;
2365 if (StringLocateSubstring(token,
"*X11*") != (
char *) NULL)
2366 compliance|=X11Compliance;
2367 if (StringLocateSubstring(token,
"*XPM*") != (
char *) NULL)
2368 compliance|=XPMCompliance;
2369 color_info->compliance=(ComplianceType) compliance;
2377 if (LocaleCompare((
char *) keyword,
"name") == 0)
2379 color_info->name=ConstantString(token);
2387 if (LocaleCompare((
char *) keyword,
"stealth") == 0)
2389 color_info->stealth=IsMagickTrue(token);
2398 token=(
char *) RelinquishMagickMemory(token);
2399 return(status != 0 ? MagickTrue : MagickFalse);
2435MagickExport MagickBooleanType QueryColorCompliance(
const char *name,
2444 status=QueryMagickColorCompliance(name,compliance,&pixel,exception);
2445 SetPixelOpacity(color,ClampToQuantum(pixel.opacity));
2446 if (pixel.colorspace == CMYKColorspace)
2448 SetPixelRed(color,ClampToQuantum((
double) QuantumRange-
2449 MagickMin((
double) QuantumRange,QuantumScale*pixel.red*((
double)
2450 QuantumRange-(
double) pixel.index)+pixel.index)));
2451 SetPixelGreen(color,ClampToQuantum((
double) QuantumRange-
2452 MagickMin((
double) QuantumRange,QuantumScale*pixel.green*((
double)
2453 QuantumRange-(
double) pixel.index)+pixel.index)));
2454 SetPixelBlue(color,ClampToQuantum((
double) QuantumRange-
2455 MagickMin((
double) QuantumRange,QuantumScale*pixel.blue*((
double)
2456 QuantumRange-(
double) pixel.index)+pixel.index)));
2459 SetPixelRed(color,ClampToQuantum(pixel.red));
2460 SetPixelGreen(color,ClampToQuantum(pixel.green));
2461 SetPixelBlue(color,ClampToQuantum(pixel.blue));
2494MagickExport MagickBooleanType QueryColorDatabase(
const char *name,
2497 return(QueryColorCompliance(name,AllCompliance,color,exception));
2533MagickExport MagickBooleanType QueryColorname(
const Image *image,
2534 const PixelPacket *color,
const ComplianceType compliance,
char *name,
2540 GetMagickPixelPacket(image,&pixel);
2541 SetMagickPixelPacket(image,color,(IndexPacket *) NULL,&pixel);
2542 return(QueryMagickColorname(image,&pixel,compliance,name,exception));
2578static MagickStatusType ParseCSSColor(
const char *magick_restrict color,
2590 SetGeometryInfo(geometry_info);
2592 if ((color == (
char *) NULL) || (*color ==
'\0'))
2597 for (i=0; (i < 5) && (*q !=
')') && (*q !=
'\0'); i++)
2606 intensity=(float) StringToDouble(p,&q);
2611 intensity*=0.01*255.0;
2618 geometry_info->rho=intensity;
2620 if (LocaleNCompare(q,
"deg",3) == 0)
2626 geometry_info->sigma=intensity;
2632 geometry_info->xi=intensity;
2638 geometry_info->psi=intensity;
2644 geometry_info->chi=intensity;
2649 while (isspace((
int) ((
unsigned char) *q)) != 0)
2662MagickExport MagickBooleanType QueryMagickColorCompliance(
const char *name,
2686 if ((name == (
char *) NULL) || (*name ==
'\0'))
2687 name=BackgroundColor;
2688 if (IsEventLogging() != MagickFalse)
2689 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",name);
2690 if (strlen(name) > MagickPathExtent)
2692 (void) ThrowMagickException(exception,GetMagickModule(),OptionWarning,
2693 "UnrecognizedColor",
"`%s'",name);
2694 return(MagickFalse);
2696 while (isspace((
int) ((
unsigned char) *name)) != 0)
2698 GetMagickPixelPacket((
Image *) NULL,color);
2705 pixel = { 0, 0, 0, 0, 0 };
2718 for (n=0; isxdigit((
int) ((
unsigned char) name[n])) != 0; n++) ;
2719 if ((n == 3) || (n == 6) || (n == 9) || (n == 12) || (n == 24) ||
2724 pixel.red=pixel.green;
2725 pixel.green=pixel.blue;
2727 for (i=(ssize_t) (n/3-1); i >= 0; i--)
2731 if ((c >=
'0') && (c <=
'9'))
2732 pixel.blue|=(int) (c-
'0');
2734 if ((c >=
'A') && (c <=
'F'))
2735 pixel.blue|=(int) c-((
int)
'A'-10);
2737 if ((c >=
'a') && (c <=
'f'))
2738 pixel.blue|=(int) c-((
int)
'a'-10);
2740 return(MagickFalse);
2742 }
while (isxdigit((
int) ((
unsigned char) *name)) != 0);
2747 if ((n != 4) && (n != 8) && (n != 16) && (n != 32) && (n != 64))
2749 (void) ThrowMagickException(exception,GetMagickModule(),
2750 OptionWarning,
"UnrecognizedColor",
"`%s'",name);
2751 return(MagickFalse);
2755 pixel.red=pixel.green;
2756 pixel.green=pixel.blue;
2757 pixel.blue=pixel.opacity;
2759 for (i=(ssize_t) (n/4-1); i >= 0; i--)
2763 if ((c >=
'0') && (c <=
'9'))
2764 pixel.opacity|=(int) (c-
'0');
2766 if ((c >=
'A') && (c <=
'F'))
2767 pixel.opacity|=(int) c-((
int)
'A'-10);
2769 if ((c >=
'a') && (c <=
'f'))
2770 pixel.opacity|=(int) c-((
int)
'a'-10);
2772 return(MagickFalse);
2774 }
while (isxdigit((
int) ((
unsigned char) *name)) != 0);
2777 color->colorspace=sRGBColorspace;
2779 color->matte=MagickFalse;
2780 range=GetQuantumRange(depth);
2781 color->red=(MagickRealType) ScaleAnyToQuantum(pixel.red,range);
2782 color->green=(MagickRealType) ScaleAnyToQuantum(pixel.green,range);
2783 color->blue=(MagickRealType) ScaleAnyToQuantum(pixel.blue,range);
2784 color->opacity=(MagickRealType) OpaqueOpacity;
2787 color->matte=MagickTrue;
2788 color->opacity=(MagickRealType) (QuantumRange-ScaleAnyToQuantum(
2789 pixel.opacity,range));
2794 if (strchr(name,
'(') != (
char *) NULL)
2797 colorspace[2*MaxTextExtent];
2805 (void) memset(colorspace,0,
sizeof(colorspace));
2806 (void) CopyMagickString(colorspace,name,MaxTextExtent);
2807 for (i=0; colorspace[i] !=
'\0'; i++)
2808 if (colorspace[i] ==
'(')
2810 colorspace[i--]=
'\0';
2811 scale=(double) ScaleCharToQuantum(1);
2812 icc_color=MagickFalse;
2813 if (LocaleNCompare(colorspace,
"device-",7) == 0)
2815 (void) CopyMagickString(colorspace,colorspace+7,MaxTextExtent);
2816 if (strchr(name,
'%') == (
char *) NULL)
2817 scale=(double) QuantumRange;
2818 icc_color=MagickTrue;
2820 if ((LocaleCompare(colorspace,
"color") == 0) ||
2821 (LocaleCompare(colorspace,
"icc-color") == 0))
2826 (void) CopyMagickString(colorspace,name+i+2,MaxTextExtent);
2827 for (j=0; colorspace[j] !=
'\0'; j++)
2828 if ((colorspace[j] ==
' ') || (colorspace[j] ==
','))
2830 colorspace[j--]=
'\0';
2832 scale=(double) QuantumRange;
2833 icc_color=MagickTrue;
2835 LocaleLower(colorspace);
2836 color->matte=MagickFalse;
2837 if ((i > 0) && (colorspace[i] ==
'a'))
2840 color->matte=MagickTrue;
2842 type=ParseCommandOption(MagickColorspaceOptions,MagickFalse,colorspace);
2845 (void) ThrowMagickException(exception,GetMagickModule(),
2846 OptionWarning,
"UnrecognizedColor",
"`%s'",name);
2847 return(MagickFalse);
2849 color->colorspace=(ColorspaceType) type;
2850 if ((icc_color == MagickFalse) && (color->colorspace == RGBColorspace))
2852 color->colorspace=sRGBColorspace;
2855 if (i >= (ssize_t) strlen(name))
2856 flags=ParseCSSColor(name,&geometry_info);
2858 flags=ParseCSSColor(name+i+1,&geometry_info);
2870 colorspace=color->colorspace;
2871 if (i >= (ssize_t) strlen(name))
2872 colorname=AcquireString(name);
2874 colorname=AcquireString(name+i+1);
2875 (void) SubstituteString(&colorname,
"(",
"");
2876 (void) SubstituteString(&colorname,
")",
"");
2878 if (LocaleCompare(name,colorname) != 0)
2879 status=QueryMagickColor(colorname,color,exception);
2880 color->colorspace=colorspace;
2881 if (*colorname ==
'\0')
2883 (void) ThrowMagickException(exception,GetMagickModule(),
2884 OptionWarning,
"UnrecognizedColor",
"`%s'",name);
2887 colorname=DestroyString(colorname);
2890 if ((flags & AlphaValue) != 0)
2891 color->matte=MagickTrue;
2892 if ((flags & RhoValue) != 0)
2893 color->red=(MagickRealType) ClampToQuantum((MagickRealType)
2894 (scale*geometry_info.rho));
2895 if ((flags & SigmaValue) != 0)
2896 color->green=(MagickRealType) ClampToQuantum((MagickRealType)
2897 (scale*geometry_info.sigma));
2898 if ((flags & XiValue) != 0)
2899 color->blue=(MagickRealType) ClampToQuantum((MagickRealType)
2900 (scale*geometry_info.xi));
2901 color->opacity=(MagickRealType) OpaqueOpacity;
2902 if ((flags & PsiValue) != 0)
2904 if (color->colorspace == CMYKColorspace)
2905 color->index=(MagickRealType) ClampToQuantum((MagickRealType)
2906 (scale*geometry_info.psi));
2908 if (color->matte != MagickFalse)
2910 if ((flags & AlphaValue) != 0)
2911 color->opacity=(MagickRealType) ClampToQuantum(
2912 (MagickRealType) (scale*geometry_info.psi));
2914 color->opacity=(MagickRealType) ClampToQuantum(
2915 (MagickRealType) QuantumRange-(MagickRealType) QuantumRange*
2919 if (((flags & ChiValue) != 0) && (color->matte != MagickFalse))
2920 color->opacity=(MagickRealType) ClampToQuantum((MagickRealType)
2921 QuantumRange-(MagickRealType) QuantumRange*geometry_info.chi);
2922 if (IsLabCompatibleColorspace(color->colorspace) != MagickFalse)
2924 color->red=(MagickRealType) ClampToQuantum((MagickRealType)
2925 QuantumRange*geometry_info.rho/100.0);
2926 if ((flags & SigmaValue) != 0)
2927 color->green=(MagickRealType) ClampToQuantum((MagickRealType)
2928 (scale*geometry_info.sigma+((
double) QuantumRange+1.0)/2.0));
2929 if ((flags & XiValue) != 0)
2930 color->blue=(MagickRealType) ClampToQuantum((MagickRealType)
2931 (scale*geometry_info.xi+((
double) QuantumRange+1.0)/2.0));
2933 if ((LocaleCompare(colorspace,
"gray") == 0) ||
2934 (LocaleCompare(colorspace,
"lineargray") == 0))
2936 color->green=color->red;
2937 color->blue=color->red;
2938 if (((flags & SigmaValue) != 0) && (color->matte != MagickFalse))
2939 color->opacity=(MagickRealType) ClampToQuantum((MagickRealType)
2940 ((
double) QuantumRange-(
double) QuantumRange*
2941 geometry_info.sigma));
2943 if ((LocaleCompare(colorspace,
"HCL") == 0) ||
2944 (LocaleCompare(colorspace,
"HSB") == 0) ||
2945 (LocaleCompare(colorspace,
"HSL") == 0) ||
2946 (LocaleCompare(colorspace,
"HSV") == 0) ||
2947 (LocaleCompare(colorspace,
"HWB") == 0))
2953 geometry_info.sigma*=scale;
2954 geometry_info.xi*=scale;
2958 switch (color->colorspace)
2962 ConvertHCLToRGB(fmod(fmod(geometry_info.rho,360.0)+360.0,360.0)/
2963 360.0,geometry_info.sigma,geometry_info.xi,&pixel.red,
2964 &pixel.green,&pixel.blue);
2969 ConvertHSBToRGB(fmod(fmod(geometry_info.rho,360.0)+360.0,
2970 360.0)/360.0,geometry_info.sigma,geometry_info.xi,
2971 &pixel.red,&pixel.green,&pixel.blue);
2976 ConvertHSLToRGB(fmod(fmod(geometry_info.rho,360.0)+360.0,
2977 360.0)/360.0,geometry_info.sigma,geometry_info.xi,
2978 &pixel.red,&pixel.green,&pixel.blue);
2983 ConvertHSVToRGB(fmod(fmod(geometry_info.rho,360.0)+360.0,
2984 360.0)/360.0,geometry_info.sigma,geometry_info.xi,
2985 &pixel.red,&pixel.green,&pixel.blue);
2990 ConvertHWBToRGB(fmod(fmod(geometry_info.rho,360.0)+360.0,
2991 360.0)/360.0,geometry_info.sigma,geometry_info.xi,
2992 &pixel.red,&pixel.green,&pixel.blue);
2998 color->colorspace=sRGBColorspace;
2999 color->red=(MagickRealType) pixel.red;
3000 color->green=(MagickRealType) pixel.green;
3001 color->blue=(MagickRealType) pixel.blue;
3008 p=GetColorCompliance(name,compliance,exception);
3010 return(MagickFalse);
3011 color->colorspace=sRGBColorspace;
3012 if ((LocaleNCompare(name,
"gray",4) == 0) ||
3013 (LocaleNCompare(name,
"grey",4) == 0))
3014 color->colorspace=GRAYColorspace;
3016 color->matte=p->color.opacity != (double) OpaqueOpacity ? MagickTrue :
3018 color->red=(MagickRealType) p->color.red;
3019 color->green=(MagickRealType) p->color.green;
3020 color->blue=(MagickRealType) p->color.blue;
3021 color->opacity=(MagickRealType) p->color.opacity;
3055MagickExport MagickBooleanType QueryMagickColor(
const char *name,
3058 return(QueryMagickColorCompliance(name,AllCompliance,color,exception));
3096MagickExport MagickBooleanType QueryMagickColorname(
const Image *image,
3111 if (compliance == XPMCompliance)
3113 pixel.matte=MagickFalse;
3114 pixel.depth=(size_t) MagickMin(1.0*image->depth,16.0);
3116 GetColorTuple(&pixel,compliance != SVGCompliance ? MagickTrue : MagickFalse,
3118 if (IssRGBColorspace(pixel.colorspace) == MagickFalse)
3119 return(MagickFalse);
3120 (void) GetColorInfo(
"*",exception);
3121 ResetLinkedListIterator(color_cache);
3122 opacity=image->matte != MagickFalse ? color->opacity : (double) OpaqueOpacity;
3123 p=(
const ColorInfo *) GetNextValueInLinkedList(color_cache);
3126 if (((p->compliance & compliance) != 0) && ((p->color.red == color->red)) &&
3127 (p->color.green == color->green) && (p->color.blue == color->blue) &&
3128 (p->color.opacity == opacity))
3130 (void) CopyMagickString(name,p->name,MaxTextExtent);
3133 p=(
const ColorInfo *) GetNextValueInLinkedList(color_cache);