| 1 | |
|---|
| 2 | |
|---|
| 3 | |
|---|
| 4 | |
|---|
| 5 | |
|---|
| 6 | |
|---|
| 7 | |
|---|
| 8 | |
|---|
| 9 | |
|---|
| 10 | |
|---|
| 11 | |
|---|
| 12 | |
|---|
| 13 | |
|---|
| 14 | |
|---|
| 15 | |
|---|
| 16 | |
|---|
| 17 | |
|---|
| 18 | |
|---|
| 19 | |
|---|
| 20 | |
|---|
| 21 | |
|---|
| 22 | |
|---|
| 23 | |
|---|
| 24 | |
|---|
| 25 | |
|---|
| 26 | |
|---|
| 27 | |
|---|
| 28 | |
|---|
| 29 | |
|---|
| 30 | |
|---|
| 31 | |
|---|
| 32 | |
|---|
| 33 | |
|---|
| 34 | |
|---|
| 35 | |
|---|
| 36 | |
|---|
| 37 | |
|---|
| 38 | |
|---|
| 39 | |
|---|
| 40 | |
|---|
| 41 | #include "magick/studio.h" |
|---|
| 42 | #include "magick/blob.h" |
|---|
| 43 | #include "magick/cache-view.h" |
|---|
| 44 | #include "magick/color.h" |
|---|
| 45 | #include "magick/color-private.h" |
|---|
| 46 | #include "magick/client.h" |
|---|
| 47 | #include "magick/configure.h" |
|---|
| 48 | #include "magick/exception.h" |
|---|
| 49 | #include "magick/exception-private.h" |
|---|
| 50 | #include "magick/gem.h" |
|---|
| 51 | #include "magick/geometry.h" |
|---|
| 52 | #include "magick/image-private.h" |
|---|
| 53 | #include "magick/memory_.h" |
|---|
| 54 | #include "magick/monitor.h" |
|---|
| 55 | #include "magick/pixel-private.h" |
|---|
| 56 | #include "magick/quantize.h" |
|---|
| 57 | #include "magick/quantum.h" |
|---|
| 58 | #include "magick/semaphore.h" |
|---|
| 59 | #include "magick/string_.h" |
|---|
| 60 | #include "magick/token.h" |
|---|
| 61 | #include "magick/utility.h" |
|---|
| 62 | #include "magick/xml-tree.h" |
|---|
| 63 | |
|---|
| 64 | |
|---|
| 65 | |
|---|
| 66 | |
|---|
| 67 | #define ColorFilename "colors.xml" |
|---|
| 68 | #define MaxTreeDepth 8 |
|---|
| 69 | #define NodesInAList 1536 |
|---|
| 70 | |
|---|
| 71 | |
|---|
| 72 | |
|---|
| 73 | |
|---|
| 74 | static const char |
|---|
| 75 |  *ColorMap = (const char *) |
|---|
| 76 | Â Â "<?xml version=\"1.0\"?>" |
|---|
| 77 | Â Â "<colormap>" |
|---|
| 78 | Â Â "Â <color name=\"none\" color=\"rgb(0,0,0,0)\" compliance=\"SVG\" />" |
|---|
| 79 | Â Â "Â <color name=\"black\" color=\"rgb(0,0,0)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 80 | Â Â "Â <color name=\"red\" color=\"rgb(255,0,0)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 81 | Â Â "Â <color name=\"magenta\" color=\"rgb(255,0,255)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 82 | Â Â "Â <color name=\"green\" color=\"rgb(0,128,0)\" compliance=\"SVG\" />" |
|---|
| 83 | Â Â "Â <color name=\"cyan\" color=\"rgb(0,255,255)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 84 | Â Â "Â <color name=\"blue\" color=\"rgb(0,0,255)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 85 | Â Â "Â <color name=\"yellow\" color=\"rgb(255,255,0)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 86 | Â Â "Â <color name=\"white\" color=\"rgb(255,255,255)\" compliance=\"SVG, X11\" />" |
|---|
| 87 | Â Â "Â <color name=\"AliceBlue\" color=\"rgb(240,248,255)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 88 | Â Â "Â <color name=\"AntiqueWhite\" color=\"rgb(250,235,215)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 89 | Â Â "Â <color name=\"aqua\" color=\"rgb(0,255,255)\" compliance=\"SVG\" />" |
|---|
| 90 | Â Â "Â <color name=\"aquamarine\" color=\"rgb(127,255,212)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 91 | Â Â "Â <color name=\"azure\" color=\"rgb(240,255,255)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 92 | Â Â "Â <color name=\"beige\" color=\"rgb(245,245,220)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 93 | Â Â "Â <color name=\"bisque\" color=\"rgb(255,228,196)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 94 | Â Â "Â <color name=\"BlanchedAlmond\" color=\"rgb(255,235,205)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 95 | Â Â "Â <color name=\"BlueViolet\" color=\"rgb(138,43,226)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 96 | Â Â "Â <color name=\"brown\" color=\"rgb(165,42,42)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 97 | Â Â "Â <color name=\"burlywood\" color=\"rgb(222,184,135)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 98 | Â Â "Â <color name=\"CadetBlue\" color=\"rgb(95,158,160)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 99 | Â Â "Â <color name=\"chartreuse\" color=\"rgb(127,255,0)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 100 | Â Â "Â <color name=\"chocolate\" color=\"rgb(210,105,30)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 101 | Â Â "Â <color name=\"coral\" color=\"rgb(255,127,80)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 102 | Â Â "Â <color name=\"CornflowerBlue\" color=\"rgb(100,149,237)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 103 | Â Â "Â <color name=\"cornsilk\" color=\"rgb(255,248,220)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 104 | Â Â "Â <color name=\"crimson\" color=\"rgb(220,20,60)\" compliance=\"SVG\" />" |
|---|
| 105 | Â Â "Â <color name=\"DarkBlue\" color=\"rgb(0,0,139)\" compliance=\"SVG, X11\" />" |
|---|
| 106 | Â Â "Â <color name=\"DarkCyan\" color=\"rgb(0,139,139)\" compliance=\"SVG, X11\" />" |
|---|
| 107 | Â Â "Â <color name=\"DarkGoldenrod\" color=\"rgb(184,134,11)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 108 | Â Â "Â <color name=\"DarkGray\" color=\"rgb(169,169,169)\" compliance=\"SVG, X11\" />" |
|---|
| 109 | Â Â "Â <color name=\"DarkGreen\" color=\"rgb(0,100,0)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 110 | Â Â "Â <color name=\"DarkGrey\" color=\"rgb(169,169,169)\" compliance=\"SVG, X11\" />" |
|---|
| 111 | Â Â "Â <color name=\"DarkKhaki\" color=\"rgb(189,183,107)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 112 | Â Â "Â <color name=\"DarkMagenta\" color=\"rgb(139,0,139)\" compliance=\"SVG, X11\" />" |
|---|
| 113 | Â Â "Â <color name=\"DarkOliveGreen\" color=\"rgb(85,107,47)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 114 | Â Â "Â <color name=\"DarkOrange\" color=\"rgb(255,140,0)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 115 | Â Â "Â <color name=\"DarkOrchid\" color=\"rgb(153,50,204)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 116 | Â Â "Â <color name=\"DarkRed\" color=\"rgb(139,0,0)\" compliance=\"SVG, X11\" />" |
|---|
| 117 | Â Â "Â <color name=\"DarkSalmon\" color=\"rgb(233,150,122)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 118 | Â Â "Â <color name=\"DarkSeaGreen\" color=\"rgb(143,188,143)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 119 | Â Â "Â <color name=\"DarkSlateBlue\" color=\"rgb(72,61,139)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 120 | Â Â "Â <color name=\"DarkSlateGray\" color=\"rgb(47,79,79)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 121 | Â Â "Â <color name=\"DarkSlateGrey\" color=\"rgb(47,79,79)\" compliance=\"SVG, X11\" />" |
|---|
| 122 | Â Â "Â <color name=\"DarkTurquoise\" color=\"rgb(0,206,209)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 123 | Â Â "Â <color name=\"DarkViolet\" color=\"rgb(148,0,211)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 124 | Â Â "Â <color name=\"DeepPink\" color=\"rgb(255,20,147)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 125 | Â Â "Â <color name=\"DeepSkyBlue\" color=\"rgb(0,191,255)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 126 | Â Â "Â <color name=\"DimGray\" color=\"rgb(105,105,105)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 127 | Â Â "Â <color name=\"DimGrey\" color=\"rgb(105,105,105)\" compliance=\"SVG, X11\" />" |
|---|
| 128 | Â Â "Â <color name=\"DodgerBlue\" color=\"rgb(30,144,255)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 129 | Â Â "Â <color name=\"firebrick\" color=\"rgb(178,34,34)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 130 | Â Â "Â <color name=\"FloralWhite\" color=\"rgb(255,250,240)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 131 | Â Â "Â <color name=\"ForestGreen\" color=\"rgb(34,139,34)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 132 | Â Â "Â <color name=\"fractal\" color=\"rgb(128,128,128)\" compliance=\"SVG\" />" |
|---|
| 133 | Â Â "Â <color name=\"fuchsia\" color=\"rgb(255,0,255)\" compliance=\"SVG\" />" |
|---|
| 134 | Â Â "Â <color name=\"gainsboro\" color=\"rgb(220,220,220)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 135 | Â Â "Â <color name=\"GhostWhite\" color=\"rgb(248,248,255)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 136 | Â Â "Â <color name=\"gold\" color=\"rgb(255,215,0)\" compliance=\"X11, XPM\" />" |
|---|
| 137 | Â Â "Â <color name=\"goldenrod\" color=\"rgb(218,165,32)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 138 | Â Â "Â <color name=\"gray\" color=\"rgb(126,126,126)\" compliance=\"SVG\" />" |
|---|
| 139 | Â Â "Â <color name=\"gray74\" color=\"rgb(189,189,189)\" compliance=\"SVG, X11\" />" |
|---|
| 140 | Â Â "Â <color name=\"gray100\" color=\"rgb(255,255,255)\" compliance=\"SVG, X11\" />" |
|---|
| 141 | Â Â "Â <color name=\"grey\" color=\"rgb(190,190,190)\" compliance=\"SVG, X11\" />" |
|---|
| 142 | Â Â "Â <color name=\"grey0\" color=\"rgb(0,0,0)\" compliance=\"SVG, X11\" />" |
|---|
| 143 | Â Â "Â <color name=\"grey1\" color=\"rgb(3,3,3)\" compliance=\"SVG, X11\" />" |
|---|
| 144 | Â Â "Â <color name=\"grey10\" color=\"rgb(26,26,26)\" compliance=\"SVG, X11\" />" |
|---|
| 145 | Â Â "Â <color name=\"grey100\" color=\"rgb(255,255,255)\" compliance=\"SVG, X11\" />" |
|---|
| 146 | Â Â "Â <color name=\"grey11\" color=\"rgb(28,28,28)\" compliance=\"SVG, X11\" />" |
|---|
| 147 | Â Â "Â <color name=\"grey12\" color=\"rgb(31,31,31)\" compliance=\"SVG, X11\" />" |
|---|
| 148 | Â Â "Â <color name=\"grey13\" color=\"rgb(33,33,33)\" compliance=\"SVG, X11\" />" |
|---|
| 149 | Â Â "Â <color name=\"grey14\" color=\"rgb(36,36,36)\" compliance=\"SVG, X11\" />" |
|---|
| 150 | Â Â "Â <color name=\"grey15\" color=\"rgb(38,38,38)\" compliance=\"SVG, X11\" />" |
|---|
| 151 | Â Â "Â <color name=\"grey16\" color=\"rgb(41,41,41)\" compliance=\"SVG, X11\" />" |
|---|
| 152 | Â Â "Â <color name=\"grey17\" color=\"rgb(43,43,43)\" compliance=\"SVG, X11\" />" |
|---|
| 153 | Â Â "Â <color name=\"grey18\" color=\"rgb(45,45,45)\" compliance=\"SVG, X11\" />" |
|---|
| 154 | Â Â "Â <color name=\"grey19\" color=\"rgb(48,48,48)\" compliance=\"SVG, X11\" />" |
|---|
| 155 | Â Â "Â <color name=\"grey2\" color=\"rgb(5,5,5)\" compliance=\"SVG, X11\" />" |
|---|
| 156 | Â Â "Â <color name=\"grey20\" color=\"rgb(51,51,51)\" compliance=\"SVG, X11\" />" |
|---|
| 157 | Â Â "Â <color name=\"grey21\" color=\"rgb(54,54,54)\" compliance=\"SVG, X11\" />" |
|---|
| 158 | Â Â "Â <color name=\"grey22\" color=\"rgb(56,56,56)\" compliance=\"SVG, X11\" />" |
|---|
| 159 | Â Â "Â <color name=\"grey23\" color=\"rgb(59,59,59)\" compliance=\"SVG, X11\" />" |
|---|
| 160 | Â Â "Â <color name=\"grey24\" color=\"rgb(61,61,61)\" compliance=\"SVG, X11\" />" |
|---|
| 161 | Â Â "Â <color name=\"grey25\" color=\"rgb(64,64,64)\" compliance=\"SVG, X11\" />" |
|---|
| 162 | Â Â "Â <color name=\"grey26\" color=\"rgb(66,66,66)\" compliance=\"SVG, X11\" />" |
|---|
| 163 | Â Â "Â <color name=\"grey27\" color=\"rgb(69,69,69)\" compliance=\"SVG, X11\" />" |
|---|
| 164 | Â Â "Â <color name=\"grey28\" color=\"rgb(71,71,71)\" compliance=\"SVG, X11\" />" |
|---|
| 165 | Â Â "Â <color name=\"grey29\" color=\"rgb(74,74,74)\" compliance=\"SVG, X11\" />" |
|---|
| 166 | Â Â "Â <color name=\"grey3\" color=\"rgb(8,8,8)\" compliance=\"SVG, X11\" />" |
|---|
| 167 | Â Â "Â <color name=\"grey30\" color=\"rgb(77,77,77)\" compliance=\"SVG, X11\" />" |
|---|
| 168 | Â Â "Â <color name=\"grey31\" color=\"rgb(79,79,79)\" compliance=\"SVG, X11\" />" |
|---|
| 169 | Â Â "Â <color name=\"grey32\" color=\"rgb(82,82,82)\" compliance=\"SVG, X11\" />" |
|---|
| 170 | Â Â "Â <color name=\"grey33\" color=\"rgb(84,84,84)\" compliance=\"SVG, X11\" />" |
|---|
| 171 | Â Â "Â <color name=\"grey34\" color=\"rgb(87,87,87)\" compliance=\"SVG, X11\" />" |
|---|
| 172 | Â Â "Â <color name=\"grey35\" color=\"rgb(89,89,89)\" compliance=\"SVG, X11\" />" |
|---|
| 173 | Â Â "Â <color name=\"grey36\" color=\"rgb(92,92,92)\" compliance=\"SVG, X11\" />" |
|---|
| 174 | Â Â "Â <color name=\"grey37\" color=\"rgb(94,94,94)\" compliance=\"SVG, X11\" />" |
|---|
| 175 | Â Â "Â <color name=\"grey38\" color=\"rgb(97,97,97)\" compliance=\"SVG, X11\" />" |
|---|
| 176 | Â Â "Â <color name=\"grey39\" color=\"rgb(99,99,99)\" compliance=\"SVG, X11\" />" |
|---|
| 177 | Â Â "Â <color name=\"grey4\" color=\"rgb(10,10,10)\" compliance=\"SVG, X11\" />" |
|---|
| 178 | Â Â "Â <color name=\"grey40\" color=\"rgb(102,102,102)\" compliance=\"SVG, X11\" />" |
|---|
| 179 | Â Â "Â <color name=\"grey41\" color=\"rgb(105,105,105)\" compliance=\"SVG, X11\" />" |
|---|
| 180 | Â Â "Â <color name=\"grey42\" color=\"rgb(107,107,107)\" compliance=\"SVG, X11\" />" |
|---|
| 181 | Â Â "Â <color name=\"grey43\" color=\"rgb(110,110,110)\" compliance=\"SVG, X11\" />" |
|---|
| 182 | Â Â "Â <color name=\"grey44\" color=\"rgb(112,112,112)\" compliance=\"SVG, X11\" />" |
|---|
| 183 | Â Â "Â <color name=\"grey45\" color=\"rgb(115,115,115)\" compliance=\"SVG, X11\" />" |
|---|
| 184 | Â Â "Â <color name=\"grey45\" color=\"rgb(117,117,117)\" compliance=\"SVG, X11\" />" |
|---|
| 185 | Â Â "Â <color name=\"grey47\" color=\"rgb(120,120,120)\" compliance=\"SVG, X11\" />" |
|---|
| 186 | Â Â "Â <color name=\"grey48\" color=\"rgb(122,122,122)\" compliance=\"SVG, X11\" />" |
|---|
| 187 | Â Â "Â <color name=\"grey49\" color=\"rgb(125,125,125)\" compliance=\"SVG, X11\" />" |
|---|
| 188 | Â Â "Â <color name=\"grey5\" color=\"rgb(13,13,13)\" compliance=\"SVG, X11\" />" |
|---|
| 189 | Â Â "Â <color name=\"grey50\" color=\"rgb(50%,50%,50%)\" compliance=\"SVG, X11\" />" |
|---|
| 190 | Â Â "Â <color name=\"grey51\" color=\"rgb(130,130,130)\" compliance=\"SVG, X11\" />" |
|---|
| 191 | Â Â "Â <color name=\"grey52\" color=\"rgb(133,133,133)\" compliance=\"SVG, X11\" />" |
|---|
| 192 | Â Â "Â <color name=\"grey53\" color=\"rgb(135,135,135)\" compliance=\"SVG, X11\" />" |
|---|
| 193 | Â Â "Â <color name=\"grey54\" color=\"rgb(138,138,138)\" compliance=\"SVG, X11\" />" |
|---|
| 194 | Â Â "Â <color name=\"grey55\" color=\"rgb(140,140,140)\" compliance=\"SVG, X11\" />" |
|---|
| 195 | Â Â "Â <color name=\"grey56\" color=\"rgb(143,143,143)\" compliance=\"SVG, X11\" />" |
|---|
| 196 | Â Â "Â <color name=\"grey57\" color=\"rgb(145,145,145)\" compliance=\"SVG, X11\" />" |
|---|
| 197 | Â Â "Â <color name=\"grey58\" color=\"rgb(148,148,148)\" compliance=\"SVG, X11\" />" |
|---|
| 198 | Â Â "Â <color name=\"grey59\" color=\"rgb(150,150,150)\" compliance=\"SVG, X11\" />" |
|---|
| 199 | Â Â "Â <color name=\"grey6\" color=\"rgb(15,15,15)\" compliance=\"SVG, X11\" />" |
|---|
| 200 | Â Â "Â <color name=\"grey60\" color=\"rgb(153,153,153)\" compliance=\"SVG, X11\" />" |
|---|
| 201 | Â Â "Â <color name=\"grey61\" color=\"rgb(156,156,156)\" compliance=\"SVG, X11\" />" |
|---|
| 202 | Â Â "Â <color name=\"grey62\" color=\"rgb(158,158,158)\" compliance=\"SVG, X11\" />" |
|---|
| 203 | Â Â "Â <color name=\"grey63\" color=\"rgb(161,161,161)\" compliance=\"SVG, X11\" />" |
|---|
| 204 | Â Â "Â <color name=\"grey64\" color=\"rgb(163,163,163)\" compliance=\"SVG, X11\" />" |
|---|
| 205 | Â Â "Â <color name=\"grey65\" color=\"rgb(166,166,166)\" compliance=\"SVG, X11\" />" |
|---|
| 206 | Â Â "Â <color name=\"grey66\" color=\"rgb(168,168,168)\" compliance=\"SVG, X11\" />" |
|---|
| 207 | Â Â "Â <color name=\"grey67\" color=\"rgb(171,171,171)\" compliance=\"SVG, X11\" />" |
|---|
| 208 | Â Â "Â <color name=\"grey68\" color=\"rgb(173,173,173)\" compliance=\"SVG, X11\" />" |
|---|
| 209 | Â Â "Â <color name=\"grey69\" color=\"rgb(176,176,176)\" compliance=\"SVG, X11\" />" |
|---|
| 210 | Â Â "Â <color name=\"grey7\" color=\"rgb(18,18,18)\" compliance=\"SVG, X11\" />" |
|---|
| 211 | Â Â "Â <color name=\"grey70\" color=\"rgb(179,179,179)\" compliance=\"SVG, X11\" />" |
|---|
| 212 | Â Â "Â <color name=\"grey71\" color=\"rgb(181,181,181)\" compliance=\"SVG, X11\" />" |
|---|
| 213 | Â Â "Â <color name=\"grey72\" color=\"rgb(184,184,184)\" compliance=\"SVG, X11\" />" |
|---|
| 214 | Â Â "Â <color name=\"grey73\" color=\"rgb(186,186,186)\" compliance=\"SVG, X11\" />" |
|---|
| 215 | Â Â "Â <color name=\"grey74\" color=\"rgb(189,189,189)\" compliance=\"SVG, X11\" />" |
|---|
| 216 | Â Â "Â <color name=\"grey75\" color=\"rgb(191,191,191)\" compliance=\"SVG, X11\" />" |
|---|
| 217 | Â Â "Â <color name=\"grey76\" color=\"rgb(194,194,194)\" compliance=\"SVG, X11\" />" |
|---|
| 218 | Â Â "Â <color name=\"grey77\" color=\"rgb(196,196,196)\" compliance=\"SVG, X11\" />" |
|---|
| 219 | Â Â "Â <color name=\"grey78\" color=\"rgb(199,199,199)\" compliance=\"SVG, X11\" />" |
|---|
| 220 | Â Â "Â <color name=\"grey79\" color=\"rgb(201,201,201)\" compliance=\"SVG, X11\" />" |
|---|
| 221 | Â Â "Â <color name=\"grey8\" color=\"rgb(20,20,20)\" compliance=\"SVG, X11\" />" |
|---|
| 222 | Â Â "Â <color name=\"grey80\" color=\"rgb(204,204,204)\" compliance=\"SVG, X11\" />" |
|---|
| 223 | Â Â "Â <color name=\"grey81\" color=\"rgb(207,207,207)\" compliance=\"SVG, X11\" />" |
|---|
| 224 | Â Â "Â <color name=\"grey82\" color=\"rgb(209,209,209)\" compliance=\"SVG, X11\" />" |
|---|
| 225 | Â Â "Â <color name=\"grey83\" color=\"rgb(212,212,212)\" compliance=\"SVG, X11\" />" |
|---|
| 226 | Â Â "Â <color name=\"grey84\" color=\"rgb(214,214,214)\" compliance=\"SVG, X11\" />" |
|---|
| 227 | Â Â "Â <color name=\"grey85\" color=\"rgb(217,217,217)\" compliance=\"SVG, X11\" />" |
|---|
| 228 | Â Â "Â <color name=\"grey86\" color=\"rgb(219,219,219)\" compliance=\"SVG, X11\" />" |
|---|
| 229 | Â Â "Â <color name=\"grey87\" color=\"rgb(222,222,222)\" compliance=\"SVG, X11\" />" |
|---|
| 230 | Â Â "Â <color name=\"grey88\" color=\"rgb(224,224,224)\" compliance=\"SVG, X11\" />" |
|---|
| 231 | Â Â "Â <color name=\"grey89\" color=\"rgb(227,227,227)\" compliance=\"SVG, X11\" />" |
|---|
| 232 | Â Â "Â <color name=\"grey9\" color=\"rgb(23,23,23)\" compliance=\"SVG, X11\" />" |
|---|
| 233 | Â Â "Â <color name=\"grey90\" color=\"rgb(229,229,229)\" compliance=\"SVG, X11\" />" |
|---|
| 234 | Â Â "Â <color name=\"grey91\" color=\"rgb(232,232,232)\" compliance=\"SVG, X11\" />" |
|---|
| 235 | Â Â "Â <color name=\"grey92\" color=\"rgb(235,235,235)\" compliance=\"SVG, X11\" />" |
|---|
| 236 | Â Â "Â <color name=\"grey93\" color=\"rgb(237,237,237)\" compliance=\"SVG, X11\" />" |
|---|
| 237 | Â Â "Â <color name=\"grey94\" color=\"rgb(240,240,240)\" compliance=\"SVG, X11\" />" |
|---|
| 238 | Â Â "Â <color name=\"grey95\" color=\"rgb(242,242,242)\" compliance=\"SVG, X11\" />" |
|---|
| 239 | Â Â "Â <color name=\"grey96\" color=\"rgb(245,245,245)\" compliance=\"SVG, X11\" />" |
|---|
| 240 | Â Â "Â <color name=\"grey97\" color=\"rgb(247,247,247)\" compliance=\"SVG, X11\" />" |
|---|
| 241 | Â Â "Â <color name=\"grey98\" color=\"rgb(250,250,250)\" compliance=\"SVG, X11\" />" |
|---|
| 242 | Â Â "Â <color name=\"grey99\" color=\"rgb(252,252,252)\" compliance=\"SVG, X11\" />" |
|---|
| 243 | Â Â "Â <color name=\"honeydew\" color=\"rgb(240,255,240)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 244 | Â Â "Â <color name=\"HotPink\" color=\"rgb(255,105,180)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 245 | Â Â "Â <color name=\"IndianRed\" color=\"rgb(205,92,92)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 246 | Â Â "Â <color name=\"indigo\" color=\"rgb(75,0,130)\" compliance=\"SVG\" />" |
|---|
| 247 | Â Â "Â <color name=\"ivory\" color=\"rgb(255,255,240)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 248 | Â Â "Â <color name=\"khaki\" color=\"rgb(240,230,140)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 249 | Â Â "Â <color name=\"lavender\" color=\"rgb(230,230,250)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 250 | Â Â "Â <color name=\"LavenderBlush\" color=\"rgb(255,240,245)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 251 | Â Â "Â <color name=\"LawnGreen\" color=\"rgb(124,252,0)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 252 | Â Â "Â <color name=\"LemonChiffon\" color=\"rgb(255,250,205)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 253 | Â Â "Â <color name=\"LightBlue\" color=\"rgb(173,216,230)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 254 | Â Â "Â <color name=\"LightCoral\" color=\"rgb(240,128,128)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 255 | Â Â "Â <color name=\"LightCyan\" color=\"rgb(224,255,255)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 256 | Â Â "Â <color name=\"LightGoldenrodYellow\" color=\"rgb(250,250,210)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 257 | Â Â "Â <color name=\"LightGray\" color=\"rgb(211,211,211)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 258 | Â Â "Â <color name=\"LightGreen\" color=\"rgb(144,238,144)\" compliance=\"SVG, X11\" />" |
|---|
| 259 | Â Â "Â <color name=\"LightGrey\" color=\"rgb(211,211,211)\" compliance=\"SVG, X11\" />" |
|---|
| 260 | Â Â "Â <color name=\"LightPink\" color=\"rgb(255,182,193)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 261 | Â Â "Â <color name=\"LightSalmon\" color=\"rgb(255,160,122)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 262 | Â Â "Â <color name=\"LightSeaGreen\" color=\"rgb(32,178,170)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 263 | Â Â "Â <color name=\"LightSkyBlue\" color=\"rgb(135,206,250)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 264 | Â Â "Â <color name=\"LightSlateGray\" color=\"rgb(119,136,153)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 265 | Â Â "Â <color name=\"LightSlateGrey\" color=\"rgb(119,136,153)\" compliance=\"SVG, X11\" />" |
|---|
| 266 | Â Â "Â <color name=\"LightSteelBlue\" color=\"rgb(176,196,222)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 267 | Â Â "Â <color name=\"LightYellow\" color=\"rgb(255,255,224)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 268 | Â Â "Â <color name=\"lime\" color=\"rgb(0,255,0)\" compliance=\"SVG\" />" |
|---|
| 269 | Â Â "Â <color name=\"LimeGreen\" color=\"rgb(50,205,50)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 270 | Â Â "Â <color name=\"linen\" color=\"rgb(250,240,230)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 271 | Â Â "Â <color name=\"maroon\" color=\"rgb(128,0,0)\" compliance=\"SVG\" />" |
|---|
| 272 | Â Â "Â <color name=\"MediumAquamarine\" color=\"rgb(102,205,170)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 273 | Â Â "Â <color name=\"MediumBlue\" color=\"rgb(0,0,205)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 274 | Â Â "Â <color name=\"MediumOrchid\" color=\"rgb(186,85,211)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 275 | Â Â "Â <color name=\"MediumPurple\" color=\"rgb(147,112,219)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 276 | Â Â "Â <color name=\"MediumSeaGreen\" color=\"rgb(60,179,113)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 277 | Â Â "Â <color name=\"MediumSlateBlue\" color=\"rgb(123,104,238)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 278 | Â Â "Â <color name=\"MediumSpringGreen\" color=\"rgb(0,250,154)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 279 | Â Â "Â <color name=\"MediumTurquoise\" color=\"rgb(72,209,204)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 280 | Â Â "Â <color name=\"MediumVioletRed\" color=\"rgb(199,21,133)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 281 | Â Â "Â <color name=\"MidnightBlue\" color=\"rgb(25,25,112)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 282 | Â Â "Â <color name=\"MintCream\" color=\"rgb(245,255,250)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 283 | Â Â "Â <color name=\"MistyRose\" color=\"rgb(255,228,225)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 284 | Â Â "Â <color name=\"moccasin\" color=\"rgb(255,228,181)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 285 | Â Â "Â <color name=\"NavajoWhite\" color=\"rgb(255,222,173)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 286 | Â Â "Â <color name=\"navy\" color=\"rgb(0,0,128)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 287 | Â Â "Â <color name=\"matte\" color=\"rgb(0,0,0,0)\" compliance=\"SVG\" />" |
|---|
| 288 | Â Â "Â <color name=\"OldLace\" color=\"rgb(253,245,230)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 289 | Â Â "Â <color name=\"olive\" color=\"rgb(128,128,0)\" compliance=\"SVG\" />" |
|---|
| 290 | Â Â "Â <color name=\"OliveDrab\" color=\"rgb(107,142,35)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 291 | Â Â "Â <color name=\"opaque\" color=\"rgba(0,0,0)\" compliance=\"SVG\" />" |
|---|
| 292 | Â Â "Â <color name=\"orange\" color=\"rgb(255,165,0)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 293 | Â Â "Â <color name=\"OrangeRed\" color=\"rgb(255,69,0)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 294 | Â Â "Â <color name=\"orchid\" color=\"rgb(218,112,214)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 295 | Â Â "Â <color name=\"PaleGoldenrod\" color=\"rgb(238,232,170)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 296 | Â Â "Â <color name=\"PaleGreen\" color=\"rgb(152,251,152)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 297 | Â Â "Â <color name=\"PaleTurquoise\" color=\"rgb(175,238,238)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 298 | Â Â "Â <color name=\"PaleVioletRed\" color=\"rgb(219,112,147)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 299 | Â Â "Â <color name=\"PapayaWhip\" color=\"rgb(255,239,213)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 300 | Â Â "Â <color name=\"PeachPuff\" color=\"rgb(255,218,185)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 301 | Â Â "Â <color name=\"peru\" color=\"rgb(205,133,63)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 302 | Â Â "Â <color name=\"pink\" color=\"rgb(255,192,203)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 303 | Â Â "Â <color name=\"plum\" color=\"rgb(221,160,221)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 304 | Â Â "Â <color name=\"PowderBlue\" color=\"rgb(176,224,230)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 305 | Â Â "Â <color name=\"purple\" color=\"rgb(128,0,128)\" compliance=\"SVG\" />" |
|---|
| 306 | Â Â "Â <color name=\"RosyBrown\" color=\"rgb(188,143,143)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 307 | Â Â "Â <color name=\"RoyalBlue\" color=\"rgb(65,105,225)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 308 | Â Â "Â <color name=\"SaddleBrown\" color=\"rgb(139,69,19)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 309 | Â Â "Â <color name=\"salmon\" color=\"rgb(250,128,114)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 310 | Â Â "Â <color name=\"SandyBrown\" color=\"rgb(244,164,96)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 311 | Â Â "Â <color name=\"SeaGreen\" color=\"rgb(45,139,87)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 312 | Â Â "Â <color name=\"seashell\" color=\"rgb(255,245,238)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 313 | Â Â "Â <color name=\"sienna\" color=\"rgb(160,82,45)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 314 | Â Â "Â <color name=\"silver\" color=\"rgb(192,192,192)\" compliance=\"SVG\" />" |
|---|
| 315 | Â Â "Â <color name=\"SkyBlue\" color=\"rgb(135,206,235)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 316 | Â Â "Â <color name=\"SlateBlue\" color=\"rgb(106,90,205)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 317 | Â Â "Â <color name=\"SlateGray\" color=\"rgb(112,128,144)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 318 | Â Â "Â <color name=\"SlateGrey\" color=\"rgb(112,128,144)\" compliance=\"SVG, X11\" />" |
|---|
| 319 | Â Â "Â <color name=\"snow\" color=\"rgb(255,250,250)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 320 | Â Â "Â <color name=\"SpringGreen\" color=\"rgb(0,255,127)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 321 | Â Â "Â <color name=\"SteelBlue\" color=\"rgb(70,130,180)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 322 | Â Â "Â <color name=\"tan\" color=\"rgb(210,180,140)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 323 | Â Â "Â <color name=\"teal\" color=\"rgb(0,128,128)\" compliance=\"SVG\" />" |
|---|
| 324 | Â Â "Â <color name=\"thistle\" color=\"rgb(216,191,216)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 325 | Â Â "Â <color name=\"tomato\" color=\"rgb(255,99,71)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 326 | Â Â "Â <color name=\"transparent\" color=\"rgb(0,0,0,0)\" compliance=\"SVG\" />" |
|---|
| 327 | Â Â "Â <color name=\"turquoise\" color=\"rgb(64,224,208)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 328 | Â Â "Â <color name=\"violet\" color=\"rgb(238,130,238)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 329 | Â Â "Â <color name=\"wheat\" color=\"rgb(245,222,179)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 330 | Â Â "Â <color name=\"WhiteSmoke\" color=\"rgb(245,245,245)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 331 | Â Â "Â <color name=\"YellowGreen\" color=\"rgb(154,205,50)\" compliance=\"SVG, X11, XPM\" />" |
|---|
| 332 | Â Â "</colormap>"; |
|---|
| 333 | |
|---|
| 334 | |
|---|
| 335 | |
|---|
| 336 | |
|---|
| 337 | typedef struct _NodeInfo |
|---|
| 338 | { |
|---|
| 339 |  struct _NodeInfo |
|---|
| 340 | Â Â *child[16]; |
|---|
| 341 | |
|---|
| 342 | Â ColorPacket |
|---|
| 343 | Â Â *list; |
|---|
| 344 | |
|---|
| 345 | Â MagickSizeType |
|---|
| 346 | Â Â number_unique; |
|---|
| 347 | |
|---|
| 348 |  unsigned long |
|---|
| 349 | Â Â level; |
|---|
| 350 | } NodeInfo; |
|---|
| 351 | |
|---|
| 352 | typedef struct _Nodes |
|---|
| 353 | { |
|---|
| 354 | Â NodeInfo |
|---|
| 355 | Â Â nodes[NodesInAList]; |
|---|
| 356 | |
|---|
| 357 |  struct _Nodes |
|---|
| 358 | Â Â *next; |
|---|
| 359 | } Nodes; |
|---|
| 360 | |
|---|
| 361 | typedef struct _CubeInfo |
|---|
| 362 | { |
|---|
| 363 | Â NodeInfo |
|---|
| 364 | Â Â *root; |
|---|
| 365 | |
|---|
| 366 | Â long |
|---|
| 367 | Â Â x, |
|---|
| 368 | Â Â progress; |
|---|
| 369 | |
|---|
| 370 |  unsigned long |
|---|
| 371 | Â Â colors, |
|---|
| 372 | Â Â free_nodes; |
|---|
| 373 | |
|---|
| 374 | Â NodeInfo |
|---|
| 375 | Â Â *node_info; |
|---|
| 376 | |
|---|
| 377 | Â Nodes |
|---|
| 378 | Â Â *node_queue; |
|---|
| 379 | } CubeInfo; |
|---|
| 380 | |
|---|
| 381 | |
|---|
| 382 | |
|---|
| 383 | |
|---|
| 384 | static LinkedListInfo |
|---|
| 385 | Â *color_list = (LinkedListInfo *) NULL; |
|---|
| 386 | |
|---|
| 387 | static SemaphoreInfo |
|---|
| 388 | Â *color_semaphore = (SemaphoreInfo *) NULL; |
|---|
| 389 | |
|---|
| 390 | static volatile MagickBooleanType |
|---|
| 391 | Â instantiate_color = MagickFalse; |
|---|
| 392 | |
|---|
| 393 | |
|---|
| 394 | |
|---|
| 395 | |
|---|
| 396 | static CubeInfo |
|---|
| 397 | Â *GetCubeInfo(void); |
|---|
| 398 | |
|---|
| 399 | static NodeInfo |
|---|
| 400 |  *GetNodeInfo(CubeInfo *,const unsigned long); |
|---|
| 401 | |
|---|
| 402 | static MagickBooleanType |
|---|
| 403 | Â InitializeColorList(ExceptionInfo *), |
|---|
| 404 |  LoadColorLists(const char *,ExceptionInfo *); |
|---|
| 405 | |
|---|
| 406 | static void |
|---|
| 407 |  DestroyColorCube(const Image *,NodeInfo *); |
|---|
| 408 | |
|---|
| 409 | |
|---|
| 410 | |
|---|
| 411 | |
|---|
| 412 | |
|---|
| 413 | |
|---|
| 414 | |
|---|
| 415 | |
|---|
| 416 | |
|---|
| 417 | |
|---|
| 418 | |
|---|
| 419 | |
|---|
| 420 | |
|---|
| 421 | |
|---|
| 422 | |
|---|
| 423 | |
|---|
| 424 | |
|---|
| 425 | |
|---|
| 426 | |
|---|
| 427 | |
|---|
| 428 | |
|---|
| 429 | |
|---|
| 430 | |
|---|
| 431 | |
|---|
| 432 | |
|---|
| 433 | |
|---|
| 434 | |
|---|
| 435 | |
|---|
| 436 | |
|---|
| 437 | static inline unsigned long ColorToNodeId(const Image *image, |
|---|
| 438 |  const MagickPixelPacket *pixel,unsigned long index) |
|---|
| 439 | { |
|---|
| 440 |  unsigned long |
|---|
| 441 | Â Â id; |
|---|
| 442 | |
|---|
| 443 |  id=(unsigned long) ( |
|---|
| 444 | Â Â ((ScaleQuantumToChar(RoundToQuantum(pixel->red)) >> index) & 0x01) | |
|---|
| 445 | Â Â ((ScaleQuantumToChar(RoundToQuantum(pixel->green)) >> index) & 0x01) << 1 | |
|---|
| 446 | Â Â ((ScaleQuantumToChar(RoundToQuantum(pixel->blue)) >> index) & 0x01) << 2); |
|---|
| 447 |  if (image->matte != MagickFalse) |
|---|
| 448 | Â Â id|=((ScaleQuantumToChar(RoundToQuantum(pixel->opacity)) >> index) & |
|---|
| 449 | Â Â Â 0x01) << 3; |
|---|
| 450 | Â return(id); |
|---|
| 451 | } |
|---|
| 452 | |
|---|
| 453 | static CubeInfo *ClassifyImageColors(const Image *image, |
|---|
| 454 | Â ExceptionInfo *exception) |
|---|
| 455 | { |
|---|
| 456 | #define EvaluateImageColorsText " Compute image colors... " |
|---|
| 457 | |
|---|
| 458 | Â CubeInfo |
|---|
| 459 | Â Â *cube_info; |
|---|
| 460 | |
|---|
| 461 | Â long |
|---|
| 462 | Â Â y; |
|---|
| 463 | |
|---|
| 464 | Â MagickBooleanType |
|---|
| 465 | Â Â status; |
|---|
| 466 | |
|---|
| 467 | Â MagickPixelPacket |
|---|
| 468 | Â Â pixel, |
|---|
| 469 | Â Â target; |
|---|
| 470 | |
|---|
| 471 | Â NodeInfo |
|---|
| 472 | Â Â *node_info; |
|---|
| 473 | |
|---|
| 474 |  register const IndexPacket |
|---|
| 475 | Â Â *indexes; |
|---|
| 476 | |
|---|
| 477 |  register const PixelPacket |
|---|
| 478 | Â Â *p; |
|---|
| 479 | |
|---|
| 480 |  register long |
|---|
| 481 | Â Â i, |
|---|
| 482 | Â Â x; |
|---|
| 483 | |
|---|
| 484 |  register unsigned long |
|---|
| 485 | Â Â id, |
|---|
| 486 | Â Â index, |
|---|
| 487 | Â Â level; |
|---|
| 488 | |
|---|
| 489 | Â ViewInfo |
|---|
| 490 | Â Â *image_view; |
|---|
| 491 | |
|---|
| 492 | Â |
|---|
| 493 | |
|---|
| 494 | |
|---|
| 495 |  assert(image != (const Image *) NULL); |
|---|
| 496 | Â assert(image->signature == MagickSignature); |
|---|
| 497 |  if (image->debug != MagickFalse) |
|---|
| 498 | Â Â (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); |
|---|
| 499 | Â cube_info=GetCubeInfo(); |
|---|
| 500 |  if (cube_info == (CubeInfo *) NULL) |
|---|
| 501 | Â Â { |
|---|
| 502 | Â Â Â (void) ThrowMagickException(exception,GetMagickModule(), |
|---|
| 503 | Â Â Â Â ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename); |
|---|
| 504 | Â Â Â return(cube_info); |
|---|
| 505 | Â Â } |
|---|
| 506 | Â GetMagickPixelPacket(image,&pixel); |
|---|
| 507 | Â GetMagickPixelPacket(image,&target); |
|---|
| 508 | Â image_view=OpenCacheView(image); |
|---|
| 509 |  for (y=0; y < (long) image->rows; y++) |
|---|
| 510 | Â { |
|---|
| 511 | Â Â p=AcquireCacheViewPixels(image_view,0,y,image->columns,1,exception); |
|---|
| 512 |   if (p == (const PixelPacket *) NULL) |
|---|
| 513 | Â Â Â break; |
|---|
| 514 | Â Â indexes=AcquireCacheViewIndexes(image_view); |
|---|
| 515 |   for (x=0; x < (long) image->columns; x++) |
|---|
| 516 | Â Â { |
|---|
| 517 | Â Â Â |
|---|
| 518 | |
|---|
| 519 | |
|---|
| 520 | Â Â Â node_info=cube_info->root; |
|---|
| 521 | Â Â Â index=MaxTreeDepth-1; |
|---|
| 522 |    for (level=1; level < MaxTreeDepth; level++) |
|---|
| 523 | Â Â Â { |
|---|
| 524 | Â Â Â Â SetMagickPixelPacket(image,p,indexes+x,&pixel); |
|---|
| 525 | Â Â Â Â id=ColorToNodeId(image,&pixel,index); |
|---|
| 526 |     if (node_info->child[id] == (NodeInfo *) NULL) |
|---|
| 527 | Â Â Â Â Â { |
|---|
| 528 | Â Â Â Â Â Â node_info->child[id]=GetNodeInfo(cube_info,level); |
|---|
| 529 |       if (node_info->child[id] == (NodeInfo *) NULL) |
|---|
| 530 | Â Â Â Â Â Â Â { |
|---|
| 531 | Â Â Â Â Â Â Â Â (void) ThrowMagickException(exception,GetMagickModule(), |
|---|
| 532 | Â Â Â Â Â Â Â Â Â ResourceLimitError,"MemoryAllocationFailed","`%s'", |
|---|
| 533 | Â Â Â Â Â Â Â Â Â image->filename); |
|---|
| 534 | Â Â Â Â Â Â Â Â return(0); |
|---|
| 535 | Â Â Â Â Â Â Â } |
|---|
| 536 | Â Â Â Â Â } |
|---|
| 537 | Â Â Â Â node_info=node_info->child[id]; |
|---|
| 538 | Â Â Â Â index--; |
|---|
| 539 | Â Â Â } |
|---|
| 540 |    for (i=0; i < (long) node_info->number_unique; i++) |
|---|
| 541 | Â Â Â { |
|---|
| 542 | Â Â Â Â SetMagickPixelPacket(image,&node_info->list[i].pixel, |
|---|
| 543 | Â Â Â Â Â &node_info->list[i].index,&target); |
|---|
| 544 |     if (IsMagickColorEqual(&pixel,&target) != MagickFalse) |
|---|
| 545 | Â Â Â Â Â break; |
|---|
| 546 | Â Â Â } |
|---|
| 547 |    if (i < (long) node_info->number_unique) |
|---|
| 548 | Â Â Â Â node_info->list[i].count++; |
|---|
| 549 | Â Â Â else |
|---|
| 550 | Â Â Â Â { |
|---|
| 551 |      if (node_info->number_unique == 0) |
|---|
| 552 | Â Â Â Â Â Â node_info->list=(ColorPacket *) AcquireMagickMemory( |
|---|
| 553 | Â Â Â Â Â Â Â sizeof(*node_info->list)); |
|---|
| 554 | Â Â Â Â Â else |
|---|
| 555 | Â Â Â Â Â Â node_info->list=(ColorPacket *) ResizeQuantumMemory(node_info->list, |
|---|
| 556 | Â Â Â Â Â Â Â (size_t) (i+1),sizeof(*node_info->list)); |
|---|
| 557 |      if (node_info->list == (ColorPacket *) NULL) |
|---|
| 558 | Â Â Â Â Â Â { |
|---|
| 559 | Â Â Â Â Â Â Â (void) ThrowMagickException(exception,GetMagickModule(), |
|---|
| 560 | Â Â Â Â Â Â Â Â ResourceLimitError,"MemoryAllocationFailed","`%s'", |
|---|
| 561 | Â Â Â Â Â Â Â Â image->filename); |
|---|
| 562 | Â Â Â Â Â Â Â return(0); |
|---|
| 563 | Â Â Â Â Â Â } |
|---|
| 564 | Â Â Â Â Â node_info->list[i].pixel=(*p); |
|---|
| 565 |      if ((image->colorspace == CMYKColorspace) || |
|---|
| 566 | Â Â Â Â Â Â Â (image->storage_class == PseudoClass)) |
|---|
| 567 | Â Â Â Â Â Â node_info->list[i].index=indexes[x]; |
|---|
| 568 | Â Â Â Â Â node_info->list[i].count=1; |
|---|
| 569 | Â Â Â Â Â node_info->number_unique++; |
|---|
| 570 | Â Â Â Â Â cube_info->colors++; |
|---|
| 571 | Â Â Â Â } |
|---|
| 572 | Â Â Â p++; |
|---|
| 573 | Â Â } |
|---|
| 574 |   if ((image->progress_monitor != (MagickProgressMonitor) NULL) && |
|---|
| 575 | Â Â Â Â (QuantumTick(y,image->rows) != MagickFalse)) |
|---|
| 576 | Â Â Â { |
|---|
| 577 | Â Â Â Â status=image->progress_monitor(EvaluateImageColorsText,y,image->rows, |
|---|
| 578 | Â Â Â Â Â image->client_data); |
|---|
| 579 |     if (status == MagickFalse) |
|---|
| 580 | Â Â Â Â Â break; |
|---|
| 581 | Â Â Â } |
|---|
| 582 | Â } |
|---|
| 583 | Â image_view=CloseCacheView(image_view); |
|---|
| 584 | Â return(cube_info); |
|---|
| 585 | } |
|---|
| 586 | |
|---|
| 587 | |
|---|
| 588 | |
|---|
| 589 | |
|---|
| 590 | |
|---|
| 591 | |
|---|
| 592 | |
|---|
| 593 | |
|---|
| 594 | |
|---|
| 595 | |
|---|
| 596 | |
|---|
| 597 | |
|---|
| 598 | |
|---|
| 599 | |
|---|
| 600 | |
|---|
| 601 | |
|---|
| 602 | |
|---|
| 603 | |
|---|
| 604 | |
|---|
| 605 | |
|---|
| 606 | |
|---|
| 607 | |
|---|
| 608 | |
|---|
| 609 | |
|---|
| 610 | |
|---|
| 611 | |
|---|
| 612 | |
|---|
| 613 | |
|---|
| 614 | |
|---|
| 615 | |
|---|
| 616 | MagickExport void ConcatenateColorComponent(const MagickPixelPacket *pixel, |
|---|
| 617 |  const ChannelType channel,const ComplianceType compliance,char *tuple) |
|---|
| 618 | { |
|---|
| 619 | Â char |
|---|
| 620 | Â Â component[MaxTextExtent]; |
|---|
| 621 | |
|---|
| 622 | Â MagickRealType |
|---|
| 623 | Â Â color; |
|---|
| 624 | |
|---|
| 625 | Â color=0.0; |
|---|
| 626 |  switch (channel) |
|---|
| 627 | Â { |
|---|
| 628 |   case RedChannel: |
|---|
| 629 | Â Â { |
|---|
| 630 | Â Â Â color=pixel->red; |
|---|
| 631 | Â Â Â break; |
|---|
| 632 | Â Â } |
|---|
| 633 |   case GreenChannel: |
|---|
| 634 | Â Â { |
|---|
| 635 | Â Â Â color=pixel->green; |
|---|
| 636 | Â Â Â break; |
|---|
| 637 | Â Â } |
|---|
| 638 |   case BlueChannel: |
|---|
| 639 | Â Â { |
|---|
| 640 | Â Â Â color=pixel->blue; |
|---|
| 641 | Â Â Â break; |
|---|
| 642 | Â Â } |
|---|
| 643 |   case OpacityChannel: |
|---|
| 644 | Â Â { |
|---|
| 645 | Â Â Â color=pixel->opacity; |
|---|
| 646 | Â Â Â break; |
|---|
| 647 | Â Â } |
|---|
| 648 |   case IndexChannel: |
|---|
| 649 | Â Â { |
|---|
| 650 | Â Â Â color=pixel->index; |
|---|
| 651 | Â Â Â break; |
|---|
| 652 | Â Â } |
|---|
| 653 | Â Â default: break; |
|---|
| 654 | Â } |
|---|
| 655 |  if (compliance != SVGCompliance) |
|---|
| 656 | Â Â { |
|---|
| 657 |    if (pixel->depth > 16) |
|---|
| 658 | Â Â Â Â { |
|---|
| 659 | Â Â Â Â Â (void) FormatMagickString(component,MaxTextExtent,"%10lu", |
|---|
| 660 |       (unsigned long) ScaleQuantumToLong(RoundToQuantum(color))); |
|---|
| 661 | Â Â Â Â Â (void) ConcatenateMagickString(tuple,component,MaxTextExtent); |
|---|
| 662 | Â Â Â Â Â return; |
|---|
| 663 | Â Â Â Â } |
|---|
| 664 |    if (pixel->depth > 8) |
|---|
| 665 | Â Â Â Â { |
|---|
| 666 | Â Â Â Â Â (void) FormatMagickString(component,MaxTextExtent,"%5d", |
|---|
| 667 | Â Â Â Â Â Â ScaleQuantumToShort(RoundToQuantum(color))); |
|---|
| 668 | Â Â Â Â Â (void) ConcatenateMagickString(tuple,component,MaxTextExtent); |
|---|
| 669 | Â Â Â Â Â return; |
|---|
| 670 | Â Â Â Â } |
|---|
| 671 | Â Â Â (void) FormatMagickString(component,MaxTextExtent,"%3d", |
|---|
| 672 | Â Â Â Â ScaleQuantumToChar(RoundToQuantum(color))); |
|---|
| 673 | Â Â Â (void) ConcatenateMagickString(tuple,component,MaxTextExtent); |
|---|
| 674 | Â Â Â return; |
|---|
| 675 | Â Â } |
|---|
| 676 |  if (channel == OpacityChannel) |
|---|
| 677 | Â Â { |
|---|
| 678 | Â Â Â (void) FormatMagickString(component,MaxTextExtent,"%g", |
|---|
| 679 | Â Â Â Â (double) (QuantumScale*color)); |
|---|
| 680 | Â Â Â (void) ConcatenateMagickString(tuple,component,MaxTextExtent); |
|---|
| 681 | Â Â Â return; |
|---|
| 682 | Â Â } |
|---|
| 683 |  if (pixel->depth > 8) |
|---|
| 684 | Â Â { |
|---|
| 685 | Â Â Â (void) FormatMagickString(component,MaxTextExtent,"%g%%", |
|---|
| 686 | Â Â Â Â (double) (100.0*QuantumScale*color)); |
|---|
| 687 | Â Â Â (void) ConcatenateMagickString(tuple,component,MaxTextExtent); |
|---|
| 688 | Â Â Â return; |
|---|
| 689 | Â Â } |
|---|
| 690 | Â (void) FormatMagickString(component,MaxTextExtent,"%d", |
|---|
| 691 | Â Â ScaleQuantumToChar(RoundToQuantum(color))); |
|---|
| 692 | Â (void) ConcatenateMagickString(tuple,component,MaxTextExtent); |
|---|
| 693 | } |
|---|
| 694 | |
|---|
| 695 | |
|---|
| 696 | |
|---|
| 697 | |
|---|
| 698 | |
|---|
| 699 | |
|---|
| 700 | |
|---|
| 701 | |
|---|
| 702 | |
|---|
| 703 | |
|---|
| 704 | |
|---|
| 705 | |
|---|
| 706 | |
|---|
| 707 | |
|---|
| 708 | |
|---|
| 709 | |
|---|
| 710 | |
|---|
| 711 | |
|---|
| 712 | |
|---|
| 713 | |
|---|
| 714 | |
|---|
| 715 | |
|---|
| 716 | |
|---|
| 717 | |
|---|
| 718 | |
|---|
| 719 | |
|---|
| 720 | |
|---|
| 721 | |
|---|
| 722 | |
|---|
| 723 | |
|---|
| 724 | |
|---|
| 725 | static void DefineImageHistogram(const Image *image,NodeInfo *node_info, |
|---|
| 726 | Â ColorPacket **histogram) |
|---|
| 727 | { |
|---|
| 728 |  register long |
|---|
| 729 | Â Â i; |
|---|
| 730 | |
|---|
| 731 |  unsigned long |
|---|
| 732 | Â Â number_children; |
|---|
| 733 | |
|---|
| 734 | Â |
|---|
| 735 | |
|---|
| 736 | |
|---|
| 737 | Â number_children=image->matte == MagickFalse ? 8UL : 16UL; |
|---|
| 738 |  for (i=0; i < (long) number_children; i++) |
|---|
| 739 |   if (node_info->child[i] != (NodeInfo *) NULL) |
|---|
| 740 | Â Â Â DefineImageHistogram(image,node_info->child[i],histogram); |
|---|
| 741 |  if (node_info->level == (MaxTreeDepth-1)) |
|---|
| 742 | Â Â { |
|---|
| 743 |    register ColorPacket |
|---|
| 744 | Â Â Â Â *p; |
|---|
| 745 | |
|---|
| 746 | Â Â Â p=node_info->list; |
|---|
| 747 |    for (i=0; i < (long) node_info->number_unique; i++) |
|---|
| 748 | Â Â Â { |
|---|
| 749 | Â Â Â Â (*histogram)->pixel=p->pixel; |
|---|
| 750 | Â Â Â Â (*histogram)->index=p->index; |
|---|
| 751 | Â Â Â Â (*histogram)->count=p->count; |
|---|
| 752 | Â Â Â Â (*histogram)++; |
|---|
| 753 | Â Â Â Â p++; |
|---|
| 754 | Â Â Â } |
|---|
| 755 | Â Â } |
|---|
| 756 | } |
|---|
| 757 | |
|---|
| 758 | |
|---|
| 759 | |
|---|
| 760 | |
|---|
| 761 | |
|---|
| 762 | |
|---|
| 763 | |
|---|
| 764 | |
|---|
| 765 | |
|---|
| 766 | |
|---|
| 767 | |
|---|
| 768 | |
|---|
| 769 | |
|---|
| 770 | |
|---|
| 771 | |
|---|
| 772 | |
|---|
| 773 | |
|---|
| 774 | |
|---|
| 775 | |
|---|
| 776 | |
|---|
| 777 | static void *DestroyColorElement(void *color_info) |
|---|
| 778 | { |
|---|
| 779 |  register ColorInfo |
|---|
| 780 | Â Â *p; |
|---|
| 781 | |
|---|
| 782 | Â p=(ColorInfo *) color_info; |
|---|
| 783 |  if (p->path != (char *) NULL) |
|---|
| 784 | Â Â p->path=DestroyString(p->path); |
|---|
| 785 |  if (p->name != (char *) NULL) |
|---|
| 786 | Â Â p->name=DestroyString(p->name); |
|---|
| 787 | Â p=(ColorInfo *) RelinquishMagickMemory(p); |
|---|
| 788 |  return((void *) NULL); |
|---|
| 789 | } |
|---|
| 790 | |
|---|
| 791 | MagickExport void DestroyColorList(void) |
|---|
| 792 | { |
|---|
| 793 | Â AcquireSemaphoreInfo(&color_semaphore); |
|---|
| 794 |  if (color_list != (LinkedListInfo *) NULL) |
|---|
| 795 | Â Â color_list=DestroyLinkedList(color_list,DestroyColorElement); |
|---|
| 796 | Â instantiate_color=MagickFalse; |
|---|
| 797 | Â RelinquishSemaphoreInfo(color_semaphore); |
|---|
| 798 | Â color_semaphore=DestroySemaphoreInfo(color_semaphore); |
|---|
| 799 | } |
|---|
| 800 | |
|---|
| 801 | |
|---|
| 802 | |
|---|
| 803 | |
|---|
| 804 | |
|---|
| 805 | |
|---|
| 806 | |
|---|
| 807 | |
|---|
| 808 | |
|---|
| 809 | |
|---|
| 810 | |
|---|
| 811 | |
|---|
| 812 | |
|---|
| 813 | |
|---|
| 814 | |
|---|
| 815 | |
|---|
| 816 | |
|---|
| 817 | |
|---|
| 818 | |
|---|
| 819 | |
|---|
| 820 | |
|---|
| 821 | |
|---|
| 822 | |
|---|
| 823 | |
|---|
| 824 | |
|---|
| 825 | static CubeInfo *DestroyCubeInfo(const Image *image,CubeInfo *cube_info) |
|---|
| 826 | { |
|---|
| 827 |  register Nodes |
|---|
| 828 | Â Â *nodes; |
|---|
| 829 | |
|---|
| 830 | Â |
|---|
| 831 | |
|---|
| 832 | |
|---|
| 833 | Â DestroyColorCube(image,cube_info->root); |
|---|
| 834 | Â do |
|---|
| 835 | Â { |
|---|
| 836 | Â Â nodes=cube_info->node_queue->next; |
|---|
| 837 | Â Â cube_info->node_queue=(Nodes *) |
|---|
| 838 | Â Â Â RelinquishMagickMemory(cube_info->node_queue); |
|---|
| 839 | Â Â cube_info->node_queue=nodes; |
|---|
| 840 |  } while (cube_info->node_queue != (Nodes *) NULL); |
|---|
| 841 | Â return((CubeInfo *) RelinquishMagickMemory(cube_info)); |
|---|
| 842 | } |
|---|
| 843 | |
|---|
| 844 | |
|---|
| 845 | |
|---|
| 846 | |
|---|
| 847 | |
|---|
| 848 | |
|---|
| 849 | |
|---|
| 850 | |
|---|