00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047 #include <stdio.h>
00048 #include <stdlib.h>
00049 #include <wand/MagickWand.h>
00050
00051 #define ThrowWandException(wand) \
00052 { \
00053 char \
00054 *description; \
00055 \
00056 ExceptionType \
00057 severity; \
00058 \
00059 description=MagickGetException(wand,&severity); \
00060 (void) fprintf(stderr,"%s %s %lu %s\n",GetMagickModule(),description); \
00061 description=(char *) MagickRelinquishMemory(description); \
00062 exit(-1); \
00063 }
00064
00065 static MagickBooleanType ScribbleImage (MagickWand *canvas)
00066 {
00067 DrawingWand
00068 *picasso;
00069
00070 PixelWand
00071 *color;
00072
00073 picasso=NewDrawingWand();
00074 color=NewPixelWand();
00075 (void) PushDrawingWand(picasso);
00076 {
00077 DrawSetViewbox(picasso,0,0,MagickGetImageWidth(canvas),
00078 MagickGetImageHeight(canvas));
00079 DrawScale(picasso,1.101,1.08);
00080 DrawTranslate(picasso,-23.69,-22.97);
00081 DrawRotate(picasso,0);
00082 (void) PixelSetColor(color,"#ffffff");
00083 DrawSetFillColor(picasso,color);
00084 DrawRectangle(picasso,23.69,22.97,564.6,802.2);
00085 DrawSetFillOpacity(picasso,1.0);
00086 (void) PixelSetColor(color,"none");
00087 DrawSetFillColor(picasso,color);
00088 DrawSetStrokeColor(picasso,color);
00089 DrawSetStrokeAntialias(picasso,MagickTrue);
00090 DrawSetStrokeLineCap(picasso,RoundCap);
00091 DrawSetStrokeLineJoin(picasso,RoundJoin);
00092 DrawPushDefs(picasso);
00093 {
00094 DrawPushClipPath(picasso,"clip_1");
00095 {
00096 (void) PushDrawingWand(picasso);
00097 {
00098 DrawRectangle(picasso,0,0,595.3,841.9);
00099 }
00100 (void) PopDrawingWand(picasso);
00101 }
00102 DrawPopClipPath(picasso);
00103 }
00104 DrawPopDefs(picasso);
00105 (void) PushDrawingWand(picasso);
00106 {
00107 (void) DrawSetClipPath(picasso, "url(#clip_1)");
00108
00109 (void) PushDrawingWand(picasso);
00110 {
00111 DrawSetStrokeAntialias(picasso,MagickTrue);
00112 DrawSetStrokeWidth(picasso,4.032);
00113 DrawSetStrokeLineCap(picasso,RoundCap);
00114 DrawSetStrokeLineJoin(picasso,RoundJoin);
00115 (void) DrawSetStrokeDashArray(picasso,0,(const double *)NULL);
00116 (void) PixelSetColor(color,"#ff0000");
00117 DrawSetStrokeColor(picasso,color);
00118 DrawSetFillRule(picasso,EvenOddRule);
00119 (void) PixelSetColor(color,"#ff00ff");
00120 DrawSetFillColor(picasso,color);
00121 DrawRectangle(picasso,72,72,144,144);
00122 }
00123 (void) PopDrawingWand(picasso);
00124 (void) PushDrawingWand(picasso);
00125 {
00126 DrawSetStrokeAntialias(picasso,MagickTrue);
00127 DrawSetStrokeWidth(picasso,9);
00128 DrawSetStrokeLineCap(picasso,RoundCap);
00129 DrawSetStrokeLineJoin(picasso,RoundJoin);
00130 (void) DrawSetStrokeDashArray(picasso,0,(const double *)NULL);
00131 (void) PixelSetColor(color,"#00ff00");
00132 DrawSetStrokeColor(picasso,color);
00133 DrawSetFillRule(picasso,EvenOddRule);
00134 (void) PixelSetColor(color,"#0080ff");
00135 DrawSetFillColor(picasso,color);
00136 DrawRoundRectangle(picasso,72,216,360,432,9,9);
00137 }
00138 (void) PopDrawingWand(picasso);
00139 (void) PushDrawingWand(picasso);
00140 {
00141 const PointInfo points[37] =
00142 {
00143 { 378.1,81.72 }, { 381.1,79.56 }, { 384.3,78.12 }, { 387.6,77.33 },
00144 { 391.1,77.11 }, { 394.6,77.62 }, { 397.8,78.77 }, { 400.9,80.57 },
00145 { 403.6,83.02 }, { 523.9,216.8 }, { 526.2,219.7 }, { 527.6,223 },
00146 { 528.4,226.4 }, { 528.6,229.8 }, { 528,233.3 }, { 526.9,236.5 },
00147 { 525.1,239.5 }, { 522.6,242.2 }, { 495.9,266.3 }, { 493,268.5 },
00148 { 489.7,269.9 }, { 486.4,270.8 }, { 482.9,270.9 }, { 479.5,270.4 },
00149 { 476.2,269.3 }, { 473.2,267.5 }, { 470.4,265 }, { 350,131.2 },
00150 { 347.8,128.3 }, { 346.4,125.1 }, { 345.6,121.7 }, {345.4,118.2 },
00151 { 346,114.8 }, { 347.1,111.5 }, { 348.9,108.5 }, { 351.4,105.8 },
00152 { 378.1,81.72 }
00153 };
00154
00155 DrawSetStrokeAntialias(picasso,MagickTrue);
00156 DrawSetStrokeWidth(picasso,2.016);
00157 DrawSetStrokeLineCap(picasso,RoundCap);
00158 DrawSetStrokeLineJoin(picasso,RoundJoin);
00159 (void) DrawSetStrokeDashArray(picasso,0,(const double *)NULL);
00160 (void) PixelSetColor(color,"#000080");
00161 DrawSetStrokeColor(picasso,color);
00162 DrawSetFillRule(picasso,EvenOddRule);
00163 (void) PixelSetColor(color,"#c2c280");
00164 DrawSetFillColor(picasso,color);
00165 DrawPolygon(picasso,37,points);
00166 }
00167 (void) PopDrawingWand(picasso);
00168 (void) PushDrawingWand(picasso);
00169 {
00170 DrawSetStrokeAntialias(picasso,MagickTrue);
00171 DrawSetStrokeWidth(picasso,3.024);
00172 DrawSetStrokeLineCap(picasso,RoundCap);
00173 DrawSetStrokeLineJoin(picasso,RoundJoin);
00174 (void) DrawSetStrokeDashArray(picasso,0,(const double *)NULL);
00175 (void) PixelSetColor(color,"#000080");
00176 DrawSetStrokeColor(picasso,color);
00177 DrawSetFillRule(picasso,EvenOddRule);
00178 (void) PixelSetColor(color,"#000080");
00179 DrawSetFillColor(picasso,color);
00180 DrawEllipse(picasso,489.6,424.8,72,129.6,0,360);
00181 }
00182 (void) PopDrawingWand(picasso);
00183 (void) PushDrawingWand(picasso);
00184 {
00185 const PointInfo points[48] =
00186 {
00187 { 213.8,25.13}, { 216.7,24.48 }, {219.8,24.55 }, { 223.1,25.42 },
00188 { 226.7,27 }, { 230.3,29.3 }, { 234.1,32.26 }, { 237.9,35.86 },
00189 { 241.8,40.03 }, { 249.7,50.11 }, { 257.4,62.14 }, { 264.8,75.89 },
00190 { 271.6,91.15 }, { 277.3,106.8 }, { 281.6,121.8 }, { 284.4,135.9 },
00191 { 285.7,148.5 }, { 285.6,159.6 }, { 284.9,164.3 }, { 283.8,168.5 },
00192 { 282.5,172.1 }, { 280.7,175 }, { 278.5,177.3 }, { 275.9,178.7 },
00193 { 273,179.4 }, { 269.9,179.3 }, { 266.6,178.4 }, { 263.1,176.8 },
00194 { 259.5,174.5}, { 255.7,171.6 }, { 251.9,168 }, { 248,163.8 },
00195 { 244.1,159 }, { 240.1,153.7 }, { 232.3,141.7 }, { 225,127.9 },
00196 { 218.2,112.7 }, { 212.5,97.06 }, { 208.2,82.01 }, { 205.4,67.97 },
00197 { 204,55.3 }, { 204.3,44.35 }, { 204.9,39.6 }, { 205.9,35.42 },
00198 { 207.4,31.82 }, { 209.2,28.87 }, { 211.3,26.64}, { 213.8,25.13 }
00199 };
00200
00201 DrawSetStrokeAntialias(picasso,MagickTrue);
00202 DrawSetStrokeWidth(picasso,3.024);
00203 DrawSetStrokeLineCap(picasso,RoundCap);
00204 DrawSetStrokeLineJoin(picasso,RoundJoin);
00205 (void) DrawSetStrokeDashArray(picasso,0,(const double *)NULL);
00206 (void) PixelSetColor(color,"#ff8000");
00207 DrawSetStrokeColor(picasso,color);
00208 DrawSetFillRule(picasso,EvenOddRule);
00209 (void) PixelSetColor(color,"#00ffff");
00210 DrawSetFillColor(picasso,color);
00211 DrawPolygon(picasso,48,points);
00212 }
00213 (void) PopDrawingWand(picasso);
00214 (void) PushDrawingWand(picasso);
00215 {
00216 DrawSetStrokeAntialias(picasso,MagickTrue);
00217 DrawSetStrokeWidth(picasso,12.02);
00218 DrawSetStrokeLineCap(picasso,RoundCap);
00219 DrawSetStrokeLineJoin(picasso,RoundJoin);
00220 (void) DrawSetStrokeDashArray(picasso,0,(const double *)NULL);
00221 (void) PixelSetColor(color,"#4000c2");
00222 DrawSetStrokeColor(picasso,color);
00223 (void) PixelSetColor(color,"none");
00224 DrawSetFillColor(picasso,color);
00225 DrawArc(picasso,360,554.4,187.2,237.6,0,90);
00226 }
00227 (void) PopDrawingWand(picasso);
00228 (void) PushDrawingWand(picasso);
00229 {
00230 DrawSetStrokeAntialias(picasso,MagickTrue);
00231 DrawSetStrokeWidth(picasso,9);
00232 DrawSetStrokeLineCap(picasso,RoundCap);
00233 DrawSetStrokeLineJoin(picasso,RoundJoin);
00234 (void) DrawSetStrokeDashArray(picasso,0,(const double *)NULL);
00235 (void) PixelSetColor(color,"#4000c2");
00236 DrawSetStrokeColor(picasso,color);
00237 DrawSetFillRule(picasso,EvenOddRule);
00238 (void) PixelSetColor(color,"#4000c2");
00239 DrawSetFillColor(picasso,color);
00240 DrawEllipse(picasso,388.8,626.4,100.8,122.4,0,90);
00241 }
00242 (void) PopDrawingWand(picasso);
00243 (void) PushDrawingWand(picasso);
00244 {
00245 const PointInfo points[6] =
00246 {
00247 { 180,504 }, { 282.7,578.6 }, { 243.5,699.4 }, { 116.5,699.4 },
00248 { 77.26,578.6 }, { 180,504 }
00249 };
00250
00251 DrawSetStrokeAntialias(picasso,MagickTrue);
00252 DrawSetStrokeWidth(picasso,9);
00253 DrawSetStrokeLineCap(picasso,RoundCap);
00254 DrawSetStrokeLineJoin(picasso,RoundJoin);
00255 (void) DrawSetStrokeDashArray(picasso,0,(const double *)NULL);
00256 (void) PixelSetColor(color,"#4000c2");
00257 DrawSetStrokeColor(picasso,color);
00258 DrawSetFillRule(picasso,EvenOddRule);
00259 (void) PixelSetColor(color,"#800000");
00260 DrawSetFillColor(picasso,color);
00261 DrawPolygon(picasso,6,points);
00262 }
00263 (void) PopDrawingWand(picasso);
00264 (void) PushDrawingWand(picasso);
00265 {
00266 const PointInfo points[11] =
00267 {
00268 { 180,504 }, { 211.8,568.3 }, { 282.7,578.6 }, { 231.3,628.7 },
00269 { 243.5,699.4 }, { 180,666 }, { 116.5,699.4 }, { 128.7,628.7 },
00270 { 77.26,578.6 }, { 148.2,568.3 }, { 180,504 }
00271 };
00272
00273 DrawSetStrokeAntialias(picasso,MagickTrue);
00274 DrawSetStrokeWidth(picasso,9);
00275 DrawSetStrokeLineCap(picasso,RoundCap);
00276 DrawSetStrokeLineJoin(picasso,RoundJoin);
00277 (void) DrawSetStrokeDashArray(picasso,0,(const double *)NULL);
00278 (void) PixelSetColor(color,"#4000c2");
00279 DrawSetStrokeColor(picasso,color);
00280 DrawSetFillRule(picasso,EvenOddRule);
00281 (void) PixelSetColor(color,"#800000");
00282 DrawSetFillColor(picasso,color);
00283 DrawPolygon(picasso,11,points);
00284 }
00285 (void) PopDrawingWand(picasso);
00286 (void) PushDrawingWand(picasso);
00287 {
00288 const PointInfo points[15] =
00289 {
00290 { 540,288 }, { 561.6,216 }, { 547.2,43.2 }, { 280.8,36 },
00291 { 302.4,194.4 }, { 331.2,64.8 }, { 504,64.8 }, { 475.2,115.2 },
00292 { 525.6,93.6 }, { 496.8,158.4 }, { 532.8,136.8 }, { 518.4,180 },
00293 { 540,172.8 }, { 540,223.2 }, { 540,288 }
00294 };
00295
00296 DrawSetStrokeAntialias(picasso,MagickTrue);
00297 DrawSetStrokeWidth(picasso,5.976);
00298 DrawSetStrokeLineCap(picasso,RoundCap);
00299 DrawSetStrokeLineJoin(picasso,RoundJoin);
00300 (void) DrawSetStrokeDashArray(picasso,0,(const double *)NULL);
00301 (void) PixelSetColor(color,"#4000c2");
00302 DrawSetStrokeColor(picasso,color);
00303 DrawSetFillRule(picasso,EvenOddRule);
00304 (void) PixelSetColor(color,"#ffff00");
00305 DrawSetFillColor(picasso,color);
00306 DrawPolygon(picasso,15,points);
00307 }
00308 (void) PopDrawingWand(picasso);
00309 (void) PushDrawingWand(picasso);
00310 {
00311 const PointInfo points[7] =
00312 {
00313 { 57.6,640.8 }, { 57.6,784.8 }, { 194.4,799.2 }, { 259.2,777.6 },
00314 { 151.2,756 }, { 86.4,748.8 }, { 57.6,640.8 }
00315 };
00316
00317 DrawSetStrokeAntialias(picasso,MagickTrue);
00318 DrawSetStrokeWidth(picasso,5.976);
00319 DrawSetStrokeLineCap(picasso,RoundCap);
00320 DrawSetStrokeLineJoin(picasso,RoundJoin);
00321 (void) DrawSetStrokeDashArray(picasso,0,(const double *)NULL);
00322 (void) PixelSetColor(color,"#4000c2");
00323 DrawSetStrokeColor(picasso,color);
00324 DrawSetFillRule(picasso,EvenOddRule);
00325 (void) PixelSetColor(color,"#ffff00");
00326 DrawSetFillColor(picasso,color);
00327 DrawPolygon(picasso,7,points);
00328 }
00329 (void) PopDrawingWand(picasso);
00330 (void) PushDrawingWand(picasso);
00331 {
00332 const PointInfo points[193] =
00333 {
00334 { 27.86,565.3 }, { 29.66,550.8 }, { 31.97,538.1 }, { 34.85,527.1 },
00335 { 38.09,517.7 }, { 41.83,509.8 }, { 45.86,503.1 }, { 50.33,497.6 },
00336 { 55.08,493.2 }, { 60.19,489.8 }, { 65.45,487.3 }, { 70.92,485.4 },
00337 { 76.61,484.2 }, { 88.42,483 }, { 100.4,482.9 }, { 108.4,482.2 },
00338 { 119.8,480.3 }, { 150.8,474.1 }, { 189.4,466.6 }, { 210.3,463 },
00339 { 231.5,459.9 }, { 252.4,457.8 }, { 272.7,456.6 }, { 291.8,456.9 },
00340 { 300.7,457.7 }, { 309.1,458.9 }, { 316.9,460.6 }, { 324.1,462.8 },
00341 { 330.7,465.6 }, { 336.4,469 }, { 341.3,473 }, { 345.3,477.7 },
00342 { 348.4,483.1 }, { 350.4,489.2}, { 352.4,495.4 }, { 355.2,500.9 },
00343 { 358.8,505.8 }, { 363,510 }, { 367.8,513.6 }, { 373,516.8 },
00344 { 378.6,519.6 }, { 384.3,521.8 }, { 396.4,525.4 }, { 408.2,527.9 },
00345 { 428,531.2 }, { 434.6,532.9 }, { 436.7,533.8 }, { 437.8,534.9 },
00346 { 437.8,536.2 }, { 436.8,537.8 }, { 434.5,539.6 }, { 430.9,541.8 },
00347 { 419.3,547.6 }, { 401.3,555.2 }, { 342.4,577.9 }, {325.2,584.9 },
00348 { 311,591.3 }, { 300,597.3 }, { 291.6,602.8 }, { 285.8,607.8 },
00349 { 282.3,612.3 }, { 281.4,614.4 }, { 280.9,616.2 }, { 281.2,619.6 },
00350 { 282.1,621.2 }, { 283.3,622.6 }, { 286.8,624.9 }, { 291.5,626.6 },
00351 { 297.1,627.8 }, { 303.6,628.3 }, { 310.5,628.3 }, { 317.9,627.6 },
00352 { 325.2,626.3 }, { 332.6,624.3 }, { 339.5,621.7 }, { 345.9,618.4 },
00353 { 351.4,614.4 }, { 353.9,612.2 }, { 356,609.8 }, { 357.9,607.1 },
00354 { 359.4,604.3 }, { 360.6,601.3 }, { 361.4,598.2 }, { 361.7,594.9 },
00355 { 361.7,591.3 }, { 361.2,587.7 }, { 360.1,583.7 }, { 358.6,579.7 },
00356 { 356.4,575.4 }, { 353.7,570.9 }, { 350.4,566.2 }, { 346.4,561.3 },
00357 { 341.8,556.2 }, { 336.5,550.9 }, { 330.6,545.5 }, { 323.8,539.8 },
00358 { 316.2,533.9 }, { 298.7,521.5 }, { 277.8,508.2 }, { 256.1,495.5 },
00359 { 236,484.5 }, { 217.7,475.1 }, { 200.8,467.1 }, { 185.6,460.7 },
00360 { 171.9,455.5 }, { 159.6,451.6 }, { 148.6,448.8 }, { 139,447 },
00361 { 130.5,446.2 }, { 123.3,446.2 }, { 117.1,446.9 }, { 112,448.3 },
00362 { 107.9,450.2 }, { 104.8,452.5 }, { 102.5,455.2 }, { 101,458.1 },
00363 { 100.2,461.2 }, { 100.2,464.3 }, { 100.7,467.4 }, { 101.8,470.3 },
00364 { 103.4,473 }, { 105.4,475.3 }, { 107.8,477.1 }, { 110.5,478.4 },
00365 { 113.4,479.1 }, { 116.5,478.9 }, { 119.7,478 }, { 123,476.2 },
00366 { 126.4,473.3 }, { 129.6,469.2 }, { 132.7,463.9 }, { 135.2,458.4 },
00367 { 136.6,453.7 }, { 137,449.9 }, { 136.6,446.8 }, { 135.4,444.5 },
00368 { 133.3,442.9 }, { 130.8,441.9 }, { 127.5,441.4 }, { 123.9,441.6 },
00369 { 119.8,442.3 }, { 110.7,445.1 }, { 101.1,449.5 }, { 91.37,455.2 },
00370 { 82.37,461.9 }, { 74.66,469.2 }, { 71.57,473 }, { 68.98,476.8 },
00371 { 67.03,480.7 }, { 65.81,484.4 }, { 65.45,488.2 }, { 65.95,491.7 },
00372 { 67.46,495.1 }, { 69.98,498.3 }, { 73.66,501.3 }, { 78.55,503.9 },
00373 { 84.82,506.3 }, { 92.38,508.2 }, { 107.1,511.6 }, { 118.2,514.8 },
00374 { 125.9,517.8 }, { 130.7,520.4 }, { 132.1,521.7 }, { 132.8,522.9 },
00375 { 133,524.2 }, { 132.6,525.3 }, { 131.8,526.5 }, { 130.5,527.5 },
00376 { 126.6,529.6 }, { 121.5,531.7 }, { 115.3,533.7 }, { 101.4,537.6 },
00377 { 87.55,541.8 }, { 81.36,544 }, { 76.25,546.3 }, { 71.64,549.5 },
00378 { 66.89,554.1 }, { 62.14,559.8 }, { 57.38,566.1 }, { 48.17,579.6 },
00379 { 39.96,591.4 }, { 36.43,595.9 }, { 34.78,597.6 }, { 33.26,598.8 },
00380 { 31.9,599.6 }, { 30.67,599.9 }, { 29.59,599.7 }, { 28.66,598.8 },
00381 { 27.86,597.4 }, { 27.29,595.2 }, { 26.64,588.7 }, { 26.86,578.8 },
00382 { 27.86,565.3 }
00383 };
00384
00385 DrawSetStrokeAntialias(picasso,MagickTrue);
00386 DrawSetStrokeWidth(picasso,5.904);
00387 DrawSetStrokeLineCap(picasso,RoundCap);
00388 DrawSetStrokeLineJoin(picasso,RoundJoin);
00389 (void) DrawSetStrokeDashArray(picasso,0,(const double *)NULL);
00390 (void) PixelSetColor(color,"#4000c2");
00391 DrawSetStrokeColor(picasso,color);
00392 DrawSetFillRule(picasso,EvenOddRule);
00393 (void) PixelSetColor(color,"#ffff00");
00394 DrawSetFillColor(picasso,color);
00395 DrawPolygon(picasso,193,points);
00396 }
00397 (void) PopDrawingWand(picasso);
00398 }
00399 (void) PopDrawingWand(picasso);
00400 }
00401 (void) PopDrawingWand(picasso);
00402 (void) MagickDrawImage(canvas,picasso);
00403 color=DestroyPixelWand(color);
00404 picasso=DestroyDrawingWand(picasso);
00405 return(MagickTrue);
00406 }
00407
00408 int main(int argc,char **argv)
00409 {
00410 char
00411 filename[MaxTextExtent];
00412
00413 MagickBooleanType
00414 status;
00415
00416 MagickWand
00417 *canvas;
00418
00419 if (argc != 2)
00420 {
00421 (void) printf ("Usage: %s filename\n",argv[0]);
00422 exit(1);
00423 }
00424 (void) CopyMagickString(filename,argv[1],MaxTextExtent);
00425
00426
00427
00428 MagickWandGenesis();
00429 canvas=NewMagickWand();
00430 status=MagickSetSize(canvas,596,842);
00431 if (status == MagickFalse)
00432 ThrowWandException(canvas);
00433 status=MagickReadImage(canvas,"xc:white");
00434 if (status == MagickFalse)
00435 ThrowWandException(canvas);
00436
00437
00438
00439 status=ScribbleImage(canvas);
00440 if (status == MagickFalse)
00441 ThrowWandException(canvas);
00442
00443
00444
00445 status=MagickSetImageDepth(canvas,8);
00446 if (status == MagickFalse)
00447 ThrowWandException(canvas);
00448
00449
00450
00451 status=MagickSetImageCompression(canvas,RLECompression);
00452 if (status == MagickFalse)
00453 ThrowWandException(canvas);
00454
00455
00456
00457 status=MagickWriteImage(canvas,filename);
00458 if (status == MagickFalse)
00459 ThrowWandException(canvas);
00460 canvas=DestroyMagickWand(canvas);
00461 MagickWandTerminus();
00462 return(0);
00463 }