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