root/ImageMagick/trunk/wand/drawtest.c

Revision 327, 16.3 KB (checked in by cristy, 7 weeks ago)
Line 
1/*
2 *
3 * Test program for C drawing API
4 * Written by Bob Friesenhahn
5 *
6 */
7
8#include <stdio.h>
9#include <stdlib.h>
10#include <wand/MagickWand.h>
11
12#define ThrowWandException(wand) \
13{ \
14  char \
15    *description; \
16 \
17  ExceptionType \
18    severity; \
19 \
20  description=MagickGetException(wand,&severity); \
21  (void) fprintf(stderr,"%s %s %lu %s\n",GetMagickModule(),description); \
22  description=(char *) MagickRelinquishMemory(description); \
23  exit(-1); \
24}
25
26static void ScribbleImage (MagickWand *canvas)
27{
28  DrawingWand
29    *picasso;
30
31  PixelWand
32    *color;
33
34  picasso=NewDrawingWand();
35  color=NewPixelWand();
36  (void) PushDrawingWand(picasso);
37  {
38    DrawSetViewbox(picasso,0,0,MagickGetImageWidth(canvas),
39      MagickGetImageHeight(canvas));
40    DrawScale(picasso,1.101,1.08);
41    DrawTranslate(picasso,-23.69,-22.97);
42    DrawRotate(picasso,0);
43    (void) PixelSetColor(color,"#ffffff");
44    DrawSetFillColor(picasso,color);
45    DrawRectangle(picasso,23.69,22.97,564.6,802.2);
46    DrawSetFillOpacity(picasso,1.0);
47    (void) PixelSetColor(color,"none");
48    DrawSetFillColor(picasso,color);
49    DrawSetStrokeColor(picasso,color);
50
51    DrawSetStrokeAntialias(picasso,MagickTrue);
52    DrawSetStrokeLineCap(picasso,RoundCap);
53    DrawSetStrokeLineJoin(picasso,RoundJoin);
54
55    DrawPushDefs(picasso);
56    {
57      DrawPushClipPath(picasso,"clip_1");
58      {
59        (void) PushDrawingWand(picasso);
60        {
61          DrawRectangle(picasso,0,0,595.3,841.9);
62        }
63        (void) PopDrawingWand(picasso);
64      }
65      DrawPopClipPath(picasso);
66    }
67    DrawPopDefs(picasso);
68
69    (void) PushDrawingWand(picasso);
70    {
71      (void) DrawSetClipPath(picasso, "url(#clip_1)");
72
73      (void) PushDrawingWand(picasso);
74      {
75        DrawSetStrokeAntialias(picasso,MagickTrue);
76        DrawSetStrokeWidth(picasso,4.032);
77        DrawSetStrokeLineCap(picasso,RoundCap);
78        DrawSetStrokeLineJoin(picasso,RoundJoin);
79        (void) DrawSetStrokeDashArray(picasso,0,(const double *)NULL);
80        (void) PixelSetColor(color,"#ff0000");
81        DrawSetStrokeColor(picasso,color);
82        DrawSetFillRule(picasso,EvenOddRule);
83        (void) PixelSetColor(color,"#ff00ff");
84        DrawSetFillColor(picasso,color);
85        DrawRectangle(picasso,72,72,144,144);
86      }
87      (void) PopDrawingWand(picasso);
88
89      (void) PushDrawingWand(picasso);
90      {
91        DrawSetStrokeAntialias(picasso,MagickTrue);
92        DrawSetStrokeWidth(picasso,9);
93        DrawSetStrokeLineCap(picasso,RoundCap);
94        DrawSetStrokeLineJoin(picasso,RoundJoin);
95        (void) DrawSetStrokeDashArray(picasso,0,(const double *)NULL);
96        (void) PixelSetColor(color,"#00ff00");
97        DrawSetStrokeColor(picasso,color);
98        DrawSetFillRule(picasso,EvenOddRule);
99        (void) PixelSetColor(color,"#0080ff");
100        DrawSetFillColor(picasso,color);
101        DrawRoundRectangle(picasso,72,216,360,432,9,9);
102      }
103      (void) PopDrawingWand(picasso);
104
105      (void) PushDrawingWand(picasso);
106      {
107        const PointInfo points[37] =
108        {
109          { 378.1,81.72 }, { 381.1,79.56 }, { 384.3,78.12 }, { 387.6,77.33 },
110          { 391.1,77.11 }, { 394.6,77.62 }, { 397.8,78.77 }, { 400.9,80.57 },
111          { 403.6,83.02 }, { 523.9,216.8 }, { 526.2,219.7 }, { 527.6,223 },
112          { 528.4,226.4 }, { 528.6,229.8 }, { 528,233.3 },   { 526.9,236.5 },
113          { 525.1,239.5 }, { 522.6,242.2 }, { 495.9,266.3 }, { 493,268.5 },
114          { 489.7,269.9 }, { 486.4,270.8 }, { 482.9,270.9 }, { 479.5,270.4 },
115          { 476.2,269.3 }, { 473.2,267.5 }, { 470.4,265 },   { 350,131.2 },
116          { 347.8,128.3 }, { 346.4,125.1 }, { 345.6,121.7 }, {345.4,118.2 },
117          { 346,114.8 },   { 347.1,111.5 }, { 348.9,108.5 }, { 351.4,105.8 },
118          { 378.1,81.72 }
119        };
120
121        DrawSetStrokeAntialias(picasso,MagickTrue);
122        DrawSetStrokeWidth(picasso,2.016);
123        DrawSetStrokeLineCap(picasso,RoundCap);
124        DrawSetStrokeLineJoin(picasso,RoundJoin);
125        (void) DrawSetStrokeDashArray(picasso,0,(const double *)NULL);
126        (void) PixelSetColor(color,"#000080");
127        DrawSetStrokeColor(picasso,color);
128        DrawSetFillRule(picasso,EvenOddRule);
129        (void) PixelSetColor(color,"#c2c280");
130        DrawSetFillColor(picasso,color);
131        DrawPolygon(picasso,37,points);
132      }
133      (void) PopDrawingWand(picasso);
134
135      (void) PushDrawingWand(picasso);
136      {
137        DrawSetStrokeAntialias(picasso,MagickTrue);
138        DrawSetStrokeWidth(picasso,3.024);
139        DrawSetStrokeLineCap(picasso,RoundCap);
140        DrawSetStrokeLineJoin(picasso,RoundJoin);
141        (void) DrawSetStrokeDashArray(picasso,0,(const double *)NULL);
142        (void) PixelSetColor(color,"#000080");
143        DrawSetStrokeColor(picasso,color);
144        DrawSetFillRule(picasso,EvenOddRule);
145        (void) PixelSetColor(color,"#000080");
146        DrawSetFillColor(picasso,color);
147        DrawEllipse(picasso,489.6,424.8,72,129.6,0,360);
148      }
149      (void) PopDrawingWand(picasso);
150
151      (void) PushDrawingWand(picasso);
152      {
153        const PointInfo points[48] =
154        {
155          { 213.8,25.13},  { 216.7,24.48 }, {219.8,24.55 },  { 223.1,25.42 },
156          { 226.7,27 },    { 230.3,29.3 },  { 234.1,32.26 }, { 237.9,35.86 },
157          { 241.8,40.03 }, { 249.7,50.11 }, { 257.4,62.14 }, { 264.8,75.89 },
158          { 271.6,91.15 }, { 277.3,106.8 }, { 281.6,121.8 }, { 284.4,135.9 },
159          { 285.7,148.5 }, { 285.6,159.6 }, { 284.9,164.3 }, { 283.8,168.5 },
160          { 282.5,172.1 }, { 280.7,175 },   { 278.5,177.3 }, { 275.9,178.7 },
161          { 273,179.4 },   { 269.9,179.3 }, { 266.6,178.4 }, { 263.1,176.8 },
162          { 259.5,174.5},  { 255.7,171.6 }, { 251.9,168 },   { 248,163.8 },
163          { 244.1,159 },   { 240.1,153.7 }, { 232.3,141.7 }, { 225,127.9 },
164          { 218.2,112.7 }, { 212.5,97.06 }, { 208.2,82.01 }, { 205.4,67.97 },
165          { 204,55.3 },    { 204.3,44.35 }, { 204.9,39.6 },  { 205.9,35.42 },
166          { 207.4,31.82 }, { 209.2,28.87 }, { 211.3,26.64},  { 213.8,25.13 }
167        };
168
169        DrawSetStrokeAntialias(picasso,MagickTrue);
170        DrawSetStrokeWidth(picasso,3.024);
171        DrawSetStrokeLineCap(picasso,RoundCap);
172        DrawSetStrokeLineJoin(picasso,RoundJoin);
173        (void) DrawSetStrokeDashArray(picasso,0,(const double *)NULL);
174        (void) PixelSetColor(color,"#ff8000");
175        DrawSetStrokeColor(picasso,color);
176        DrawSetFillRule(picasso,EvenOddRule);
177        (void) PixelSetColor(color,"#00ffff");
178        DrawSetFillColor(picasso,color);
179        DrawPolygon(picasso,48,points);
180      }
181      (void) PopDrawingWand(picasso);
182
183      (void) PushDrawingWand(picasso);
184      {
185        DrawSetStrokeAntialias(picasso,MagickTrue);
186        DrawSetStrokeWidth(picasso,12.02);
187        DrawSetStrokeLineCap(picasso,RoundCap);
188        DrawSetStrokeLineJoin(picasso,RoundJoin);
189        (void) DrawSetStrokeDashArray(picasso,0,(const double *)NULL);
190        (void) PixelSetColor(color,"#4000c2");
191        DrawSetStrokeColor(picasso,color);
192        (void) PixelSetColor(color,"none");
193        DrawSetFillColor(picasso,color);
194        DrawArc(picasso,360,554.4,187.2,237.6,0,90);
195      }
196      (void) PopDrawingWand(picasso);
197
198      (void) PushDrawingWand(picasso);
199      {
200        DrawSetStrokeAntialias(picasso,MagickTrue);
201        DrawSetStrokeWidth(picasso,9);
202        DrawSetStrokeLineCap(picasso,RoundCap);
203        DrawSetStrokeLineJoin(picasso,RoundJoin);
204        (void) DrawSetStrokeDashArray(picasso,0,(const double *)NULL);
205        (void) PixelSetColor(color,"#4000c2");
206        DrawSetStrokeColor(picasso,color);
207        DrawSetFillRule(picasso,EvenOddRule);
208        (void) PixelSetColor(color,"#4000c2");
209        DrawSetFillColor(picasso,color);
210        DrawEllipse(picasso,388.8,626.4,100.8,122.4,0,90);
211      }
212      (void) PopDrawingWand(picasso);
213
214      (void) PushDrawingWand(picasso);
215      {
216        const PointInfo points[6] =
217        {
218          { 180,504 }, { 282.7,578.6 }, { 243.5,699.4 }, { 116.5,699.4 },
219          { 77.26,578.6 }, { 180,504 }
220        };
221
222        DrawSetStrokeAntialias(picasso,MagickTrue);
223        DrawSetStrokeWidth(picasso,9);
224        DrawSetStrokeLineCap(picasso,RoundCap);
225        DrawSetStrokeLineJoin(picasso,RoundJoin);
226        (void) DrawSetStrokeDashArray(picasso,0,(const double *)NULL);
227        (void) PixelSetColor(color,"#4000c2");
228        DrawSetStrokeColor(picasso,color);
229        DrawSetFillRule(picasso,EvenOddRule);
230        (void) PixelSetColor(color,"#800000");
231        DrawSetFillColor(picasso,color);
232        DrawPolygon(picasso,6,points);
233      }
234      (void) PopDrawingWand(picasso);
235
236      (void) PushDrawingWand(picasso);
237      {
238        const PointInfo points[11] =
239        {
240          { 180,504 },     { 211.8,568.3 }, { 282.7,578.6 }, { 231.3,628.7 },
241          { 243.5,699.4 }, { 180,666 },     { 116.5,699.4 }, { 128.7,628.7 },
242          { 77.26,578.6 }, { 148.2,568.3 }, { 180,504 }
243        };
244
245        DrawSetStrokeAntialias(picasso,MagickTrue);
246        DrawSetStrokeWidth(picasso,9);
247        DrawSetStrokeLineCap(picasso,RoundCap);
248        DrawSetStrokeLineJoin(picasso,RoundJoin);
249        (void) DrawSetStrokeDashArray(picasso,0,(const double *)NULL);
250        (void) PixelSetColor(color,"#4000c2");
251        DrawSetStrokeColor(picasso,color);
252        DrawSetFillRule(picasso,EvenOddRule);
253        (void) PixelSetColor(color,"#800000");
254        DrawSetFillColor(picasso,color);
255        DrawPolygon(picasso,11,points);
256      }
257      (void) PopDrawingWand(picasso);
258
259      (void) PushDrawingWand(picasso);
260      {
261        const PointInfo points[15] =
262        {
263          { 540,288 },     { 561.6,216 },   { 547.2,43.2 },  { 280.8,36 },
264          { 302.4,194.4 }, { 331.2,64.8 },  { 504,64.8 },    { 475.2,115.2 },
265          { 525.6,93.6 },  { 496.8,158.4 }, { 532.8,136.8 }, { 518.4,180 },
266          { 540,172.8 },   { 540,223.2 },   { 540,288 }
267        };
268
269        DrawSetStrokeAntialias(picasso,MagickTrue);
270        DrawSetStrokeWidth(picasso,5.976);
271        DrawSetStrokeLineCap(picasso,RoundCap);
272        DrawSetStrokeLineJoin(picasso,RoundJoin);
273        (void) DrawSetStrokeDashArray(picasso,0,(const double *)NULL);
274        (void) PixelSetColor(color,"#4000c2");
275        DrawSetStrokeColor(picasso,color);
276        DrawSetFillRule(picasso,EvenOddRule);
277        (void) PixelSetColor(color,"#ffff00");
278        DrawSetFillColor(picasso,color);
279        DrawPolygon(picasso,15,points);
280      }
281      (void) PopDrawingWand(picasso);
282
283      (void) PushDrawingWand(picasso);
284      {
285        const PointInfo points[7] =
286        {
287          { 57.6,640.8 }, { 57.6,784.8 }, { 194.4,799.2 }, { 259.2,777.6 },
288          { 151.2,756 }, { 86.4,748.8 }, { 57.6,640.8 }
289        };
290
291        DrawSetStrokeAntialias(picasso,MagickTrue);
292        DrawSetStrokeWidth(picasso,5.976);
293        DrawSetStrokeLineCap(picasso,RoundCap);
294        DrawSetStrokeLineJoin(picasso,RoundJoin);
295        (void) DrawSetStrokeDashArray(picasso,0,(const double *)NULL);
296        (void) PixelSetColor(color,"#4000c2");
297        DrawSetStrokeColor(picasso,color);
298        DrawSetFillRule(picasso,EvenOddRule);
299        (void) PixelSetColor(color,"#ffff00");
300        DrawSetFillColor(picasso,color);
301        DrawPolygon(picasso,7,points);
302      }
303      (void) PopDrawingWand(picasso);
304
305      (void) PushDrawingWand(picasso);
306      {
307        const PointInfo points[193] =
308        {
309          { 27.86,565.3 }, { 29.66,550.8 }, { 31.97,538.1 }, { 34.85,527.1 },
310          { 38.09,517.7 }, { 41.83,509.8 }, { 45.86,503.1 }, { 50.33,497.6 },
311          { 55.08,493.2 }, { 60.19,489.8 }, { 65.45,487.3 }, { 70.92,485.4 },
312          { 76.61,484.2 }, { 88.42,483 },   { 100.4,482.9 }, { 108.4,482.2 },
313          { 119.8,480.3 }, { 150.8,474.1 }, { 189.4,466.6 }, { 210.3,463 },
314          { 231.5,459.9 }, { 252.4,457.8 }, { 272.7,456.6 }, { 291.8,456.9 },
315          { 300.7,457.7 }, { 309.1,458.9 }, { 316.9,460.6 }, { 324.1,462.8 },
316          { 330.7,465.6 }, { 336.4,469 },   { 341.3,473 },   { 345.3,477.7 },
317          { 348.4,483.1 }, { 350.4,489.2},  { 352.4,495.4 }, { 355.2,500.9 },
318          { 358.8,505.8 }, { 363,510 },     { 367.8,513.6 }, { 373,516.8 },
319          { 378.6,519.6 }, { 384.3,521.8 }, { 396.4,525.4 }, { 408.2,527.9 },
320          { 428,531.2 },   { 434.6,532.9 }, { 436.7,533.8 }, { 437.8,534.9 },
321          { 437.8,536.2 }, { 436.8,537.8 }, { 434.5,539.6 }, { 430.9,541.8 },
322          { 419.3,547.6 }, { 401.3,555.2 }, { 342.4,577.9 }, {325.2,584.9 },
323          { 311,591.3 },   { 300,597.3 },   { 291.6,602.8 }, { 285.8,607.8 },
324          { 282.3,612.3 }, { 281.4,614.4 }, { 280.9,616.2 }, { 281.2,619.6 },
325          { 282.1,621.2 }, { 283.3,622.6 }, { 286.8,624.9 }, { 291.5,626.6 },
326          { 297.1,627.8 }, { 303.6,628.3 }, { 310.5,628.3 }, { 317.9,627.6 },
327          { 325.2,626.3 }, { 332.6,624.3 }, { 339.5,621.7 }, { 345.9,618.4 },
328          { 351.4,614.4 }, { 353.9,612.2 }, { 356,609.8 }, { 357.9,607.1 },
329          { 359.4,604.3 }, { 360.6,601.3 }, { 361.4,598.2 }, { 361.7,594.9 },
330          { 361.7,591.3 }, { 361.2,587.7 }, { 360.1,583.7 }, { 358.6,579.7 },
331          { 356.4,575.4 }, { 353.7,570.9 }, { 350.4,566.2 }, { 346.4,561.3 },
332          { 341.8,556.2 }, { 336.5,550.9 }, { 330.6,545.5 }, { 323.8,539.8 },
333          { 316.2,533.9 }, { 298.7,521.5 }, { 277.8,508.2 }, { 256.1,495.5 },
334          { 236,484.5 },   { 217.7,475.1 }, { 200.8,467.1 }, { 185.6,460.7 },
335          { 171.9,455.5 }, { 159.6,451.6 }, { 148.6,448.8 }, { 139,447 },
336          { 130.5,446.2 }, { 123.3,446.2 }, { 117.1,446.9 }, { 112,448.3 },
337          { 107.9,450.2 }, { 104.8,452.5 }, { 102.5,455.2 }, { 101,458.1 },
338          { 100.2,461.2 }, { 100.2,464.3 }, { 100.7,467.4 }, { 101.8,470.3 },
339          { 103.4,473 },   { 105.4,475.3 }, { 107.8,477.1 }, { 110.5,478.4 },
340          { 113.4,479.1 }, { 116.5,478.9 }, { 119.7,478 },   { 123,476.2 },
341          { 126.4,473.3 }, { 129.6,469.2 }, { 132.7,463.9 }, { 135.2,458.4 },
342          { 136.6,453.7 }, { 137,449.9 },   { 136.6,446.8 }, { 135.4,444.5 },
343          { 133.3,442.9 }, { 130.8,441.9 }, { 127.5,441.4 }, { 123.9,441.6 },
344          { 119.8,442.3 }, { 110.7,445.1 }, { 101.1,449.5 }, { 91.37,455.2 },
345          { 82.37,461.9 }, { 74.66,469.2 }, { 71.57,473 },   { 68.98,476.8 },
346          { 67.03,480.7 }, { 65.81,484.4 }, { 65.45,488.2 }, { 65.95,491.7 },
347          { 67.46,495.1 }, { 69.98,498.3 }, { 73.66,501.3 }, { 78.55,503.9 },
348          { 84.82,506.3 }, { 92.38,508.2 }, { 107.1,511.6 }, { 118.2,514.8 },
349          { 125.9,517.8 }, { 130.7,520.4 }, { 132.1,521.7 }, { 132.8,522.9 },
350          { 133,524.2 },   { 132.6,525.3 }, { 131.8,526.5 }, { 130.5,527.5 },
351          { 126.6,529.6 }, { 121.5,531.7 }, { 115.3,533.7 }, { 101.4,537.6 },
352          { 87.55,541.8 }, { 81.36,544 },   { 76.25,546.3 }, { 71.64,549.5 },
353          { 66.89,554.1 }, { 62.14,559.8 }, { 57.38,566.1 }, { 48.17,579.6 },
354          { 39.96,591.4 }, { 36.43,595.9 }, { 34.78,597.6 }, { 33.26,598.8 },
355          { 31.9,599.6 },  { 30.67,599.9 }, { 29.59,599.7 }, { 28.66,598.8 },
356          { 27.86,597.4 }, { 27.29,595.2 }, { 26.64,588.7 }, { 26.86,578.8 },
357          { 27.86,565.3 }
358        };
359
360        DrawSetStrokeAntialias(picasso,MagickTrue);
361        DrawSetStrokeWidth(picasso,5.904);
362        DrawSetStrokeLineCap(picasso,RoundCap);
363        DrawSetStrokeLineJoin(picasso,RoundJoin);
364        (void) DrawSetStrokeDashArray(picasso,0,(const double *)NULL);
365        (void) PixelSetColor(color,"#4000c2");
366        DrawSetStrokeColor(picasso,color);
367        DrawSetFillRule(picasso,EvenOddRule);
368        (void) PixelSetColor(color,"#ffff00");
369        DrawSetFillColor(picasso,color);
370        DrawPolygon(picasso,193,points);
371      }
372      (void) PopDrawingWand(picasso);
373    }
374    (void) PopDrawingWand(picasso);
375  }
376  (void) PopDrawingWand(picasso);
377  (void) MagickDrawImage(canvas,picasso);
378  color=DestroyPixelWand(color);
379  picasso=DestroyDrawingWand(picasso);
380}
381
382int main ( int argc, char **argv )
383{
384  MagickWand *canvas = (MagickWand *)NULL;
385  char outfile[MaxTextExtent];
386  MagickBooleanType status;
387
388  if ( argc != 2 )
389    {
390      (void) printf ( "Usage: %s filename\n", argv[0] );
391      exit( 1 );
392    }
393
394  (void) CopyMagickString( outfile, argv[1], MaxTextExtent );
395
396
397  /*
398   * Create canvas image
399   */
400  MagickWandGenesis();
401  canvas=NewMagickWand();
402  MagickSetSize( canvas, 596, 842 );
403  status=MagickReadImage( canvas, "xc:white" );
404  if (status == MagickFalse)
405    ThrowWandException(canvas);
406
407  /*
408   * Scribble on image
409   */
410  ScribbleImage( canvas );
411
412  /*
413   * Save image to file
414   */
415  (void) MagickWriteImage ( canvas, outfile );
416
417  canvas =DestroyMagickWand( canvas );
418  MagickWandTerminus();
419  return 0;
420}
Note: See TracBrowser for help on using the browser.