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