magick-image.c revision 2a11befa48257796843468409d77bb8cfb129cdc
1/* 2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3% % 4% % 5% % 6% M M AAA GGGG IIIII CCCC K K % 7% MM MM A A G I C K K % 8% M M M AAAAA G GGG I C KKK % 9% M M A A G G I C K K % 10% M M A A GGGG IIIII CCCC K K % 11% % 12% IIIII M M AAA GGGG EEEEE % 13% I MM MM A A G E % 14% I M M M AAAAA G GG EEE % 15% I M M A A G G E % 16% IIIII M M A A GGGG EEEEE % 17% % 18% % 19% MagickWand Image Methods % 20% % 21% Software Design % 22% John Cristy % 23% August 2003 % 24% % 25% % 26% Copyright 1999-2011 ImageMagick Studio LLC, a non-profit organization % 27% dedicated to making software imaging solutions freely available. % 28% % 29% You may not use this file except in compliance with the License. You may % 30% obtain a copy of the License at % 31% % 32% http://www.imagemagick.org/script/license.php % 33% % 34% Unless required by applicable law or agreed to in writing, software % 35% distributed under the License is distributed on an "AS IS" BASIS, % 36% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. % 37% See the License for the specific language governing permissions and % 38% limitations under the License. % 39% % 40%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 41% 42% 43% 44*/ 45 46/* 47 Include declarations. 48*/ 49#include "MagickWand/studio.h" 50#include "MagickWand/MagickWand.h" 51#include "MagickWand/magick-wand-private.h" 52#include "MagickWand/wand.h" 53#include "MagickWand/pixel-wand-private.h" 54 55/* 56 Define declarations. 57*/ 58#define ThrowWandException(severity,tag,context) \ 59{ \ 60 (void) ThrowMagickException(wand->exception,GetMagickModule(),severity, \ 61 tag,"`%s'",context); \ 62 return(MagickFalse); \ 63} 64#define MagickWandId "MagickWand" 65 66/* 67%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 68% % 69% % 70% % 71+ C l o n e M a g i c k W a n d F r o m I m a g e s % 72% % 73% % 74% % 75%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 76% 77% CloneMagickWandFromImages() clones the magick wand and inserts a new image 78% list. 79% 80% The format of the CloneMagickWandFromImages method is: 81% 82% MagickWand *CloneMagickWandFromImages(const MagickWand *wand, 83% Image *images) 84% 85% A description of each parameter follows: 86% 87% o wand: the magick wand. 88% 89% o images: replace the image list with these image(s). 90% 91*/ 92static MagickWand *CloneMagickWandFromImages(const MagickWand *wand, 93 Image *images) 94{ 95 MagickWand 96 *clone_wand; 97 98 assert(wand != (MagickWand *) NULL); 99 assert(wand->signature == WandSignature); 100 if (wand->debug != MagickFalse) 101 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 102 clone_wand=(MagickWand *) AcquireMagickMemory(sizeof(*clone_wand)); 103 if (clone_wand == (MagickWand *) NULL) 104 ThrowWandFatalException(ResourceLimitFatalError,"MemoryAllocationFailed", 105 images->filename); 106 (void) ResetMagickMemory(clone_wand,0,sizeof(*clone_wand)); 107 clone_wand->id=AcquireWandId(); 108 (void) FormatLocaleString(clone_wand->name,MaxTextExtent,"%s-%.20g", 109 MagickWandId,(double) clone_wand->id); 110 clone_wand->exception=AcquireExceptionInfo(); 111 InheritException(clone_wand->exception,wand->exception); 112 clone_wand->image_info=CloneImageInfo(wand->image_info); 113 clone_wand->quantize_info=CloneQuantizeInfo(wand->quantize_info); 114 clone_wand->images=images; 115 clone_wand->debug=IsEventLogging(); 116 if (clone_wand->debug != MagickFalse) 117 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",clone_wand->name); 118 clone_wand->signature=WandSignature; 119 return(clone_wand); 120} 121 122/* 123%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 124% % 125% % 126% % 127% G e t I m a g e F r o m M a g i c k W a n d % 128% % 129% % 130% % 131%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 132% 133% GetImageFromMagickWand() returns the current image from the magick wand. 134% 135% The format of the GetImageFromMagickWand method is: 136% 137% Image *GetImageFromMagickWand(const MagickWand *wand) 138% 139% A description of each parameter follows: 140% 141% o wand: the magick wand. 142% 143*/ 144WandExport Image *GetImageFromMagickWand(const MagickWand *wand) 145{ 146 assert(wand != (MagickWand *) NULL); 147 assert(wand->signature == WandSignature); 148 if (wand->debug != MagickFalse) 149 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 150 if (wand->images == (Image *) NULL) 151 { 152 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 153 "ContainsNoImages","`%s'",wand->name); 154 return((Image *) NULL); 155 } 156 return(wand->images); 157} 158 159/* 160%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 161% % 162% % 163% % 164% M a g i c k A d a p t i v e S h a r p e n I m a g e % 165% % 166% % 167% % 168%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 169% 170% MagickAdaptiveBlurImage() adaptively blurs the image by blurring 171% less intensely near image edges and more intensely far from edges. We 172% blur the image with a Gaussian operator of the given radius and standard 173% deviation (sigma). For reasonable results, radius should be larger than 174% sigma. Use a radius of 0 and MagickAdaptiveBlurImage() selects a 175% suitable radius for you. 176% 177% The format of the MagickAdaptiveBlurImage method is: 178% 179% MagickBooleanType MagickAdaptiveBlurImage(MagickWand *wand, 180% const double radius,const double sigma,const double bias) 181% 182% A description of each parameter follows: 183% 184% o wand: the magick wand. 185% 186% o radius: the radius of the Gaussian, in pixels, not counting the center 187% pixel. 188% 189% o sigma: the standard deviation of the Gaussian, in pixels. 190% 191% o bias: the bias. 192% 193*/ 194WandExport MagickBooleanType MagickAdaptiveBlurImage(MagickWand *wand, 195 const double radius,const double sigma,const double bias) 196{ 197 Image 198 *sharp_image; 199 200 assert(wand != (MagickWand *) NULL); 201 assert(wand->signature == WandSignature); 202 if (wand->debug != MagickFalse) 203 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 204 if (wand->images == (Image *) NULL) 205 ThrowWandException(WandError,"ContainsNoImages",wand->name); 206 sharp_image=AdaptiveBlurImage(wand->images,radius,sigma,bias,wand->exception); 207 if (sharp_image == (Image *) NULL) 208 return(MagickFalse); 209 ReplaceImageInList(&wand->images,sharp_image); 210 return(MagickTrue); 211} 212 213/* 214%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 215% % 216% % 217% % 218% M a g i c k A d a p t i v e R e s i z e I m a g e % 219% % 220% % 221% % 222%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 223% 224% MagickAdaptiveResizeImage() adaptively resize image with data dependent 225% triangulation. 226% 227% MagickBooleanType MagickAdaptiveResizeImage(MagickWand *wand, 228% const size_t columns,const size_t rows, 229% const PixelInterpolateMethod method) 230% 231% A description of each parameter follows: 232% 233% o wand: the magick wand. 234% 235% o columns: the number of columns in the scaled image. 236% 237% o rows: the number of rows in the scaled image. 238% 239% o interpolate: the pixel interpolation method. 240% 241*/ 242WandExport MagickBooleanType MagickAdaptiveResizeImage(MagickWand *wand, 243 const size_t columns,const size_t rows,const PixelInterpolateMethod method) 244{ 245 Image 246 *resize_image; 247 248 assert(wand != (MagickWand *) NULL); 249 assert(wand->signature == WandSignature); 250 if (wand->debug != MagickFalse) 251 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 252 if (wand->images == (Image *) NULL) 253 ThrowWandException(WandError,"ContainsNoImages",wand->name); 254 resize_image=AdaptiveResizeImage(wand->images,columns,rows,method, 255 wand->exception); 256 if (resize_image == (Image *) NULL) 257 return(MagickFalse); 258 ReplaceImageInList(&wand->images,resize_image); 259 return(MagickTrue); 260} 261 262/* 263%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 264% % 265% % 266% % 267% M a g i c k A d a p t i v e S h a r p e n I m a g e % 268% % 269% % 270% % 271%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 272% 273% MagickAdaptiveSharpenImage() adaptively sharpens the image by sharpening 274% more intensely near image edges and less intensely far from edges. We 275% sharpen the image with a Gaussian operator of the given radius and standard 276% deviation (sigma). For reasonable results, radius should be larger than 277% sigma. Use a radius of 0 and MagickAdaptiveSharpenImage() selects a 278% suitable radius for you. 279% 280% The format of the MagickAdaptiveSharpenImage method is: 281% 282% MagickBooleanType MagickAdaptiveSharpenImage(MagickWand *wand, 283% const double radius,const double sigma,const double bias) 284% 285% A description of each parameter follows: 286% 287% o wand: the magick wand. 288% 289% o radius: the radius of the Gaussian, in pixels, not counting the center 290% pixel. 291% 292% o sigma: the standard deviation of the Gaussian, in pixels. 293% 294% o bias: the bias. 295% 296*/ 297WandExport MagickBooleanType MagickAdaptiveSharpenImage(MagickWand *wand, 298 const double radius,const double sigma,const double bias) 299{ 300 Image 301 *sharp_image; 302 303 assert(wand != (MagickWand *) NULL); 304 assert(wand->signature == WandSignature); 305 if (wand->debug != MagickFalse) 306 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 307 if (wand->images == (Image *) NULL) 308 ThrowWandException(WandError,"ContainsNoImages",wand->name); 309 sharp_image=AdaptiveSharpenImage(wand->images,radius,sigma,bias, 310 wand->exception); 311 if (sharp_image == (Image *) NULL) 312 return(MagickFalse); 313 ReplaceImageInList(&wand->images,sharp_image); 314 return(MagickTrue); 315} 316 317/* 318%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 319% % 320% % 321% % 322% M a g i c k A d a p t i v e T h r e s h o l d I m a g e % 323% % 324% % 325% % 326%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 327% 328% MagickAdaptiveThresholdImage() selects an individual threshold for each pixel 329% based on the range of intensity values in its local neighborhood. This 330% allows for thresholding of an image whose global intensity histogram 331% doesn't contain distinctive peaks. 332% 333% The format of the AdaptiveThresholdImage method is: 334% 335% MagickBooleanType MagickAdaptiveThresholdImage(MagickWand *wand, 336% const size_t width,const size_t height,const double bias) 337% 338% A description of each parameter follows: 339% 340% o wand: the magick wand. 341% 342% o width: the width of the local neighborhood. 343% 344% o height: the height of the local neighborhood. 345% 346% o offset: the mean bias. 347% 348*/ 349WandExport MagickBooleanType MagickAdaptiveThresholdImage(MagickWand *wand, 350 const size_t width,const size_t height,const double bias) 351{ 352 Image 353 *threshold_image; 354 355 assert(wand != (MagickWand *) NULL); 356 assert(wand->signature == WandSignature); 357 if (wand->debug != MagickFalse) 358 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 359 if (wand->images == (Image *) NULL) 360 ThrowWandException(WandError,"ContainsNoImages",wand->name); 361 threshold_image=AdaptiveThresholdImage(wand->images,width,height,bias, 362 wand->exception); 363 if (threshold_image == (Image *) NULL) 364 return(MagickFalse); 365 ReplaceImageInList(&wand->images,threshold_image); 366 return(MagickTrue); 367} 368 369/* 370%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 371% % 372% % 373% % 374% M a g i c k A d d I m a g e % 375% % 376% % 377% % 378%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 379% 380% MagickAddImage() adds a clone of the images in the second wand and 381% inserts them into the first wand, at the current image location. 382% 383% Use MagickSetFirstIterator(), to insert new images before all the current 384% images in the wand, otherwise image is placed after the current image. 385% 386% The format of the MagickAddImage method is: 387% 388% MagickBooleanType MagickAddImage(MagickWand *wand, 389% const MagickWand *add_wand) 390% 391% A description of each parameter follows: 392% 393% o wand: the magick wand. 394% 395% o add_wand: A wand that contains images to add at the current image 396% location. 397% 398*/ 399 400static inline MagickBooleanType InsertImageInWand(MagickWand *wand, 401 Image *images) 402{ 403 Image 404 *current; 405 406 current=wand->images; /* note the current image */ 407 408 /* if no images in wand, just add them and set first image as current */ 409 if (current == (Image *) NULL) 410 { 411 wand->images=GetFirstImageInList(images); 412 return(MagickTrue); 413 } 414 415 /* user jumped to first image, so prepend new images - remain active */ 416 if ((wand->set_first != MagickFalse) && 417 (current->previous == (Image *) NULL) ) 418 { 419 PrependImageToList(¤t,images); 420 wand->images=GetFirstImageInList(images); 421 return(MagickTrue); 422 } 423 wand->set_first = MagickFalse; /* flag no longer valid */ 424 425 /* Current image was flaged as 'pending' iterative processing. */ 426 if (wand->image_pending != MagickFalse) 427 { 428 /* current pending image is the last, append new images */ 429 if (current->next == (Image *) NULL) 430 { 431 AppendImageToList(¤t,images); 432 wand->images=GetLastImageInList(images); 433 return(MagickTrue); 434 } 435 /* current pending image is the first image, prepend it */ 436 if (current->previous == (Image *) NULL) 437 { 438 PrependImageToList(¤t,images); 439 wand->images=GetFirstImageInList(images); 440 return(MagickTrue); 441 } 442 } 443 444 /* if at last image append new images */ 445 if (current->next == (Image *) NULL) 446 { 447 InsertImageInList(¤t,images); 448 wand->images=GetLastImageInList(images); 449 return(MagickTrue); 450 } 451 /* otherwise just insert image, just after the current image */ 452 InsertImageInList(¤t,images); 453 wand->images=GetFirstImageInList(images); 454 return(MagickTrue); 455} 456 457WandExport MagickBooleanType MagickAddImage(MagickWand *wand, 458 const MagickWand *add_wand) 459{ 460 Image 461 *images; 462 463 assert(wand != (MagickWand *) NULL); 464 assert(wand->signature == WandSignature); 465 if (wand->debug != MagickFalse) 466 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 467 assert(add_wand != (MagickWand *) NULL); 468 assert(add_wand->signature == WandSignature); 469 if (add_wand->images == (Image *) NULL) 470 ThrowWandException(WandError,"ContainsNoImages",add_wand->name); 471 472 /* clone images in second wand, and insert into first */ 473 images=CloneImageList(add_wand->images,wand->exception); 474 if (images == (Image *) NULL) 475 return(MagickFalse); 476 return(InsertImageInWand(wand,images)); 477} 478 479/* 480%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 481% % 482% % 483% % 484% M a g i c k A d d N o i s e I m a g e % 485% % 486% % 487% % 488%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 489% 490% MagickAddNoiseImage() adds random noise to the image. 491% 492% The format of the MagickAddNoiseImage method is: 493% 494% MagickBooleanType MagickAddNoiseImage(MagickWand *wand, 495% const NoiseType noise_type,const double attenuate) 496% 497% A description of each parameter follows: 498% 499% o wand: the magick wand. 500% 501% o noise_type: The type of noise: Uniform, Gaussian, Multiplicative, 502% Impulse, Laplacian, or Poisson. 503% 504% o attenuate: attenuate the random distribution. 505% 506*/ 507WandExport MagickBooleanType MagickAddNoiseImage(MagickWand *wand, 508 const NoiseType noise_type,const double attenuate) 509{ 510 Image 511 *noise_image; 512 513 assert(wand != (MagickWand *) NULL); 514 assert(wand->signature == WandSignature); 515 if (wand->debug != MagickFalse) 516 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 517 if (wand->images == (Image *) NULL) 518 ThrowWandException(WandError,"ContainsNoImages",wand->name); 519 noise_image=AddNoiseImage(wand->images,noise_type,attenuate,wand->exception); 520 if (noise_image == (Image *) NULL) 521 return(MagickFalse); 522 ReplaceImageInList(&wand->images,noise_image); 523 return(MagickTrue); 524} 525 526/* 527%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 528% % 529% % 530% % 531% M a g i c k A f f i n e T r a n s f o r m I m a g e % 532% % 533% % 534% % 535%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 536% 537% MagickAffineTransformImage() transforms an image as dictated by the affine 538% matrix of the drawing wand. 539% 540% The format of the MagickAffineTransformImage method is: 541% 542% MagickBooleanType MagickAffineTransformImage(MagickWand *wand, 543% const DrawingWand *drawing_wand) 544% 545% A description of each parameter follows: 546% 547% o wand: the magick wand. 548% 549% o drawing_wand: the draw wand. 550% 551*/ 552WandExport MagickBooleanType MagickAffineTransformImage(MagickWand *wand, 553 const DrawingWand *drawing_wand) 554{ 555 DrawInfo 556 *draw_info; 557 558 Image 559 *affine_image; 560 561 assert(wand != (MagickWand *) NULL); 562 assert(wand->signature == WandSignature); 563 if (wand->debug != MagickFalse) 564 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 565 if (wand->images == (Image *) NULL) 566 ThrowWandException(WandError,"ContainsNoImages",wand->name); 567 draw_info=PeekDrawingWand(drawing_wand); 568 if (draw_info == (DrawInfo *) NULL) 569 return(MagickFalse); 570 affine_image=AffineTransformImage(wand->images,&draw_info->affine, 571 wand->exception); 572 draw_info=DestroyDrawInfo(draw_info); 573 if (affine_image == (Image *) NULL) 574 return(MagickFalse); 575 ReplaceImageInList(&wand->images,affine_image); 576 return(MagickTrue); 577} 578 579/* 580%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 581% % 582% % 583% % 584% M a g i c k A n n o t a t e I m a g e % 585% % 586% % 587% % 588%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 589% 590% MagickAnnotateImage() annotates an image with text. 591% 592% The format of the MagickAnnotateImage method is: 593% 594% MagickBooleanType MagickAnnotateImage(MagickWand *wand, 595% const DrawingWand *drawing_wand,const double x,const double y, 596% const double angle,const char *text) 597% 598% A description of each parameter follows: 599% 600% o wand: the magick wand. 601% 602% o drawing_wand: the draw wand. 603% 604% o x: x ordinate to left of text 605% 606% o y: y ordinate to text baseline 607% 608% o angle: rotate text relative to this angle. 609% 610% o text: text to draw 611% 612*/ 613WandExport MagickBooleanType MagickAnnotateImage(MagickWand *wand, 614 const DrawingWand *drawing_wand,const double x,const double y, 615 const double angle,const char *text) 616{ 617 char 618 geometry[MaxTextExtent]; 619 620 DrawInfo 621 *draw_info; 622 623 MagickBooleanType 624 status; 625 626 assert(wand != (MagickWand *) NULL); 627 assert(wand->signature == WandSignature); 628 if (wand->debug != MagickFalse) 629 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 630 if (wand->images == (Image *) NULL) 631 ThrowWandException(WandError,"ContainsNoImages",wand->name); 632 draw_info=PeekDrawingWand(drawing_wand); 633 if (draw_info == (DrawInfo *) NULL) 634 return(MagickFalse); 635 (void) CloneString(&draw_info->text,text); 636 (void) FormatLocaleString(geometry,MaxTextExtent,"%+g%+g",x,y); 637 draw_info->affine.sx=cos((double) DegreesToRadians(fmod(angle,360.0))); 638 draw_info->affine.rx=sin((double) DegreesToRadians(fmod(angle,360.0))); 639 draw_info->affine.ry=(-sin((double) DegreesToRadians(fmod(angle,360.0)))); 640 draw_info->affine.sy=cos((double) DegreesToRadians(fmod(angle,360.0))); 641 (void) CloneString(&draw_info->geometry,geometry); 642 status=AnnotateImage(wand->images,draw_info,wand->exception); 643 draw_info=DestroyDrawInfo(draw_info); 644 return(status); 645} 646 647/* 648%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 649% % 650% % 651% % 652% M a g i c k A n i m a t e I m a g e s % 653% % 654% % 655% % 656%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 657% 658% MagickAnimateImages() animates an image or image sequence. 659% 660% The format of the MagickAnimateImages method is: 661% 662% MagickBooleanType MagickAnimateImages(MagickWand *wand, 663% const char *server_name) 664% 665% A description of each parameter follows: 666% 667% o wand: the magick wand. 668% 669% o server_name: the X server name. 670% 671*/ 672WandExport MagickBooleanType MagickAnimateImages(MagickWand *wand, 673 const char *server_name) 674{ 675 MagickBooleanType 676 status; 677 678 assert(wand != (MagickWand *) NULL); 679 assert(wand->signature == WandSignature); 680 if (wand->debug != MagickFalse) 681 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 682 (void) CloneString(&wand->image_info->server_name,server_name); 683 status=AnimateImages(wand->image_info,wand->images,wand->exception); 684 return(status); 685} 686 687/* 688%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 689% % 690% % 691% % 692% M a g i c k A p p e n d I m a g e s % 693% % 694% % 695% % 696%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 697% 698% MagickAppendImages() append a set of images. 699% 700% The format of the MagickAppendImages method is: 701% 702% MagickWand *MagickAppendImages(MagickWand *wand, 703% const MagickBooleanType stack) 704% 705% A description of each parameter follows: 706% 707% o wand: the magick wand. 708% 709% o stack: By default, images are stacked left-to-right. Set stack to 710% MagickTrue to stack them top-to-bottom. 711% 712*/ 713WandExport MagickWand *MagickAppendImages(MagickWand *wand, 714 const MagickBooleanType stack) 715{ 716 Image 717 *append_image; 718 719 assert(wand != (MagickWand *) NULL); 720 assert(wand->signature == WandSignature); 721 if (wand->debug != MagickFalse) 722 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 723 if (wand->images == (Image *) NULL) 724 return((MagickWand *) NULL); 725 append_image=AppendImages(wand->images,stack,wand->exception); 726 if (append_image == (Image *) NULL) 727 return((MagickWand *) NULL); 728 return(CloneMagickWandFromImages(wand,append_image)); 729} 730 731/* 732%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 733% % 734% % 735% % 736% M a g i c k A u t o G a m m a I m a g e % 737% % 738% % 739% % 740%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 741% 742% MagickAutoGammaImage() extracts the 'mean' from the image and adjust the 743% image to try make set its gamma appropriatally. 744% 745% The format of the MagickAutoGammaImage method is: 746% 747% MagickBooleanType MagickAutoGammaImage(MagickWand *wand) 748% 749% A description of each parameter follows: 750% 751% o wand: the magick wand. 752% 753*/ 754WandExport MagickBooleanType MagickAutoGammaImage(MagickWand *wand) 755{ 756 MagickBooleanType 757 status; 758 759 assert(wand != (MagickWand *) NULL); 760 assert(wand->signature == WandSignature); 761 if (wand->debug != MagickFalse) 762 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 763 if (wand->images == (Image *) NULL) 764 ThrowWandException(WandError,"ContainsNoImages",wand->name); 765 status=AutoGammaImage(wand->images,wand->exception); 766 return(status); 767} 768 769/* 770%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 771% % 772% % 773% % 774% M a g i c k A u t o L e v e l I m a g e % 775% % 776% % 777% % 778%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 779% 780% MagickAutoLevelImage() adjusts the levels of a particular image channel by 781% scaling the minimum and maximum values to the full quantum range. 782% 783% The format of the MagickAutoLevelImage method is: 784% 785% MagickBooleanType MagickAutoLevelImage(MagickWand *wand) 786% 787% A description of each parameter follows: 788% 789% o wand: the magick wand. 790% 791*/ 792WandExport MagickBooleanType MagickAutoLevelImage(MagickWand *wand) 793{ 794 MagickBooleanType 795 status; 796 797 assert(wand != (MagickWand *) NULL); 798 assert(wand->signature == WandSignature); 799 if (wand->debug != MagickFalse) 800 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 801 if (wand->images == (Image *) NULL) 802 ThrowWandException(WandError,"ContainsNoImages",wand->name); 803 status=AutoLevelImage(wand->images,wand->exception); 804 return(status); 805} 806 807/* 808%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 809% % 810% % 811% % 812% M a g i c k B l a c k T h r e s h o l d I m a g e % 813% % 814% % 815% % 816%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 817% 818% MagickBlackThresholdImage() is like MagickThresholdImage() but forces all 819% pixels below the threshold into black while leaving all pixels above the 820% threshold unchanged. 821% 822% The format of the MagickBlackThresholdImage method is: 823% 824% MagickBooleanType MagickBlackThresholdImage(MagickWand *wand, 825% const PixelWand *threshold) 826% 827% A description of each parameter follows: 828% 829% o wand: the magick wand. 830% 831% o threshold: the pixel wand. 832% 833*/ 834WandExport MagickBooleanType MagickBlackThresholdImage(MagickWand *wand, 835 const PixelWand *threshold) 836{ 837 char 838 thresholds[MaxTextExtent]; 839 840 MagickBooleanType 841 status; 842 843 assert(wand != (MagickWand *) NULL); 844 assert(wand->signature == WandSignature); 845 if (wand->debug != MagickFalse) 846 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 847 if (wand->images == (Image *) NULL) 848 ThrowWandException(WandError,"ContainsNoImages",wand->name); 849 (void) FormatLocaleString(thresholds,MaxTextExtent, 850 QuantumFormat "," QuantumFormat "," QuantumFormat "," QuantumFormat, 851 PixelGetRedQuantum(threshold),PixelGetGreenQuantum(threshold), 852 PixelGetBlueQuantum(threshold),PixelGetAlphaQuantum(threshold)); 853 status=BlackThresholdImage(wand->images,thresholds,wand->exception); 854 return(status); 855} 856 857/* 858%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 859% % 860% % 861% % 862% M a g i c k B l u e S h i f t I m a g e % 863% % 864% % 865% % 866%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 867% 868% MagickBlueShiftImage() mutes the colors of the image to simulate a scene at 869% nighttime in the moonlight. 870% 871% The format of the MagickBlueShiftImage method is: 872% 873% MagickBooleanType MagickBlueShiftImage(MagickWand *wand, 874% const double factor) 875% 876% A description of each parameter follows: 877% 878% o wand: the magick wand. 879% 880% o factor: the blue shift factor (default 1.5) 881% 882*/ 883WandExport MagickBooleanType MagickBlueShiftImage(MagickWand *wand, 884 const double factor) 885{ 886 Image 887 *shift_image; 888 889 assert(wand != (MagickWand *) NULL); 890 assert(wand->signature == WandSignature); 891 if (wand->debug != MagickFalse) 892 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 893 if (wand->images == (Image *) NULL) 894 ThrowWandException(WandError,"ContainsNoImages",wand->name); 895 shift_image=BlueShiftImage(wand->images,factor,wand->exception); 896 if (shift_image == (Image *) NULL) 897 return(MagickFalse); 898 ReplaceImageInList(&wand->images,shift_image); 899 return(MagickTrue); 900} 901 902/* 903%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 904% % 905% % 906% % 907% M a g i c k B l u r I m a g e % 908% % 909% % 910% % 911%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 912% 913% MagickBlurImage() blurs an image. We convolve the image with a 914% gaussian operator of the given radius and standard deviation (sigma). 915% For reasonable results, the radius should be larger than sigma. Use a 916% radius of 0 and BlurImage() selects a suitable radius for you. 917% 918% The format of the MagickBlurImage method is: 919% 920% MagickBooleanType MagickBlurImage(MagickWand *wand,const double radius, 921% const double sigmaconst double bias) 922% 923% A description of each parameter follows: 924% 925% o wand: the magick wand. 926% 927% o radius: the radius of the , in pixels, not counting the center 928% pixel. 929% 930% o sigma: the standard deviation of the , in pixels. 931% 932% o bias: the bias. 933% 934*/ 935WandExport MagickBooleanType MagickBlurImage(MagickWand *wand, 936 const double radius,const double sigma,const double bias) 937{ 938 Image 939 *blur_image; 940 941 assert(wand != (MagickWand *) NULL); 942 assert(wand->signature == WandSignature); 943 if (wand->debug != MagickFalse) 944 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 945 if (wand->images == (Image *) NULL) 946 ThrowWandException(WandError,"ContainsNoImages",wand->name); 947 blur_image=BlurImage(wand->images,radius,sigma,bias,wand->exception); 948 if (blur_image == (Image *) NULL) 949 return(MagickFalse); 950 ReplaceImageInList(&wand->images,blur_image); 951 return(MagickTrue); 952} 953 954/* 955%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 956% % 957% % 958% % 959% M a g i c k B o r d e r I m a g e % 960% % 961% % 962% % 963%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 964% 965% MagickBorderImage() surrounds the image with a border of the color defined 966% by the bordercolor pixel wand. 967% 968% The format of the MagickBorderImage method is: 969% 970% MagickBooleanType MagickBorderImage(MagickWand *wand, 971% const PixelWand *bordercolor,const size_t width, 972% const size_t height,const CompositeOperator compose) 973% 974% A description of each parameter follows: 975% 976% o wand: the magick wand. 977% 978% o bordercolor: the border color pixel wand. 979% 980% o width: the border width. 981% 982% o height: the border height. 983% 984% o compose: the composite operator. 985% 986*/ 987WandExport MagickBooleanType MagickBorderImage(MagickWand *wand, 988 const PixelWand *bordercolor,const size_t width,const size_t height, 989 const CompositeOperator compose) 990{ 991 Image 992 *border_image; 993 994 RectangleInfo 995 border_info; 996 997 assert(wand != (MagickWand *) NULL); 998 assert(wand->signature == WandSignature); 999 if (wand->debug != MagickFalse) 1000 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1001 if (wand->images == (Image *) NULL) 1002 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1003 border_info.width=width; 1004 border_info.height=height; 1005 border_info.x=0; 1006 border_info.y=0; 1007 PixelGetQuantumPacket(bordercolor,&wand->images->border_color); 1008 border_image=BorderImage(wand->images,&border_info,compose,wand->exception); 1009 if (border_image == (Image *) NULL) 1010 return(MagickFalse); 1011 ReplaceImageInList(&wand->images,border_image); 1012 return(MagickTrue); 1013} 1014 1015/* 1016%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1017% % 1018% % 1019% % 1020% M a g i c k B r i g h t n e s s C o n t r a s t S t r e t c h I m a g e % 1021% % 1022% % 1023% % 1024%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1025% 1026% Use MagickBrightnessContrastImage() to change the brightness and/or contrast 1027% of an image. It converts the brightness and contrast parameters into slope 1028% and intercept and calls a polynomical function to apply to the image. 1029 1030% 1031% The format of the MagickBrightnessContrastImage method is: 1032% 1033% MagickBooleanType MagickBrightnessContrastImage(MagickWand *wand, 1034% const double brightness,const double contrast) 1035% 1036% A description of each parameter follows: 1037% 1038% o wand: the magick wand. 1039% 1040% o brightness: the brightness percent (-100 .. 100). 1041% 1042% o contrast: the contrast percent (-100 .. 100). 1043% 1044*/ 1045WandExport MagickBooleanType MagickBrightnessContrastImage( 1046 MagickWand *wand,const double brightness,const double contrast) 1047{ 1048 MagickBooleanType 1049 status; 1050 1051 assert(wand != (MagickWand *) NULL); 1052 assert(wand->signature == WandSignature); 1053 if (wand->debug != MagickFalse) 1054 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1055 if (wand->images == (Image *) NULL) 1056 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1057 status=BrightnessContrastImage(wand->images,brightness,contrast, 1058 wand->exception); 1059 return(status); 1060} 1061 1062/* 1063%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1064% % 1065% % 1066% % 1067% M a g i c k C h a r c o a l I m a g e % 1068% % 1069% % 1070% % 1071%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1072% 1073% MagickCharcoalImage() simulates a charcoal drawing. 1074% 1075% The format of the MagickCharcoalImage method is: 1076% 1077% MagickBooleanType MagickCharcoalImage(MagickWand *wand, 1078% const double radius,const double sigma,const double bias) 1079% 1080% A description of each parameter follows: 1081% 1082% o wand: the magick wand. 1083% 1084% o radius: the radius of the Gaussian, in pixels, not counting the center 1085% pixel. 1086% 1087% o sigma: the standard deviation of the Gaussian, in pixels. 1088% 1089% o bias: the bias. 1090% 1091*/ 1092WandExport MagickBooleanType MagickCharcoalImage(MagickWand *wand, 1093 const double radius,const double sigma,const double bias) 1094{ 1095 Image 1096 *charcoal_image; 1097 1098 assert(wand != (MagickWand *) NULL); 1099 assert(wand->signature == WandSignature); 1100 if (wand->debug != MagickFalse) 1101 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1102 if (wand->images == (Image *) NULL) 1103 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1104 charcoal_image=CharcoalImage(wand->images,radius,sigma,bias,wand->exception); 1105 if (charcoal_image == (Image *) NULL) 1106 return(MagickFalse); 1107 ReplaceImageInList(&wand->images,charcoal_image); 1108 return(MagickTrue); 1109} 1110 1111/* 1112%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1113% % 1114% % 1115% % 1116% M a g i c k C h o p I m a g e % 1117% % 1118% % 1119% % 1120%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1121% 1122% MagickChopImage() removes a region of an image and collapses the image to 1123% occupy the removed portion 1124% 1125% The format of the MagickChopImage method is: 1126% 1127% MagickBooleanType MagickChopImage(MagickWand *wand, 1128% const size_t width,const size_t height,const ssize_t x, 1129% const ssize_t y) 1130% 1131% A description of each parameter follows: 1132% 1133% o wand: the magick wand. 1134% 1135% o width: the region width. 1136% 1137% o height: the region height. 1138% 1139% o x: the region x offset. 1140% 1141% o y: the region y offset. 1142% 1143% 1144*/ 1145WandExport MagickBooleanType MagickChopImage(MagickWand *wand, 1146 const size_t width,const size_t height,const ssize_t x, 1147 const ssize_t y) 1148{ 1149 Image 1150 *chop_image; 1151 1152 RectangleInfo 1153 chop; 1154 1155 assert(wand != (MagickWand *) NULL); 1156 assert(wand->signature == WandSignature); 1157 if (wand->debug != MagickFalse) 1158 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1159 if (wand->images == (Image *) NULL) 1160 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1161 chop.width=width; 1162 chop.height=height; 1163 chop.x=x; 1164 chop.y=y; 1165 chop_image=ChopImage(wand->images,&chop,wand->exception); 1166 if (chop_image == (Image *) NULL) 1167 return(MagickFalse); 1168 ReplaceImageInList(&wand->images,chop_image); 1169 return(MagickTrue); 1170} 1171 1172/* 1173%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1174% % 1175% % 1176% % 1177% M a g i c k C l a m p I m a g e % 1178% % 1179% % 1180% % 1181%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1182% 1183% MagickClampImage() restricts the color range from 0 to the quantum depth. 1184% 1185% The format of the MagickClampImage method is: 1186% 1187% MagickBooleanType MagickClampImage(MagickWand *wand) 1188% 1189% A description of each parameter follows: 1190% 1191% o wand: the magick wand. 1192% 1193% o channel: the channel. 1194% 1195*/ 1196WandExport MagickBooleanType MagickClampImage(MagickWand *wand) 1197{ 1198 assert(wand != (MagickWand *) NULL); 1199 assert(wand->signature == WandSignature); 1200 if (wand->debug != MagickFalse) 1201 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1202 if (wand->images == (Image *) NULL) 1203 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1204 return(ClampImage(wand->images,wand->exception)); 1205} 1206 1207/* 1208%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1209% % 1210% % 1211% % 1212% M a g i c k C l i p I m a g e % 1213% % 1214% % 1215% % 1216%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1217% 1218% MagickClipImage() clips along the first path from the 8BIM profile, if 1219% present. 1220% 1221% The format of the MagickClipImage method is: 1222% 1223% MagickBooleanType MagickClipImage(MagickWand *wand) 1224% 1225% A description of each parameter follows: 1226% 1227% o wand: the magick wand. 1228% 1229*/ 1230WandExport MagickBooleanType MagickClipImage(MagickWand *wand) 1231{ 1232 MagickBooleanType 1233 status; 1234 1235 assert(wand != (MagickWand *) NULL); 1236 assert(wand->signature == WandSignature); 1237 if (wand->debug != MagickFalse) 1238 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1239 if (wand->images == (Image *) NULL) 1240 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1241 status=ClipImage(wand->images,wand->exception); 1242 return(status); 1243} 1244 1245/* 1246%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1247% % 1248% % 1249% % 1250% M a g i c k C l i p I m a g e P a t h % 1251% % 1252% % 1253% % 1254%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1255% 1256% MagickClipImagePath() clips along the named paths from the 8BIM profile, if 1257% present. Later operations take effect inside the path. Id may be a number 1258% if preceded with #, to work on a numbered path, e.g., "#1" to use the first 1259% path. 1260% 1261% The format of the MagickClipImagePath method is: 1262% 1263% MagickBooleanType MagickClipImagePath(MagickWand *wand, 1264% const char *pathname,const MagickBooleanType inside) 1265% 1266% A description of each parameter follows: 1267% 1268% o wand: the magick wand. 1269% 1270% o pathname: name of clipping path resource. If name is preceded by #, use 1271% clipping path numbered by name. 1272% 1273% o inside: if non-zero, later operations take effect inside clipping path. 1274% Otherwise later operations take effect outside clipping path. 1275% 1276*/ 1277WandExport MagickBooleanType MagickClipImagePath(MagickWand *wand, 1278 const char *pathname,const MagickBooleanType inside) 1279{ 1280 MagickBooleanType 1281 status; 1282 1283 assert(wand != (MagickWand *) NULL); 1284 assert(wand->signature == WandSignature); 1285 if (wand->debug != MagickFalse) 1286 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1287 if (wand->images == (Image *) NULL) 1288 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1289 status=ClipImagePath(wand->images,pathname,inside,wand->exception); 1290 return(status); 1291} 1292 1293/* 1294%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1295% % 1296% % 1297% % 1298% M a g i c k C l u t I m a g e % 1299% % 1300% % 1301% % 1302%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1303% 1304% MagickClutImage() replaces colors in the image from a color lookup table. 1305% 1306% The format of the MagickClutImage method is: 1307% 1308% MagickBooleanType MagickClutImage(MagickWand *wand, 1309% const MagickWand *clut_wand,const PixelInterpolateMethod method) 1310% 1311% A description of each parameter follows: 1312% 1313% o wand: the magick wand. 1314% 1315% o clut_image: the clut image. 1316% 1317% o method: the pixel interpolation method. 1318% 1319*/ 1320WandExport MagickBooleanType MagickClutImage(MagickWand *wand, 1321 const MagickWand *clut_wand,const PixelInterpolateMethod method) 1322{ 1323 MagickBooleanType 1324 status; 1325 1326 assert(wand != (MagickWand *) NULL); 1327 assert(wand->signature == WandSignature); 1328 if (wand->debug != MagickFalse) 1329 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1330 if ((wand->images == (Image *) NULL) || (clut_wand->images == (Image *) NULL)) 1331 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1332 status=ClutImage(wand->images,clut_wand->images,method,wand->exception); 1333 return(status); 1334} 1335 1336/* 1337%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1338% % 1339% % 1340% % 1341% M a g i c k C o a l e s c e I m a g e s % 1342% % 1343% % 1344% % 1345%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1346% 1347% MagickCoalesceImages() composites a set of images while respecting any page 1348% offsets and disposal methods. GIF, MIFF, and MNG animation sequences 1349% typically start with an image background and each subsequent image 1350% varies in size and offset. MagickCoalesceImages() returns a new sequence 1351% where each image in the sequence is the same size as the first and 1352% composited with the next image in the sequence. 1353% 1354% The format of the MagickCoalesceImages method is: 1355% 1356% MagickWand *MagickCoalesceImages(MagickWand *wand) 1357% 1358% A description of each parameter follows: 1359% 1360% o wand: the magick wand. 1361% 1362*/ 1363WandExport MagickWand *MagickCoalesceImages(MagickWand *wand) 1364{ 1365 Image 1366 *coalesce_image; 1367 1368 assert(wand != (MagickWand *) NULL); 1369 assert(wand->signature == WandSignature); 1370 if (wand->debug != MagickFalse) 1371 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1372 if (wand->images == (Image *) NULL) 1373 return((MagickWand *) NULL); 1374 coalesce_image=CoalesceImages(wand->images,wand->exception); 1375 if (coalesce_image == (Image *) NULL) 1376 return((MagickWand *) NULL); 1377 return(CloneMagickWandFromImages(wand,coalesce_image)); 1378} 1379 1380/* 1381%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1382% % 1383% % 1384% % 1385% M a g i c k C o l o r D e c i s i o n I m a g e % 1386% % 1387% % 1388% % 1389%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1390% 1391% MagickColorDecisionListImage() accepts a lightweight Color Correction 1392% Collection (CCC) file which solely contains one or more color corrections 1393% and applies the color correction to the image. Here is a sample CCC file: 1394% 1395% <ColorCorrectionCollection xmlns="urn:ASC:CDL:v1.2"> 1396% <ColorCorrection id="cc03345"> 1397% <SOPNode> 1398% <Slope> 0.9 1.2 0.5 </Slope> 1399% <Offset> 0.4 -0.5 0.6 </Offset> 1400% <Power> 1.0 0.8 1.5 </Power> 1401% </SOPNode> 1402% <SATNode> 1403% <Saturation> 0.85 </Saturation> 1404% </SATNode> 1405% </ColorCorrection> 1406% </ColorCorrectionCollection> 1407% 1408% which includes the offset, slope, and power for each of the RGB channels 1409% as well as the saturation. 1410% 1411% The format of the MagickColorDecisionListImage method is: 1412% 1413% MagickBooleanType MagickColorDecisionListImage(MagickWand *wand, 1414% const double gamma) 1415% 1416% A description of each parameter follows: 1417% 1418% o wand: the magick wand. 1419% 1420% o color_correction_collection: the color correction collection in XML. 1421% 1422*/ 1423WandExport MagickBooleanType MagickColorDecisionListImage(MagickWand *wand, 1424 const char *color_correction_collection) 1425{ 1426 MagickBooleanType 1427 status; 1428 1429 assert(wand != (MagickWand *) NULL); 1430 assert(wand->signature == WandSignature); 1431 if (wand->debug != MagickFalse) 1432 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1433 if (wand->images == (Image *) NULL) 1434 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1435 status=ColorDecisionListImage(wand->images,color_correction_collection, 1436 wand->exception); 1437 return(status); 1438} 1439 1440/* 1441%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1442% % 1443% % 1444% % 1445% M a g i c k C o l o r i z e I m a g e % 1446% % 1447% % 1448% % 1449%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1450% 1451% MagickColorizeImage() blends the fill color with each pixel in the image. 1452% 1453% The format of the MagickColorizeImage method is: 1454% 1455% MagickBooleanType MagickColorizeImage(MagickWand *wand, 1456% const PixelWand *colorize,const PixelWand *blend) 1457% 1458% A description of each parameter follows: 1459% 1460% o wand: the magick wand. 1461% 1462% o colorize: the colorize pixel wand. 1463% 1464% o alpha: the alpha pixel wand. 1465% 1466*/ 1467WandExport MagickBooleanType MagickColorizeImage(MagickWand *wand, 1468 const PixelWand *colorize,const PixelWand *blend) 1469{ 1470 char 1471 percent_blend[MaxTextExtent]; 1472 1473 Image 1474 *colorize_image; 1475 1476 PixelInfo 1477 target; 1478 1479 assert(wand != (MagickWand *) NULL); 1480 assert(wand->signature == WandSignature); 1481 if (wand->debug != MagickFalse) 1482 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1483 if (wand->images == (Image *) NULL) 1484 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1485 GetPixelInfo(wand->images,&target); 1486 if (target.colorspace != CMYKColorspace) 1487 (void) FormatLocaleString(percent_blend,MaxTextExtent, 1488 "%g,%g,%g,%g",(double) (100.0*QuantumScale* 1489 PixelGetRedQuantum(blend)),(double) (100.0*QuantumScale* 1490 PixelGetGreenQuantum(blend)),(double) (100.0*QuantumScale* 1491 PixelGetBlueQuantum(blend)),(double) (100.0*QuantumScale* 1492 PixelGetAlphaQuantum(blend))); 1493 else 1494 (void) FormatLocaleString(percent_blend,MaxTextExtent, 1495 "%g,%g,%g,%g,%g",(double) (100.0*QuantumScale* 1496 PixelGetRedQuantum(blend)),(double) (100.0*QuantumScale* 1497 PixelGetGreenQuantum(blend)),(double) (100.0*QuantumScale* 1498 PixelGetBlueQuantum(blend)),(double) (100.0*QuantumScale* 1499 PixelGetBlackQuantum(blend)),(double) (100.0*QuantumScale* 1500 PixelGetAlphaQuantum(blend))); 1501 target=PixelGetPixel(colorize); 1502 colorize_image=ColorizeImage(wand->images,percent_blend,&target, 1503 wand->exception); 1504 if (colorize_image == (Image *) NULL) 1505 return(MagickFalse); 1506 ReplaceImageInList(&wand->images,colorize_image); 1507 return(MagickTrue); 1508} 1509 1510/* 1511%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1512% % 1513% % 1514% % 1515% M a g i c k C o l o r M a t r i x I m a g e % 1516% % 1517% % 1518% % 1519%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1520% 1521% MagickColorMatrixImage() apply color transformation to an image. The method 1522% permits saturation changes, hue rotation, luminance to alpha, and various 1523% other effects. Although variable-sized transformation matrices can be used, 1524% typically one uses a 5x5 matrix for an RGBA image and a 6x6 for CMYKA 1525% (or RGBA with offsets). The matrix is similar to those used by Adobe Flash 1526% except offsets are in column 6 rather than 5 (in support of CMYKA images) 1527% and offsets are normalized (divide Flash offset by 255). 1528% 1529% The format of the MagickColorMatrixImage method is: 1530% 1531% MagickBooleanType MagickColorMatrixImage(MagickWand *wand, 1532% const KernelInfo *color_matrix) 1533% 1534% A description of each parameter follows: 1535% 1536% o wand: the magick wand. 1537% 1538% o color_matrix: the color matrix. 1539% 1540*/ 1541WandExport MagickBooleanType MagickColorMatrixImage(MagickWand *wand, 1542 const KernelInfo *color_matrix) 1543{ 1544 Image 1545 *color_image; 1546 1547 assert(wand != (MagickWand *) NULL); 1548 assert(wand->signature == WandSignature); 1549 if (wand->debug != MagickFalse) 1550 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1551 if (color_matrix == (const KernelInfo *) NULL) 1552 return(MagickFalse); 1553 if (wand->images == (Image *) NULL) 1554 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1555 color_image=ColorMatrixImage(wand->images,color_matrix,wand->exception); 1556 if (color_image == (Image *) NULL) 1557 return(MagickFalse); 1558 ReplaceImageInList(&wand->images,color_image); 1559 return(MagickTrue); 1560} 1561 1562/* 1563%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1564% % 1565% % 1566% % 1567% M a g i c k C o m b i n e I m a g e s % 1568% % 1569% % 1570% % 1571%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1572% 1573% MagickCombineImages() combines one or more images into a single image. The 1574% grayscale value of the pixels of each image in the sequence is assigned in 1575% order to the specified hannels of the combined image. The typical 1576% ordering would be image 1 => Red, 2 => Green, 3 => Blue, etc. 1577% 1578% The format of the MagickCombineImages method is: 1579% 1580% MagickWand *MagickCombineImages(MagickWand *wand) 1581% 1582% A description of each parameter follows: 1583% 1584% o wand: the magick wand. 1585% 1586*/ 1587WandExport MagickWand *MagickCombineImages(MagickWand *wand) 1588{ 1589 Image 1590 *combine_image; 1591 1592 assert(wand != (MagickWand *) NULL); 1593 assert(wand->signature == WandSignature); 1594 if (wand->debug != MagickFalse) 1595 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1596 if (wand->images == (Image *) NULL) 1597 return((MagickWand *) NULL); 1598 combine_image=CombineImages(wand->images,wand->exception); 1599 if (combine_image == (Image *) NULL) 1600 return((MagickWand *) NULL); 1601 return(CloneMagickWandFromImages(wand,combine_image)); 1602} 1603 1604/* 1605%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1606% % 1607% % 1608% % 1609% M a g i c k C o m m e n t I m a g e % 1610% % 1611% % 1612% % 1613%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1614% 1615% MagickCommentImage() adds a comment to your image. 1616% 1617% The format of the MagickCommentImage method is: 1618% 1619% MagickBooleanType MagickCommentImage(MagickWand *wand, 1620% const char *comment) 1621% 1622% A description of each parameter follows: 1623% 1624% o wand: the magick wand. 1625% 1626% o comment: the image comment. 1627% 1628*/ 1629WandExport MagickBooleanType MagickCommentImage(MagickWand *wand, 1630 const char *comment) 1631{ 1632 MagickBooleanType 1633 status; 1634 1635 assert(wand != (MagickWand *) NULL); 1636 assert(wand->signature == WandSignature); 1637 if (wand->debug != MagickFalse) 1638 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1639 if (wand->images == (Image *) NULL) 1640 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1641 status=SetImageProperty(wand->images,"comment",comment,wand->exception); 1642 return(status); 1643} 1644 1645/* 1646%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1647% % 1648% % 1649% % 1650% M a g i c k C o m p a r e I m a g e L a y e r s % 1651% % 1652% % 1653% % 1654%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1655% 1656% MagickCompareImagesLayers() compares each image with the next in a sequence 1657% and returns the maximum bounding region of any pixel differences it 1658% discovers. 1659% 1660% The format of the MagickCompareImagesLayers method is: 1661% 1662% MagickWand *MagickCompareImagesLayers(MagickWand *wand, 1663% const ImageLayerMethod method) 1664% 1665% A description of each parameter follows: 1666% 1667% o wand: the magick wand. 1668% 1669% o method: the compare method. 1670% 1671*/ 1672WandExport MagickWand *MagickCompareImagesLayers(MagickWand *wand, 1673 const ImageLayerMethod method) 1674{ 1675 Image 1676 *layers_image; 1677 1678 assert(wand != (MagickWand *) NULL); 1679 assert(wand->signature == WandSignature); 1680 if (wand->debug != MagickFalse) 1681 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1682 if (wand->images == (Image *) NULL) 1683 return((MagickWand *) NULL); 1684 layers_image=CompareImagesLayers(wand->images,method,wand->exception); 1685 if (layers_image == (Image *) NULL) 1686 return((MagickWand *) NULL); 1687 return(CloneMagickWandFromImages(wand,layers_image)); 1688} 1689 1690/* 1691%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1692% % 1693% % 1694% % 1695% M a g i c k C o m p a r e I m a g e s % 1696% % 1697% % 1698% % 1699%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1700% 1701% MagickCompareImages() compares an image to a reconstructed image and returns 1702% the specified difference image. 1703% 1704% The format of the MagickCompareImages method is: 1705% 1706% MagickWand *MagickCompareImages(MagickWand *wand, 1707% const MagickWand *reference,const MetricType metric, 1708% double *distortion) 1709% 1710% A description of each parameter follows: 1711% 1712% o wand: the magick wand. 1713% 1714% o reference: the reference wand. 1715% 1716% o metric: the metric. 1717% 1718% o distortion: the computed distortion between the images. 1719% 1720*/ 1721WandExport MagickWand *MagickCompareImages(MagickWand *wand, 1722 const MagickWand *reference,const MetricType metric,double *distortion) 1723{ 1724 Image 1725 *compare_image; 1726 1727 1728 assert(wand != (MagickWand *) NULL); 1729 assert(wand->signature == WandSignature); 1730 if (wand->debug != MagickFalse) 1731 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1732 if ((wand->images == (Image *) NULL) || (reference->images == (Image *) NULL)) 1733 { 1734 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 1735 "ContainsNoImages","`%s'",wand->name); 1736 return((MagickWand *) NULL); 1737 } 1738 compare_image=CompareImages(wand->images,reference->images,metric,distortion, 1739 wand->exception); 1740 if (compare_image == (Image *) NULL) 1741 return((MagickWand *) NULL); 1742 return(CloneMagickWandFromImages(wand,compare_image)); 1743} 1744 1745/* 1746%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1747% % 1748% % 1749% % 1750% M a g i c k C o m p o s i t e I m a g e % 1751% % 1752% % 1753% % 1754%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1755% 1756% MagickCompositeImage() composite one image onto another at the specified 1757% offset. 1758% 1759% The format of the MagickCompositeImage method is: 1760% 1761% MagickBooleanType MagickCompositeImage(MagickWand *wand, 1762% const MagickWand *composite_wand,const CompositeOperator compose, 1763% const ssize_t x,const ssize_t y) 1764% 1765% A description of each parameter follows: 1766% 1767% o wand: the magick wand. 1768% 1769% o composite_image: the composite image. 1770% 1771% o compose: This operator affects how the composite is applied to the 1772% image. The default is Over. Choose from these operators: 1773% 1774% OverCompositeOp InCompositeOp OutCompositeOp 1775% AtopCompositeOp XorCompositeOp PlusCompositeOp 1776% MinusCompositeOp AddCompositeOp SubtractCompositeOp 1777% DifferenceCompositeOp BumpmapCompositeOp CopyCompositeOp 1778% DisplaceCompositeOp 1779% 1780% o x: the column offset of the composited image. 1781% 1782% o y: the row offset of the composited image. 1783% 1784*/ 1785WandExport MagickBooleanType MagickCompositeImage(MagickWand *wand, 1786 const MagickWand *composite_wand,const CompositeOperator compose, 1787 const ssize_t x,const ssize_t y) 1788{ 1789 MagickBooleanType 1790 status; 1791 1792 assert(wand != (MagickWand *) NULL); 1793 assert(wand->signature == WandSignature); 1794 if (wand->debug != MagickFalse) 1795 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1796 if ((wand->images == (Image *) NULL) || 1797 (composite_wand->images == (Image *) NULL)) 1798 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1799 status=CompositeImage(wand->images,compose,composite_wand->images,x,y, 1800 wand->exception); 1801 return(status); 1802} 1803 1804/* 1805%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1806% % 1807% % 1808% % 1809% M a g i c k C o n t r a s t I m a g e % 1810% % 1811% % 1812% % 1813%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1814% 1815% MagickContrastImage() enhances the intensity differences between the lighter 1816% and darker elements of the image. Set sharpen to a value other than 0 to 1817% increase the image contrast otherwise the contrast is reduced. 1818% 1819% The format of the MagickContrastImage method is: 1820% 1821% MagickBooleanType MagickContrastImage(MagickWand *wand, 1822% const MagickBooleanType sharpen) 1823% 1824% A description of each parameter follows: 1825% 1826% o wand: the magick wand. 1827% 1828% o sharpen: Increase or decrease image contrast. 1829% 1830% 1831*/ 1832WandExport MagickBooleanType MagickContrastImage(MagickWand *wand, 1833 const MagickBooleanType sharpen) 1834{ 1835 MagickBooleanType 1836 status; 1837 1838 assert(wand != (MagickWand *) NULL); 1839 assert(wand->signature == WandSignature); 1840 if (wand->debug != MagickFalse) 1841 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1842 if (wand->images == (Image *) NULL) 1843 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1844 status=ContrastImage(wand->images,sharpen,wand->exception); 1845 return(status); 1846} 1847 1848/* 1849%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1850% % 1851% % 1852% % 1853% M a g i c k C o n t r a s t S t r e t c h I m a g e % 1854% % 1855% % 1856% % 1857%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1858% 1859% MagickContrastStretchImage() enhances the contrast of a color image by 1860% adjusting the pixels color to span the entire range of colors available. 1861% You can also reduce the influence of a particular channel with a gamma 1862% value of 0. 1863% 1864% The format of the MagickContrastStretchImage method is: 1865% 1866% MagickBooleanType MagickContrastStretchImage(MagickWand *wand, 1867% const double black_point,const double white_point) 1868% 1869% A description of each parameter follows: 1870% 1871% o wand: the magick wand. 1872% 1873% o black_point: the black point. 1874% 1875% o white_point: the white point. 1876% 1877*/ 1878WandExport MagickBooleanType MagickContrastStretchImage(MagickWand *wand, 1879 const double black_point,const double white_point) 1880{ 1881 MagickBooleanType 1882 status; 1883 1884 assert(wand != (MagickWand *) NULL); 1885 assert(wand->signature == WandSignature); 1886 if (wand->debug != MagickFalse) 1887 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1888 if (wand->images == (Image *) NULL) 1889 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1890 status=ContrastStretchImage(wand->images,black_point,white_point, 1891 wand->exception); 1892 return(status); 1893} 1894 1895/* 1896%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1897% % 1898% % 1899% % 1900% M a g i c k C o n v o l v e I m a g e % 1901% % 1902% % 1903% % 1904%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1905% 1906% MagickConvolveImage() applies a custom convolution kernel to the image. 1907% 1908% The format of the MagickConvolveImage method is: 1909% 1910% MagickBooleanType MagickConvolveImage(MagickWand *wand, 1911% const KernelInfo *kernel) 1912% 1913% A description of each parameter follows: 1914% 1915% o wand: the magick wand. 1916% 1917% o kernel: An array of doubles representing the convolution kernel. 1918% 1919*/ 1920WandExport MagickBooleanType MagickConvolveImage(MagickWand *wand, 1921 const KernelInfo *kernel) 1922{ 1923 Image 1924 *filter_image; 1925 1926 assert(wand != (MagickWand *) NULL); 1927 assert(wand->signature == WandSignature); 1928 if (wand->debug != MagickFalse) 1929 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1930 if (kernel == (const KernelInfo *) NULL) 1931 return(MagickFalse); 1932 if (wand->images == (Image *) NULL) 1933 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1934 filter_image=ConvolveImage(wand->images,kernel,wand->exception); 1935 if (filter_image == (Image *) NULL) 1936 return(MagickFalse); 1937 ReplaceImageInList(&wand->images,filter_image); 1938 return(MagickTrue); 1939} 1940 1941/* 1942%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1943% % 1944% % 1945% % 1946% M a g i c k C r o p I m a g e % 1947% % 1948% % 1949% % 1950%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1951% 1952% MagickCropImage() extracts a region of the image. 1953% 1954% The format of the MagickCropImage method is: 1955% 1956% MagickBooleanType MagickCropImage(MagickWand *wand, 1957% const size_t width,const size_t height,const ssize_t x,const ssize_t y) 1958% 1959% A description of each parameter follows: 1960% 1961% o wand: the magick wand. 1962% 1963% o width: the region width. 1964% 1965% o height: the region height. 1966% 1967% o x: the region x-offset. 1968% 1969% o y: the region y-offset. 1970% 1971*/ 1972WandExport MagickBooleanType MagickCropImage(MagickWand *wand, 1973 const size_t width,const size_t height,const ssize_t x,const ssize_t y) 1974{ 1975 Image 1976 *crop_image; 1977 1978 RectangleInfo 1979 crop; 1980 1981 assert(wand != (MagickWand *) NULL); 1982 assert(wand->signature == WandSignature); 1983 if (wand->debug != MagickFalse) 1984 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1985 if (wand->images == (Image *) NULL) 1986 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1987 crop.width=width; 1988 crop.height=height; 1989 crop.x=x; 1990 crop.y=y; 1991 crop_image=CropImage(wand->images,&crop,wand->exception); 1992 if (crop_image == (Image *) NULL) 1993 return(MagickFalse); 1994 ReplaceImageInList(&wand->images,crop_image); 1995 return(MagickTrue); 1996} 1997 1998/* 1999%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2000% % 2001% % 2002% % 2003% M a g i c k C y c l e C o l o r m a p I m a g e % 2004% % 2005% % 2006% % 2007%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2008% 2009% MagickCycleColormapImage() displaces an image's colormap by a given number 2010% of positions. If you cycle the colormap a number of times you can produce 2011% a psychodelic effect. 2012% 2013% The format of the MagickCycleColormapImage method is: 2014% 2015% MagickBooleanType MagickCycleColormapImage(MagickWand *wand, 2016% const ssize_t displace) 2017% 2018% A description of each parameter follows: 2019% 2020% o wand: the magick wand. 2021% 2022% o pixel_wand: the pixel wand. 2023% 2024*/ 2025WandExport MagickBooleanType MagickCycleColormapImage(MagickWand *wand, 2026 const ssize_t displace) 2027{ 2028 MagickBooleanType 2029 status; 2030 2031 assert(wand != (MagickWand *) NULL); 2032 assert(wand->signature == WandSignature); 2033 if (wand->debug != MagickFalse) 2034 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2035 if (wand->images == (Image *) NULL) 2036 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2037 status=CycleColormapImage(wand->images,displace,wand->exception); 2038 return(status); 2039} 2040 2041/* 2042%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2043% % 2044% % 2045% % 2046% M a g i c k C o n s t i t u t e I m a g e % 2047% % 2048% % 2049% % 2050%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2051% 2052% MagickConstituteImage() adds an image to the wand comprised of the pixel 2053% data you supply. The pixel data must be in scanline order top-to-bottom. 2054% The data can be char, short int, int, float, or double. Float and double 2055% require the pixels to be normalized [0..1], otherwise [0..Max], where Max 2056% is the maximum value the type can accomodate (e.g. 255 for char). For 2057% example, to create a 640x480 image from unsigned red-green-blue character 2058% data, use 2059% 2060% MagickConstituteImage(wand,640,640,"RGB",CharPixel,pixels); 2061% 2062% The format of the MagickConstituteImage method is: 2063% 2064% MagickBooleanType MagickConstituteImage(MagickWand *wand, 2065% const size_t columns,const size_t rows,const char *map, 2066% const StorageType storage,void *pixels) 2067% 2068% A description of each parameter follows: 2069% 2070% o wand: the magick wand. 2071% 2072% o columns: width in pixels of the image. 2073% 2074% o rows: height in pixels of the image. 2075% 2076% o map: This string reflects the expected ordering of the pixel array. 2077% It can be any combination or order of R = red, G = green, B = blue, 2078% A = alpha (0 is transparent), O = alpha (0 is opaque), C = cyan, 2079% Y = yellow, M = magenta, K = black, I = intensity (for grayscale), 2080% P = pad. 2081% 2082% o storage: Define the data type of the pixels. Float and double types are 2083% expected to be normalized [0..1] otherwise [0..QuantumRange]. Choose from 2084% these types: CharPixel, DoublePixel, FloatPixel, IntegerPixel, 2085% LongPixel, QuantumPixel, or ShortPixel. 2086% 2087% o pixels: This array of values contain the pixel components as defined by 2088% map and type. You must preallocate this array where the expected 2089% length varies depending on the values of width, height, map, and type. 2090% 2091% 2092*/ 2093WandExport MagickBooleanType MagickConstituteImage(MagickWand *wand, 2094 const size_t columns,const size_t rows,const char *map, 2095 const StorageType storage,const void *pixels) 2096{ 2097 Image 2098 *images; 2099 2100 assert(wand != (MagickWand *) NULL); 2101 assert(wand->signature == WandSignature); 2102 if (wand->debug != MagickFalse) 2103 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2104 images=ConstituteImage(columns,rows,map,storage,pixels,wand->exception); 2105 if (images == (Image *) NULL) 2106 return(MagickFalse); 2107 return(InsertImageInWand(wand,images)); 2108} 2109 2110/* 2111%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2112% % 2113% % 2114% % 2115% M a g i c k D e c i p h e r I m a g e % 2116% % 2117% % 2118% % 2119%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2120% 2121% MagickDecipherImage() converts cipher pixels to plain pixels. 2122% 2123% The format of the MagickDecipherImage method is: 2124% 2125% MagickBooleanType MagickDecipherImage(MagickWand *wand, 2126% const char *passphrase) 2127% 2128% A description of each parameter follows: 2129% 2130% o wand: the magick wand. 2131% 2132% o passphrase: the passphrase. 2133% 2134*/ 2135WandExport MagickBooleanType MagickDecipherImage(MagickWand *wand, 2136 const char *passphrase) 2137{ 2138 assert(wand != (MagickWand *) NULL); 2139 assert(wand->signature == WandSignature); 2140 if (wand->debug != MagickFalse) 2141 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2142 if (wand->images == (Image *) NULL) 2143 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2144 return(DecipherImage(wand->images,passphrase,wand->exception)); 2145} 2146 2147/* 2148%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2149% % 2150% % 2151% % 2152% M a g i c k D e c o n s t r u c t I m a g e s % 2153% % 2154% % 2155% % 2156%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2157% 2158% MagickDeconstructImages() compares each image with the next in a sequence 2159% and returns the maximum bounding region of any pixel differences it 2160% discovers. 2161% 2162% The format of the MagickDeconstructImages method is: 2163% 2164% MagickWand *MagickDeconstructImages(MagickWand *wand) 2165% 2166% A description of each parameter follows: 2167% 2168% o wand: the magick wand. 2169% 2170*/ 2171WandExport MagickWand *MagickDeconstructImages(MagickWand *wand) 2172{ 2173 Image 2174 *deconstruct_image; 2175 2176 assert(wand != (MagickWand *) NULL); 2177 assert(wand->signature == WandSignature); 2178 if (wand->debug != MagickFalse) 2179 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2180 if (wand->images == (Image *) NULL) 2181 return((MagickWand *) NULL); 2182 deconstruct_image=CompareImagesLayers(wand->images,CompareAnyLayer, 2183 wand->exception); 2184 if (deconstruct_image == (Image *) NULL) 2185 return((MagickWand *) NULL); 2186 return(CloneMagickWandFromImages(wand,deconstruct_image)); 2187} 2188 2189/* 2190%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2191% % 2192% % 2193% % 2194% M a g i c k D e s k e w I m a g e % 2195% % 2196% % 2197% % 2198%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2199% 2200% MagickDeskewImage() removes skew from the image. Skew is an artifact that 2201% occurs in scanned images because of the camera being misaligned, 2202% imperfections in the scanning or surface, or simply because the paper was 2203% not placed completely flat when scanned. 2204% 2205% The format of the MagickDeskewImage method is: 2206% 2207% MagickBooleanType MagickDeskewImage(MagickWand *wand, 2208% const double threshold) 2209% 2210% A description of each parameter follows: 2211% 2212% o wand: the magick wand. 2213% 2214% o threshold: separate background from foreground. 2215% 2216*/ 2217WandExport MagickBooleanType MagickDeskewImage(MagickWand *wand, 2218 const double threshold) 2219{ 2220 Image 2221 *sepia_image; 2222 2223 assert(wand != (MagickWand *) NULL); 2224 assert(wand->signature == WandSignature); 2225 if (wand->debug != MagickFalse) 2226 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2227 if (wand->images == (Image *) NULL) 2228 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2229 sepia_image=DeskewImage(wand->images,threshold,wand->exception); 2230 if (sepia_image == (Image *) NULL) 2231 return(MagickFalse); 2232 ReplaceImageInList(&wand->images,sepia_image); 2233 return(MagickTrue); 2234} 2235 2236/* 2237%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2238% % 2239% % 2240% % 2241% M a g i c k D e s p e c k l e I m a g e % 2242% % 2243% % 2244% % 2245%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2246% 2247% MagickDespeckleImage() reduces the speckle noise in an image while 2248% perserving the edges of the original image. 2249% 2250% The format of the MagickDespeckleImage method is: 2251% 2252% MagickBooleanType MagickDespeckleImage(MagickWand *wand) 2253% 2254% A description of each parameter follows: 2255% 2256% o wand: the magick wand. 2257% 2258*/ 2259WandExport MagickBooleanType MagickDespeckleImage(MagickWand *wand) 2260{ 2261 Image 2262 *despeckle_image; 2263 2264 assert(wand != (MagickWand *) NULL); 2265 assert(wand->signature == WandSignature); 2266 if (wand->debug != MagickFalse) 2267 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2268 if (wand->images == (Image *) NULL) 2269 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2270 despeckle_image=DespeckleImage(wand->images,wand->exception); 2271 if (despeckle_image == (Image *) NULL) 2272 return(MagickFalse); 2273 ReplaceImageInList(&wand->images,despeckle_image); 2274 return(MagickTrue); 2275} 2276 2277/* 2278%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2279% % 2280% % 2281% % 2282% M a g i c k D e s t r o y I m a g e % 2283% % 2284% % 2285% % 2286%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2287% 2288% MagickDestroyImage() dereferences an image, deallocating memory associated 2289% with the image if the reference count becomes zero. 2290% 2291% The format of the MagickDestroyImage method is: 2292% 2293% Image *MagickDestroyImage(Image *image) 2294% 2295% A description of each parameter follows: 2296% 2297% o image: the image. 2298% 2299*/ 2300WandExport Image *MagickDestroyImage(Image *image) 2301{ 2302 return(DestroyImage(image)); 2303} 2304 2305/* 2306%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2307% % 2308% % 2309% % 2310% M a g i c k D i s p l a y I m a g e % 2311% % 2312% % 2313% % 2314%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2315% 2316% MagickDisplayImage() displays an image. 2317% 2318% The format of the MagickDisplayImage method is: 2319% 2320% MagickBooleanType MagickDisplayImage(MagickWand *wand, 2321% const char *server_name) 2322% 2323% A description of each parameter follows: 2324% 2325% o wand: the magick wand. 2326% 2327% o server_name: the X server name. 2328% 2329*/ 2330WandExport MagickBooleanType MagickDisplayImage(MagickWand *wand, 2331 const char *server_name) 2332{ 2333 Image 2334 *image; 2335 2336 MagickBooleanType 2337 status; 2338 2339 assert(wand != (MagickWand *) NULL); 2340 assert(wand->signature == WandSignature); 2341 if (wand->debug != MagickFalse) 2342 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2343 if (wand->images == (Image *) NULL) 2344 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2345 image=CloneImage(wand->images,0,0,MagickTrue,wand->exception); 2346 if (image == (Image *) NULL) 2347 return(MagickFalse); 2348 (void) CloneString(&wand->image_info->server_name,server_name); 2349 status=DisplayImages(wand->image_info,image,wand->exception); 2350 image=DestroyImage(image); 2351 return(status); 2352} 2353 2354/* 2355%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2356% % 2357% % 2358% % 2359% M a g i c k D i s p l a y I m a g e s % 2360% % 2361% % 2362% % 2363%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2364% 2365% MagickDisplayImages() displays an image or image sequence. 2366% 2367% The format of the MagickDisplayImages method is: 2368% 2369% MagickBooleanType MagickDisplayImages(MagickWand *wand, 2370% const char *server_name) 2371% 2372% A description of each parameter follows: 2373% 2374% o wand: the magick wand. 2375% 2376% o server_name: the X server name. 2377% 2378*/ 2379WandExport MagickBooleanType MagickDisplayImages(MagickWand *wand, 2380 const char *server_name) 2381{ 2382 MagickBooleanType 2383 status; 2384 2385 assert(wand != (MagickWand *) NULL); 2386 assert(wand->signature == WandSignature); 2387 if (wand->debug != MagickFalse) 2388 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2389 (void) CloneString(&wand->image_info->server_name,server_name); 2390 status=DisplayImages(wand->image_info,wand->images,wand->exception); 2391 return(status); 2392} 2393 2394/* 2395%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2396% % 2397% % 2398% % 2399% M a g i c k D i s t o r t I m a g e % 2400% % 2401% % 2402% % 2403%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2404% 2405% MagickDistortImage() distorts an image using various distortion methods, by 2406% mapping color lookups of the source image to a new destination image 2407% usally of the same size as the source image, unless 'bestfit' is set to 2408% true. 2409% 2410% If 'bestfit' is enabled, and distortion allows it, the destination image is 2411% adjusted to ensure the whole source 'image' will just fit within the final 2412% destination image, which will be sized and offset accordingly. Also in 2413% many cases the virtual offset of the source image will be taken into 2414% account in the mapping. 2415% 2416% The format of the MagickDistortImage method is: 2417% 2418% MagickBooleanType MagickDistortImage(MagickWand *wand, 2419% const DistortImageMethod method,const size_t number_arguments, 2420% const double *arguments,const MagickBooleanType bestfit) 2421% 2422% A description of each parameter follows: 2423% 2424% o image: the image to be distorted. 2425% 2426% o method: the method of image distortion. 2427% 2428% ArcDistortion always ignores the source image offset, and always 2429% 'bestfit' the destination image with the top left corner offset 2430% relative to the polar mapping center. 2431% 2432% Bilinear has no simple inverse mapping so it does not allow 'bestfit' 2433% style of image distortion. 2434% 2435% Affine, Perspective, and Bilinear, do least squares fitting of the 2436% distortion when more than the minimum number of control point pairs 2437% are provided. 2438% 2439% Perspective, and Bilinear, falls back to a Affine distortion when less 2440% that 4 control point pairs are provided. While Affine distortions let 2441% you use any number of control point pairs, that is Zero pairs is a 2442% no-Op (viewport only) distrotion, one pair is a translation and two 2443% pairs of control points do a scale-rotate-translate, without any 2444% shearing. 2445% 2446% o number_arguments: the number of arguments given for this distortion 2447% method. 2448% 2449% o arguments: the arguments for this distortion method. 2450% 2451% o bestfit: Attempt to resize destination to fit distorted source. 2452% 2453*/ 2454WandExport MagickBooleanType MagickDistortImage(MagickWand *wand, 2455 const DistortImageMethod method,const size_t number_arguments, 2456 const double *arguments,const MagickBooleanType bestfit) 2457{ 2458 Image 2459 *distort_image; 2460 2461 assert(wand != (MagickWand *) NULL); 2462 assert(wand->signature == WandSignature); 2463 if (wand->debug != MagickFalse) 2464 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2465 if (wand->images == (Image *) NULL) 2466 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2467 distort_image=DistortImage(wand->images,method,number_arguments,arguments, 2468 bestfit,wand->exception); 2469 if (distort_image == (Image *) NULL) 2470 return(MagickFalse); 2471 ReplaceImageInList(&wand->images,distort_image); 2472 return(MagickTrue); 2473} 2474 2475/* 2476%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2477% % 2478% % 2479% % 2480% M a g i c k D r a w I m a g e % 2481% % 2482% % 2483% % 2484%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2485% 2486% MagickDrawImage() renders the drawing wand on the current image. 2487% 2488% The format of the MagickDrawImage method is: 2489% 2490% MagickBooleanType MagickDrawImage(MagickWand *wand, 2491% const DrawingWand *drawing_wand) 2492% 2493% A description of each parameter follows: 2494% 2495% o wand: the magick wand. 2496% 2497% o drawing_wand: the draw wand. 2498% 2499*/ 2500WandExport MagickBooleanType MagickDrawImage(MagickWand *wand, 2501 const DrawingWand *drawing_wand) 2502{ 2503 char 2504 *primitive; 2505 2506 DrawInfo 2507 *draw_info; 2508 2509 MagickBooleanType 2510 status; 2511 2512 assert(wand != (MagickWand *) NULL); 2513 assert(wand->signature == WandSignature); 2514 if (wand->debug != MagickFalse) 2515 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2516 if (wand->images == (Image *) NULL) 2517 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2518 draw_info=PeekDrawingWand(drawing_wand); 2519 if ((draw_info == (DrawInfo *) NULL) || 2520 (draw_info->primitive == (char *) NULL)) 2521 return(MagickFalse); 2522 primitive=AcquireString(draw_info->primitive); 2523 draw_info=DestroyDrawInfo(draw_info); 2524 draw_info=CloneDrawInfo(wand->image_info,(DrawInfo *) NULL); 2525 draw_info->primitive=primitive; 2526 status=DrawImage(wand->images,draw_info,wand->exception); 2527 draw_info=DestroyDrawInfo(draw_info); 2528 return(status); 2529} 2530 2531/* 2532%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2533% % 2534% % 2535% % 2536% M a g i c k E d g e I m a g e % 2537% % 2538% % 2539% % 2540%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2541% 2542% MagickEdgeImage() enhance edges within the image with a convolution filter 2543% of the given radius. Use a radius of 0 and Edge() selects a suitable 2544% radius for you. 2545% 2546% The format of the MagickEdgeImage method is: 2547% 2548% MagickBooleanType MagickEdgeImage(MagickWand *wand,const double radius, 2549% const double sigma) 2550% 2551% A description of each parameter follows: 2552% 2553% o wand: the magick wand. 2554% 2555% o radius: the radius of the pixel neighborhood. 2556% 2557% o sigma: the standard deviation of the Gaussian, in pixels. 2558% 2559*/ 2560WandExport MagickBooleanType MagickEdgeImage(MagickWand *wand, 2561 const double radius,const double sigma) 2562{ 2563 Image 2564 *edge_image; 2565 2566 assert(wand != (MagickWand *) NULL); 2567 assert(wand->signature == WandSignature); 2568 if (wand->debug != MagickFalse) 2569 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2570 if (wand->images == (Image *) NULL) 2571 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2572 edge_image=EdgeImage(wand->images,radius,sigma,wand->exception); 2573 if (edge_image == (Image *) NULL) 2574 return(MagickFalse); 2575 ReplaceImageInList(&wand->images,edge_image); 2576 return(MagickTrue); 2577} 2578 2579/* 2580%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2581% % 2582% % 2583% % 2584% M a g i c k E m b o s s I m a g e % 2585% % 2586% % 2587% % 2588%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2589% 2590% MagickEmbossImage() returns a grayscale image with a three-dimensional 2591% effect. We convolve the image with a Gaussian operator of the given radius 2592% and standard deviation (sigma). For reasonable results, radius should be 2593% larger than sigma. Use a radius of 0 and Emboss() selects a suitable 2594% radius for you. 2595% 2596% The format of the MagickEmbossImage method is: 2597% 2598% MagickBooleanType MagickEmbossImage(MagickWand *wand,const double radius, 2599% const double sigma) 2600% 2601% A description of each parameter follows: 2602% 2603% o wand: the magick wand. 2604% 2605% o radius: the radius of the Gaussian, in pixels, not counting the center 2606% pixel. 2607% 2608% o sigma: the standard deviation of the Gaussian, in pixels. 2609% 2610*/ 2611WandExport MagickBooleanType MagickEmbossImage(MagickWand *wand, 2612 const double radius,const double sigma) 2613{ 2614 Image 2615 *emboss_image; 2616 2617 assert(wand != (MagickWand *) NULL); 2618 assert(wand->signature == WandSignature); 2619 if (wand->debug != MagickFalse) 2620 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2621 if (wand->images == (Image *) NULL) 2622 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2623 emboss_image=EmbossImage(wand->images,radius,sigma,wand->exception); 2624 if (emboss_image == (Image *) NULL) 2625 return(MagickFalse); 2626 ReplaceImageInList(&wand->images,emboss_image); 2627 return(MagickTrue); 2628} 2629 2630/* 2631%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2632% % 2633% % 2634% % 2635% M a g i c k E n c i p h e r I m a g e % 2636% % 2637% % 2638% % 2639%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2640% 2641% MagickEncipherImage() converts plaint pixels to cipher pixels. 2642% 2643% The format of the MagickEncipherImage method is: 2644% 2645% MagickBooleanType MagickEncipherImage(MagickWand *wand, 2646% const char *passphrase) 2647% 2648% A description of each parameter follows: 2649% 2650% o wand: the magick wand. 2651% 2652% o passphrase: the passphrase. 2653% 2654*/ 2655WandExport MagickBooleanType MagickEncipherImage(MagickWand *wand, 2656 const char *passphrase) 2657{ 2658 assert(wand != (MagickWand *) NULL); 2659 assert(wand->signature == WandSignature); 2660 if (wand->debug != MagickFalse) 2661 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2662 if (wand->images == (Image *) NULL) 2663 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2664 return(EncipherImage(wand->images,passphrase,wand->exception)); 2665} 2666 2667/* 2668%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2669% % 2670% % 2671% % 2672% M a g i c k E n h a n c e I m a g e % 2673% % 2674% % 2675% % 2676%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2677% 2678% MagickEnhanceImage() applies a digital filter that improves the quality of a 2679% noisy image. 2680% 2681% The format of the MagickEnhanceImage method is: 2682% 2683% MagickBooleanType MagickEnhanceImage(MagickWand *wand) 2684% 2685% A description of each parameter follows: 2686% 2687% o wand: the magick wand. 2688% 2689*/ 2690WandExport MagickBooleanType MagickEnhanceImage(MagickWand *wand) 2691{ 2692 Image 2693 *enhance_image; 2694 2695 assert(wand != (MagickWand *) NULL); 2696 assert(wand->signature == WandSignature); 2697 if (wand->debug != MagickFalse) 2698 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2699 if (wand->images == (Image *) NULL) 2700 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2701 enhance_image=EnhanceImage(wand->images,wand->exception); 2702 if (enhance_image == (Image *) NULL) 2703 return(MagickFalse); 2704 ReplaceImageInList(&wand->images,enhance_image); 2705 return(MagickTrue); 2706} 2707 2708/* 2709%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2710% % 2711% % 2712% % 2713% M a g i c k E q u a l i z e I m a g e % 2714% % 2715% % 2716% % 2717%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2718% 2719% MagickEqualizeImage() equalizes the image histogram. 2720% 2721% The format of the MagickEqualizeImage method is: 2722% 2723% MagickBooleanType MagickEqualizeImage(MagickWand *wand) 2724% 2725% A description of each parameter follows: 2726% 2727% o wand: the magick wand. 2728% 2729% o channel: the image channel(s). 2730% 2731*/ 2732WandExport MagickBooleanType MagickEqualizeImage(MagickWand *wand) 2733{ 2734 MagickBooleanType 2735 status; 2736 2737 assert(wand != (MagickWand *) NULL); 2738 assert(wand->signature == WandSignature); 2739 if (wand->debug != MagickFalse) 2740 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2741 if (wand->images == (Image *) NULL) 2742 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2743 status=EqualizeImage(wand->images,wand->exception); 2744 return(status); 2745} 2746 2747/* 2748%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2749% % 2750% % 2751% % 2752% M a g i c k E v a l u a t e I m a g e % 2753% % 2754% % 2755% % 2756%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2757% 2758% MagickEvaluateImage() applys an arithmetic, relational, or logical 2759% expression to an image. Use these operators to lighten or darken an image, 2760% to increase or decrease contrast in an image, or to produce the "negative" 2761% of an image. 2762% 2763% The format of the MagickEvaluateImage method is: 2764% 2765% MagickBooleanType MagickEvaluateImage(MagickWand *wand, 2766% const MagickEvaluateOperator operator,const double value) 2767% MagickBooleanType MagickEvaluateImages(MagickWand *wand, 2768% const MagickEvaluateOperator operator) 2769% 2770% A description of each parameter follows: 2771% 2772% o wand: the magick wand. 2773% 2774% o op: A channel operator. 2775% 2776% o value: A value value. 2777% 2778*/ 2779 2780WandExport MagickWand *MagickEvaluateImages(MagickWand *wand, 2781 const MagickEvaluateOperator op) 2782{ 2783 Image 2784 *evaluate_image; 2785 2786 assert(wand != (MagickWand *) NULL); 2787 assert(wand->signature == WandSignature); 2788 if (wand->debug != MagickFalse) 2789 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2790 if (wand->images == (Image *) NULL) 2791 return((MagickWand *) NULL); 2792 evaluate_image=EvaluateImages(wand->images,op,wand->exception); 2793 if (evaluate_image == (Image *) NULL) 2794 return((MagickWand *) NULL); 2795 return(CloneMagickWandFromImages(wand,evaluate_image)); 2796} 2797 2798WandExport MagickBooleanType MagickEvaluateImage(MagickWand *wand, 2799 const MagickEvaluateOperator op,const double value) 2800{ 2801 MagickBooleanType 2802 status; 2803 2804 assert(wand != (MagickWand *) NULL); 2805 assert(wand->signature == WandSignature); 2806 if (wand->debug != MagickFalse) 2807 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2808 if (wand->images == (Image *) NULL) 2809 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2810 status=EvaluateImage(wand->images,op,value,wand->exception); 2811 return(status); 2812} 2813 2814/* 2815%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2816% % 2817% % 2818% % 2819% M a g i c k E x p o r t I m a g e P i x e l s % 2820% % 2821% % 2822% % 2823%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2824% 2825% MagickExportImagePixels() extracts pixel data from an image and returns it 2826% to you. The method returns MagickTrue on success otherwise MagickFalse if 2827% an error is encountered. The data is returned as char, short int, int, 2828% ssize_t, float, or double in the order specified by map. 2829% 2830% Suppose you want to extract the first scanline of a 640x480 image as 2831% character data in red-green-blue order: 2832% 2833% MagickExportImagePixels(wand,0,0,640,1,"RGB",CharPixel,pixels); 2834% 2835% The format of the MagickExportImagePixels method is: 2836% 2837% MagickBooleanType MagickExportImagePixels(MagickWand *wand, 2838% const ssize_t x,const ssize_t y,const size_t columns, 2839% const size_t rows,const char *map,const StorageType storage, 2840% void *pixels) 2841% 2842% A description of each parameter follows: 2843% 2844% o wand: the magick wand. 2845% 2846% o x, y, columns, rows: These values define the perimeter 2847% of a region of pixels you want to extract. 2848% 2849% o map: This string reflects the expected ordering of the pixel array. 2850% It can be any combination or order of R = red, G = green, B = blue, 2851% A = alpha (0 is transparent), O = alpha (0 is opaque), C = cyan, 2852% Y = yellow, M = magenta, K = black, I = intensity (for grayscale), 2853% P = pad. 2854% 2855% o storage: Define the data type of the pixels. Float and double types are 2856% expected to be normalized [0..1] otherwise [0..QuantumRange]. Choose from 2857% these types: CharPixel, DoublePixel, FloatPixel, IntegerPixel, 2858% LongPixel, QuantumPixel, or ShortPixel. 2859% 2860% o pixels: This array of values contain the pixel components as defined by 2861% map and type. You must preallocate this array where the expected 2862% length varies depending on the values of width, height, map, and type. 2863% 2864*/ 2865WandExport MagickBooleanType MagickExportImagePixels(MagickWand *wand, 2866 const ssize_t x,const ssize_t y,const size_t columns, 2867 const size_t rows,const char *map,const StorageType storage, 2868 void *pixels) 2869{ 2870 MagickBooleanType 2871 status; 2872 2873 assert(wand != (MagickWand *) NULL); 2874 assert(wand->signature == WandSignature); 2875 if (wand->debug != MagickFalse) 2876 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2877 if (wand->images == (Image *) NULL) 2878 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2879 status=ExportImagePixels(wand->images,x,y,columns,rows,map, 2880 storage,pixels,wand->exception); 2881 return(status); 2882} 2883 2884/* 2885%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2886% % 2887% % 2888% % 2889% M a g i c k E x t e n t I m a g e % 2890% % 2891% % 2892% % 2893%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2894% 2895% MagickExtentImage() extends the image as defined by the geometry, gravity, 2896% and wand background color. Set the (x,y) offset of the geometry to move 2897% the original wand relative to the extended wand. 2898% 2899% The format of the MagickExtentImage method is: 2900% 2901% MagickBooleanType MagickExtentImage(MagickWand *wand, 2902% const size_t width,const size_t height,const ssize_t x, 2903% const ssize_t y) 2904% 2905% A description of each parameter follows: 2906% 2907% o wand: the magick wand. 2908% 2909% o width: the region width. 2910% 2911% o height: the region height. 2912% 2913% o x: the region x offset. 2914% 2915% o y: the region y offset. 2916% 2917*/ 2918WandExport MagickBooleanType MagickExtentImage(MagickWand *wand, 2919 const size_t width,const size_t height,const ssize_t x, 2920 const ssize_t y) 2921{ 2922 Image 2923 *extent_image; 2924 2925 RectangleInfo 2926 extent; 2927 2928 assert(wand != (MagickWand *) NULL); 2929 assert(wand->signature == WandSignature); 2930 if (wand->debug != MagickFalse) 2931 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2932 if (wand->images == (Image *) NULL) 2933 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2934 extent.width=width; 2935 extent.height=height; 2936 extent.x=x; 2937 extent.y=y; 2938 extent_image=ExtentImage(wand->images,&extent,wand->exception); 2939 if (extent_image == (Image *) NULL) 2940 return(MagickFalse); 2941 ReplaceImageInList(&wand->images,extent_image); 2942 return(MagickTrue); 2943} 2944 2945/* 2946%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2947% % 2948% % 2949% % 2950% M a g i c k F l i p I m a g e % 2951% % 2952% % 2953% % 2954%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2955% 2956% MagickFlipImage() creates a vertical mirror image by reflecting the pixels 2957% around the central x-axis. 2958% 2959% The format of the MagickFlipImage method is: 2960% 2961% MagickBooleanType MagickFlipImage(MagickWand *wand) 2962% 2963% A description of each parameter follows: 2964% 2965% o wand: the magick wand. 2966% 2967*/ 2968WandExport MagickBooleanType MagickFlipImage(MagickWand *wand) 2969{ 2970 Image 2971 *flip_image; 2972 2973 assert(wand != (MagickWand *) NULL); 2974 assert(wand->signature == WandSignature); 2975 if (wand->debug != MagickFalse) 2976 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2977 if (wand->images == (Image *) NULL) 2978 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2979 flip_image=FlipImage(wand->images,wand->exception); 2980 if (flip_image == (Image *) NULL) 2981 return(MagickFalse); 2982 ReplaceImageInList(&wand->images,flip_image); 2983 return(MagickTrue); 2984} 2985 2986/* 2987%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2988% % 2989% % 2990% % 2991% M a g i c k F l o o d f i l l P a i n t I m a g e % 2992% % 2993% % 2994% % 2995%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2996% 2997% MagickFloodfillPaintImage() changes the color value of any pixel that matches 2998% target and is an immediate neighbor. If the method FillToBorderMethod is 2999% specified, the color value is changed for any neighbor pixel that does not 3000% match the bordercolor member of image. 3001% 3002% The format of the MagickFloodfillPaintImage method is: 3003% 3004% MagickBooleanType MagickFloodfillPaintImage(MagickWand *wand, 3005% const PixelWand *fill,const double fuzz,const PixelWand *bordercolor, 3006% const ssize_t x,const ssize_t y,const MagickBooleanType invert) 3007% 3008% A description of each parameter follows: 3009% 3010% o wand: the magick wand. 3011% 3012% o fill: the floodfill color pixel wand. 3013% 3014% o fuzz: By default target must match a particular pixel color 3015% exactly. However, in many cases two colors may differ by a small amount. 3016% The fuzz member of image defines how much tolerance is acceptable to 3017% consider two colors as the same. For example, set fuzz to 10 and the 3018% color red at intensities of 100 and 102 respectively are now interpreted 3019% as the same color for the purposes of the floodfill. 3020% 3021% o bordercolor: the border color pixel wand. 3022% 3023% o x,y: the starting location of the operation. 3024% 3025% o invert: paint any pixel that does not match the target color. 3026% 3027*/ 3028WandExport MagickBooleanType MagickFloodfillPaintImage(MagickWand *wand, 3029 const PixelWand *fill,const double fuzz,const PixelWand *bordercolor, 3030 const ssize_t x,const ssize_t y,const MagickBooleanType invert) 3031{ 3032 DrawInfo 3033 *draw_info; 3034 3035 MagickBooleanType 3036 status; 3037 3038 PixelInfo 3039 target; 3040 3041 assert(wand != (MagickWand *) NULL); 3042 assert(wand->signature == WandSignature); 3043 if (wand->debug != MagickFalse) 3044 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3045 if (wand->images == (Image *) NULL) 3046 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3047 draw_info=CloneDrawInfo(wand->image_info,(DrawInfo *) NULL); 3048 PixelGetQuantumPacket(fill,&draw_info->fill); 3049 (void) GetOneVirtualMagickPixel(wand->images,TileVirtualPixelMethod,x % 3050 wand->images->columns,y % wand->images->rows,&target,wand->exception); 3051 if (bordercolor != (PixelWand *) NULL) 3052 PixelGetMagickColor(bordercolor,&target); 3053 wand->images->fuzz=fuzz; 3054 status=FloodfillPaintImage(wand->images,draw_info,&target,x,y,invert, 3055 wand->exception); 3056 draw_info=DestroyDrawInfo(draw_info); 3057 return(status); 3058} 3059 3060/* 3061%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3062% % 3063% % 3064% % 3065% M a g i c k F l o p I m a g e % 3066% % 3067% % 3068% % 3069%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3070% 3071% MagickFlopImage() creates a horizontal mirror image by reflecting the pixels 3072% around the central y-axis. 3073% 3074% The format of the MagickFlopImage method is: 3075% 3076% MagickBooleanType MagickFlopImage(MagickWand *wand) 3077% 3078% A description of each parameter follows: 3079% 3080% o wand: the magick wand. 3081% 3082*/ 3083WandExport MagickBooleanType MagickFlopImage(MagickWand *wand) 3084{ 3085 Image 3086 *flop_image; 3087 3088 assert(wand != (MagickWand *) NULL); 3089 assert(wand->signature == WandSignature); 3090 if (wand->debug != MagickFalse) 3091 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3092 if (wand->images == (Image *) NULL) 3093 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3094 flop_image=FlopImage(wand->images,wand->exception); 3095 if (flop_image == (Image *) NULL) 3096 return(MagickFalse); 3097 ReplaceImageInList(&wand->images,flop_image); 3098 return(MagickTrue); 3099} 3100 3101/* 3102%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3103% % 3104% % 3105% % 3106% M a g i c k F o u r i e r T r a n s f o r m I m a g e % 3107% % 3108% % 3109% % 3110%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3111% 3112% MagickForwardFourierTransformImage() implements the discrete Fourier 3113% transform (DFT) of the image either as a magnitude / phase or real / 3114% imaginary image pair. 3115% 3116% The format of the MagickForwardFourierTransformImage method is: 3117% 3118% MagickBooleanType MagickForwardFourierTransformImage(MagickWand *wand, 3119% const MagickBooleanType magnitude) 3120% 3121% A description of each parameter follows: 3122% 3123% o wand: the magick wand. 3124% 3125% o magnitude: if true, return as magnitude / phase pair otherwise a real / 3126% imaginary image pair. 3127% 3128*/ 3129WandExport MagickBooleanType MagickForwardFourierTransformImage( 3130 MagickWand *wand,const MagickBooleanType magnitude) 3131{ 3132 Image 3133 *forward_image; 3134 3135 assert(wand != (MagickWand *) NULL); 3136 assert(wand->signature == WandSignature); 3137 if (wand->debug != MagickFalse) 3138 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3139 if (wand->images == (Image *) NULL) 3140 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3141 forward_image=ForwardFourierTransformImage(wand->images,magnitude, 3142 wand->exception); 3143 if (forward_image == (Image *) NULL) 3144 return(MagickFalse); 3145 ReplaceImageInList(&wand->images,forward_image); 3146 return(MagickTrue); 3147} 3148 3149/* 3150%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3151% % 3152% % 3153% % 3154% M a g i c k F r a m e I m a g e % 3155% % 3156% % 3157% % 3158%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3159% 3160% MagickFrameImage() adds a simulated three-dimensional border around the 3161% image. The width and height specify the border width of the vertical and 3162% horizontal sides of the frame. The inner and outer bevels indicate the 3163% width of the inner and outer shadows of the frame. 3164% 3165% The format of the MagickFrameImage method is: 3166% 3167% MagickBooleanType MagickFrameImage(MagickWand *wand, 3168% const PixelWand *matte_color,const size_t width, 3169% const size_t height,const ssize_t inner_bevel, 3170% const ssize_t outer_bevel,const CompositeOperator compose) 3171% 3172% A description of each parameter follows: 3173% 3174% o wand: the magick wand. 3175% 3176% o matte_color: the frame color pixel wand. 3177% 3178% o width: the border width. 3179% 3180% o height: the border height. 3181% 3182% o inner_bevel: the inner bevel width. 3183% 3184% o outer_bevel: the outer bevel width. 3185% 3186% o compose: the composite operator. 3187% 3188*/ 3189WandExport MagickBooleanType MagickFrameImage(MagickWand *wand, 3190 const PixelWand *matte_color,const size_t width,const size_t height, 3191 const ssize_t inner_bevel,const ssize_t outer_bevel, 3192 const CompositeOperator compose) 3193{ 3194 Image 3195 *frame_image; 3196 3197 FrameInfo 3198 frame_info; 3199 3200 assert(wand != (MagickWand *) NULL); 3201 assert(wand->signature == WandSignature); 3202 if (wand->debug != MagickFalse) 3203 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3204 if (wand->images == (Image *) NULL) 3205 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3206 (void) ResetMagickMemory(&frame_info,0,sizeof(frame_info)); 3207 frame_info.width=wand->images->columns+2*width; 3208 frame_info.height=wand->images->rows+2*height; 3209 frame_info.x=(ssize_t) width; 3210 frame_info.y=(ssize_t) height; 3211 frame_info.inner_bevel=inner_bevel; 3212 frame_info.outer_bevel=outer_bevel; 3213 PixelGetQuantumPacket(matte_color,&wand->images->matte_color); 3214 frame_image=FrameImage(wand->images,&frame_info,compose,wand->exception); 3215 if (frame_image == (Image *) NULL) 3216 return(MagickFalse); 3217 ReplaceImageInList(&wand->images,frame_image); 3218 return(MagickTrue); 3219} 3220 3221/* 3222%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3223% % 3224% % 3225% % 3226% M a g i c k F u n c t i o n I m a g e % 3227% % 3228% % 3229% % 3230%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3231% 3232% MagickFunctionImage() applys an arithmetic, relational, or logical 3233% expression to an image. Use these operators to lighten or darken an image, 3234% to increase or decrease contrast in an image, or to produce the "negative" 3235% of an image. 3236% 3237% The format of the MagickFunctionImage method is: 3238% 3239% MagickBooleanType MagickFunctionImage(MagickWand *wand, 3240% const MagickFunction function,const size_t number_arguments, 3241% const double *arguments) 3242% 3243% A description of each parameter follows: 3244% 3245% o wand: the magick wand. 3246% 3247% o function: the image function. 3248% 3249% o number_arguments: the number of function arguments. 3250% 3251% o arguments: the function arguments. 3252% 3253*/ 3254WandExport MagickBooleanType MagickFunctionImage(MagickWand *wand, 3255 const MagickFunction function,const size_t number_arguments, 3256 const double *arguments) 3257{ 3258 MagickBooleanType 3259 status; 3260 3261 assert(wand != (MagickWand *) NULL); 3262 assert(wand->signature == WandSignature); 3263 if (wand->debug != MagickFalse) 3264 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3265 if (wand->images == (Image *) NULL) 3266 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3267 status=FunctionImage(wand->images,function,number_arguments,arguments, 3268 wand->exception); 3269 return(status); 3270} 3271 3272/* 3273%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3274% % 3275% % 3276% % 3277% M a g i c k F x I m a g e % 3278% % 3279% % 3280% % 3281%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3282% 3283% MagickFxImage() evaluate expression for each pixel in the image. 3284% 3285% The format of the MagickFxImage method is: 3286% 3287% MagickWand *MagickFxImage(MagickWand *wand,const char *expression) 3288% 3289% A description of each parameter follows: 3290% 3291% o wand: the magick wand. 3292% 3293% o expression: the expression. 3294% 3295*/ 3296WandExport MagickWand *MagickFxImage(MagickWand *wand,const char *expression) 3297{ 3298 Image 3299 *fx_image; 3300 3301 assert(wand != (MagickWand *) NULL); 3302 assert(wand->signature == WandSignature); 3303 if (wand->debug != MagickFalse) 3304 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3305 if (wand->images == (Image *) NULL) 3306 return((MagickWand *) NULL); 3307 fx_image=FxImage(wand->images,expression,wand->exception); 3308 if (fx_image == (Image *) NULL) 3309 return((MagickWand *) NULL); 3310 return(CloneMagickWandFromImages(wand,fx_image)); 3311} 3312 3313/* 3314%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3315% % 3316% % 3317% % 3318% M a g i c k G a m m a I m a g e % 3319% % 3320% % 3321% % 3322%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3323% 3324% MagickGammaImage() gamma-corrects an image. The same image viewed on 3325% different devices will have perceptual differences in the way the image's 3326% intensities are represented on the screen. Specify individual gamma levels 3327% for the red, green, and blue channels, or adjust all three with the gamma 3328% parameter. Values typically range from 0.8 to 2.3. 3329% 3330% You can also reduce the influence of a particular channel with a gamma 3331% value of 0. 3332% 3333% The format of the MagickGammaImage method is: 3334% 3335% MagickBooleanType MagickGammaImage(MagickWand *wand,const double gamma) 3336% 3337% A description of each parameter follows: 3338% 3339% o wand: the magick wand. 3340% 3341% o level: Define the level of gamma correction. 3342% 3343*/ 3344WandExport MagickBooleanType MagickGammaImage(MagickWand *wand, 3345 const double gamma) 3346{ 3347 MagickBooleanType 3348 status; 3349 3350 assert(wand != (MagickWand *) NULL); 3351 assert(wand->signature == WandSignature); 3352 if (wand->debug != MagickFalse) 3353 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3354 if (wand->images == (Image *) NULL) 3355 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3356 status=GammaImage(wand->images,gamma,wand->exception); 3357 return(status); 3358} 3359 3360/* 3361%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3362% % 3363% % 3364% % 3365% M a g i c k G a u s s i a n B l u r I m a g e % 3366% % 3367% % 3368% % 3369%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3370% 3371% MagickGaussianBlurImage() blurs an image. We convolve the image with a 3372% Gaussian operator of the given radius and standard deviation (sigma). 3373% For reasonable results, the radius should be larger than sigma. Use a 3374% radius of 0 and MagickGaussianBlurImage() selects a suitable radius for you. 3375% 3376% The format of the MagickGaussianBlurImage method is: 3377% 3378% MagickBooleanType MagickGaussianBlurImage(MagickWand *wand, 3379% const double radius,const double sigma,const double bias) 3380% 3381% A description of each parameter follows: 3382% 3383% o wand: the magick wand. 3384% 3385% o radius: the radius of the Gaussian, in pixels, not counting the center 3386% pixel. 3387% 3388% o sigma: the standard deviation of the Gaussian, in pixels. 3389% 3390% o bias: the bias. 3391% 3392*/ 3393WandExport MagickBooleanType MagickGaussianBlurImage(MagickWand *wand, 3394 const double radius,const double sigma,const double bias) 3395{ 3396 Image 3397 *blur_image; 3398 3399 assert(wand != (MagickWand *) NULL); 3400 assert(wand->signature == WandSignature); 3401 if (wand->debug != MagickFalse) 3402 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3403 if (wand->images == (Image *) NULL) 3404 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3405 blur_image=GaussianBlurImage(wand->images,radius,sigma,bias,wand->exception); 3406 if (blur_image == (Image *) NULL) 3407 return(MagickFalse); 3408 ReplaceImageInList(&wand->images,blur_image); 3409 return(MagickTrue); 3410} 3411 3412/* 3413%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3414% % 3415% % 3416% % 3417% M a g i c k G e t I m a g e % 3418% % 3419% % 3420% % 3421%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3422% 3423% MagickGetImage() gets the image at the current image index. 3424% 3425% The format of the MagickGetImage method is: 3426% 3427% MagickWand *MagickGetImage(MagickWand *wand) 3428% 3429% A description of each parameter follows: 3430% 3431% o wand: the magick wand. 3432% 3433*/ 3434WandExport MagickWand *MagickGetImage(MagickWand *wand) 3435{ 3436 Image 3437 *image; 3438 3439 assert(wand != (MagickWand *) NULL); 3440 assert(wand->signature == WandSignature); 3441 if (wand->debug != MagickFalse) 3442 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3443 if (wand->images == (Image *) NULL) 3444 { 3445 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 3446 "ContainsNoImages","`%s'",wand->name); 3447 return((MagickWand *) NULL); 3448 } 3449 image=CloneImage(wand->images,0,0,MagickTrue,wand->exception); 3450 if (image == (Image *) NULL) 3451 return((MagickWand *) NULL); 3452 return(CloneMagickWandFromImages(wand,image)); 3453} 3454 3455/* 3456%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3457% % 3458% % 3459% % 3460% M a g i c k G e t I m a g e A l p h a C h a n n e l % 3461% % 3462% % 3463% % 3464%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3465% 3466% MagickGetImageAlphaChannel() returns MagickFalse if the image alpha channel 3467% is not activated. That is, the image is RGB rather than RGBA or CMYK rather 3468% than CMYKA. 3469% 3470% The format of the MagickGetImageAlphaChannel method is: 3471% 3472% size_t MagickGetImageAlphaChannel(MagickWand *wand) 3473% 3474% A description of each parameter follows: 3475% 3476% o wand: the magick wand. 3477% 3478*/ 3479WandExport MagickBooleanType MagickGetImageAlphaChannel(MagickWand *wand) 3480{ 3481 assert(wand != (MagickWand *) NULL); 3482 assert(wand->signature == WandSignature); 3483 if (wand->debug != MagickFalse) 3484 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3485 if (wand->images == (Image *) NULL) 3486 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3487 return(GetImageAlphaChannel(wand->images)); 3488} 3489 3490/* 3491%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3492% % 3493% % 3494% % 3495% M a g i c k G e t I m a g e C l i p M a s k % 3496% % 3497% % 3498% % 3499%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3500% 3501% MagickGetImageClipMask() gets the image clip mask at the current image index. 3502% 3503% The format of the MagickGetImageClipMask method is: 3504% 3505% MagickWand *MagickGetImageClipMask(MagickWand *wand) 3506% 3507% A description of each parameter follows: 3508% 3509% o wand: the magick wand. 3510% 3511*/ 3512WandExport MagickWand *MagickGetImageClipMask(MagickWand *wand) 3513{ 3514 Image 3515 *image; 3516 3517 assert(wand != (MagickWand *) NULL); 3518 assert(wand->signature == WandSignature); 3519 if (wand->debug != MagickFalse) 3520 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3521 if (wand->images == (Image *) NULL) 3522 { 3523 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 3524 "ContainsNoImages","`%s'",wand->name); 3525 return((MagickWand *) NULL); 3526 } 3527 image=GetImageClipMask(wand->images,wand->exception); 3528 if (image == (Image *) NULL) 3529 return((MagickWand *) NULL); 3530 return(CloneMagickWandFromImages(wand,image)); 3531} 3532 3533/* 3534%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3535% % 3536% % 3537% % 3538% M a g i c k G e t I m a g e B a c k g r o u n d C o l o r % 3539% % 3540% % 3541% % 3542%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3543% 3544% MagickGetImageBackgroundColor() returns the image background color. 3545% 3546% The format of the MagickGetImageBackgroundColor method is: 3547% 3548% MagickBooleanType MagickGetImageBackgroundColor(MagickWand *wand, 3549% PixelWand *background_color) 3550% 3551% A description of each parameter follows: 3552% 3553% o wand: the magick wand. 3554% 3555% o background_color: Return the background color. 3556% 3557*/ 3558WandExport MagickBooleanType MagickGetImageBackgroundColor(MagickWand *wand, 3559 PixelWand *background_color) 3560{ 3561 assert(wand != (MagickWand *) NULL); 3562 assert(wand->signature == WandSignature); 3563 if (wand->debug != MagickFalse) 3564 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3565 if (wand->images == (Image *) NULL) 3566 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3567 PixelSetQuantumPacket(background_color,&wand->images->background_color); 3568 return(MagickTrue); 3569} 3570 3571/* 3572%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3573% % 3574% % 3575% % 3576% M a g i c k G e t I m a g e B l o b % 3577% % 3578% % 3579% % 3580%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3581% 3582% MagickGetImageBlob() implements direct to memory image formats. It returns 3583% the image as a blob (a formatted "file" in memory) and its length, starting 3584% from the current position in the image sequence. Use MagickSetImageFormat() 3585% to set the format to write to the blob (GIF, JPEG, PNG, etc.). 3586% 3587% Utilize MagickResetIterator() to ensure the write is from the beginning of 3588% the image sequence. 3589% 3590% Use MagickRelinquishMemory() to free the blob when you are done with it. 3591% 3592% The format of the MagickGetImageBlob method is: 3593% 3594% unsigned char *MagickGetImageBlob(MagickWand *wand,size_t *length) 3595% 3596% A description of each parameter follows: 3597% 3598% o wand: the magick wand. 3599% 3600% o length: the length of the blob. 3601% 3602*/ 3603WandExport unsigned char *MagickGetImageBlob(MagickWand *wand,size_t *length) 3604{ 3605 assert(wand != (MagickWand *) NULL); 3606 assert(wand->signature == WandSignature); 3607 if (wand->debug != MagickFalse) 3608 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3609 if (wand->images == (Image *) NULL) 3610 { 3611 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 3612 "ContainsNoImages","`%s'",wand->name); 3613 return((unsigned char *) NULL); 3614 } 3615 return(ImageToBlob(wand->image_info,wand->images,length,wand->exception)); 3616} 3617 3618/* 3619%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3620% % 3621% % 3622% % 3623% M a g i c k G e t I m a g e s B l o b % 3624% % 3625% % 3626% % 3627%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3628% 3629% MagickGetImageBlob() implements direct to memory image formats. It 3630% returns the image sequence as a blob and its length. The format of the image 3631% determines the format of the returned blob (GIF, JPEG, PNG, etc.). To 3632% return a different image format, use MagickSetImageFormat(). 3633% 3634% Note, some image formats do not permit multiple images to the same image 3635% stream (e.g. JPEG). in this instance, just the first image of the 3636% sequence is returned as a blob. 3637% 3638% The format of the MagickGetImagesBlob method is: 3639% 3640% unsigned char *MagickGetImagesBlob(MagickWand *wand,size_t *length) 3641% 3642% A description of each parameter follows: 3643% 3644% o wand: the magick wand. 3645% 3646% o length: the length of the blob. 3647% 3648*/ 3649WandExport unsigned char *MagickGetImagesBlob(MagickWand *wand,size_t *length) 3650{ 3651 unsigned char 3652 *blob; 3653 3654 assert(wand != (MagickWand *) NULL); 3655 assert(wand->signature == WandSignature); 3656 if (wand->debug != MagickFalse) 3657 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3658 if (wand->images == (Image *) NULL) 3659 { 3660 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 3661 "ContainsNoImages","`%s'",wand->name); 3662 return((unsigned char *) NULL); 3663 } 3664 blob=ImagesToBlob(wand->image_info,GetFirstImageInList(wand->images),length, 3665 wand->exception); 3666 return(blob); 3667} 3668 3669/* 3670%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3671% % 3672% % 3673% % 3674% M a g i c k G e t I m a g e B l u e P r i m a r y % 3675% % 3676% % 3677% % 3678%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3679% 3680% MagickGetImageBluePrimary() returns the chromaticy blue primary point for the 3681% image. 3682% 3683% The format of the MagickGetImageBluePrimary method is: 3684% 3685% MagickBooleanType MagickGetImageBluePrimary(MagickWand *wand,double *x, 3686% double *y) 3687% 3688% A description of each parameter follows: 3689% 3690% o wand: the magick wand. 3691% 3692% o x: the chromaticity blue primary x-point. 3693% 3694% o y: the chromaticity blue primary y-point. 3695% 3696*/ 3697WandExport MagickBooleanType MagickGetImageBluePrimary(MagickWand *wand, 3698 double *x,double *y) 3699{ 3700 assert(wand != (MagickWand *) NULL); 3701 assert(wand->signature == WandSignature); 3702 if (wand->debug != MagickFalse) 3703 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3704 if (wand->images == (Image *) NULL) 3705 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3706 *x=wand->images->chromaticity.blue_primary.x; 3707 *y=wand->images->chromaticity.blue_primary.y; 3708 return(MagickTrue); 3709} 3710 3711/* 3712%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3713% % 3714% % 3715% % 3716% M a g i c k G e t I m a g e B o r d e r C o l o r % 3717% % 3718% % 3719% % 3720%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3721% 3722% MagickGetImageBorderColor() returns the image border color. 3723% 3724% The format of the MagickGetImageBorderColor method is: 3725% 3726% MagickBooleanType MagickGetImageBorderColor(MagickWand *wand, 3727% PixelWand *border_color) 3728% 3729% A description of each parameter follows: 3730% 3731% o wand: the magick wand. 3732% 3733% o border_color: Return the border color. 3734% 3735*/ 3736WandExport MagickBooleanType MagickGetImageBorderColor(MagickWand *wand, 3737 PixelWand *border_color) 3738{ 3739 assert(wand != (MagickWand *) NULL); 3740 assert(wand->signature == WandSignature); 3741 if (wand->debug != MagickFalse) 3742 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3743 if (wand->images == (Image *) NULL) 3744 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3745 PixelSetQuantumPacket(border_color,&wand->images->border_color); 3746 return(MagickTrue); 3747} 3748 3749/* 3750%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3751% % 3752% % 3753% % 3754% M a g i c k G e t I m a g e F e a t u r e s % 3755% % 3756% % 3757% % 3758%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3759% 3760% MagickGetImageFeatures() returns features for each channel in the 3761% image in each of four directions (horizontal, vertical, left and right 3762% diagonals) for the specified distance. The features include the angular 3763% second moment, contrast, correlation, sum of squares: variance, inverse 3764% difference moment, sum average, sum varience, sum entropy, entropy, 3765% difference variance, difference entropy, information measures of 3766% correlation 1, information measures of correlation 2, and maximum 3767% correlation coefficient. You can access the red channel contrast, for 3768% example, like this: 3769% 3770% channel_features=MagickGetImageFeatures(wand,1); 3771% contrast=channel_features[RedPixelChannel].contrast[0]; 3772% 3773% Use MagickRelinquishMemory() to free the statistics buffer. 3774% 3775% The format of the MagickGetImageFeatures method is: 3776% 3777% ChannelFeatures *MagickGetImageFeatures(MagickWand *wand, 3778% const size_t distance) 3779% 3780% A description of each parameter follows: 3781% 3782% o wand: the magick wand. 3783% 3784% o distance: the distance. 3785% 3786*/ 3787WandExport ChannelFeatures *MagickGetImageFeatures(MagickWand *wand, 3788 const size_t distance) 3789{ 3790 assert(wand != (MagickWand *) NULL); 3791 assert(wand->signature == WandSignature); 3792 if (wand->debug != MagickFalse) 3793 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3794 if (wand->images == (Image *) NULL) 3795 { 3796 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 3797 "ContainsNoImages","`%s'",wand->name); 3798 return((ChannelFeatures *) NULL); 3799 } 3800 return(GetImageFeatures(wand->images,distance,wand->exception)); 3801} 3802 3803/* 3804%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3805% % 3806% % 3807% % 3808% M a g i c k G e t I m a g e K u r t o s i s % 3809% % 3810% % 3811% % 3812%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3813% 3814% MagickGetImageKurtosis() gets the kurtosis and skewness of one or 3815% more image channels. 3816% 3817% The format of the MagickGetImageKurtosis method is: 3818% 3819% MagickBooleanType MagickGetImageKurtosis(MagickWand *wand, 3820% double *kurtosis,double *skewness) 3821% 3822% A description of each parameter follows: 3823% 3824% o wand: the magick wand. 3825% 3826% o kurtosis: The kurtosis for the specified channel(s). 3827% 3828% o skewness: The skewness for the specified channel(s). 3829% 3830*/ 3831WandExport MagickBooleanType MagickGetImageKurtosis(MagickWand *wand, 3832 double *kurtosis,double *skewness) 3833{ 3834 MagickBooleanType 3835 status; 3836 3837 assert(wand != (MagickWand *) NULL); 3838 assert(wand->signature == WandSignature); 3839 if (wand->debug != MagickFalse) 3840 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3841 if (wand->images == (Image *) NULL) 3842 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3843 status=GetImageKurtosis(wand->images,kurtosis,skewness,wand->exception); 3844 return(status); 3845} 3846 3847/* 3848%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3849% % 3850% % 3851% % 3852% M a g i c k G e t I m a g e M e a n % 3853% % 3854% % 3855% % 3856%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3857% 3858% MagickGetImageMean() gets the mean and standard deviation of one or more 3859% image channels. 3860% 3861% The format of the MagickGetImageMean method is: 3862% 3863% MagickBooleanType MagickGetImageMean(MagickWand *wand,double *mean, 3864% double *standard_deviation) 3865% 3866% A description of each parameter follows: 3867% 3868% o wand: the magick wand. 3869% 3870% o channel: the image channel(s). 3871% 3872% o mean: The mean pixel value for the specified channel(s). 3873% 3874% o standard_deviation: The standard deviation for the specified channel(s). 3875% 3876*/ 3877WandExport MagickBooleanType MagickGetImageMean(MagickWand *wand,double *mean, 3878 double *standard_deviation) 3879{ 3880 MagickBooleanType 3881 status; 3882 3883 assert(wand != (MagickWand *) NULL); 3884 assert(wand->signature == WandSignature); 3885 if (wand->debug != MagickFalse) 3886 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3887 if (wand->images == (Image *) NULL) 3888 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3889 status=GetImageMean(wand->images,mean,standard_deviation,wand->exception); 3890 return(status); 3891} 3892 3893/* 3894%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3895% % 3896% % 3897% % 3898% M a g i c k G e t I m a g e R a n g e % 3899% % 3900% % 3901% % 3902%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3903% 3904% MagickGetImageRange() gets the range for one or more image channels. 3905% 3906% The format of the MagickGetImageRange method is: 3907% 3908% MagickBooleanType MagickGetImageRange(MagickWand *wand,double *minima, 3909% double *maxima) 3910% 3911% A description of each parameter follows: 3912% 3913% o wand: the magick wand. 3914% 3915% o minima: The minimum pixel value for the specified channel(s). 3916% 3917% o maxima: The maximum pixel value for the specified channel(s). 3918% 3919*/ 3920WandExport MagickBooleanType MagickGetImageRange(MagickWand *wand, 3921 double *minima,double *maxima) 3922{ 3923 MagickBooleanType 3924 status; 3925 3926 assert(wand != (MagickWand *) NULL); 3927 assert(wand->signature == WandSignature); 3928 if (wand->debug != MagickFalse) 3929 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3930 if (wand->images == (Image *) NULL) 3931 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3932 status=GetImageRange(wand->images,minima,maxima,wand->exception); 3933 return(status); 3934} 3935 3936/* 3937%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3938% % 3939% % 3940% % 3941% M a g i c k G e t I m a g e S t a t i s t i c s % 3942% % 3943% % 3944% % 3945%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3946% 3947% MagickGetImageStatistics() returns statistics for each channel in the 3948% image. The statistics include the channel depth, its minima and 3949% maxima, the mean, the standard deviation, the kurtosis and the skewness. 3950% You can access the red channel mean, for example, like this: 3951% 3952% channel_statistics=MagickGetImageStatistics(wand); 3953% red_mean=channel_statistics[RedPixelChannel].mean; 3954% 3955% Use MagickRelinquishMemory() to free the statistics buffer. 3956% 3957% The format of the MagickGetImageStatistics method is: 3958% 3959% ChannelStatistics *MagickGetImageStatistics(MagickWand *wand) 3960% 3961% A description of each parameter follows: 3962% 3963% o wand: the magick wand. 3964% 3965*/ 3966WandExport ChannelStatistics *MagickGetImageStatistics(MagickWand *wand) 3967{ 3968 assert(wand != (MagickWand *) NULL); 3969 assert(wand->signature == WandSignature); 3970 if (wand->debug != MagickFalse) 3971 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3972 if (wand->images == (Image *) NULL) 3973 { 3974 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 3975 "ContainsNoImages","`%s'",wand->name); 3976 return((ChannelStatistics *) NULL); 3977 } 3978 return(GetImageStatistics(wand->images,wand->exception)); 3979} 3980 3981/* 3982%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3983% % 3984% % 3985% % 3986% M a g i c k G e t I m a g e C o l o r m a p C o l o r % 3987% % 3988% % 3989% % 3990%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3991% 3992% MagickGetImageColormapColor() returns the color of the specified colormap 3993% index. 3994% 3995% The format of the MagickGetImageColormapColor method is: 3996% 3997% MagickBooleanType MagickGetImageColormapColor(MagickWand *wand, 3998% const size_t index,PixelWand *color) 3999% 4000% A description of each parameter follows: 4001% 4002% o wand: the magick wand. 4003% 4004% o index: the offset into the image colormap. 4005% 4006% o color: Return the colormap color in this wand. 4007% 4008*/ 4009WandExport MagickBooleanType MagickGetImageColormapColor(MagickWand *wand, 4010 const size_t index,PixelWand *color) 4011{ 4012 assert(wand != (MagickWand *) NULL); 4013 assert(wand->signature == WandSignature); 4014 if (wand->debug != MagickFalse) 4015 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4016 if (wand->images == (Image *) NULL) 4017 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4018 if ((wand->images->colormap == (PixelInfo *) NULL) || 4019 (index >= wand->images->colors)) 4020 { 4021 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4022 "InvalidColormapIndex","`%s'",wand->name); 4023 return(MagickFalse); 4024 } 4025 PixelSetQuantumPacket(color,wand->images->colormap+index); 4026 return(MagickTrue); 4027} 4028 4029/* 4030%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4031% % 4032% % 4033% % 4034% M a g i c k G e t I m a g e C o l o r s % 4035% % 4036% % 4037% % 4038%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4039% 4040% MagickGetImageColors() gets the number of unique colors in the image. 4041% 4042% The format of the MagickGetImageColors method is: 4043% 4044% size_t MagickGetImageColors(MagickWand *wand) 4045% 4046% A description of each parameter follows: 4047% 4048% o wand: the magick wand. 4049% 4050*/ 4051WandExport size_t MagickGetImageColors(MagickWand *wand) 4052{ 4053 assert(wand != (MagickWand *) NULL); 4054 assert(wand->signature == WandSignature); 4055 if (wand->debug != MagickFalse) 4056 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4057 if (wand->images == (Image *) NULL) 4058 { 4059 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4060 "ContainsNoImages","`%s'",wand->name); 4061 return(0); 4062 } 4063 return(GetNumberColors(wand->images,(FILE *) NULL,wand->exception)); 4064} 4065 4066/* 4067%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4068% % 4069% % 4070% % 4071% M a g i c k G e t I m a g e C o l o r s p a c e % 4072% % 4073% % 4074% % 4075%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4076% 4077% MagickGetImageColorspace() gets the image colorspace. 4078% 4079% The format of the MagickGetImageColorspace method is: 4080% 4081% ColorspaceType MagickGetImageColorspace(MagickWand *wand) 4082% 4083% A description of each parameter follows: 4084% 4085% o wand: the magick wand. 4086% 4087*/ 4088WandExport ColorspaceType MagickGetImageColorspace(MagickWand *wand) 4089{ 4090 assert(wand != (MagickWand *) NULL); 4091 assert(wand->signature == WandSignature); 4092 if (wand->debug != MagickFalse) 4093 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4094 if (wand->images == (Image *) NULL) 4095 { 4096 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4097 "ContainsNoImages","`%s'",wand->name); 4098 return(UndefinedColorspace); 4099 } 4100 return(wand->images->colorspace); 4101} 4102 4103/* 4104%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4105% % 4106% % 4107% % 4108% M a g i c k G e t I m a g e C o m p o s e % 4109% % 4110% % 4111% % 4112%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4113% 4114% MagickGetImageCompose() returns the composite operator associated with the 4115% image. 4116% 4117% The format of the MagickGetImageCompose method is: 4118% 4119% CompositeOperator MagickGetImageCompose(MagickWand *wand) 4120% 4121% A description of each parameter follows: 4122% 4123% o wand: the magick wand. 4124% 4125*/ 4126WandExport CompositeOperator MagickGetImageCompose(MagickWand *wand) 4127{ 4128 assert(wand != (MagickWand *) NULL); 4129 assert(wand->signature == WandSignature); 4130 if (wand->debug != MagickFalse) 4131 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4132 if (wand->images == (Image *) NULL) 4133 { 4134 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4135 "ContainsNoImages","`%s'",wand->name); 4136 return(UndefinedCompositeOp); 4137 } 4138 return(wand->images->compose); 4139} 4140 4141/* 4142%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4143% % 4144% % 4145% % 4146% M a g i c k G e t I m a g e C o m p r e s s i o n % 4147% % 4148% % 4149% % 4150%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4151% 4152% MagickGetImageCompression() gets the image compression. 4153% 4154% The format of the MagickGetImageCompression method is: 4155% 4156% CompressionType MagickGetImageCompression(MagickWand *wand) 4157% 4158% A description of each parameter follows: 4159% 4160% o wand: the magick wand. 4161% 4162*/ 4163WandExport CompressionType MagickGetImageCompression(MagickWand *wand) 4164{ 4165 assert(wand != (MagickWand *) NULL); 4166 assert(wand->signature == WandSignature); 4167 if (wand->debug != MagickFalse) 4168 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4169 if (wand->images == (Image *) NULL) 4170 { 4171 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4172 "ContainsNoImages","`%s'",wand->name); 4173 return(UndefinedCompression); 4174 } 4175 return(wand->images->compression); 4176} 4177 4178/* 4179%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4180% % 4181% % 4182% % 4183% M a g i c k G e t I m a g e C o m p r e s s i o n Q u a l i t y % 4184% % 4185% % 4186% % 4187%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4188% 4189% MagickGetImageCompression() gets the image compression quality. 4190% 4191% The format of the MagickGetImageCompression method is: 4192% 4193% size_t MagickGetImageCompression(MagickWand *wand) 4194% 4195% A description of each parameter follows: 4196% 4197% o wand: the magick wand. 4198% 4199*/ 4200WandExport size_t MagickGetImageCompressionQuality(MagickWand *wand) 4201{ 4202 assert(wand != (MagickWand *) NULL); 4203 assert(wand->signature == WandSignature); 4204 if (wand->debug != MagickFalse) 4205 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4206 if (wand->images == (Image *) NULL) 4207 { 4208 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4209 "ContainsNoImages","`%s'",wand->name); 4210 return(0UL); 4211 } 4212 return(wand->images->quality); 4213} 4214 4215/* 4216%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4217% % 4218% % 4219% % 4220% M a g i c k G e t I m a g e D e l a y % 4221% % 4222% % 4223% % 4224%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4225% 4226% MagickGetImageDelay() gets the image delay. 4227% 4228% The format of the MagickGetImageDelay method is: 4229% 4230% size_t MagickGetImageDelay(MagickWand *wand) 4231% 4232% A description of each parameter follows: 4233% 4234% o wand: the magick wand. 4235% 4236*/ 4237WandExport size_t MagickGetImageDelay(MagickWand *wand) 4238{ 4239 assert(wand != (MagickWand *) NULL); 4240 assert(wand->signature == WandSignature); 4241 if (wand->debug != MagickFalse) 4242 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4243 if (wand->images == (Image *) NULL) 4244 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4245 return(wand->images->delay); 4246} 4247 4248/* 4249%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4250% % 4251% % 4252% % 4253% M a g i c k G e t I m a g e D e p t h % 4254% % 4255% % 4256% % 4257%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4258% 4259% MagickGetImageDepth() gets the image depth. 4260% 4261% The format of the MagickGetImageDepth method is: 4262% 4263% size_t MagickGetImageDepth(MagickWand *wand) 4264% 4265% A description of each parameter follows: 4266% 4267% o wand: the magick wand. 4268% 4269*/ 4270WandExport size_t MagickGetImageDepth(MagickWand *wand) 4271{ 4272 assert(wand != (MagickWand *) NULL); 4273 assert(wand->signature == WandSignature); 4274 if (wand->debug != MagickFalse) 4275 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4276 if (wand->images == (Image *) NULL) 4277 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4278 return(GetImageDepth(wand->images,wand->exception)); 4279} 4280 4281/* 4282%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4283% % 4284% % 4285% % 4286% M a g i c k G e t I m a g e D i s p o s e % 4287% % 4288% % 4289% % 4290%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4291% 4292% MagickGetImageDispose() gets the image disposal method. 4293% 4294% The format of the MagickGetImageDispose method is: 4295% 4296% DisposeType MagickGetImageDispose(MagickWand *wand) 4297% 4298% A description of each parameter follows: 4299% 4300% o wand: the magick wand. 4301% 4302*/ 4303WandExport DisposeType MagickGetImageDispose(MagickWand *wand) 4304{ 4305 assert(wand != (MagickWand *) NULL); 4306 assert(wand->signature == WandSignature); 4307 if (wand->debug != MagickFalse) 4308 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4309 if (wand->images == (Image *) NULL) 4310 { 4311 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4312 "ContainsNoImages","`%s'",wand->name); 4313 return(UndefinedDispose); 4314 } 4315 return((DisposeType) wand->images->dispose); 4316} 4317 4318/* 4319%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4320% % 4321% % 4322% % 4323% M a g i c k G e t I m a g e D i s t o r t i o n % 4324% % 4325% % 4326% % 4327%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4328% 4329% MagickGetImageDistortion() compares an image to a reconstructed image and 4330% returns the specified distortion metric. 4331% 4332% The format of the MagickGetImageDistortion method is: 4333% 4334% MagickBooleanType MagickGetImageDistortion(MagickWand *wand, 4335% const MagickWand *reference,const MetricType metric, 4336% double *distortion) 4337% 4338% A description of each parameter follows: 4339% 4340% o wand: the magick wand. 4341% 4342% o reference: the reference wand. 4343% 4344% o metric: the metric. 4345% 4346% o distortion: the computed distortion between the images. 4347% 4348*/ 4349WandExport MagickBooleanType MagickGetImageDistortion(MagickWand *wand, 4350 const MagickWand *reference,const MetricType metric,double *distortion) 4351{ 4352 MagickBooleanType 4353 status; 4354 4355 assert(wand != (MagickWand *) NULL); 4356 assert(wand->signature == WandSignature); 4357 if (wand->debug != MagickFalse) 4358 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4359 if ((wand->images == (Image *) NULL) || (reference->images == (Image *) NULL)) 4360 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4361 status=GetImageDistortion(wand->images,reference->images,metric,distortion, 4362 wand->exception); 4363 return(status); 4364} 4365 4366/* 4367%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4368% % 4369% % 4370% % 4371% M a g i c k G e t I m a g e D i s t o r t i o n s % 4372% % 4373% % 4374% % 4375%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4376% 4377% MagickGetImageDistortions() compares one or more pixel channels of an 4378% image to a reconstructed image and returns the specified distortion metrics. 4379% 4380% Use MagickRelinquishMemory() to free the metrics when you are done with them. 4381% 4382% The format of the MagickGetImageDistortion method is: 4383% 4384% double *MagickGetImageDistortion(MagickWand *wand, 4385% const MagickWand *reference,const MetricType metric) 4386% 4387% A description of each parameter follows: 4388% 4389% o wand: the magick wand. 4390% 4391% o reference: the reference wand. 4392% 4393% o metric: the metric. 4394% 4395*/ 4396WandExport double *MagickGetImageDistortions(MagickWand *wand, 4397 const MagickWand *reference,const MetricType metric) 4398{ 4399 double 4400 *channel_distortion; 4401 4402 assert(wand != (MagickWand *) NULL); 4403 assert(wand->signature == WandSignature); 4404 if (wand->debug != MagickFalse) 4405 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4406 assert(reference != (MagickWand *) NULL); 4407 assert(reference->signature == WandSignature); 4408 if ((wand->images == (Image *) NULL) || (reference->images == (Image *) NULL)) 4409 { 4410 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4411 "ContainsNoImages","`%s'",wand->name); 4412 return((double *) NULL); 4413 } 4414 channel_distortion=GetImageDistortions(wand->images,reference->images, 4415 metric,wand->exception); 4416 return(channel_distortion); 4417} 4418 4419/* 4420%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4421% % 4422% % 4423% % 4424% M a g i c k G e t I m a g e F i l e n a m e % 4425% % 4426% % 4427% % 4428%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4429% 4430% MagickGetImageFilename() returns the filename of a particular image in a 4431% sequence. 4432% 4433% The format of the MagickGetImageFilename method is: 4434% 4435% char *MagickGetImageFilename(MagickWand *wand) 4436% 4437% A description of each parameter follows: 4438% 4439% o wand: the magick wand. 4440% 4441*/ 4442WandExport char *MagickGetImageFilename(MagickWand *wand) 4443{ 4444 assert(wand != (MagickWand *) NULL); 4445 assert(wand->signature == WandSignature); 4446 if (wand->debug != MagickFalse) 4447 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4448 if (wand->images == (Image *) NULL) 4449 { 4450 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4451 "ContainsNoImages","`%s'",wand->name); 4452 return((char *) NULL); 4453 } 4454 return(AcquireString(wand->images->filename)); 4455} 4456 4457/* 4458%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4459% % 4460% % 4461% % 4462% M a g i c k G e t I m a g e F o r m a t % 4463% % 4464% % 4465% % 4466%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4467% 4468% MagickGetImageFormat() returns the format of a particular image in a 4469% sequence. 4470% 4471% The format of the MagickGetImageFormat method is: 4472% 4473% const char *MagickGetImageFormat(MagickWand *wand) 4474% 4475% A description of each parameter follows: 4476% 4477% o wand: the magick wand. 4478% 4479*/ 4480WandExport char *MagickGetImageFormat(MagickWand *wand) 4481{ 4482 assert(wand != (MagickWand *) NULL); 4483 assert(wand->signature == WandSignature); 4484 if (wand->debug != MagickFalse) 4485 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4486 if (wand->images == (Image *) NULL) 4487 { 4488 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4489 "ContainsNoImages","`%s'",wand->name); 4490 return((char *) NULL); 4491 } 4492 return(AcquireString(wand->images->magick)); 4493} 4494 4495/* 4496%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4497% % 4498% % 4499% % 4500% M a g i c k G e t I m a g e F u z z % 4501% % 4502% % 4503% % 4504%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4505% 4506% MagickGetImageFuzz() gets the image fuzz. 4507% 4508% The format of the MagickGetImageFuzz method is: 4509% 4510% double MagickGetImageFuzz(MagickWand *wand) 4511% 4512% A description of each parameter follows: 4513% 4514% o wand: the magick wand. 4515% 4516*/ 4517WandExport double MagickGetImageFuzz(MagickWand *wand) 4518{ 4519 assert(wand != (MagickWand *) NULL); 4520 assert(wand->signature == WandSignature); 4521 if (wand->debug != MagickFalse) 4522 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4523 if (wand->images == (Image *) NULL) 4524 { 4525 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4526 "ContainsNoImages","`%s'",wand->name); 4527 return(0.0); 4528 } 4529 return(wand->images->fuzz); 4530} 4531 4532/* 4533%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4534% % 4535% % 4536% % 4537% M a g i c k G e t I m a g e G a m m a % 4538% % 4539% % 4540% % 4541%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4542% 4543% MagickGetImageGamma() gets the image gamma. 4544% 4545% The format of the MagickGetImageGamma method is: 4546% 4547% double MagickGetImageGamma(MagickWand *wand) 4548% 4549% A description of each parameter follows: 4550% 4551% o wand: the magick wand. 4552% 4553*/ 4554WandExport double MagickGetImageGamma(MagickWand *wand) 4555{ 4556 assert(wand != (MagickWand *) NULL); 4557 assert(wand->signature == WandSignature); 4558 if (wand->debug != MagickFalse) 4559 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4560 if (wand->images == (Image *) NULL) 4561 { 4562 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4563 "ContainsNoImages","`%s'",wand->name); 4564 return(0.0); 4565 } 4566 return(wand->images->gamma); 4567} 4568 4569/* 4570%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4571% % 4572% % 4573% % 4574% M a g i c k G e t I m a g e I n t e r l a c e S c h e m e % 4575% % 4576% % 4577% % 4578%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4579% 4580% MagickGetImageGravity() gets the image gravity. 4581% 4582% The format of the MagickGetImageGravity method is: 4583% 4584% GravityType MagickGetImageGravity(MagickWand *wand) 4585% 4586% A description of each parameter follows: 4587% 4588% o wand: the magick wand. 4589% 4590*/ 4591WandExport GravityType MagickGetImageGravity(MagickWand *wand) 4592{ 4593 assert(wand != (MagickWand *) NULL); 4594 assert(wand->signature == WandSignature); 4595 if (wand->debug != MagickFalse) 4596 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4597 if (wand->images == (Image *) NULL) 4598 { 4599 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4600 "ContainsNoImages","`%s'",wand->name); 4601 return(UndefinedGravity); 4602 } 4603 return(wand->images->gravity); 4604} 4605 4606/* 4607%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4608% % 4609% % 4610% % 4611% M a g i c k G e t I m a g e G r e e n P r i m a r y % 4612% % 4613% % 4614% % 4615%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4616% 4617% MagickGetImageGreenPrimary() returns the chromaticy green primary point. 4618% 4619% The format of the MagickGetImageGreenPrimary method is: 4620% 4621% MagickBooleanType MagickGetImageGreenPrimary(MagickWand *wand,double *x, 4622% double *y) 4623% 4624% A description of each parameter follows: 4625% 4626% o wand: the magick wand. 4627% 4628% o x: the chromaticity green primary x-point. 4629% 4630% o y: the chromaticity green primary y-point. 4631% 4632*/ 4633WandExport MagickBooleanType MagickGetImageGreenPrimary(MagickWand *wand, 4634 double *x,double *y) 4635{ 4636 assert(wand != (MagickWand *) NULL); 4637 assert(wand->signature == WandSignature); 4638 if (wand->debug != MagickFalse) 4639 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4640 if (wand->images == (Image *) NULL) 4641 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4642 *x=wand->images->chromaticity.green_primary.x; 4643 *y=wand->images->chromaticity.green_primary.y; 4644 return(MagickTrue); 4645} 4646 4647/* 4648%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4649% % 4650% % 4651% % 4652% M a g i c k G e t I m a g e H e i g h t % 4653% % 4654% % 4655% % 4656%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4657% 4658% MagickGetImageHeight() returns the image height. 4659% 4660% The format of the MagickGetImageHeight method is: 4661% 4662% size_t MagickGetImageHeight(MagickWand *wand) 4663% 4664% A description of each parameter follows: 4665% 4666% o wand: the magick wand. 4667% 4668*/ 4669WandExport size_t MagickGetImageHeight(MagickWand *wand) 4670{ 4671 assert(wand != (MagickWand *) NULL); 4672 assert(wand->signature == WandSignature); 4673 if (wand->debug != MagickFalse) 4674 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4675 if (wand->images == (Image *) NULL) 4676 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4677 return(wand->images->rows); 4678} 4679 4680/* 4681%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4682% % 4683% % 4684% % 4685% M a g i c k G e t I m a g e H i s t o g r a m % 4686% % 4687% % 4688% % 4689%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4690% 4691% MagickGetImageHistogram() returns the image histogram as an array of 4692% PixelWand wands. 4693% 4694% The format of the MagickGetImageHistogram method is: 4695% 4696% PixelWand **MagickGetImageHistogram(MagickWand *wand, 4697% size_t *number_colors) 4698% 4699% A description of each parameter follows: 4700% 4701% o wand: the magick wand. 4702% 4703% o number_colors: the number of unique colors in the image and the number 4704% of pixel wands returned. 4705% 4706*/ 4707WandExport PixelWand **MagickGetImageHistogram(MagickWand *wand, 4708 size_t *number_colors) 4709{ 4710 PixelInfo 4711 *histogram; 4712 4713 PixelWand 4714 **pixel_wands; 4715 4716 register ssize_t 4717 i; 4718 4719 assert(wand != (MagickWand *) NULL); 4720 assert(wand->signature == WandSignature); 4721 if (wand->debug != MagickFalse) 4722 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4723 if (wand->images == (Image *) NULL) 4724 { 4725 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4726 "ContainsNoImages","`%s'",wand->name); 4727 return((PixelWand **) NULL); 4728 } 4729 histogram=GetImageHistogram(wand->images,number_colors,wand->exception); 4730 if (histogram == (PixelInfo *) NULL) 4731 return((PixelWand **) NULL); 4732 pixel_wands=NewPixelWands(*number_colors); 4733 for (i=0; i < (ssize_t) *number_colors; i++) 4734 { 4735 PixelSetQuantumPacket(pixel_wands[i],&histogram[i]); 4736 PixelSetColorCount(pixel_wands[i],(size_t) histogram[i].count); 4737 } 4738 histogram=(PixelInfo *) RelinquishMagickMemory(histogram); 4739 return(pixel_wands); 4740} 4741 4742/* 4743%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4744% % 4745% % 4746% % 4747% M a g i c k G e t I m a g e I n t e r l a c e S c h e m e % 4748% % 4749% % 4750% % 4751%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4752% 4753% MagickGetImageInterlaceScheme() gets the image interlace scheme. 4754% 4755% The format of the MagickGetImageInterlaceScheme method is: 4756% 4757% InterlaceType MagickGetImageInterlaceScheme(MagickWand *wand) 4758% 4759% A description of each parameter follows: 4760% 4761% o wand: the magick wand. 4762% 4763*/ 4764WandExport InterlaceType MagickGetImageInterlaceScheme(MagickWand *wand) 4765{ 4766 assert(wand != (MagickWand *) NULL); 4767 assert(wand->signature == WandSignature); 4768 if (wand->debug != MagickFalse) 4769 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4770 if (wand->images == (Image *) NULL) 4771 { 4772 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4773 "ContainsNoImages","`%s'",wand->name); 4774 return(UndefinedInterlace); 4775 } 4776 return(wand->images->interlace); 4777} 4778 4779/* 4780%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4781% % 4782% % 4783% % 4784% M a g i c k G e t I m a g e I n t e r p o l a t e M e t h o d % 4785% % 4786% % 4787% % 4788%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4789% 4790% MagickGetImageInterpolateMethod() returns the interpolation method for the 4791% sepcified image. 4792% 4793% The format of the MagickGetImageInterpolateMethod method is: 4794% 4795% PixelInterpolateMethod MagickGetImagePixelInterpolateMethod( 4796% MagickWand *wand) 4797% 4798% A description of each parameter follows: 4799% 4800% o wand: the magick wand. 4801% 4802*/ 4803WandExport PixelInterpolateMethod MagickGetImageInterpolateMethod( 4804 MagickWand *wand) 4805{ 4806 assert(wand != (MagickWand *) NULL); 4807 assert(wand->signature == WandSignature); 4808 if (wand->debug != MagickFalse) 4809 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4810 if (wand->images == (Image *) NULL) 4811 { 4812 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4813 "ContainsNoImages","`%s'",wand->name); 4814 return(UndefinedInterpolatePixel); 4815 } 4816 return(wand->images->interpolate); 4817} 4818 4819/* 4820%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4821% % 4822% % 4823% % 4824% M a g i c k G e t I m a g e I t e r a t i o n s % 4825% % 4826% % 4827% % 4828%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4829% 4830% MagickGetImageIterations() gets the image iterations. 4831% 4832% The format of the MagickGetImageIterations method is: 4833% 4834% size_t MagickGetImageIterations(MagickWand *wand) 4835% 4836% A description of each parameter follows: 4837% 4838% o wand: the magick wand. 4839% 4840*/ 4841WandExport size_t MagickGetImageIterations(MagickWand *wand) 4842{ 4843 assert(wand != (MagickWand *) NULL); 4844 assert(wand->signature == WandSignature); 4845 if (wand->debug != MagickFalse) 4846 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4847 if (wand->images == (Image *) NULL) 4848 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4849 return(wand->images->iterations); 4850} 4851 4852/* 4853%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4854% % 4855% % 4856% % 4857% M a g i c k G e t I m a g e L e n g t h % 4858% % 4859% % 4860% % 4861%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4862% 4863% MagickGetImageLength() returns the image length in bytes. 4864% 4865% The format of the MagickGetImageLength method is: 4866% 4867% MagickBooleanType MagickGetImageLength(MagickWand *wand, 4868% MagickSizeType *length) 4869% 4870% A description of each parameter follows: 4871% 4872% o wand: the magick wand. 4873% 4874% o length: the image length in bytes. 4875% 4876*/ 4877WandExport MagickBooleanType MagickGetImageLength(MagickWand *wand, 4878 MagickSizeType *length) 4879{ 4880 assert(wand != (MagickWand *) NULL); 4881 assert(wand->signature == WandSignature); 4882 if (wand->debug != MagickFalse) 4883 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4884 if (wand->images == (Image *) NULL) 4885 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4886 *length=GetBlobSize(wand->images); 4887 return(MagickTrue); 4888} 4889 4890/* 4891%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4892% % 4893% % 4894% % 4895% M a g i c k G e t I m a g e M a t t e C o l o r % 4896% % 4897% % 4898% % 4899%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4900% 4901% MagickGetImageMatteColor() returns the image matte color. 4902% 4903% The format of the MagickGetImageMatteColor method is: 4904% 4905% MagickBooleanType MagickGetImagematteColor(MagickWand *wand, 4906% PixelWand *matte_color) 4907% 4908% A description of each parameter follows: 4909% 4910% o wand: the magick wand. 4911% 4912% o matte_color: Return the matte color. 4913% 4914*/ 4915WandExport MagickBooleanType MagickGetImageMatteColor(MagickWand *wand, 4916 PixelWand *matte_color) 4917{ 4918 assert(wand != (MagickWand *) NULL); 4919 assert(wand->signature == WandSignature); 4920 if (wand->debug != MagickFalse) 4921 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4922 if (wand->images == (Image *) NULL) 4923 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4924 PixelSetQuantumPacket(matte_color,&wand->images->matte_color); 4925 return(MagickTrue); 4926} 4927 4928/* 4929%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4930% % 4931% % 4932% % 4933% M a g i c k G e t I m a g e O r i e n t a t i o n % 4934% % 4935% % 4936% % 4937%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4938% 4939% MagickGetImageOrientation() returns the image orientation. 4940% 4941% The format of the MagickGetImageOrientation method is: 4942% 4943% OrientationType MagickGetImageOrientation(MagickWand *wand) 4944% 4945% A description of each parameter follows: 4946% 4947% o wand: the magick wand. 4948% 4949*/ 4950WandExport OrientationType MagickGetImageOrientation(MagickWand *wand) 4951{ 4952 assert(wand != (MagickWand *) NULL); 4953 assert(wand->signature == WandSignature); 4954 if (wand->debug != MagickFalse) 4955 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4956 if (wand->images == (Image *) NULL) 4957 { 4958 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4959 "ContainsNoImages","`%s'",wand->name); 4960 return(UndefinedOrientation); 4961 } 4962 return(wand->images->orientation); 4963} 4964 4965/* 4966%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4967% % 4968% % 4969% % 4970% M a g i c k G e t I m a g e P a g e % 4971% % 4972% % 4973% % 4974%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4975% 4976% MagickGetImagePage() returns the page geometry associated with the image. 4977% 4978% The format of the MagickGetImagePage method is: 4979% 4980% MagickBooleanType MagickGetImagePage(MagickWand *wand, 4981% size_t *width,size_t *height,ssize_t *x,ssize_t *y) 4982% 4983% A description of each parameter follows: 4984% 4985% o wand: the magick wand. 4986% 4987% o width: the page width. 4988% 4989% o height: the page height. 4990% 4991% o x: the page x-offset. 4992% 4993% o y: the page y-offset. 4994% 4995*/ 4996WandExport MagickBooleanType MagickGetImagePage(MagickWand *wand, 4997 size_t *width,size_t *height,ssize_t *x,ssize_t *y) 4998{ 4999 assert(wand != (const MagickWand *) NULL); 5000 assert(wand->signature == WandSignature); 5001 if (wand->debug != MagickFalse) 5002 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5003 if (wand->images == (Image *) NULL) 5004 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5005 *width=wand->images->page.width; 5006 *height=wand->images->page.height; 5007 *x=wand->images->page.x; 5008 *y=wand->images->page.y; 5009 return(MagickTrue); 5010} 5011 5012/* 5013%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5014% % 5015% % 5016% % 5017% M a g i c k G e t I m a g e P i x e l C o l o r % 5018% % 5019% % 5020% % 5021%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5022% 5023% MagickGetImagePixelColor() returns the color of the specified pixel. 5024% 5025% The format of the MagickGetImagePixelColor method is: 5026% 5027% MagickBooleanType MagickGetImagePixelColor(MagickWand *wand, 5028% const ssize_t x,const ssize_t y,PixelWand *color) 5029% 5030% A description of each parameter follows: 5031% 5032% o wand: the magick wand. 5033% 5034% o x,y: the pixel offset into the image. 5035% 5036% o color: Return the colormap color in this wand. 5037% 5038*/ 5039WandExport MagickBooleanType MagickGetImagePixelColor(MagickWand *wand, 5040 const ssize_t x,const ssize_t y,PixelWand *color) 5041{ 5042 register const Quantum 5043 *p; 5044 5045 CacheView 5046 *image_view; 5047 5048 assert(wand != (MagickWand *) NULL); 5049 assert(wand->signature == WandSignature); 5050 if (wand->debug != MagickFalse) 5051 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5052 if (wand->images == (Image *) NULL) 5053 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5054 image_view=AcquireCacheView(wand->images); 5055 p=GetCacheViewVirtualPixels(image_view,x,y,1,1,wand->exception); 5056 if (p == (const Quantum *) NULL) 5057 { 5058 image_view=DestroyCacheView(image_view); 5059 return(MagickFalse); 5060 } 5061 PixelSetQuantumPixel(wand->images,p,color); 5062 image_view=DestroyCacheView(image_view); 5063 return(MagickTrue); 5064} 5065 5066/* 5067%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5068% % 5069% % 5070% % 5071% M a g i c k G e t I m a g e R e d P r i m a r y % 5072% % 5073% % 5074% % 5075%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5076% 5077% MagickGetImageRedPrimary() returns the chromaticy red primary point. 5078% 5079% The format of the MagickGetImageRedPrimary method is: 5080% 5081% MagickBooleanType MagickGetImageRedPrimary(MagickWand *wand,double *x, 5082% double *y) 5083% 5084% A description of each parameter follows: 5085% 5086% o wand: the magick wand. 5087% 5088% o x: the chromaticity red primary x-point. 5089% 5090% o y: the chromaticity red primary y-point. 5091% 5092*/ 5093WandExport MagickBooleanType MagickGetImageRedPrimary(MagickWand *wand, 5094 double *x,double *y) 5095{ 5096 assert(wand != (MagickWand *) NULL); 5097 assert(wand->signature == WandSignature); 5098 if (wand->debug != MagickFalse) 5099 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5100 if (wand->images == (Image *) NULL) 5101 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5102 *x=wand->images->chromaticity.red_primary.x; 5103 *y=wand->images->chromaticity.red_primary.y; 5104 return(MagickTrue); 5105} 5106 5107/* 5108%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5109% % 5110% % 5111% % 5112% M a g i c k G e t I m a g e R e g i o n % 5113% % 5114% % 5115% % 5116%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5117% 5118% MagickGetImageRegion() extracts a region of the image and returns it as a 5119% a new wand. 5120% 5121% The format of the MagickGetImageRegion method is: 5122% 5123% MagickWand *MagickGetImageRegion(MagickWand *wand, 5124% const size_t width,const size_t height,const ssize_t x, 5125% const ssize_t y) 5126% 5127% A description of each parameter follows: 5128% 5129% o wand: the magick wand. 5130% 5131% o width: the region width. 5132% 5133% o height: the region height. 5134% 5135% o x: the region x offset. 5136% 5137% o y: the region y offset. 5138% 5139*/ 5140WandExport MagickWand *MagickGetImageRegion(MagickWand *wand, 5141 const size_t width,const size_t height,const ssize_t x, 5142 const ssize_t y) 5143{ 5144 Image 5145 *region_image; 5146 5147 RectangleInfo 5148 region; 5149 5150 assert(wand != (MagickWand *) NULL); 5151 assert(wand->signature == WandSignature); 5152 if (wand->debug != MagickFalse) 5153 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5154 if (wand->images == (Image *) NULL) 5155 return((MagickWand *) NULL); 5156 region.width=width; 5157 region.height=height; 5158 region.x=x; 5159 region.y=y; 5160 region_image=CropImage(wand->images,®ion,wand->exception); 5161 if (region_image == (Image *) NULL) 5162 return((MagickWand *) NULL); 5163 return(CloneMagickWandFromImages(wand,region_image)); 5164} 5165 5166/* 5167%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5168% % 5169% % 5170% % 5171% M a g i c k G e t I m a g e R e n d e r i n g I n t e n t % 5172% % 5173% % 5174% % 5175%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5176% 5177% MagickGetImageRenderingIntent() gets the image rendering intent. 5178% 5179% The format of the MagickGetImageRenderingIntent method is: 5180% 5181% RenderingIntent MagickGetImageRenderingIntent(MagickWand *wand) 5182% 5183% A description of each parameter follows: 5184% 5185% o wand: the magick wand. 5186% 5187*/ 5188WandExport RenderingIntent MagickGetImageRenderingIntent(MagickWand *wand) 5189{ 5190 assert(wand != (MagickWand *) NULL); 5191 assert(wand->signature == WandSignature); 5192 if (wand->debug != MagickFalse) 5193 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5194 if (wand->images == (Image *) NULL) 5195 { 5196 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 5197 "ContainsNoImages","`%s'",wand->name); 5198 return(UndefinedIntent); 5199 } 5200 return((RenderingIntent) wand->images->rendering_intent); 5201} 5202 5203/* 5204%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5205% % 5206% % 5207% % 5208% M a g i c k G e t I m a g e R e s o l u t i o n % 5209% % 5210% % 5211% % 5212%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5213% 5214% MagickGetImageResolution() gets the image X and Y resolution. 5215% 5216% The format of the MagickGetImageResolution method is: 5217% 5218% MagickBooleanType MagickGetImageResolution(MagickWand *wand,double *x, 5219% double *y) 5220% 5221% A description of each parameter follows: 5222% 5223% o wand: the magick wand. 5224% 5225% o x: the image x-resolution. 5226% 5227% o y: the image y-resolution. 5228% 5229*/ 5230WandExport MagickBooleanType MagickGetImageResolution(MagickWand *wand, 5231 double *x,double *y) 5232{ 5233 assert(wand != (MagickWand *) NULL); 5234 assert(wand->signature == WandSignature); 5235 if (wand->debug != MagickFalse) 5236 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5237 if (wand->images == (Image *) NULL) 5238 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5239 *x=wand->images->resolution.x; 5240 *y=wand->images->resolution.y; 5241 return(MagickTrue); 5242} 5243 5244/* 5245%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5246% % 5247% % 5248% % 5249% M a g i c k G e t I m a g e S c e n e % 5250% % 5251% % 5252% % 5253%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5254% 5255% MagickGetImageScene() gets the image scene. 5256% 5257% The format of the MagickGetImageScene method is: 5258% 5259% size_t MagickGetImageScene(MagickWand *wand) 5260% 5261% A description of each parameter follows: 5262% 5263% o wand: the magick wand. 5264% 5265*/ 5266WandExport size_t MagickGetImageScene(MagickWand *wand) 5267{ 5268 assert(wand != (MagickWand *) NULL); 5269 assert(wand->signature == WandSignature); 5270 if (wand->debug != MagickFalse) 5271 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5272 if (wand->images == (Image *) NULL) 5273 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5274 return(wand->images->scene); 5275} 5276 5277/* 5278%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5279% % 5280% % 5281% % 5282% M a g i c k G e t I m a g e S i g n a t u r e % 5283% % 5284% % 5285% % 5286%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5287% 5288% MagickGetImageSignature() generates an SHA-256 message digest for the image 5289% pixel stream. 5290% 5291% The format of the MagickGetImageSignature method is: 5292% 5293% const char MagickGetImageSignature(MagickWand *wand) 5294% 5295% A description of each parameter follows: 5296% 5297% o wand: the magick wand. 5298% 5299*/ 5300WandExport char *MagickGetImageSignature(MagickWand *wand) 5301{ 5302 const char 5303 *value; 5304 5305 MagickBooleanType 5306 status; 5307 5308 assert(wand != (MagickWand *) NULL); 5309 assert(wand->signature == WandSignature); 5310 if (wand->debug != MagickFalse) 5311 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5312 if (wand->images == (Image *) NULL) 5313 { 5314 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 5315 "ContainsNoImages","`%s'",wand->name); 5316 return((char *) NULL); 5317 } 5318 status=SignatureImage(wand->images,wand->exception); 5319 if (status == MagickFalse) 5320 return((char *) NULL); 5321 value=GetImageProperty(wand->images,"signature",wand->exception); 5322 if (value == (const char *) NULL) 5323 return((char *) NULL); 5324 return(AcquireString(value)); 5325} 5326 5327/* 5328%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5329% % 5330% % 5331% % 5332% M a g i c k G e t I m a g e T i c k s P e r S e c o n d % 5333% % 5334% % 5335% % 5336%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5337% 5338% MagickGetImageTicksPerSecond() gets the image ticks-per-second. 5339% 5340% The format of the MagickGetImageTicksPerSecond method is: 5341% 5342% size_t MagickGetImageTicksPerSecond(MagickWand *wand) 5343% 5344% A description of each parameter follows: 5345% 5346% o wand: the magick wand. 5347% 5348*/ 5349WandExport size_t MagickGetImageTicksPerSecond(MagickWand *wand) 5350{ 5351 assert(wand != (MagickWand *) NULL); 5352 assert(wand->signature == WandSignature); 5353 if (wand->debug != MagickFalse) 5354 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5355 if (wand->images == (Image *) NULL) 5356 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5357 return((size_t) wand->images->ticks_per_second); 5358} 5359 5360/* 5361%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5362% % 5363% % 5364% % 5365% M a g i c k G e t I m a g e T y p e % 5366% % 5367% % 5368% % 5369%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5370% 5371% MagickGetImageType() gets the potential image type: 5372% 5373% Bilevel Grayscale GrayscaleMatte 5374% Palette PaletteMatte TrueColor 5375% TrueColorMatte ColorSeparation ColorSeparationMatte 5376% 5377% To ensure the image type matches its potential, use MagickSetImageType(): 5378% 5379% (void) MagickSetImageType(wand,MagickGetImageType(wand)); 5380% 5381% The format of the MagickGetImageType method is: 5382% 5383% ImageType MagickGetImageType(MagickWand *wand) 5384% 5385% A description of each parameter follows: 5386% 5387% o wand: the magick wand. 5388% 5389*/ 5390WandExport ImageType MagickGetImageType(MagickWand *wand) 5391{ 5392 assert(wand != (MagickWand *) NULL); 5393 assert(wand->signature == WandSignature); 5394 if (wand->debug != MagickFalse) 5395 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5396 if (wand->images == (Image *) NULL) 5397 { 5398 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 5399 "ContainsNoImages","`%s'",wand->name); 5400 return(UndefinedType); 5401 } 5402 return(GetImageType(wand->images,wand->exception)); 5403} 5404 5405/* 5406%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5407% % 5408% % 5409% % 5410% M a g i c k G e t I m a g e U n i t s % 5411% % 5412% % 5413% % 5414%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5415% 5416% MagickGetImageUnits() gets the image units of resolution. 5417% 5418% The format of the MagickGetImageUnits method is: 5419% 5420% ResolutionType MagickGetImageUnits(MagickWand *wand) 5421% 5422% A description of each parameter follows: 5423% 5424% o wand: the magick wand. 5425% 5426*/ 5427WandExport ResolutionType MagickGetImageUnits(MagickWand *wand) 5428{ 5429 assert(wand != (MagickWand *) NULL); 5430 assert(wand->signature == WandSignature); 5431 if (wand->debug != MagickFalse) 5432 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5433 if (wand->images == (Image *) NULL) 5434 { 5435 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 5436 "ContainsNoImages","`%s'",wand->name); 5437 return(UndefinedResolution); 5438 } 5439 return(wand->images->units); 5440} 5441 5442/* 5443%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5444% % 5445% % 5446% % 5447% M a g i c k G e t I m a g e V i r t u a l P i x e l M e t h o d % 5448% % 5449% % 5450% % 5451%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5452% 5453% MagickGetImageVirtualPixelMethod() returns the virtual pixel method for the 5454% sepcified image. 5455% 5456% The format of the MagickGetImageVirtualPixelMethod method is: 5457% 5458% VirtualPixelMethod MagickGetImageVirtualPixelMethod(MagickWand *wand) 5459% 5460% A description of each parameter follows: 5461% 5462% o wand: the magick wand. 5463% 5464*/ 5465WandExport VirtualPixelMethod MagickGetImageVirtualPixelMethod(MagickWand *wand) 5466{ 5467 assert(wand != (MagickWand *) NULL); 5468 assert(wand->signature == WandSignature); 5469 if (wand->debug != MagickFalse) 5470 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5471 if (wand->images == (Image *) NULL) 5472 { 5473 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 5474 "ContainsNoImages","`%s'",wand->name); 5475 return(UndefinedVirtualPixelMethod); 5476 } 5477 return(GetImageVirtualPixelMethod(wand->images)); 5478} 5479 5480/* 5481%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5482% % 5483% % 5484% % 5485% M a g i c k G e t I m a g e W h i t e P o i n t % 5486% % 5487% % 5488% % 5489%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5490% 5491% MagickGetImageWhitePoint() returns the chromaticy white point. 5492% 5493% The format of the MagickGetImageWhitePoint method is: 5494% 5495% MagickBooleanType MagickGetImageWhitePoint(MagickWand *wand,double *x, 5496% double *y) 5497% 5498% A description of each parameter follows: 5499% 5500% o wand: the magick wand. 5501% 5502% o x: the chromaticity white x-point. 5503% 5504% o y: the chromaticity white y-point. 5505% 5506*/ 5507WandExport MagickBooleanType MagickGetImageWhitePoint(MagickWand *wand, 5508 double *x,double *y) 5509{ 5510 assert(wand != (MagickWand *) NULL); 5511 assert(wand->signature == WandSignature); 5512 if (wand->debug != MagickFalse) 5513 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5514 if (wand->images == (Image *) NULL) 5515 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5516 *x=wand->images->chromaticity.white_point.x; 5517 *y=wand->images->chromaticity.white_point.y; 5518 return(MagickTrue); 5519} 5520 5521/* 5522%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5523% % 5524% % 5525% % 5526% M a g i c k G e t I m a g e W i d t h % 5527% % 5528% % 5529% % 5530%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5531% 5532% MagickGetImageWidth() returns the image width. 5533% 5534% The format of the MagickGetImageWidth method is: 5535% 5536% size_t MagickGetImageWidth(MagickWand *wand) 5537% 5538% A description of each parameter follows: 5539% 5540% o wand: the magick wand. 5541% 5542*/ 5543WandExport size_t MagickGetImageWidth(MagickWand *wand) 5544{ 5545 assert(wand != (MagickWand *) NULL); 5546 assert(wand->signature == WandSignature); 5547 if (wand->debug != MagickFalse) 5548 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5549 if (wand->images == (Image *) NULL) 5550 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5551 return(wand->images->columns); 5552} 5553 5554/* 5555%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5556% % 5557% % 5558% % 5559% M a g i c k G e t N u m b e r I m a g e s % 5560% % 5561% % 5562% % 5563%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5564% 5565% MagickGetNumberImages() returns the number of images associated with a 5566% magick wand. 5567% 5568% The format of the MagickGetNumberImages method is: 5569% 5570% size_t MagickGetNumberImages(MagickWand *wand) 5571% 5572% A description of each parameter follows: 5573% 5574% o wand: the magick wand. 5575% 5576*/ 5577WandExport size_t MagickGetNumberImages(MagickWand *wand) 5578{ 5579 assert(wand != (MagickWand *) NULL); 5580 assert(wand->signature == WandSignature); 5581 if (wand->debug != MagickFalse) 5582 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5583 return(GetImageListLength(wand->images)); 5584} 5585 5586/* 5587%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5588% % 5589% % 5590% % 5591% M a g i c k I m a g e G e t T o t a l I n k D e n s i t y % 5592% % 5593% % 5594% % 5595%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5596% 5597% MagickGetImageTotalInkDensity() gets the image total ink density. 5598% 5599% The format of the MagickGetImageTotalInkDensity method is: 5600% 5601% double MagickGetImageTotalInkDensity(MagickWand *wand) 5602% 5603% A description of each parameter follows: 5604% 5605% o wand: the magick wand. 5606% 5607*/ 5608WandExport double MagickGetImageTotalInkDensity(MagickWand *wand) 5609{ 5610 assert(wand != (MagickWand *) NULL); 5611 assert(wand->signature == WandSignature); 5612 if (wand->debug != MagickFalse) 5613 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5614 if (wand->images == (Image *) NULL) 5615 { 5616 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 5617 "ContainsNoImages","`%s'",wand->name); 5618 return(0.0); 5619 } 5620 return(GetImageTotalInkDensity(wand->images,wand->exception)); 5621} 5622 5623/* 5624%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5625% % 5626% % 5627% % 5628% M a g i c k H a l d C l u t I m a g e % 5629% % 5630% % 5631% % 5632%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5633% 5634% MagickHaldClutImage() replaces colors in the image from a Hald color lookup 5635% table. A Hald color lookup table is a 3-dimensional color cube mapped to 2 5636% dimensions. Create it with the HALD coder. You can apply any color 5637% transformation to the Hald image and then use this method to apply the 5638% transform to the image. 5639% 5640% The format of the MagickHaldClutImage method is: 5641% 5642% MagickBooleanType MagickHaldClutImage(MagickWand *wand, 5643% const MagickWand *hald_wand) 5644% 5645% A description of each parameter follows: 5646% 5647% o wand: the magick wand. 5648% 5649% o hald_image: the hald CLUT image. 5650% 5651*/ 5652WandExport MagickBooleanType MagickHaldClutImage(MagickWand *wand, 5653 const MagickWand *hald_wand) 5654{ 5655 MagickBooleanType 5656 status; 5657 5658 assert(wand != (MagickWand *) NULL); 5659 assert(wand->signature == WandSignature); 5660 if (wand->debug != MagickFalse) 5661 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5662 if ((wand->images == (Image *) NULL) || (hald_wand->images == (Image *) NULL)) 5663 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5664 status=HaldClutImage(wand->images,hald_wand->images,wand->exception); 5665 return(status); 5666} 5667 5668/* 5669%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5670% % 5671% % 5672% % 5673% M a g i c k H a s N e x t I m a g e % 5674% % 5675% % 5676% % 5677%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5678% 5679% MagickHasNextImage() returns MagickTrue if the wand has more images when 5680% traversing the list in the forward direction 5681% 5682% The format of the MagickHasNextImage method is: 5683% 5684% MagickBooleanType MagickHasNextImage(MagickWand *wand) 5685% 5686% A description of each parameter follows: 5687% 5688% o wand: the magick wand. 5689% 5690*/ 5691WandExport MagickBooleanType MagickHasNextImage(MagickWand *wand) 5692{ 5693 assert(wand != (MagickWand *) NULL); 5694 assert(wand->signature == WandSignature); 5695 if (wand->debug != MagickFalse) 5696 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5697 if (wand->images == (Image *) NULL) 5698 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5699 if (GetNextImageInList(wand->images) == (Image *) NULL) 5700 return(MagickFalse); 5701 return(MagickTrue); 5702} 5703 5704/* 5705%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5706% % 5707% % 5708% % 5709% M a g i c k H a s P r e v i o u s I m a g e % 5710% % 5711% % 5712% % 5713%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5714% 5715% MagickHasPreviousImage() returns MagickTrue if the wand has more images when 5716% traversing the list in the reverse direction 5717% 5718% The format of the MagickHasPreviousImage method is: 5719% 5720% MagickBooleanType MagickHasPreviousImage(MagickWand *wand) 5721% 5722% A description of each parameter follows: 5723% 5724% o wand: the magick wand. 5725% 5726*/ 5727WandExport MagickBooleanType MagickHasPreviousImage(MagickWand *wand) 5728{ 5729 assert(wand != (MagickWand *) NULL); 5730 assert(wand->signature == WandSignature); 5731 if (wand->debug != MagickFalse) 5732 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5733 if (wand->images == (Image *) NULL) 5734 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5735 if (GetPreviousImageInList(wand->images) == (Image *) NULL) 5736 return(MagickFalse); 5737 return(MagickTrue); 5738} 5739 5740/* 5741%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5742% % 5743% % 5744% % 5745% M a g i c k I d e n t i f y I m a g e % 5746% % 5747% % 5748% % 5749%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5750% 5751% MagickIdentifyImage() identifies an image by printing its attributes to the 5752% file. Attributes include the image width, height, size, and others. 5753% 5754% The format of the MagickIdentifyImage method is: 5755% 5756% const char *MagickIdentifyImage(MagickWand *wand) 5757% 5758% A description of each parameter follows: 5759% 5760% o wand: the magick wand. 5761% 5762*/ 5763WandExport char *MagickIdentifyImage(MagickWand *wand) 5764{ 5765 char 5766 *description, 5767 filename[MaxTextExtent]; 5768 5769 FILE 5770 *file; 5771 5772 int 5773 unique_file; 5774 5775 assert(wand != (MagickWand *) NULL); 5776 assert(wand->signature == WandSignature); 5777 if (wand->debug != MagickFalse) 5778 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5779 if (wand->images == (Image *) NULL) 5780 { 5781 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 5782 "ContainsNoImages","`%s'",wand->name); 5783 return((char *) NULL); 5784 } 5785 description=(char *) NULL; 5786 unique_file=AcquireUniqueFileResource(filename); 5787 file=(FILE *) NULL; 5788 if (unique_file != -1) 5789 file=fdopen(unique_file,"wb"); 5790 if ((unique_file == -1) || (file == (FILE *) NULL)) 5791 { 5792 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 5793 "UnableToCreateTemporaryFile","`%s'",wand->name); 5794 return((char *) NULL); 5795 } 5796 (void) IdentifyImage(wand->images,file,MagickTrue,wand->exception); 5797 (void) fclose(file); 5798 description=FileToString(filename,~0,wand->exception); 5799 (void) RelinquishUniqueFileResource(filename); 5800 return(description); 5801} 5802 5803/* 5804%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5805% % 5806% % 5807% % 5808% M a g i c k I m p l o d e I m a g e % 5809% % 5810% % 5811% % 5812%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5813% 5814% MagickImplodeImage() creates a new image that is a copy of an existing 5815% one with the image pixels "implode" by the specified percentage. It 5816% allocates the memory necessary for the new Image structure and returns a 5817% pointer to the new image. 5818% 5819% The format of the MagickImplodeImage method is: 5820% 5821% MagickBooleanType MagickImplodeImage(MagickWand *wand, 5822% const double radius,const PixelInterpolateMethod method) 5823% 5824% A description of each parameter follows: 5825% 5826% o wand: the magick wand. 5827% 5828% o amount: Define the extent of the implosion. 5829% 5830% o method: the pixel interpolation method. 5831% 5832*/ 5833WandExport MagickBooleanType MagickImplodeImage(MagickWand *wand, 5834 const double amount,const PixelInterpolateMethod method) 5835{ 5836 Image 5837 *implode_image; 5838 5839 assert(wand != (MagickWand *) NULL); 5840 assert(wand->signature == WandSignature); 5841 if (wand->debug != MagickFalse) 5842 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5843 if (wand->images == (Image *) NULL) 5844 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5845 implode_image=ImplodeImage(wand->images,amount,method,wand->exception); 5846 if (implode_image == (Image *) NULL) 5847 return(MagickFalse); 5848 ReplaceImageInList(&wand->images,implode_image); 5849 return(MagickTrue); 5850} 5851 5852/* 5853%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5854% % 5855% % 5856% % 5857% M a g i c k I m p o r t I m a g e P i x e l s % 5858% % 5859% % 5860% % 5861%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5862% 5863% MagickImportImagePixels() accepts pixel datand stores it in the image at the 5864% location you specify. The method returns MagickFalse on success otherwise 5865% MagickTrue if an error is encountered. The pixel data can be either char, 5866% short int, int, ssize_t, float, or double in the order specified by map. 5867% 5868% Suppose your want to upload the first scanline of a 640x480 image from 5869% character data in red-green-blue order: 5870% 5871% MagickImportImagePixels(wand,0,0,640,1,"RGB",CharPixel,pixels); 5872% 5873% The format of the MagickImportImagePixels method is: 5874% 5875% MagickBooleanType MagickImportImagePixels(MagickWand *wand, 5876% const ssize_t x,const ssize_t y,const size_t columns, 5877% const size_t rows,const char *map,const StorageType storage, 5878% const void *pixels) 5879% 5880% A description of each parameter follows: 5881% 5882% o wand: the magick wand. 5883% 5884% o x, y, columns, rows: These values define the perimeter of a region 5885% of pixels you want to define. 5886% 5887% o map: This string reflects the expected ordering of the pixel array. 5888% It can be any combination or order of R = red, G = green, B = blue, 5889% A = alpha (0 is transparent), O = alpha (0 is opaque), C = cyan, 5890% Y = yellow, M = magenta, K = black, I = intensity (for grayscale), 5891% P = pad. 5892% 5893% o storage: Define the data type of the pixels. Float and double types are 5894% expected to be normalized [0..1] otherwise [0..QuantumRange]. Choose from 5895% these types: CharPixel, ShortPixel, IntegerPixel, LongPixel, FloatPixel, 5896% or DoublePixel. 5897% 5898% o pixels: This array of values contain the pixel components as defined by 5899% map and type. You must preallocate this array where the expected 5900% length varies depending on the values of width, height, map, and type. 5901% 5902*/ 5903WandExport MagickBooleanType MagickImportImagePixels(MagickWand *wand, 5904 const ssize_t x,const ssize_t y,const size_t columns,const size_t rows, 5905 const char *map,const StorageType storage,const void *pixels) 5906{ 5907 MagickBooleanType 5908 status; 5909 5910 assert(wand != (MagickWand *) NULL); 5911 assert(wand->signature == WandSignature); 5912 if (wand->debug != MagickFalse) 5913 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5914 if (wand->images == (Image *) NULL) 5915 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5916 status=ImportImagePixels(wand->images,x,y,columns,rows,map,storage,pixels, 5917 wand->exception); 5918 return(status); 5919} 5920 5921/* 5922%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5923% % 5924% % 5925% % 5926% M a g i c k I n v e r s e F o u r i e r T r a n s f o r m I m a g e % 5927% % 5928% % 5929% % 5930%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5931% 5932% MagickInverseFourierTransformImage() implements the inverse discrete 5933% Fourier transform (DFT) of the image either as a magnitude / phase or real / 5934% imaginary image pair. 5935% 5936% The format of the MagickInverseFourierTransformImage method is: 5937% 5938% MagickBooleanType MagickInverseFourierTransformImage( 5939% MagickWand *magnitude_wand,MagickWand *phase_wand, 5940% const MagickBooleanType magnitude) 5941% 5942% A description of each parameter follows: 5943% 5944% o magnitude_wand: the magnitude or real wand. 5945% 5946% o phase_wand: the phase or imaginary wand. 5947% 5948% o magnitude: if true, return as magnitude / phase pair otherwise a real / 5949% imaginary image pair. 5950% 5951*/ 5952WandExport MagickBooleanType MagickInverseFourierTransformImage( 5953 MagickWand *magnitude_wand,MagickWand *phase_wand, 5954 const MagickBooleanType magnitude) 5955{ 5956 Image 5957 *inverse_image; 5958 5959 MagickWand 5960 *wand; 5961 5962 assert(magnitude_wand != (MagickWand *) NULL); 5963 assert(magnitude_wand->signature == WandSignature); 5964 if (magnitude_wand->debug != MagickFalse) 5965 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s", 5966 magnitude_wand->name); 5967 wand=magnitude_wand; 5968 if (magnitude_wand->images == (Image *) NULL) 5969 ThrowWandException(WandError,"ContainsNoImages", 5970 magnitude_wand->name); 5971 assert(phase_wand != (MagickWand *) NULL); 5972 assert(phase_wand->signature == WandSignature); 5973 inverse_image=InverseFourierTransformImage(magnitude_wand->images, 5974 phase_wand->images,magnitude,wand->exception); 5975 if (inverse_image == (Image *) NULL) 5976 return(MagickFalse); 5977 ReplaceImageInList(&wand->images,inverse_image); 5978 return(MagickTrue); 5979} 5980 5981/* 5982%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5983% % 5984% % 5985% % 5986% M a g i c k L a b e l I m a g e % 5987% % 5988% % 5989% % 5990%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5991% 5992% MagickLabelImage() adds a label to your image. 5993% 5994% The format of the MagickLabelImage method is: 5995% 5996% MagickBooleanType MagickLabelImage(MagickWand *wand,const char *label) 5997% 5998% A description of each parameter follows: 5999% 6000% o wand: the magick wand. 6001% 6002% o label: the image label. 6003% 6004*/ 6005WandExport MagickBooleanType MagickLabelImage(MagickWand *wand, 6006 const char *label) 6007{ 6008 MagickBooleanType 6009 status; 6010 6011 assert(wand != (MagickWand *) NULL); 6012 assert(wand->signature == WandSignature); 6013 if (wand->debug != MagickFalse) 6014 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6015 if (wand->images == (Image *) NULL) 6016 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6017 status=SetImageProperty(wand->images,"label",label,wand->exception); 6018 return(status); 6019} 6020 6021/* 6022%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6023% % 6024% % 6025% % 6026% M a g i c k L e v e l I m a g e % 6027% % 6028% % 6029% % 6030%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6031% 6032% MagickLevelImage() adjusts the levels of an image by scaling the colors 6033% falling between specified white and black points to the full available 6034% quantum range. The parameters provided represent the black, mid, and white 6035% points. The black point specifies the darkest color in the image. Colors 6036% darker than the black point are set to zero. Mid point specifies a gamma 6037% correction to apply to the image. White point specifies the lightest color 6038% in the image. Colors brighter than the white point are set to the maximum 6039% quantum value. 6040% 6041% The format of the MagickLevelImage method is: 6042% 6043% MagickBooleanType MagickLevelImage(MagickWand *wand, 6044% const double black_point,const double gamma,const double white_point) 6045% MagickBooleanType MagickLevelImage(MagickWand *wand, 6046% const ChannelType channel,const double black_point,const double gamma, 6047% const double white_point) 6048% 6049% A description of each parameter follows: 6050% 6051% o wand: the magick wand. 6052% 6053% o channel: Identify which channel to level: RedPixelChannel, 6054% GreenPixelChannel, etc. 6055% 6056% o black_point: the black point. 6057% 6058% o gamma: the gamma. 6059% 6060% o white_point: the white point. 6061% 6062*/ 6063WandExport MagickBooleanType MagickLevelImage(MagickWand *wand, 6064 const double black_point,const double gamma,const double white_point) 6065{ 6066 MagickBooleanType 6067 status; 6068 6069 assert(wand != (MagickWand *) NULL); 6070 assert(wand->signature == WandSignature); 6071 if (wand->debug != MagickFalse) 6072 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6073 if (wand->images == (Image *) NULL) 6074 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6075 status=LevelImage(wand->images,black_point,white_point,gamma, 6076 wand->exception); 6077 return(status); 6078} 6079 6080/* 6081%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6082% % 6083% % 6084% % 6085% M a g i c k L i n e a r S t r e t c h I m a g e % 6086% % 6087% % 6088% % 6089%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6090% 6091% MagickLinearStretchImage() stretches with saturation the image intensity. 6092% 6093% You can also reduce the influence of a particular channel with a gamma 6094% value of 0. 6095% 6096% The format of the MagickLinearStretchImage method is: 6097% 6098% MagickBooleanType MagickLinearStretchImage(MagickWand *wand, 6099% const double black_point,const double white_point) 6100% 6101% A description of each parameter follows: 6102% 6103% o wand: the magick wand. 6104% 6105% o black_point: the black point. 6106% 6107% o white_point: the white point. 6108% 6109*/ 6110WandExport MagickBooleanType MagickLinearStretchImage(MagickWand *wand, 6111 const double black_point,const double white_point) 6112{ 6113 MagickBooleanType 6114 status; 6115 6116 assert(wand != (MagickWand *) NULL); 6117 assert(wand->signature == WandSignature); 6118 if (wand->debug != MagickFalse) 6119 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6120 if (wand->images == (Image *) NULL) 6121 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6122 status=LinearStretchImage(wand->images,black_point,white_point, 6123 wand->exception); 6124 return(status); 6125} 6126 6127/* 6128%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6129% % 6130% % 6131% % 6132% M a g i c k L i q u i d R e s c a l e I m a g e % 6133% % 6134% % 6135% % 6136%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6137% 6138% MagickLiquidRescaleImage() rescales image with seam carving. 6139% 6140% MagickBooleanType MagickLiquidRescaleImage(MagickWand *wand, 6141% const size_t columns,const size_t rows, 6142% const double delta_x,const double rigidity) 6143% 6144% A description of each parameter follows: 6145% 6146% o wand: the magick wand. 6147% 6148% o columns: the number of columns in the scaled image. 6149% 6150% o rows: the number of rows in the scaled image. 6151% 6152% o delta_x: maximum seam transversal step (0 means straight seams). 6153% 6154% o rigidity: introduce a bias for non-straight seams (typically 0). 6155% 6156*/ 6157WandExport MagickBooleanType MagickLiquidRescaleImage(MagickWand *wand, 6158 const size_t columns,const size_t rows,const double delta_x, 6159 const double rigidity) 6160{ 6161 Image 6162 *rescale_image; 6163 6164 assert(wand != (MagickWand *) NULL); 6165 assert(wand->signature == WandSignature); 6166 if (wand->debug != MagickFalse) 6167 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6168 if (wand->images == (Image *) NULL) 6169 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6170 rescale_image=LiquidRescaleImage(wand->images,columns,rows,delta_x, 6171 rigidity,wand->exception); 6172 if (rescale_image == (Image *) NULL) 6173 return(MagickFalse); 6174 ReplaceImageInList(&wand->images,rescale_image); 6175 return(MagickTrue); 6176} 6177 6178/* 6179%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6180% % 6181% % 6182% % 6183% M a g i c k M a g n i f y I m a g e % 6184% % 6185% % 6186% % 6187%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6188% 6189% MagickMagnifyImage() is a convenience method that scales an image 6190% proportionally to twice its original size. 6191% 6192% The format of the MagickMagnifyImage method is: 6193% 6194% MagickBooleanType MagickMagnifyImage(MagickWand *wand) 6195% 6196% A description of each parameter follows: 6197% 6198% o wand: the magick wand. 6199% 6200*/ 6201WandExport MagickBooleanType MagickMagnifyImage(MagickWand *wand) 6202{ 6203 Image 6204 *magnify_image; 6205 6206 assert(wand != (MagickWand *) NULL); 6207 assert(wand->signature == WandSignature); 6208 if (wand->debug != MagickFalse) 6209 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6210 if (wand->images == (Image *) NULL) 6211 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6212 magnify_image=MagnifyImage(wand->images,wand->exception); 6213 if (magnify_image == (Image *) NULL) 6214 return(MagickFalse); 6215 ReplaceImageInList(&wand->images,magnify_image); 6216 return(MagickTrue); 6217} 6218 6219/* 6220%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6221% % 6222% % 6223% % 6224% M a g i c k M e r g e I m a g e L a y e r s % 6225% % 6226% % 6227% % 6228%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6229% 6230% MagickMergeImageLayers() composes all the image layers from the current 6231% given image onward to produce a single image of the merged layers. 6232% 6233% The inital canvas's size depends on the given ImageLayerMethod, and is 6234% initialized using the first images background color. The images 6235% are then compositied onto that image in sequence using the given 6236% composition that has been assigned to each individual image. 6237% 6238% The format of the MagickMergeImageLayers method is: 6239% 6240% MagickWand *MagickMergeImageLayers(MagickWand *wand, 6241% const ImageLayerMethod method) 6242% 6243% A description of each parameter follows: 6244% 6245% o wand: the magick wand. 6246% 6247% o method: the method of selecting the size of the initial canvas. 6248% 6249% MergeLayer: Merge all layers onto a canvas just large enough 6250% to hold all the actual images. The virtual canvas of the 6251% first image is preserved but otherwise ignored. 6252% 6253% FlattenLayer: Use the virtual canvas size of first image. 6254% Images which fall outside this canvas is clipped. 6255% This can be used to 'fill out' a given virtual canvas. 6256% 6257% MosaicLayer: Start with the virtual canvas of the first image, 6258% enlarging left and right edges to contain all images. 6259% Images with negative offsets will be clipped. 6260% 6261*/ 6262WandExport MagickWand *MagickMergeImageLayers(MagickWand *wand, 6263 const ImageLayerMethod method) 6264{ 6265 Image 6266 *mosaic_image; 6267 6268 assert(wand != (MagickWand *) NULL); 6269 assert(wand->signature == WandSignature); 6270 if (wand->debug != MagickFalse) 6271 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6272 if (wand->images == (Image *) NULL) 6273 return((MagickWand *) NULL); 6274 mosaic_image=MergeImageLayers(wand->images,method,wand->exception); 6275 if (mosaic_image == (Image *) NULL) 6276 return((MagickWand *) NULL); 6277 return(CloneMagickWandFromImages(wand,mosaic_image)); 6278} 6279 6280/* 6281%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6282% % 6283% % 6284% % 6285% M a g i c k M i n i f y I m a g e % 6286% % 6287% % 6288% % 6289%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6290% 6291% MagickMinifyImage() is a convenience method that scales an image 6292% proportionally to one-half its original size 6293% 6294% The format of the MagickMinifyImage method is: 6295% 6296% MagickBooleanType MagickMinifyImage(MagickWand *wand) 6297% 6298% A description of each parameter follows: 6299% 6300% o wand: the magick wand. 6301% 6302*/ 6303WandExport MagickBooleanType MagickMinifyImage(MagickWand *wand) 6304{ 6305 Image 6306 *minify_image; 6307 6308 assert(wand != (MagickWand *) NULL); 6309 assert(wand->signature == WandSignature); 6310 if (wand->debug != MagickFalse) 6311 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6312 if (wand->images == (Image *) NULL) 6313 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6314 minify_image=MinifyImage(wand->images,wand->exception); 6315 if (minify_image == (Image *) NULL) 6316 return(MagickFalse); 6317 ReplaceImageInList(&wand->images,minify_image); 6318 return(MagickTrue); 6319} 6320 6321/* 6322%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6323% % 6324% % 6325% % 6326% M a g i c k M o d u l a t e I m a g e % 6327% % 6328% % 6329% % 6330%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6331% 6332% MagickModulateImage() lets you control the brightness, saturation, and hue 6333% of an image. Hue is the percentage of absolute rotation from the current 6334% position. For example 50 results in a counter-clockwise rotation of 90 6335% degrees, 150 results in a clockwise rotation of 90 degrees, with 0 and 200 6336% both resulting in a rotation of 180 degrees. 6337% 6338% To increase the color brightness by 20% and decrease the color saturation by 6339% 10% and leave the hue unchanged, use: 120,90,100. 6340% 6341% The format of the MagickModulateImage method is: 6342% 6343% MagickBooleanType MagickModulateImage(MagickWand *wand, 6344% const double brightness,const double saturation,const double hue) 6345% 6346% A description of each parameter follows: 6347% 6348% o wand: the magick wand. 6349% 6350% o brightness: the percent change in brighness. 6351% 6352% o saturation: the percent change in saturation. 6353% 6354% o hue: the percent change in hue. 6355% 6356*/ 6357WandExport MagickBooleanType MagickModulateImage(MagickWand *wand, 6358 const double brightness,const double saturation,const double hue) 6359{ 6360 char 6361 modulate[MaxTextExtent]; 6362 6363 MagickBooleanType 6364 status; 6365 6366 assert(wand != (MagickWand *) NULL); 6367 assert(wand->signature == WandSignature); 6368 if (wand->debug != MagickFalse) 6369 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6370 if (wand->images == (Image *) NULL) 6371 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6372 (void) FormatLocaleString(modulate,MaxTextExtent,"%g,%g,%g", 6373 brightness,saturation,hue); 6374 status=ModulateImage(wand->images,modulate,wand->exception); 6375 return(status); 6376} 6377 6378/* 6379%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6380% % 6381% % 6382% % 6383% M a g i c k M o n t a g e I m a g e % 6384% % 6385% % 6386% % 6387%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6388% 6389% MagickMontageImage() creates a composite image by combining several 6390% separate images. The images are tiled on the composite image with the name 6391% of the image optionally appearing just below the individual tile. 6392% 6393% The format of the MagickMontageImage method is: 6394% 6395% MagickWand *MagickMontageImage(MagickWand *wand, 6396% const DrawingWand drawing_wand,const char *tile_geometry, 6397% const char *thumbnail_geometry,const MontageMode mode, 6398% const char *frame) 6399% 6400% A description of each parameter follows: 6401% 6402% o wand: the magick wand. 6403% 6404% o drawing_wand: the drawing wand. The font name, size, and color are 6405% obtained from this wand. 6406% 6407% o tile_geometry: the number of tiles per row and page (e.g. 6x4+0+0). 6408% 6409% o thumbnail_geometry: Preferred image size and border size of each 6410% thumbnail (e.g. 120x120+4+3>). 6411% 6412% o mode: Thumbnail framing mode: Frame, Unframe, or Concatenate. 6413% 6414% o frame: Surround the image with an ornamental border (e.g. 15x15+3+3). 6415% The frame color is that of the thumbnail's matte color. 6416% 6417*/ 6418WandExport MagickWand *MagickMontageImage(MagickWand *wand, 6419 const DrawingWand *drawing_wand,const char *tile_geometry, 6420 const char *thumbnail_geometry,const MontageMode mode,const char *frame) 6421{ 6422 char 6423 *font; 6424 6425 Image 6426 *montage_image; 6427 6428 MontageInfo 6429 *montage_info; 6430 6431 PixelWand 6432 *pixel_wand; 6433 6434 assert(wand != (MagickWand *) NULL); 6435 assert(wand->signature == WandSignature); 6436 if (wand->debug != MagickFalse) 6437 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6438 if (wand->images == (Image *) NULL) 6439 return((MagickWand *) NULL); 6440 montage_info=CloneMontageInfo(wand->image_info,(MontageInfo *) NULL); 6441 switch (mode) 6442 { 6443 case FrameMode: 6444 { 6445 (void) CloneString(&montage_info->frame,"15x15+3+3"); 6446 montage_info->shadow=MagickTrue; 6447 break; 6448 } 6449 case UnframeMode: 6450 { 6451 montage_info->frame=(char *) NULL; 6452 montage_info->shadow=MagickFalse; 6453 montage_info->border_width=0; 6454 break; 6455 } 6456 case ConcatenateMode: 6457 { 6458 montage_info->frame=(char *) NULL; 6459 montage_info->shadow=MagickFalse; 6460 (void) CloneString(&montage_info->geometry,"+0+0"); 6461 montage_info->border_width=0; 6462 break; 6463 } 6464 default: 6465 break; 6466 } 6467 font=DrawGetFont(drawing_wand); 6468 if (font != (char *) NULL) 6469 (void) CloneString(&montage_info->font,font); 6470 if (frame != (char *) NULL) 6471 (void) CloneString(&montage_info->frame,frame); 6472 montage_info->pointsize=DrawGetFontSize(drawing_wand); 6473 pixel_wand=NewPixelWand(); 6474 DrawGetFillColor(drawing_wand,pixel_wand); 6475 PixelGetQuantumPacket(pixel_wand,&montage_info->fill); 6476 DrawGetStrokeColor(drawing_wand,pixel_wand); 6477 PixelGetQuantumPacket(pixel_wand,&montage_info->stroke); 6478 pixel_wand=DestroyPixelWand(pixel_wand); 6479 if (thumbnail_geometry != (char *) NULL) 6480 (void) CloneString(&montage_info->geometry,thumbnail_geometry); 6481 if (tile_geometry != (char *) NULL) 6482 (void) CloneString(&montage_info->tile,tile_geometry); 6483 montage_image=MontageImageList(wand->image_info,montage_info,wand->images, 6484 wand->exception); 6485 montage_info=DestroyMontageInfo(montage_info); 6486 if (montage_image == (Image *) NULL) 6487 return((MagickWand *) NULL); 6488 return(CloneMagickWandFromImages(wand,montage_image)); 6489} 6490 6491/* 6492%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6493% % 6494% % 6495% % 6496% M a g i c k M o r p h I m a g e s % 6497% % 6498% % 6499% % 6500%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6501% 6502% MagickMorphImages() method morphs a set of images. Both the image pixels 6503% and size are linearly interpolated to give the appearance of a 6504% meta-morphosis from one image to the next. 6505% 6506% The format of the MagickMorphImages method is: 6507% 6508% MagickWand *MagickMorphImages(MagickWand *wand, 6509% const size_t number_frames) 6510% 6511% A description of each parameter follows: 6512% 6513% o wand: the magick wand. 6514% 6515% o number_frames: the number of in-between images to generate. 6516% 6517*/ 6518WandExport MagickWand *MagickMorphImages(MagickWand *wand, 6519 const size_t number_frames) 6520{ 6521 Image 6522 *morph_image; 6523 6524 assert(wand != (MagickWand *) NULL); 6525 assert(wand->signature == WandSignature); 6526 if (wand->debug != MagickFalse) 6527 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6528 if (wand->images == (Image *) NULL) 6529 return((MagickWand *) NULL); 6530 morph_image=MorphImages(wand->images,number_frames,wand->exception); 6531 if (morph_image == (Image *) NULL) 6532 return((MagickWand *) NULL); 6533 return(CloneMagickWandFromImages(wand,morph_image)); 6534} 6535 6536/* 6537%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6538% % 6539% % 6540% % 6541% M a g i c k M o r p h o l o g y I m a g e % 6542% % 6543% % 6544% % 6545%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6546% 6547% MagickMorphologyImage() applies a user supplied kernel to the image 6548% according to the given mophology method. 6549% 6550% The format of the MagickMorphologyImage method is: 6551% 6552% MagickBooleanType MagickMorphologyImage(MagickWand *wand, 6553% MorphologyMethod method,const ssize_t iterations,KernelInfo *kernel) 6554% 6555% A description of each parameter follows: 6556% 6557% o wand: the magick wand. 6558% 6559% o method: the morphology method to be applied. 6560% 6561% o iterations: apply the operation this many times (or no change). 6562% A value of -1 means loop until no change found. How this is applied 6563% may depend on the morphology method. Typically this is a value of 1. 6564% 6565% o kernel: An array of doubles representing the morphology kernel. 6566% 6567*/ 6568WandExport MagickBooleanType MagickMorphologyImage(MagickWand *wand, 6569 MorphologyMethod method,const ssize_t iterations,KernelInfo *kernel) 6570{ 6571 Image 6572 *morphology_image; 6573 6574 assert(wand != (MagickWand *) NULL); 6575 assert(wand->signature == WandSignature); 6576 if (wand->debug != MagickFalse) 6577 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6578 if (kernel == (const KernelInfo *) NULL) 6579 return(MagickFalse); 6580 if (wand->images == (Image *) NULL) 6581 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6582 morphology_image=MorphologyImage(wand->images,method,iterations,kernel, 6583 wand->exception); 6584 if (morphology_image == (Image *) NULL) 6585 return(MagickFalse); 6586 ReplaceImageInList(&wand->images,morphology_image); 6587 return(MagickTrue); 6588} 6589 6590/* 6591%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6592% % 6593% % 6594% % 6595% M a g i c k M o t i o n B l u r I m a g e % 6596% % 6597% % 6598% % 6599%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6600% 6601% MagickMotionBlurImage() simulates motion blur. We convolve the image with a 6602% Gaussian operator of the given radius and standard deviation (sigma). 6603% For reasonable results, radius should be larger than sigma. Use a 6604% radius of 0 and MotionBlurImage() selects a suitable radius for you. 6605% Angle gives the angle of the blurring motion. 6606% 6607% The format of the MagickMotionBlurImage method is: 6608% 6609% MagickBooleanType MagickMotionBlurImage(MagickWand *wand, 6610% const double radius,const double sigma,const double angle, 6611% const double bias) 6612% 6613% A description of each parameter follows: 6614% 6615% o wand: the magick wand. 6616% 6617% o radius: the radius of the Gaussian, in pixels, not counting 6618% the center pixel. 6619% 6620% o sigma: the standard deviation of the Gaussian, in pixels. 6621% 6622% o angle: Apply the effect along this angle. 6623% 6624*/ 6625WandExport MagickBooleanType MagickMotionBlurImage(MagickWand *wand, 6626 const double radius,const double sigma,const double angle,const double bias) 6627{ 6628 Image 6629 *blur_image; 6630 6631 assert(wand != (MagickWand *) NULL); 6632 assert(wand->signature == WandSignature); 6633 if (wand->debug != MagickFalse) 6634 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6635 if (wand->images == (Image *) NULL) 6636 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6637 blur_image=MotionBlurImage(wand->images,radius,sigma,angle,bias, 6638 wand->exception); 6639 if (blur_image == (Image *) NULL) 6640 return(MagickFalse); 6641 ReplaceImageInList(&wand->images,blur_image); 6642 return(MagickTrue); 6643} 6644 6645/* 6646%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6647% % 6648% % 6649% % 6650% M a g i c k N e g a t e I m a g e % 6651% % 6652% % 6653% % 6654%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6655% 6656% MagickNegateImage() negates the colors in the reference image. The 6657% Grayscale option means that only grayscale values within the image are 6658% negated. 6659% 6660% You can also reduce the influence of a particular channel with a gamma 6661% value of 0. 6662% 6663% The format of the MagickNegateImage method is: 6664% 6665% MagickBooleanType MagickNegateImage(MagickWand *wand, 6666% const MagickBooleanType gray) 6667% 6668% A description of each parameter follows: 6669% 6670% o wand: the magick wand. 6671% 6672% o gray: If MagickTrue, only negate grayscale pixels within the image. 6673% 6674*/ 6675WandExport MagickBooleanType MagickNegateImage(MagickWand *wand, 6676 const MagickBooleanType gray) 6677{ 6678 MagickBooleanType 6679 status; 6680 6681 assert(wand != (MagickWand *) NULL); 6682 assert(wand->signature == WandSignature); 6683 if (wand->debug != MagickFalse) 6684 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6685 if (wand->images == (Image *) NULL) 6686 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6687 status=NegateImage(wand->images,gray,wand->exception); 6688 return(status); 6689} 6690 6691/* 6692%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6693% % 6694% % 6695% % 6696% M a g i c k N e w I m a g e % 6697% % 6698% % 6699% % 6700%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6701% 6702% MagickNewImage() adds a blank image canvas of the specified size and 6703% background color to the wand. 6704% 6705% The format of the MagickNewImage method is: 6706% 6707% MagickBooleanType MagickNewImage(MagickWand *wand, 6708% const size_t columns,const size_t rows, 6709% const PixelWand *background) 6710% 6711% A description of each parameter follows: 6712% 6713% o wand: the magick wand. 6714% 6715% o width: the image width. 6716% 6717% o height: the image height. 6718% 6719% o background: the image color. 6720% 6721*/ 6722WandExport MagickBooleanType MagickNewImage(MagickWand *wand,const size_t width, 6723 const size_t height,const PixelWand *background) 6724{ 6725 Image 6726 *images; 6727 6728 PixelInfo 6729 pixel; 6730 6731 assert(wand != (MagickWand *) NULL); 6732 assert(wand->signature == WandSignature); 6733 if (wand->debug != MagickFalse) 6734 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6735 PixelGetMagickColor(background,&pixel); 6736 images=NewMagickImage(wand->image_info,width,height,&pixel,wand->exception); 6737 if (images == (Image *) NULL) 6738 return(MagickFalse); 6739 return(InsertImageInWand(wand,images)); 6740} 6741 6742/* 6743%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6744% % 6745% % 6746% % 6747% M a g i c k N e x t I m a g e % 6748% % 6749% % 6750% % 6751%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6752% 6753% MagickNextImage() associates the next image in the image list with a magick 6754% wand. It returns true if the it succeeds, meaning the current image is the 6755% next image to be iterated over. 6756% 6757% The format of the MagickNextImage method is: 6758% 6759% MagickBooleanType MagickNextImage(MagickWand *wand) 6760% 6761% A description of each parameter follows: 6762% 6763% o wand: the magick wand. 6764% 6765*/ 6766WandExport MagickBooleanType MagickNextImage(MagickWand *wand) 6767{ 6768 assert(wand != (MagickWand *) NULL); 6769 assert(wand->signature == WandSignature); 6770 if (wand->debug != MagickFalse) 6771 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6772 if (wand->images == (Image *) NULL) 6773 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6774 /* If current image is 'pending' just return true. */ 6775 if (wand->image_pending != MagickFalse) 6776 { 6777 wand->image_pending=MagickFalse; 6778 return(MagickTrue); 6779 } 6780 /* If there is no next image, (Iterator is finished) */ 6781 if (GetNextImageInList(wand->images) == (Image *) NULL) 6782 return(MagickFalse); 6783 /* just move to next image - current image is not 'pending' */ 6784 wand->images=GetNextImageInList(wand->images); 6785 return(MagickTrue); 6786} 6787 6788/* 6789%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6790% % 6791% % 6792% % 6793% M a g i c k N o r m a l i z e I m a g e % 6794% % 6795% % 6796% % 6797%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6798% 6799% MagickNormalizeImage() enhances the contrast of a color image by adjusting 6800% the pixels color to span the entire range of colors available 6801% 6802% You can also reduce the influence of a particular channel with a gamma 6803% value of 0. 6804% 6805% The format of the MagickNormalizeImage method is: 6806% 6807% MagickBooleanType MagickNormalizeImage(MagickWand *wand) 6808% 6809% A description of each parameter follows: 6810% 6811% o wand: the magick wand. 6812% 6813*/ 6814WandExport MagickBooleanType MagickNormalizeImage(MagickWand *wand) 6815{ 6816 MagickBooleanType 6817 status; 6818 6819 assert(wand != (MagickWand *) NULL); 6820 assert(wand->signature == WandSignature); 6821 if (wand->debug != MagickFalse) 6822 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6823 if (wand->images == (Image *) NULL) 6824 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6825 status=NormalizeImage(wand->images,wand->exception); 6826 return(status); 6827} 6828 6829/* 6830%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6831% % 6832% % 6833% % 6834% M a g i c k O i l P a i n t I m a g e % 6835% % 6836% % 6837% % 6838%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6839% 6840% MagickOilPaintImage() applies a special effect filter that simulates an oil 6841% painting. Each pixel is replaced by the most frequent color occurring 6842% in a circular region defined by radius. 6843% 6844% The format of the MagickOilPaintImage method is: 6845% 6846% MagickBooleanType MagickOilPaintImage(MagickWand *wand, 6847% const double radius,const double sigma) 6848% 6849% A description of each parameter follows: 6850% 6851% o wand: the magick wand. 6852% 6853% o radius: the radius of the circular neighborhood. 6854% 6855% o sigma: the standard deviation of the Gaussian, in pixels. 6856% 6857*/ 6858WandExport MagickBooleanType MagickOilPaintImage(MagickWand *wand, 6859 const double radius,const double sigma) 6860{ 6861 Image 6862 *paint_image; 6863 6864 assert(wand != (MagickWand *) NULL); 6865 assert(wand->signature == WandSignature); 6866 if (wand->debug != MagickFalse) 6867 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6868 if (wand->images == (Image *) NULL) 6869 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6870 paint_image=OilPaintImage(wand->images,radius,sigma,wand->exception); 6871 if (paint_image == (Image *) NULL) 6872 return(MagickFalse); 6873 ReplaceImageInList(&wand->images,paint_image); 6874 return(MagickTrue); 6875} 6876 6877/* 6878%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6879% % 6880% % 6881% % 6882% M a g i c k O p a q u e P a i n t I m a g e % 6883% % 6884% % 6885% % 6886%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6887% 6888% MagickOpaquePaintImage() changes any pixel that matches color with the color 6889% defined by fill. 6890% 6891% The format of the MagickOpaquePaintImage method is: 6892% 6893% MagickBooleanType MagickOpaquePaintImage(MagickWand *wand, 6894% const PixelWand *target,const PixelWand *fill,const double fuzz, 6895% const MagickBooleanType invert) 6896% 6897% A description of each parameter follows: 6898% 6899% o wand: the magick wand. 6900% 6901% o target: Change this target color to the fill color within the image. 6902% 6903% o fill: the fill pixel wand. 6904% 6905% o fuzz: By default target must match a particular pixel color 6906% exactly. However, in many cases two colors may differ by a small amount. 6907% The fuzz member of image defines how much tolerance is acceptable to 6908% consider two colors as the same. For example, set fuzz to 10 and the 6909% color red at intensities of 100 and 102 respectively are now interpreted 6910% as the same color for the purposes of the floodfill. 6911% 6912% o invert: paint any pixel that does not match the target color. 6913% 6914*/ 6915WandExport MagickBooleanType MagickOpaquePaintImage(MagickWand *wand, 6916 const PixelWand *target,const PixelWand *fill,const double fuzz, 6917 const MagickBooleanType invert) 6918{ 6919 MagickBooleanType 6920 status; 6921 6922 PixelInfo 6923 fill_pixel, 6924 target_pixel; 6925 6926 assert(wand != (MagickWand *) NULL); 6927 assert(wand->signature == WandSignature); 6928 if (wand->debug != MagickFalse) 6929 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6930 if (wand->images == (Image *) NULL) 6931 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6932 PixelGetMagickColor(target,&target_pixel); 6933 PixelGetMagickColor(fill,&fill_pixel); 6934 wand->images->fuzz=fuzz; 6935 status=OpaquePaintImage(wand->images,&target_pixel,&fill_pixel,invert, 6936 wand->exception); 6937 return(status); 6938} 6939 6940/* 6941%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6942% % 6943% % 6944% % 6945% M a g i c k O p t i m i z e I m a g e L a y e r s % 6946% % 6947% % 6948% % 6949%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6950% 6951% MagickOptimizeImageLayers() compares each image the GIF disposed forms of the 6952% previous image in the sequence. From this it attempts to select the 6953% smallest cropped image to replace each frame, while preserving the results 6954% of the animation. 6955% 6956% The format of the MagickOptimizeImageLayers method is: 6957% 6958% MagickWand *MagickOptimizeImageLayers(MagickWand *wand) 6959% 6960% A description of each parameter follows: 6961% 6962% o wand: the magick wand. 6963% 6964*/ 6965WandExport MagickWand *MagickOptimizeImageLayers(MagickWand *wand) 6966{ 6967 Image 6968 *optimize_image; 6969 6970 assert(wand != (MagickWand *) NULL); 6971 assert(wand->signature == WandSignature); 6972 if (wand->debug != MagickFalse) 6973 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6974 if (wand->images == (Image *) NULL) 6975 return((MagickWand *) NULL); 6976 optimize_image=OptimizeImageLayers(wand->images,wand->exception); 6977 if (optimize_image == (Image *) NULL) 6978 return((MagickWand *) NULL); 6979 return(CloneMagickWandFromImages(wand,optimize_image)); 6980} 6981 6982/* 6983%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6984% % 6985% % 6986% % 6987% M a g i c k O r d e r e d P o s t e r i z e I m a g e % 6988% % 6989% % 6990% % 6991%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6992% 6993% MagickOrderedPosterizeImage() performs an ordered dither based on a number 6994% of pre-defined dithering threshold maps, but over multiple intensity levels, 6995% which can be different for different channels, according to the input 6996% arguments. 6997% 6998% The format of the MagickOrderedPosterizeImage method is: 6999% 7000% MagickBooleanType MagickOrderedPosterizeImage(MagickWand *wand, 7001% const char *threshold_map) 7002% 7003% A description of each parameter follows: 7004% 7005% o image: the image. 7006% 7007% o threshold_map: A string containing the name of the threshold dither 7008% map to use, followed by zero or more numbers representing the number of 7009% color levels tho dither between. 7010% 7011% Any level number less than 2 is equivalent to 2, and means only binary 7012% dithering will be applied to each color channel. 7013% 7014% No numbers also means a 2 level (bitmap) dither will be applied to all 7015% channels, while a single number is the number of levels applied to each 7016% channel in sequence. More numbers will be applied in turn to each of 7017% the color channels. 7018% 7019% For example: "o3x3,6" generates a 6 level posterization of the image 7020% with a ordered 3x3 diffused pixel dither being applied between each 7021% level. While checker,8,8,4 will produce a 332 colormaped image with 7022% only a single checkerboard hash pattern (50% grey) between each color 7023% level, to basically double the number of color levels with a bare 7024% minimim of dithering. 7025% 7026*/ 7027WandExport MagickBooleanType MagickOrderedPosterizeImage(MagickWand *wand, 7028 const char *threshold_map) 7029{ 7030 MagickBooleanType 7031 status; 7032 7033 assert(wand != (MagickWand *) NULL); 7034 assert(wand->signature == WandSignature); 7035 if (wand->debug != MagickFalse) 7036 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7037 if (wand->images == (Image *) NULL) 7038 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7039 status=OrderedPosterizeImage(wand->images,threshold_map,wand->exception); 7040 return(status); 7041} 7042 7043/* 7044%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7045% % 7046% % 7047% % 7048% M a g i c k P i n g I m a g e % 7049% % 7050% % 7051% % 7052%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7053% 7054% MagickPingImage() is the same as MagickReadImage() except the only valid 7055% information returned is the image width, height, size, and format. It 7056% is designed to efficiently obtain this information from a file without 7057% reading the entire image sequence into memory. 7058% 7059% The format of the MagickPingImage method is: 7060% 7061% MagickBooleanType MagickPingImage(MagickWand *wand,const char *filename) 7062% 7063% A description of each parameter follows: 7064% 7065% o wand: the magick wand. 7066% 7067% o filename: the image filename. 7068% 7069*/ 7070WandExport MagickBooleanType MagickPingImage(MagickWand *wand, 7071 const char *filename) 7072{ 7073 Image 7074 *images; 7075 7076 ImageInfo 7077 *ping_info; 7078 7079 assert(wand != (MagickWand *) NULL); 7080 assert(wand->signature == WandSignature); 7081 if (wand->debug != MagickFalse) 7082 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7083 ping_info=CloneImageInfo(wand->image_info); 7084 if (filename != (const char *) NULL) 7085 (void) CopyMagickString(ping_info->filename,filename,MaxTextExtent); 7086 images=PingImage(ping_info,wand->exception); 7087 ping_info=DestroyImageInfo(ping_info); 7088 if (images == (Image *) NULL) 7089 return(MagickFalse); 7090 return(InsertImageInWand(wand,images)); 7091} 7092 7093/* 7094%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7095% % 7096% % 7097% % 7098% M a g i c k P i n g I m a g e B l o b % 7099% % 7100% % 7101% % 7102%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7103% 7104% MagickPingImageBlob() pings an image or image sequence from a blob. 7105% 7106% The format of the MagickPingImageBlob method is: 7107% 7108% MagickBooleanType MagickPingImageBlob(MagickWand *wand, 7109% const void *blob,const size_t length) 7110% 7111% A description of each parameter follows: 7112% 7113% o wand: the magick wand. 7114% 7115% o blob: the blob. 7116% 7117% o length: the blob length. 7118% 7119*/ 7120WandExport MagickBooleanType MagickPingImageBlob(MagickWand *wand, 7121 const void *blob,const size_t length) 7122{ 7123 Image 7124 *images; 7125 7126 ImageInfo 7127 *read_info; 7128 7129 assert(wand != (MagickWand *) NULL); 7130 assert(wand->signature == WandSignature); 7131 if (wand->debug != MagickFalse) 7132 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7133 read_info=CloneImageInfo(wand->image_info); 7134 SetImageInfoBlob(read_info,blob,length); 7135 images=PingImage(read_info,wand->exception); 7136 read_info=DestroyImageInfo(read_info); 7137 if (images == (Image *) NULL) 7138 return(MagickFalse); 7139 return(InsertImageInWand(wand,images)); 7140} 7141 7142/* 7143%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7144% % 7145% % 7146% % 7147% M a g i c k P i n g I m a g e F i l e % 7148% % 7149% % 7150% % 7151%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7152% 7153% MagickPingImageFile() pings an image or image sequence from an open file 7154% descriptor. 7155% 7156% The format of the MagickPingImageFile method is: 7157% 7158% MagickBooleanType MagickPingImageFile(MagickWand *wand,FILE *file) 7159% 7160% A description of each parameter follows: 7161% 7162% o wand: the magick wand. 7163% 7164% o file: the file descriptor. 7165% 7166*/ 7167WandExport MagickBooleanType MagickPingImageFile(MagickWand *wand,FILE *file) 7168{ 7169 Image 7170 *images; 7171 7172 ImageInfo 7173 *read_info; 7174 7175 assert(wand != (MagickWand *) NULL); 7176 assert(wand->signature == WandSignature); 7177 assert(file != (FILE *) NULL); 7178 if (wand->debug != MagickFalse) 7179 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7180 read_info=CloneImageInfo(wand->image_info); 7181 SetImageInfoFile(read_info,file); 7182 images=PingImage(read_info,wand->exception); 7183 read_info=DestroyImageInfo(read_info); 7184 if (images == (Image *) NULL) 7185 return(MagickFalse); 7186 return(InsertImageInWand(wand,images)); 7187} 7188 7189/* 7190%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7191% % 7192% % 7193% % 7194% M a g i c k P o l a r o i d I m a g e % 7195% % 7196% % 7197% % 7198%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7199% 7200% MagickPolaroidImage() simulates a Polaroid picture. 7201% 7202% The format of the MagickPolaroidImage method is: 7203% 7204% MagickBooleanType MagickPolaroidImage(MagickWand *wand, 7205% const DrawingWand *drawing_wand,const double angle, 7206% const PixelInterpolateMethod method) 7207% 7208% A description of each parameter follows: 7209% 7210% o wand: the magick wand. 7211% 7212% o drawing_wand: the draw wand. 7213% 7214% o angle: Apply the effect along this angle. 7215% 7216% o method: the pixel interpolation method. 7217% 7218*/ 7219WandExport MagickBooleanType MagickPolaroidImage(MagickWand *wand, 7220 const DrawingWand *drawing_wand,const double angle, 7221 const PixelInterpolateMethod method) 7222{ 7223 DrawInfo 7224 *draw_info; 7225 7226 Image 7227 *polaroid_image; 7228 7229 assert(wand != (MagickWand *) NULL); 7230 assert(wand->signature == WandSignature); 7231 if (wand->debug != MagickFalse) 7232 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7233 if (wand->images == (Image *) NULL) 7234 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7235 draw_info=PeekDrawingWand(drawing_wand); 7236 if (draw_info == (DrawInfo *) NULL) 7237 return(MagickFalse); 7238 polaroid_image=PolaroidImage(wand->images,draw_info,angle,method, 7239 wand->exception); 7240 if (polaroid_image == (Image *) NULL) 7241 return(MagickFalse); 7242 ReplaceImageInList(&wand->images,polaroid_image); 7243 return(MagickTrue); 7244} 7245 7246/* 7247%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7248% % 7249% % 7250% % 7251% M a g i c k P o s t e r i z e I m a g e % 7252% % 7253% % 7254% % 7255%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7256% 7257% MagickPosterizeImage() reduces the image to a limited number of color level. 7258% 7259% The format of the MagickPosterizeImage method is: 7260% 7261% MagickBooleanType MagickPosterizeImage(MagickWand *wand, 7262% const unsigned levels,const MagickBooleanType dither) 7263% 7264% A description of each parameter follows: 7265% 7266% o wand: the magick wand. 7267% 7268% o levels: Number of color levels allowed in each channel. Very low values 7269% (2, 3, or 4) have the most visible effect. 7270% 7271% o dither: Set this integer value to something other than zero to dither 7272% the mapped image. 7273% 7274*/ 7275WandExport MagickBooleanType MagickPosterizeImage(MagickWand *wand, 7276 const size_t levels,const MagickBooleanType dither) 7277{ 7278 MagickBooleanType 7279 status; 7280 7281 assert(wand != (MagickWand *) NULL); 7282 assert(wand->signature == WandSignature); 7283 if (wand->debug != MagickFalse) 7284 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7285 if (wand->images == (Image *) NULL) 7286 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7287 status=PosterizeImage(wand->images,levels,dither,wand->exception); 7288 return(status); 7289} 7290 7291/* 7292%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7293% % 7294% % 7295% % 7296% M a g i c k P r e v i e w I m a g e s % 7297% % 7298% % 7299% % 7300%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7301% 7302% MagickPreviewImages() tiles 9 thumbnails of the specified image with an 7303% image processing operation applied at varying strengths. This helpful 7304% to quickly pin-point an appropriate parameter for an image processing 7305% operation. 7306% 7307% The format of the MagickPreviewImages method is: 7308% 7309% MagickWand *MagickPreviewImages(MagickWand *wand, 7310% const PreviewType preview) 7311% 7312% A description of each parameter follows: 7313% 7314% o wand: the magick wand. 7315% 7316% o preview: the preview type. 7317% 7318*/ 7319WandExport MagickWand *MagickPreviewImages(MagickWand *wand, 7320 const PreviewType preview) 7321{ 7322 Image 7323 *preview_image; 7324 7325 assert(wand != (MagickWand *) NULL); 7326 assert(wand->signature == WandSignature); 7327 if (wand->debug != MagickFalse) 7328 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7329 if (wand->images == (Image *) NULL) 7330 return((MagickWand *) NULL); 7331 preview_image=PreviewImage(wand->images,preview,wand->exception); 7332 if (preview_image == (Image *) NULL) 7333 return((MagickWand *) NULL); 7334 return(CloneMagickWandFromImages(wand,preview_image)); 7335} 7336 7337/* 7338%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7339% % 7340% % 7341% % 7342% M a g i c k P r e v i o u s I m a g e % 7343% % 7344% % 7345% % 7346%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7347% 7348% MagickPreviousImage() assocates the previous image in an image list with 7349% the magick wand. 7350% 7351% The format of the MagickPreviousImage method is: 7352% 7353% MagickBooleanType MagickPreviousImage(MagickWand *wand) 7354% 7355% A description of each parameter follows: 7356% 7357% o wand: the magick wand. 7358% 7359*/ 7360WandExport MagickBooleanType MagickPreviousImage(MagickWand *wand) 7361{ 7362 assert(wand != (MagickWand *) NULL); 7363 assert(wand->signature == WandSignature); 7364 if (wand->debug != MagickFalse) 7365 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7366 if (wand->images == (Image *) NULL) 7367 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7368 7369 wand->image_pending=MagickFalse; /* pending status has no meaning */ 7370 /* If there is no prev image, return false (Iterator is finished) */ 7371 if (GetPreviousImageInList(wand->images) == (Image *) NULL) 7372 return(MagickFalse); 7373 /* just do it - current image is not 'pending' */ 7374 wand->images=GetPreviousImageInList(wand->images); 7375 return(MagickTrue); 7376} 7377 7378/* 7379%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7380% % 7381% % 7382% % 7383% M a g i c k Q u a n t i z e I m a g e % 7384% % 7385% % 7386% % 7387%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7388% 7389% MagickQuantizeImage() analyzes the colors within a reference image and 7390% chooses a fixed number of colors to represent the image. The goal of the 7391% algorithm is to minimize the color difference between the input and output 7392% image while minimizing the processing time. 7393% 7394% The format of the MagickQuantizeImage method is: 7395% 7396% MagickBooleanType MagickQuantizeImage(MagickWand *wand, 7397% const size_t number_colors,const ColorspaceType colorspace, 7398% const size_t treedepth,const MagickBooleanType dither, 7399% const MagickBooleanType measure_error) 7400% 7401% A description of each parameter follows: 7402% 7403% o wand: the magick wand. 7404% 7405% o number_colors: the number of colors. 7406% 7407% o colorspace: Perform color reduction in this colorspace, typically 7408% RGBColorspace. 7409% 7410% o treedepth: Normally, this integer value is zero or one. A zero or 7411% one tells Quantize to choose a optimal tree depth of Log4(number_colors).% A tree of this depth generally allows the best representation of the 7412% reference image with the least amount of memory and the fastest 7413% computational speed. In some cases, such as an image with low color 7414% dispersion (a few number of colors), a value other than 7415% Log4(number_colors) is required. To expand the color tree completely, 7416% use a value of 8. 7417% 7418% o dither: A value other than zero distributes the difference between an 7419% original image and the corresponding color reduced image to 7420% neighboring pixels along a Hilbert curve. 7421% 7422% o measure_error: A value other than zero measures the difference between 7423% the original and quantized images. This difference is the total 7424% quantization error. The error is computed by summing over all pixels 7425% in an image the distance squared in RGB space between each reference 7426% pixel value and its quantized value. 7427% 7428*/ 7429WandExport MagickBooleanType MagickQuantizeImage(MagickWand *wand, 7430 const size_t number_colors,const ColorspaceType colorspace, 7431 const size_t treedepth,const MagickBooleanType dither, 7432 const MagickBooleanType measure_error) 7433{ 7434 MagickBooleanType 7435 status; 7436 7437 QuantizeInfo 7438 *quantize_info; 7439 7440 assert(wand != (MagickWand *) NULL); 7441 assert(wand->signature == WandSignature); 7442 if (wand->debug != MagickFalse) 7443 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7444 if (wand->images == (Image *) NULL) 7445 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7446 quantize_info=CloneQuantizeInfo((QuantizeInfo *) NULL); 7447 quantize_info->number_colors=number_colors; 7448 quantize_info->dither=dither; 7449 quantize_info->tree_depth=treedepth; 7450 quantize_info->colorspace=colorspace; 7451 quantize_info->measure_error=measure_error; 7452 status=QuantizeImage(quantize_info,wand->images,wand->exception); 7453 quantize_info=DestroyQuantizeInfo(quantize_info); 7454 return(status); 7455} 7456 7457/* 7458%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7459% % 7460% % 7461% % 7462% M a g i c k Q u a n t i z e I m a g e s % 7463% % 7464% % 7465% % 7466%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7467% 7468% MagickQuantizeImages() analyzes the colors within a sequence of images and 7469% chooses a fixed number of colors to represent the image. The goal of the 7470% algorithm is to minimize the color difference between the input and output 7471% image while minimizing the processing time. 7472% 7473% The format of the MagickQuantizeImages method is: 7474% 7475% MagickBooleanType MagickQuantizeImages(MagickWand *wand, 7476% const size_t number_colors,const ColorspaceType colorspace, 7477% const size_t treedepth,const MagickBooleanType dither, 7478% const MagickBooleanType measure_error) 7479% 7480% A description of each parameter follows: 7481% 7482% o wand: the magick wand. 7483% 7484% o number_colors: the number of colors. 7485% 7486% o colorspace: Perform color reduction in this colorspace, typically 7487% RGBColorspace. 7488% 7489% o treedepth: Normally, this integer value is zero or one. A zero or 7490% one tells Quantize to choose a optimal tree depth of Log4(number_colors).% A tree of this depth generally allows the best representation of the 7491% reference image with the least amount of memory and the fastest 7492% computational speed. In some cases, such as an image with low color 7493% dispersion (a few number of colors), a value other than 7494% Log4(number_colors) is required. To expand the color tree completely, 7495% use a value of 8. 7496% 7497% o dither: A value other than zero distributes the difference between an 7498% original image and the corresponding color reduced algorithm to 7499% neighboring pixels along a Hilbert curve. 7500% 7501% o measure_error: A value other than zero measures the difference between 7502% the original and quantized images. This difference is the total 7503% quantization error. The error is computed by summing over all pixels 7504% in an image the distance squared in RGB space between each reference 7505% pixel value and its quantized value. 7506% 7507*/ 7508WandExport MagickBooleanType MagickQuantizeImages(MagickWand *wand, 7509 const size_t number_colors,const ColorspaceType colorspace, 7510 const size_t treedepth,const MagickBooleanType dither, 7511 const MagickBooleanType measure_error) 7512{ 7513 MagickBooleanType 7514 status; 7515 7516 QuantizeInfo 7517 *quantize_info; 7518 7519 assert(wand != (MagickWand *) NULL); 7520 assert(wand->signature == WandSignature); 7521 if (wand->debug != MagickFalse) 7522 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7523 if (wand->images == (Image *) NULL) 7524 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7525 quantize_info=CloneQuantizeInfo((QuantizeInfo *) NULL); 7526 quantize_info->number_colors=number_colors; 7527 quantize_info->dither=dither; 7528 quantize_info->tree_depth=treedepth; 7529 quantize_info->colorspace=colorspace; 7530 quantize_info->measure_error=measure_error; 7531 status=QuantizeImages(quantize_info,wand->images,wand->exception); 7532 quantize_info=DestroyQuantizeInfo(quantize_info); 7533 return(status); 7534} 7535 7536/* 7537%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7538% % 7539% % 7540% % 7541% M a g i c k R a d i a l B l u r I m a g e % 7542% % 7543% % 7544% % 7545%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7546% 7547% MagickRadialBlurImage() radial blurs an image. 7548% 7549% The format of the MagickRadialBlurImage method is: 7550% 7551% MagickBooleanType MagickRadialBlurImage(MagickWand *wand, 7552% const double angle,const double bias) 7553% 7554% A description of each parameter follows: 7555% 7556% o wand: the magick wand. 7557% 7558% o angle: the angle of the blur in degrees. 7559% 7560% o bias: the bias. 7561% 7562*/ 7563WandExport MagickBooleanType MagickRadialBlurImage(MagickWand *wand, 7564 const double angle,const double bias) 7565{ 7566 Image 7567 *blur_image; 7568 7569 assert(wand != (MagickWand *) NULL); 7570 assert(wand->signature == WandSignature); 7571 if (wand->debug != MagickFalse) 7572 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7573 if (wand->images == (Image *) NULL) 7574 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7575 blur_image=RadialBlurImage(wand->images,angle,bias,wand->exception); 7576 if (blur_image == (Image *) NULL) 7577 return(MagickFalse); 7578 ReplaceImageInList(&wand->images,blur_image); 7579 return(MagickTrue); 7580} 7581 7582/* 7583%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7584% % 7585% % 7586% % 7587% M a g i c k R a i s e I m a g e % 7588% % 7589% % 7590% % 7591%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7592% 7593% MagickRaiseImage() creates a simulated three-dimensional button-like effect 7594% by lightening and darkening the edges of the image. Members width and 7595% height of raise_info define the width of the vertical and horizontal 7596% edge of the effect. 7597% 7598% The format of the MagickRaiseImage method is: 7599% 7600% MagickBooleanType MagickRaiseImage(MagickWand *wand, 7601% const size_t width,const size_t height,const ssize_t x, 7602% const ssize_t y,const MagickBooleanType raise) 7603% 7604% A description of each parameter follows: 7605% 7606% o wand: the magick wand. 7607% 7608% o width,height,x,y: Define the dimensions of the area to raise. 7609% 7610% o raise: A value other than zero creates a 3-D raise effect, 7611% otherwise it has a lowered effect. 7612% 7613*/ 7614WandExport MagickBooleanType MagickRaiseImage(MagickWand *wand, 7615 const size_t width,const size_t height,const ssize_t x, 7616 const ssize_t y,const MagickBooleanType raise) 7617{ 7618 MagickBooleanType 7619 status; 7620 7621 RectangleInfo 7622 raise_info; 7623 7624 assert(wand != (MagickWand *) NULL); 7625 assert(wand->signature == WandSignature); 7626 if (wand->debug != MagickFalse) 7627 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7628 if (wand->images == (Image *) NULL) 7629 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7630 raise_info.width=width; 7631 raise_info.height=height; 7632 raise_info.x=x; 7633 raise_info.y=y; 7634 status=RaiseImage(wand->images,&raise_info,raise,wand->exception); 7635 return(status); 7636} 7637 7638/* 7639%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7640% % 7641% % 7642% % 7643% M a g i c k R a n d o m T h r e s h o l d I m a g e % 7644% % 7645% % 7646% % 7647%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7648% 7649% MagickRandomThresholdImage() changes the value of individual pixels based on 7650% the intensity of each pixel compared to threshold. The result is a 7651% high-contrast, two color image. 7652% 7653% The format of the MagickRandomThresholdImage method is: 7654% 7655% MagickBooleanType MagickRandomThresholdImage(MagickWand *wand, 7656% const double low,const double high) 7657% 7658% A description of each parameter follows: 7659% 7660% o wand: the magick wand. 7661% 7662% o low,high: Specify the high and low thresholds. These values range from 7663% 0 to QuantumRange. 7664% 7665*/ 7666WandExport MagickBooleanType MagickRandomThresholdImage(MagickWand *wand, 7667 const double low,const double high) 7668{ 7669 char 7670 threshold[MaxTextExtent]; 7671 7672 assert(wand != (MagickWand *) NULL); 7673 assert(wand->signature == WandSignature); 7674 if (wand->debug != MagickFalse) 7675 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7676 if (wand->images == (Image *) NULL) 7677 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7678 (void) FormatLocaleString(threshold,MaxTextExtent,"%gx%g",low,high); 7679 return(RandomThresholdImage(wand->images,threshold,wand->exception)); 7680} 7681 7682/* 7683%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7684% % 7685% % 7686% % 7687% M a g i c k R e a d I m a g e % 7688% % 7689% % 7690% % 7691%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7692% 7693% MagickReadImage() reads an image or image sequence. The images are inserted 7694% at the current image pointer position. 7695% 7696% Use MagickSetFirstIterator(), to insert new images before all the current 7697% images in the wand, MagickSetLastIterator() to append add to the end, 7698% MagickSetImageIndex() to place images just after the given index. 7699% 7700% The format of the MagickReadImage method is: 7701% 7702% MagickBooleanType MagickReadImage(MagickWand *wand,const char *filename) 7703% 7704% A description of each parameter follows: 7705% 7706% o wand: the magick wand. 7707% 7708% o filename: the image filename. 7709% 7710*/ 7711WandExport MagickBooleanType MagickReadImage(MagickWand *wand, 7712 const char *filename) 7713{ 7714 Image 7715 *images; 7716 7717 ImageInfo 7718 *read_info; 7719 7720 assert(wand != (MagickWand *) NULL); 7721 assert(wand->signature == WandSignature); 7722 if (wand->debug != MagickFalse) 7723 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7724 read_info=CloneImageInfo(wand->image_info); 7725 if (filename != (const char *) NULL) 7726 (void) CopyMagickString(read_info->filename,filename,MaxTextExtent); 7727 images=ReadImage(read_info,wand->exception); 7728 read_info=DestroyImageInfo(read_info); 7729 if (images == (Image *) NULL) 7730 return(MagickFalse); 7731 return(InsertImageInWand(wand,images)); 7732} 7733 7734/* 7735%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7736% % 7737% % 7738% % 7739% M a g i c k R e a d I m a g e B l o b % 7740% % 7741% % 7742% % 7743%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7744% 7745% MagickReadImageBlob() reads an image or image sequence from a blob. 7746% In all other respects it is like MagickReadImage(). 7747% 7748% The format of the MagickReadImageBlob method is: 7749% 7750% MagickBooleanType MagickReadImageBlob(MagickWand *wand, 7751% const void *blob,const size_t length) 7752% 7753% A description of each parameter follows: 7754% 7755% o wand: the magick wand. 7756% 7757% o blob: the blob. 7758% 7759% o length: the blob length. 7760% 7761*/ 7762WandExport MagickBooleanType MagickReadImageBlob(MagickWand *wand, 7763 const void *blob,const size_t length) 7764{ 7765 Image 7766 *images; 7767 7768 assert(wand != (MagickWand *) NULL); 7769 assert(wand->signature == WandSignature); 7770 if (wand->debug != MagickFalse) 7771 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7772 images=BlobToImage(wand->image_info,blob,length,wand->exception); 7773 if (images == (Image *) NULL) 7774 return(MagickFalse); 7775 return(InsertImageInWand(wand,images)); 7776} 7777 7778/* 7779%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7780% % 7781% % 7782% % 7783% M a g i c k R e a d I m a g e F i l e % 7784% % 7785% % 7786% % 7787%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7788% 7789% MagickReadImageFile() reads an image or image sequence from an already 7790% opened file descriptor. Otherwise it is like MagickReadImage(). 7791% 7792% The format of the MagickReadImageFile method is: 7793% 7794% MagickBooleanType MagickReadImageFile(MagickWand *wand,FILE *file) 7795% 7796% A description of each parameter follows: 7797% 7798% o wand: the magick wand. 7799% 7800% o file: the file descriptor. 7801% 7802*/ 7803WandExport MagickBooleanType MagickReadImageFile(MagickWand *wand,FILE *file) 7804{ 7805 Image 7806 *images; 7807 7808 ImageInfo 7809 *read_info; 7810 7811 assert(wand != (MagickWand *) NULL); 7812 assert(wand->signature == WandSignature); 7813 assert(file != (FILE *) NULL); 7814 if (wand->debug != MagickFalse) 7815 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7816 read_info=CloneImageInfo(wand->image_info); 7817 SetImageInfoFile(read_info,file); 7818 images=ReadImage(read_info,wand->exception); 7819 read_info=DestroyImageInfo(read_info); 7820 if (images == (Image *) NULL) 7821 return(MagickFalse); 7822 return(InsertImageInWand(wand,images)); 7823} 7824 7825/* 7826%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7827% % 7828% % 7829% % 7830% M a g i c k R e m a p I m a g e % 7831% % 7832% % 7833% % 7834%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7835% 7836% MagickRemapImage() replaces the colors of an image with the closest color 7837% from a reference image. 7838% 7839% The format of the MagickRemapImage method is: 7840% 7841% MagickBooleanType MagickRemapImage(MagickWand *wand, 7842% const MagickWand *remap_wand,const DitherMethod method) 7843% 7844% A description of each parameter follows: 7845% 7846% o wand: the magick wand. 7847% 7848% o affinity: the affinity wand. 7849% 7850% o method: choose from these dither methods: NoDitherMethod, 7851% RiemersmaDitherMethod, or FloydSteinbergDitherMethod. 7852% 7853*/ 7854WandExport MagickBooleanType MagickRemapImage(MagickWand *wand, 7855 const MagickWand *remap_wand,const DitherMethod method) 7856{ 7857 MagickBooleanType 7858 status; 7859 7860 QuantizeInfo 7861 *quantize_info; 7862 7863 assert(wand != (MagickWand *) NULL); 7864 assert(wand->signature == WandSignature); 7865 if (wand->debug != MagickFalse) 7866 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7867 if ((wand->images == (Image *) NULL) || 7868 (remap_wand->images == (Image *) NULL)) 7869 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7870 quantize_info=AcquireQuantizeInfo(wand->image_info); 7871 quantize_info->dither_method=method; 7872 if (method == NoDitherMethod) 7873 quantize_info->dither=MagickFalse; 7874 status=RemapImage(quantize_info,wand->images,remap_wand->images, 7875 wand->exception); 7876 quantize_info=DestroyQuantizeInfo(quantize_info); 7877 return(status); 7878} 7879 7880/* 7881%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7882% % 7883% % 7884% % 7885% M a g i c k R e m o v e I m a g e % 7886% % 7887% % 7888% % 7889%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7890% 7891% MagickRemoveImage() removes an image from the image list. 7892% 7893% The format of the MagickRemoveImage method is: 7894% 7895% MagickBooleanType MagickRemoveImage(MagickWand *wand) 7896% 7897% A description of each parameter follows: 7898% 7899% o wand: the magick wand. 7900% 7901% o insert: the splice wand. 7902% 7903*/ 7904WandExport MagickBooleanType MagickRemoveImage(MagickWand *wand) 7905{ 7906 assert(wand != (MagickWand *) NULL); 7907 assert(wand->signature == WandSignature); 7908 if (wand->debug != MagickFalse) 7909 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7910 if (wand->images == (Image *) NULL) 7911 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7912 DeleteImageFromList(&wand->images); 7913 return(MagickTrue); 7914} 7915 7916/* 7917%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7918% % 7919% % 7920% % 7921% M a g i c k R e s a m p l e I m a g e % 7922% % 7923% % 7924% % 7925%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7926% 7927% MagickResampleImage() resample image to desired resolution. 7928% 7929% Bessel Blackman Box 7930% Catrom Cubic Gaussian 7931% Hanning Hermite Lanczos 7932% Mitchell Point Quandratic 7933% Sinc Triangle 7934% 7935% Most of the filters are FIR (finite impulse response), however, Bessel, 7936% Gaussian, and Sinc are IIR (infinite impulse response). Bessel and Sinc 7937% are windowed (brought down to zero) with the Blackman filter. 7938% 7939% The format of the MagickResampleImage method is: 7940% 7941% MagickBooleanType MagickResampleImage(MagickWand *wand, 7942% const double x_resolution,const double y_resolution, 7943% const FilterTypes filter,const double blur) 7944% 7945% A description of each parameter follows: 7946% 7947% o wand: the magick wand. 7948% 7949% o x_resolution: the new image x resolution. 7950% 7951% o y_resolution: the new image y resolution. 7952% 7953% o filter: Image filter to use. 7954% 7955% o blur: the blur factor where > 1 is blurry, < 1 is sharp. 7956% 7957*/ 7958WandExport MagickBooleanType MagickResampleImage(MagickWand *wand, 7959 const double x_resolution,const double y_resolution,const FilterTypes filter, 7960 const double blur) 7961{ 7962 Image 7963 *resample_image; 7964 7965 assert(wand != (MagickWand *) NULL); 7966 assert(wand->signature == WandSignature); 7967 if (wand->debug != MagickFalse) 7968 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7969 if (wand->images == (Image *) NULL) 7970 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7971 resample_image=ResampleImage(wand->images,x_resolution,y_resolution,filter, 7972 blur,wand->exception); 7973 if (resample_image == (Image *) NULL) 7974 return(MagickFalse); 7975 ReplaceImageInList(&wand->images,resample_image); 7976 return(MagickTrue); 7977} 7978 7979/* 7980%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7981% % 7982% % 7983% % 7984% M a g i c k R e s e t I m a g e P a g e % 7985% % 7986% % 7987% % 7988%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7989% 7990% MagickResetImagePage() resets the Wand page canvas and position. 7991% 7992% The format of the MagickResetImagePage method is: 7993% 7994% MagickBooleanType MagickResetImagePage(MagickWand *wand, 7995% const char *page) 7996% 7997% A description of each parameter follows: 7998% 7999% o wand: the magick wand. 8000% 8001% o page: the relative page specification. 8002% 8003*/ 8004WandExport MagickBooleanType MagickResetImagePage(MagickWand *wand, 8005 const char *page) 8006{ 8007 assert(wand != (MagickWand *) NULL); 8008 assert(wand->signature == WandSignature); 8009 if (wand->debug != MagickFalse) 8010 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8011 if (wand->images == (Image *) NULL) 8012 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8013 if ((page == (char *) NULL) || (*page == '\0')) 8014 { 8015 (void) ParseAbsoluteGeometry("0x0+0+0",&wand->images->page); 8016 return(MagickTrue); 8017 } 8018 return(ResetImagePage(wand->images,page)); 8019} 8020 8021/* 8022%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8023% % 8024% % 8025% % 8026% M a g i c k R e s i z e I m a g e % 8027% % 8028% % 8029% % 8030%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8031% 8032% MagickResizeImage() scales an image to the desired dimensions with one of 8033% these filters: 8034% 8035% Bessel Blackman Box 8036% Catrom Cubic Gaussian 8037% Hanning Hermite Lanczos 8038% Mitchell Point Quandratic 8039% Sinc Triangle 8040% 8041% Most of the filters are FIR (finite impulse response), however, Bessel, 8042% Gaussian, and Sinc are IIR (infinite impulse response). Bessel and Sinc 8043% are windowed (brought down to zero) with the Blackman filter. 8044% 8045% The format of the MagickResizeImage method is: 8046% 8047% MagickBooleanType MagickResizeImage(MagickWand *wand, 8048% const size_t columns,const size_t rows, 8049% const FilterTypes filter,const double blur) 8050% 8051% A description of each parameter follows: 8052% 8053% o wand: the magick wand. 8054% 8055% o columns: the number of columns in the scaled image. 8056% 8057% o rows: the number of rows in the scaled image. 8058% 8059% o filter: Image filter to use. 8060% 8061% o blur: the blur factor where > 1 is blurry, < 1 is sharp. 8062% 8063*/ 8064WandExport MagickBooleanType MagickResizeImage(MagickWand *wand, 8065 const size_t columns,const size_t rows,const FilterTypes filter, 8066 const double blur) 8067{ 8068 Image 8069 *resize_image; 8070 8071 assert(wand != (MagickWand *) NULL); 8072 assert(wand->signature == WandSignature); 8073 if (wand->debug != MagickFalse) 8074 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8075 if (wand->images == (Image *) NULL) 8076 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8077 resize_image=ResizeImage(wand->images,columns,rows,filter,blur, 8078 wand->exception); 8079 if (resize_image == (Image *) NULL) 8080 return(MagickFalse); 8081 ReplaceImageInList(&wand->images,resize_image); 8082 return(MagickTrue); 8083} 8084 8085/* 8086%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8087% % 8088% % 8089% % 8090% M a g i c k R o l l I m a g e % 8091% % 8092% % 8093% % 8094%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8095% 8096% MagickRollImage() offsets an image as defined by x and y. 8097% 8098% The format of the MagickRollImage method is: 8099% 8100% MagickBooleanType MagickRollImage(MagickWand *wand,const ssize_t x, 8101% const size_t y) 8102% 8103% A description of each parameter follows: 8104% 8105% o wand: the magick wand. 8106% 8107% o x: the x offset. 8108% 8109% o y: the y offset. 8110% 8111% 8112*/ 8113WandExport MagickBooleanType MagickRollImage(MagickWand *wand, 8114 const ssize_t x,const ssize_t y) 8115{ 8116 Image 8117 *roll_image; 8118 8119 assert(wand != (MagickWand *) NULL); 8120 assert(wand->signature == WandSignature); 8121 if (wand->debug != MagickFalse) 8122 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8123 if (wand->images == (Image *) NULL) 8124 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8125 roll_image=RollImage(wand->images,x,y,wand->exception); 8126 if (roll_image == (Image *) NULL) 8127 return(MagickFalse); 8128 ReplaceImageInList(&wand->images,roll_image); 8129 return(MagickTrue); 8130} 8131 8132/* 8133%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8134% % 8135% % 8136% % 8137% M a g i c k R o t a t e I m a g e % 8138% % 8139% % 8140% % 8141%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8142% 8143% MagickRotateImage() rotates an image the specified number of degrees. Empty 8144% triangles left over from rotating the image are filled with the 8145% background color. 8146% 8147% The format of the MagickRotateImage method is: 8148% 8149% MagickBooleanType MagickRotateImage(MagickWand *wand, 8150% const PixelWand *background,const double degrees) 8151% 8152% A description of each parameter follows: 8153% 8154% o wand: the magick wand. 8155% 8156% o background: the background pixel wand. 8157% 8158% o degrees: the number of degrees to rotate the image. 8159% 8160% 8161*/ 8162WandExport MagickBooleanType MagickRotateImage(MagickWand *wand, 8163 const PixelWand *background,const double degrees) 8164{ 8165 Image 8166 *rotate_image; 8167 8168 assert(wand != (MagickWand *) NULL); 8169 assert(wand->signature == WandSignature); 8170 if (wand->debug != MagickFalse) 8171 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8172 if (wand->images == (Image *) NULL) 8173 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8174 PixelGetQuantumPacket(background,&wand->images->background_color); 8175 rotate_image=RotateImage(wand->images,degrees,wand->exception); 8176 if (rotate_image == (Image *) NULL) 8177 return(MagickFalse); 8178 ReplaceImageInList(&wand->images,rotate_image); 8179 return(MagickTrue); 8180} 8181 8182/* 8183%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8184% % 8185% % 8186% % 8187% M a g i c k S a m p l e I m a g e % 8188% % 8189% % 8190% % 8191%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8192% 8193% MagickSampleImage() scales an image to the desired dimensions with pixel 8194% sampling. Unlike other scaling methods, this method does not introduce 8195% any additional color into the scaled image. 8196% 8197% The format of the MagickSampleImage method is: 8198% 8199% MagickBooleanType MagickSampleImage(MagickWand *wand, 8200% const size_t columns,const size_t rows) 8201% 8202% A description of each parameter follows: 8203% 8204% o wand: the magick wand. 8205% 8206% o columns: the number of columns in the scaled image. 8207% 8208% o rows: the number of rows in the scaled image. 8209% 8210% 8211*/ 8212WandExport MagickBooleanType MagickSampleImage(MagickWand *wand, 8213 const size_t columns,const size_t rows) 8214{ 8215 Image 8216 *sample_image; 8217 8218 assert(wand != (MagickWand *) NULL); 8219 assert(wand->signature == WandSignature); 8220 if (wand->debug != MagickFalse) 8221 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8222 if (wand->images == (Image *) NULL) 8223 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8224 sample_image=SampleImage(wand->images,columns,rows,wand->exception); 8225 if (sample_image == (Image *) NULL) 8226 return(MagickFalse); 8227 ReplaceImageInList(&wand->images,sample_image); 8228 return(MagickTrue); 8229} 8230 8231/* 8232%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8233% % 8234% % 8235% % 8236% M a g i c k S c a l e I m a g e % 8237% % 8238% % 8239% % 8240%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8241% 8242% MagickScaleImage() scales the size of an image to the given dimensions. 8243% 8244% The format of the MagickScaleImage method is: 8245% 8246% MagickBooleanType MagickScaleImage(MagickWand *wand, 8247% const size_t columns,const size_t rows) 8248% 8249% A description of each parameter follows: 8250% 8251% o wand: the magick wand. 8252% 8253% o columns: the number of columns in the scaled image. 8254% 8255% o rows: the number of rows in the scaled image. 8256% 8257% 8258*/ 8259WandExport MagickBooleanType MagickScaleImage(MagickWand *wand, 8260 const size_t columns,const size_t rows) 8261{ 8262 Image 8263 *scale_image; 8264 8265 assert(wand != (MagickWand *) NULL); 8266 assert(wand->signature == WandSignature); 8267 if (wand->debug != MagickFalse) 8268 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8269 if (wand->images == (Image *) NULL) 8270 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8271 scale_image=ScaleImage(wand->images,columns,rows,wand->exception); 8272 if (scale_image == (Image *) NULL) 8273 return(MagickFalse); 8274 ReplaceImageInList(&wand->images,scale_image); 8275 return(MagickTrue); 8276} 8277 8278/* 8279%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8280% % 8281% % 8282% % 8283% M a g i c k S e g m e n t I m a g e % 8284% % 8285% % 8286% % 8287%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8288% 8289% MagickSegmentImage() segments an image by analyzing the histograms of the 8290% color components and identifying units that are homogeneous with the fuzzy 8291% C-means technique. 8292% 8293% The format of the SegmentImage method is: 8294% 8295% MagickBooleanType MagickSegmentImage(MagickWand *wand, 8296% const ColorspaceType colorspace,const MagickBooleanType verbose, 8297% const double cluster_threshold,const double smooth_threshold) 8298% 8299% A description of each parameter follows. 8300% 8301% o wand: the wand. 8302% 8303% o colorspace: the image colorspace. 8304% 8305% o verbose: Set to MagickTrue to print detailed information about the 8306% identified classes. 8307% 8308% o cluster_threshold: This represents the minimum number of pixels 8309% contained in a hexahedra before it can be considered valid (expressed as 8310% a percentage). 8311% 8312% o smooth_threshold: the smoothing threshold eliminates noise in the second 8313% derivative of the histogram. As the value is increased, you can expect a 8314% smoother second derivative. 8315% 8316*/ 8317MagickExport MagickBooleanType MagickSegmentImage(MagickWand *wand, 8318 const ColorspaceType colorspace,const MagickBooleanType verbose, 8319 const double cluster_threshold,const double smooth_threshold) 8320{ 8321 MagickBooleanType 8322 status; 8323 8324 assert(wand != (MagickWand *) NULL); 8325 assert(wand->signature == WandSignature); 8326 if (wand->debug != MagickFalse) 8327 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8328 if (wand->images == (Image *) NULL) 8329 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8330 status=SegmentImage(wand->images,colorspace,verbose,cluster_threshold, 8331 smooth_threshold,wand->exception); 8332 return(status); 8333} 8334 8335/* 8336%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8337% % 8338% % 8339% % 8340% M a g i c k S e l e c t i v e B l u r I m a g e % 8341% % 8342% % 8343% % 8344%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8345% 8346% MagickSelectiveBlurImage() selectively blur an image within a contrast 8347% threshold. It is similar to the unsharpen mask that sharpens everything with 8348% contrast above a certain threshold. 8349% 8350% The format of the MagickSelectiveBlurImage method is: 8351% 8352% MagickBooleanType MagickSelectiveBlurImage(MagickWand *wand, 8353% const double radius,const double sigma,const double threshold, 8354% const double bias) 8355% 8356% A description of each parameter follows: 8357% 8358% o wand: the magick wand. 8359% 8360% o radius: the radius of the gaussian, in pixels, not counting the center 8361% pixel. 8362% 8363% o sigma: the standard deviation of the gaussian, in pixels. 8364% 8365% o threshold: only pixels within this contrast threshold are included 8366% in the blur operation. 8367% 8368% o bias: the bias. 8369% 8370*/ 8371WandExport MagickBooleanType MagickSelectiveBlurImage(MagickWand *wand, 8372 const double radius,const double sigma,const double threshold, 8373 const double bias) 8374{ 8375 Image 8376 *blur_image; 8377 8378 assert(wand != (MagickWand *) NULL); 8379 assert(wand->signature == WandSignature); 8380 if (wand->debug != MagickFalse) 8381 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8382 if (wand->images == (Image *) NULL) 8383 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8384 blur_image=SelectiveBlurImage(wand->images,radius,sigma,threshold,bias, 8385 wand->exception); 8386 if (blur_image == (Image *) NULL) 8387 return(MagickFalse); 8388 ReplaceImageInList(&wand->images,blur_image); 8389 return(MagickTrue); 8390} 8391 8392/* 8393%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8394% % 8395% % 8396% % 8397% M a g i c k S e p a r a t e I m a g e C h a n n e l % 8398% % 8399% % 8400% % 8401%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8402% 8403% MagickSeparateImage() separates a channel from the image and returns a 8404% grayscale image. A channel is a particular color component of each pixel 8405% in the image. 8406% 8407% The format of the MagickSeparateImage method is: 8408% 8409% MagickBooleanType MagickSeparateImage(MagickWand *wand) 8410% 8411% A description of each parameter follows: 8412% 8413% o wand: the magick wand. 8414% 8415*/ 8416WandExport MagickBooleanType MagickSeparateImage(MagickWand *wand) 8417{ 8418 assert(wand != (MagickWand *) NULL); 8419 assert(wand->signature == WandSignature); 8420 if (wand->debug != MagickFalse) 8421 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8422 if (wand->images == (Image *) NULL) 8423 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8424 return(SeparateImage(wand->images,wand->exception)); 8425} 8426 8427/* 8428%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8429% % 8430% % 8431% % 8432% M a g i c k S e p i a T o n e I m a g e % 8433% % 8434% % 8435% % 8436%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8437% 8438% MagickSepiaToneImage() applies a special effect to the image, similar to the 8439% effect achieved in a photo darkroom by sepia toning. Threshold ranges from 8440% 0 to QuantumRange and is a measure of the extent of the sepia toning. A 8441% threshold of 80% is a good starting point for a reasonable tone. 8442% 8443% The format of the MagickSepiaToneImage method is: 8444% 8445% MagickBooleanType MagickSepiaToneImage(MagickWand *wand, 8446% const double threshold) 8447% 8448% A description of each parameter follows: 8449% 8450% o wand: the magick wand. 8451% 8452% o threshold: Define the extent of the sepia toning. 8453% 8454*/ 8455WandExport MagickBooleanType MagickSepiaToneImage(MagickWand *wand, 8456 const double threshold) 8457{ 8458 Image 8459 *sepia_image; 8460 8461 assert(wand != (MagickWand *) NULL); 8462 assert(wand->signature == WandSignature); 8463 if (wand->debug != MagickFalse) 8464 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8465 if (wand->images == (Image *) NULL) 8466 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8467 sepia_image=SepiaToneImage(wand->images,threshold,wand->exception); 8468 if (sepia_image == (Image *) NULL) 8469 return(MagickFalse); 8470 ReplaceImageInList(&wand->images,sepia_image); 8471 return(MagickTrue); 8472} 8473 8474/* 8475%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8476% % 8477% % 8478% % 8479% M a g i c k S e t I m a g e % 8480% % 8481% % 8482% % 8483%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8484% 8485% MagickSetImage() replaces the last image returned by MagickSetImageIndex(), 8486% MagickNextImage(), MagickPreviousImage() with the images from the specified 8487% wand. 8488% 8489% The format of the MagickSetImage method is: 8490% 8491% MagickBooleanType MagickSetImage(MagickWand *wand, 8492% const MagickWand *set_wand) 8493% 8494% A description of each parameter follows: 8495% 8496% o wand: the magick wand. 8497% 8498% o set_wand: the set_wand wand. 8499% 8500*/ 8501WandExport MagickBooleanType MagickSetImage(MagickWand *wand, 8502 const MagickWand *set_wand) 8503{ 8504 Image 8505 *images; 8506 8507 assert(wand != (MagickWand *) NULL); 8508 assert(wand->signature == WandSignature); 8509 if (wand->debug != MagickFalse) 8510 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8511 assert(set_wand != (MagickWand *) NULL); 8512 assert(set_wand->signature == WandSignature); 8513 if (wand->debug != MagickFalse) 8514 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",set_wand->name); 8515 if (set_wand->images == (Image *) NULL) 8516 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8517 images=CloneImageList(set_wand->images,wand->exception); 8518 if (images == (Image *) NULL) 8519 return(MagickFalse); 8520 ReplaceImageInList(&wand->images,images); 8521 return(MagickTrue); 8522} 8523 8524/* 8525%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8526% % 8527% % 8528% % 8529% M a g i c k S e t I m a g e A l p h a C h a n n e l % 8530% % 8531% % 8532% % 8533%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8534% 8535% MagickSetImageAlphaChannel() activates, deactivates, resets, or sets the 8536% alpha channel. 8537% 8538% The format of the MagickSetImageAlphaChannel method is: 8539% 8540% MagickBooleanType MagickSetImageAlphaChannel(MagickWand *wand, 8541% const AlphaChannelType alpha_type) 8542% 8543% A description of each parameter follows: 8544% 8545% o wand: the magick wand. 8546% 8547% o alpha_type: the alpha channel type: ActivateAlphaChannel, 8548% DeactivateAlphaChannel, OpaqueAlphaChannel, or SetAlphaChannel. 8549% 8550*/ 8551WandExport MagickBooleanType MagickSetImageAlphaChannel(MagickWand *wand, 8552 const AlphaChannelType alpha_type) 8553{ 8554 assert(wand != (MagickWand *) NULL); 8555 assert(wand->signature == WandSignature); 8556 if (wand->debug != MagickFalse) 8557 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8558 if (wand->images == (Image *) NULL) 8559 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8560 return(SetImageAlphaChannel(wand->images,alpha_type,wand->exception)); 8561} 8562 8563/* 8564%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8565% % 8566% % 8567% % 8568% M a g i c k S e t I m a g e B a c k g r o u n d C o l o r % 8569% % 8570% % 8571% % 8572%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8573% 8574% MagickSetImageBackgroundColor() sets the image background color. 8575% 8576% The format of the MagickSetImageBackgroundColor method is: 8577% 8578% MagickBooleanType MagickSetImageBackgroundColor(MagickWand *wand, 8579% const PixelWand *background) 8580% 8581% A description of each parameter follows: 8582% 8583% o wand: the magick wand. 8584% 8585% o background: the background pixel wand. 8586% 8587*/ 8588WandExport MagickBooleanType MagickSetImageBackgroundColor(MagickWand *wand, 8589 const PixelWand *background) 8590{ 8591 assert(wand != (MagickWand *) NULL); 8592 assert(wand->signature == WandSignature); 8593 if (wand->debug != MagickFalse) 8594 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8595 if (wand->images == (Image *) NULL) 8596 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8597 PixelGetQuantumPacket(background,&wand->images->background_color); 8598 return(MagickTrue); 8599} 8600 8601/* 8602%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8603% % 8604% % 8605% % 8606% M a g i c k S e t I m a g e B i a s % 8607% % 8608% % 8609% % 8610%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8611% 8612% MagickSetImageBias() sets the image bias for any method that convolves an 8613% image (e.g. MagickConvolveImage()). 8614% 8615% The format of the MagickSetImageBias method is: 8616% 8617% MagickBooleanType MagickSetImageBias(MagickWand *wand, 8618% const double bias) 8619% 8620% A description of each parameter follows: 8621% 8622% o wand: the magick wand. 8623% 8624% o bias: the image bias. 8625% 8626*/ 8627WandExport MagickBooleanType MagickSetImageBias(MagickWand *wand, 8628 const double bias) 8629{ 8630 assert(wand != (MagickWand *) NULL); 8631 assert(wand->signature == WandSignature); 8632 if (wand->debug != MagickFalse) 8633 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8634 if (wand->images == (Image *) NULL) 8635 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8636 wand->images->bias=bias; 8637 return(MagickTrue); 8638} 8639 8640/* 8641%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8642% % 8643% % 8644% % 8645% M a g i c k S e t I m a g e B l u e P r i m a r y % 8646% % 8647% % 8648% % 8649%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8650% 8651% MagickSetImageBluePrimary() sets the image chromaticity blue primary point. 8652% 8653% The format of the MagickSetImageBluePrimary method is: 8654% 8655% MagickBooleanType MagickSetImageBluePrimary(MagickWand *wand, 8656% const double x,const double y) 8657% 8658% A description of each parameter follows: 8659% 8660% o wand: the magick wand. 8661% 8662% o x: the blue primary x-point. 8663% 8664% o y: the blue primary y-point. 8665% 8666*/ 8667WandExport MagickBooleanType MagickSetImageBluePrimary(MagickWand *wand, 8668 const double x,const double y) 8669{ 8670 assert(wand != (MagickWand *) NULL); 8671 assert(wand->signature == WandSignature); 8672 if (wand->debug != MagickFalse) 8673 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8674 if (wand->images == (Image *) NULL) 8675 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8676 wand->images->chromaticity.blue_primary.x=x; 8677 wand->images->chromaticity.blue_primary.y=y; 8678 return(MagickTrue); 8679} 8680 8681/* 8682%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8683% % 8684% % 8685% % 8686% M a g i c k S e t I m a g e B o r d e r C o l o r % 8687% % 8688% % 8689% % 8690%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8691% 8692% MagickSetImageBorderColor() sets the image border color. 8693% 8694% The format of the MagickSetImageBorderColor method is: 8695% 8696% MagickBooleanType MagickSetImageBorderColor(MagickWand *wand, 8697% const PixelWand *border) 8698% 8699% A description of each parameter follows: 8700% 8701% o wand: the magick wand. 8702% 8703% o border: the border pixel wand. 8704% 8705*/ 8706WandExport MagickBooleanType MagickSetImageBorderColor(MagickWand *wand, 8707 const PixelWand *border) 8708{ 8709 assert(wand != (MagickWand *) NULL); 8710 assert(wand->signature == WandSignature); 8711 if (wand->debug != MagickFalse) 8712 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8713 if (wand->images == (Image *) NULL) 8714 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8715 PixelGetQuantumPacket(border,&wand->images->border_color); 8716 return(MagickTrue); 8717} 8718 8719/* 8720%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8721% % 8722% % 8723% % 8724% M a g i c k S e t I m a g e C l i p M a s k % 8725% % 8726% % 8727% % 8728%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8729% 8730% MagickSetImageClipMask() sets image clip mask. 8731% 8732% The format of the MagickSetImageClipMask method is: 8733% 8734% MagickBooleanType MagickSetImageClipMask(MagickWand *wand, 8735% const MagickWand *clip_mask) 8736% 8737% A description of each parameter follows: 8738% 8739% o wand: the magick wand. 8740% 8741% o clip_mask: the clip_mask wand. 8742% 8743*/ 8744WandExport MagickBooleanType MagickSetImageClipMask(MagickWand *wand, 8745 const MagickWand *clip_mask) 8746{ 8747 assert(wand != (MagickWand *) NULL); 8748 assert(wand->signature == WandSignature); 8749 if (wand->debug != MagickFalse) 8750 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8751 assert(clip_mask != (MagickWand *) NULL); 8752 assert(clip_mask->signature == WandSignature); 8753 if (clip_mask->debug != MagickFalse) 8754 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",clip_mask->name); 8755 if (clip_mask->images == (Image *) NULL) 8756 ThrowWandException(WandError,"ContainsNoImages",clip_mask->name); 8757 return(SetImageClipMask(wand->images,clip_mask->images,wand->exception)); 8758} 8759 8760/* 8761%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8762% % 8763% % 8764% % 8765% M a g i c k S e t I m a g e C o l o r % 8766% % 8767% % 8768% % 8769%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8770% 8771% MagickSetImageColor() set the entire wand canvas to the specified color. 8772% 8773% The format of the MagickSetImageColor method is: 8774% 8775% MagickBooleanType MagickSetImageColor(MagickWand *wand, 8776% const PixelWand *color) 8777% 8778% A description of each parameter follows: 8779% 8780% o wand: the magick wand. 8781% 8782% o background: the image color. 8783% 8784*/ 8785WandExport MagickBooleanType MagickSetImageColor(MagickWand *wand, 8786 const PixelWand *color) 8787{ 8788 PixelInfo 8789 pixel; 8790 8791 assert(wand != (MagickWand *) NULL); 8792 assert(wand->signature == WandSignature); 8793 if (wand->debug != MagickFalse) 8794 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8795 PixelGetMagickColor(color,&pixel); 8796 return(SetImageColor(wand->images,&pixel,wand->exception)); 8797} 8798 8799/* 8800%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8801% % 8802% % 8803% % 8804% M a g i c k S e t I m a g e C o l o r m a p C o l o r % 8805% % 8806% % 8807% % 8808%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8809% 8810% MagickSetImageColormapColor() sets the color of the specified colormap 8811% index. 8812% 8813% The format of the MagickSetImageColormapColor method is: 8814% 8815% MagickBooleanType MagickSetImageColormapColor(MagickWand *wand, 8816% const size_t index,const PixelWand *color) 8817% 8818% A description of each parameter follows: 8819% 8820% o wand: the magick wand. 8821% 8822% o index: the offset into the image colormap. 8823% 8824% o color: Return the colormap color in this wand. 8825% 8826*/ 8827WandExport MagickBooleanType MagickSetImageColormapColor(MagickWand *wand, 8828 const size_t index,const PixelWand *color) 8829{ 8830 assert(wand != (MagickWand *) NULL); 8831 assert(wand->signature == WandSignature); 8832 if (wand->debug != MagickFalse) 8833 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8834 if (wand->images == (Image *) NULL) 8835 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8836 if ((wand->images->colormap == (PixelInfo *) NULL) || 8837 (index >= wand->images->colors)) 8838 ThrowWandException(WandError,"InvalidColormapIndex",wand->name); 8839 PixelGetQuantumPacket(color,wand->images->colormap+index); 8840 return(SyncImage(wand->images,wand->exception)); 8841} 8842 8843/* 8844%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8845% % 8846% % 8847% % 8848% M a g i c k S e t I m a g e C o l o r s p a c e % 8849% % 8850% % 8851% % 8852%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8853% 8854% MagickSetImageColorspace() sets the image colorspace. 8855% 8856% The format of the MagickSetImageColorspace method is: 8857% 8858% MagickBooleanType MagickSetImageColorspace(MagickWand *wand, 8859% const ColorspaceType colorspace) 8860% 8861% A description of each parameter follows: 8862% 8863% o wand: the magick wand. 8864% 8865% o colorspace: the image colorspace: UndefinedColorspace, RGBColorspace, 8866% GRAYColorspace, TransparentColorspace, OHTAColorspace, XYZColorspace, 8867% YCbCrColorspace, YCCColorspace, YIQColorspace, YPbPrColorspace, 8868% YPbPrColorspace, YUVColorspace, CMYKColorspace, sRGBColorspace, 8869% HSLColorspace, or HWBColorspace. 8870% 8871*/ 8872WandExport MagickBooleanType MagickSetImageColorspace(MagickWand *wand, 8873 const ColorspaceType colorspace) 8874{ 8875 assert(wand != (MagickWand *) NULL); 8876 assert(wand->signature == WandSignature); 8877 if (wand->debug != MagickFalse) 8878 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8879 if (wand->images == (Image *) NULL) 8880 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8881 return(SetImageColorspace(wand->images,colorspace,wand->exception)); 8882} 8883 8884/* 8885%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8886% % 8887% % 8888% % 8889% M a g i c k S e t I m a g e C o m p o s e % 8890% % 8891% % 8892% % 8893%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8894% 8895% MagickSetImageCompose() sets the image composite operator, useful for 8896% specifying how to composite the image thumbnail when using the 8897% MagickMontageImage() method. 8898% 8899% The format of the MagickSetImageCompose method is: 8900% 8901% MagickBooleanType MagickSetImageCompose(MagickWand *wand, 8902% const CompositeOperator compose) 8903% 8904% A description of each parameter follows: 8905% 8906% o wand: the magick wand. 8907% 8908% o compose: the image composite operator. 8909% 8910*/ 8911WandExport MagickBooleanType MagickSetImageCompose(MagickWand *wand, 8912 const CompositeOperator compose) 8913{ 8914 assert(wand != (MagickWand *) NULL); 8915 assert(wand->signature == WandSignature); 8916 if (wand->debug != MagickFalse) 8917 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8918 if (wand->images == (Image *) NULL) 8919 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8920 wand->images->compose=compose; 8921 return(MagickTrue); 8922} 8923 8924/* 8925%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8926% % 8927% % 8928% % 8929% M a g i c k S e t I m a g e C o m p r e s s i o n % 8930% % 8931% % 8932% % 8933%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8934% 8935% MagickSetImageCompression() sets the image compression. 8936% 8937% The format of the MagickSetImageCompression method is: 8938% 8939% MagickBooleanType MagickSetImageCompression(MagickWand *wand, 8940% const CompressionType compression) 8941% 8942% A description of each parameter follows: 8943% 8944% o wand: the magick wand. 8945% 8946% o compression: the image compression type. 8947% 8948*/ 8949WandExport MagickBooleanType MagickSetImageCompression(MagickWand *wand, 8950 const CompressionType compression) 8951{ 8952 assert(wand != (MagickWand *) NULL); 8953 assert(wand->signature == WandSignature); 8954 if (wand->debug != MagickFalse) 8955 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8956 if (wand->images == (Image *) NULL) 8957 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8958 wand->images->compression=compression; 8959 return(MagickTrue); 8960} 8961 8962/* 8963%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8964% % 8965% % 8966% % 8967% M a g i c k S e t I m a g e C o m p r e s s i o n Q u a l i t y % 8968% % 8969% % 8970% % 8971%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8972% 8973% MagickSetImageCompressionQuality() sets the image compression quality. 8974% 8975% The format of the MagickSetImageCompressionQuality method is: 8976% 8977% MagickBooleanType MagickSetImageCompressionQuality(MagickWand *wand, 8978% const size_t quality) 8979% 8980% A description of each parameter follows: 8981% 8982% o wand: the magick wand. 8983% 8984% o quality: the image compression tlityype. 8985% 8986*/ 8987WandExport MagickBooleanType MagickSetImageCompressionQuality(MagickWand *wand, 8988 const size_t quality) 8989{ 8990 assert(wand != (MagickWand *) NULL); 8991 assert(wand->signature == WandSignature); 8992 if (wand->debug != MagickFalse) 8993 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8994 if (wand->images == (Image *) NULL) 8995 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8996 wand->images->quality=quality; 8997 return(MagickTrue); 8998} 8999 9000/* 9001%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9002% % 9003% % 9004% % 9005% M a g i c k S e t I m a g e D e l a y % 9006% % 9007% % 9008% % 9009%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9010% 9011% MagickSetImageDelay() sets the image delay. 9012% 9013% The format of the MagickSetImageDelay method is: 9014% 9015% MagickBooleanType MagickSetImageDelay(MagickWand *wand, 9016% const size_t delay) 9017% 9018% A description of each parameter follows: 9019% 9020% o wand: the magick wand. 9021% 9022% o delay: the image delay in ticks-per-second units. 9023% 9024*/ 9025WandExport MagickBooleanType MagickSetImageDelay(MagickWand *wand, 9026 const size_t delay) 9027{ 9028 assert(wand != (MagickWand *) NULL); 9029 assert(wand->signature == WandSignature); 9030 if (wand->debug != MagickFalse) 9031 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9032 if (wand->images == (Image *) NULL) 9033 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9034 wand->images->delay=delay; 9035 return(MagickTrue); 9036} 9037 9038/* 9039%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9040% % 9041% % 9042% % 9043% M a g i c k S e t I m a g e D e p t h % 9044% % 9045% % 9046% % 9047%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9048% 9049% MagickSetImageDepth() sets the image depth. 9050% 9051% The format of the MagickSetImageDepth method is: 9052% 9053% MagickBooleanType MagickSetImageDepth(MagickWand *wand, 9054% const size_t depth) 9055% 9056% A description of each parameter follows: 9057% 9058% o wand: the magick wand. 9059% 9060% o depth: the image depth in bits: 8, 16, or 32. 9061% 9062*/ 9063WandExport MagickBooleanType MagickSetImageDepth(MagickWand *wand, 9064 const size_t depth) 9065{ 9066 assert(wand != (MagickWand *) NULL); 9067 assert(wand->signature == WandSignature); 9068 if (wand->debug != MagickFalse) 9069 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9070 if (wand->images == (Image *) NULL) 9071 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9072 return(SetImageDepth(wand->images,depth,wand->exception)); 9073} 9074 9075/* 9076%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9077% % 9078% % 9079% % 9080% M a g i c k S e t I m a g e D i s p o s e % 9081% % 9082% % 9083% % 9084%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9085% 9086% MagickSetImageDispose() sets the image disposal method. 9087% 9088% The format of the MagickSetImageDispose method is: 9089% 9090% MagickBooleanType MagickSetImageDispose(MagickWand *wand, 9091% const DisposeType dispose) 9092% 9093% A description of each parameter follows: 9094% 9095% o wand: the magick wand. 9096% 9097% o dispose: the image disposeal type. 9098% 9099*/ 9100WandExport MagickBooleanType MagickSetImageDispose(MagickWand *wand, 9101 const DisposeType dispose) 9102{ 9103 assert(wand != (MagickWand *) NULL); 9104 assert(wand->signature == WandSignature); 9105 if (wand->debug != MagickFalse) 9106 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9107 if (wand->images == (Image *) NULL) 9108 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9109 wand->images->dispose=dispose; 9110 return(MagickTrue); 9111} 9112 9113/* 9114%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9115% % 9116% % 9117% % 9118% M a g i c k S e t I m a g e E x t e n t % 9119% % 9120% % 9121% % 9122%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9123% 9124% MagickSetImageExtent() sets the image size (i.e. columns & rows). 9125% 9126% The format of the MagickSetImageExtent method is: 9127% 9128% MagickBooleanType MagickSetImageExtent(MagickWand *wand, 9129% const size_t columns,const unsigned rows) 9130% 9131% A description of each parameter follows: 9132% 9133% o wand: the magick wand. 9134% 9135% o columns: The image width in pixels. 9136% 9137% o rows: The image height in pixels. 9138% 9139*/ 9140WandExport MagickBooleanType MagickSetImageExtent(MagickWand *wand, 9141 const size_t columns,const size_t rows) 9142{ 9143 assert(wand != (MagickWand *) NULL); 9144 assert(wand->signature == WandSignature); 9145 if (wand->debug != MagickFalse) 9146 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9147 if (wand->images == (Image *) NULL) 9148 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9149 return(SetImageExtent(wand->images,columns,rows,wand->exception)); 9150} 9151 9152/* 9153%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9154% % 9155% % 9156% % 9157% M a g i c k S e t I m a g e F i l e n a m e % 9158% % 9159% % 9160% % 9161%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9162% 9163% MagickSetImageFilename() sets the filename of a particular image in a 9164% sequence. 9165% 9166% The format of the MagickSetImageFilename method is: 9167% 9168% MagickBooleanType MagickSetImageFilename(MagickWand *wand, 9169% const char *filename) 9170% 9171% A description of each parameter follows: 9172% 9173% o wand: the magick wand. 9174% 9175% o filename: the image filename. 9176% 9177*/ 9178WandExport MagickBooleanType MagickSetImageFilename(MagickWand *wand, 9179 const char *filename) 9180{ 9181 assert(wand != (MagickWand *) NULL); 9182 assert(wand->signature == WandSignature); 9183 if (wand->debug != MagickFalse) 9184 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9185 if (wand->images == (Image *) NULL) 9186 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9187 if (filename != (const char *) NULL) 9188 (void) CopyMagickString(wand->images->filename,filename,MaxTextExtent); 9189 return(MagickTrue); 9190} 9191 9192/* 9193%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9194% % 9195% % 9196% % 9197% M a g i c k S e t I m a g e F o r m a t % 9198% % 9199% % 9200% % 9201%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9202% 9203% MagickSetImageFormat() sets the format of a particular image in a 9204% sequence. 9205% 9206% The format of the MagickSetImageFormat method is: 9207% 9208% MagickBooleanType MagickSetImageFormat(MagickWand *wand, 9209% const char *format) 9210% 9211% A description of each parameter follows: 9212% 9213% o wand: the magick wand. 9214% 9215% o format: the image format. 9216% 9217*/ 9218WandExport MagickBooleanType MagickSetImageFormat(MagickWand *wand, 9219 const char *format) 9220{ 9221 const MagickInfo 9222 *magick_info; 9223 9224 assert(wand != (MagickWand *) NULL); 9225 assert(wand->signature == WandSignature); 9226 if (wand->debug != MagickFalse) 9227 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9228 if (wand->images == (Image *) NULL) 9229 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9230 if ((format == (char *) NULL) || (*format == '\0')) 9231 { 9232 *wand->images->magick='\0'; 9233 return(MagickTrue); 9234 } 9235 magick_info=GetMagickInfo(format,wand->exception); 9236 if (magick_info == (const MagickInfo *) NULL) 9237 return(MagickFalse); 9238 ClearMagickException(wand->exception); 9239 (void) CopyMagickString(wand->images->magick,format,MaxTextExtent); 9240 return(MagickTrue); 9241} 9242 9243/* 9244%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9245% % 9246% % 9247% % 9248% M a g i c k S e t I m a g e F u z z % 9249% % 9250% % 9251% % 9252%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9253% 9254% MagickSetImageFuzz() sets the image fuzz. 9255% 9256% The format of the MagickSetImageFuzz method is: 9257% 9258% MagickBooleanType MagickSetImageFuzz(MagickWand *wand, 9259% const double fuzz) 9260% 9261% A description of each parameter follows: 9262% 9263% o wand: the magick wand. 9264% 9265% o fuzz: the image fuzz. 9266% 9267*/ 9268WandExport MagickBooleanType MagickSetImageFuzz(MagickWand *wand, 9269 const double fuzz) 9270{ 9271 assert(wand != (MagickWand *) NULL); 9272 assert(wand->signature == WandSignature); 9273 if (wand->debug != MagickFalse) 9274 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9275 if (wand->images == (Image *) NULL) 9276 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9277 wand->images->fuzz=fuzz; 9278 return(MagickTrue); 9279} 9280 9281/* 9282%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9283% % 9284% % 9285% % 9286% M a g i c k S e t I m a g e G a m m a % 9287% % 9288% % 9289% % 9290%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9291% 9292% MagickSetImageGamma() sets the image gamma. 9293% 9294% The format of the MagickSetImageGamma method is: 9295% 9296% MagickBooleanType MagickSetImageGamma(MagickWand *wand, 9297% const double gamma) 9298% 9299% A description of each parameter follows: 9300% 9301% o wand: the magick wand. 9302% 9303% o gamma: the image gamma. 9304% 9305*/ 9306WandExport MagickBooleanType MagickSetImageGamma(MagickWand *wand, 9307 const double gamma) 9308{ 9309 assert(wand != (MagickWand *) NULL); 9310 assert(wand->signature == WandSignature); 9311 if (wand->debug != MagickFalse) 9312 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9313 if (wand->images == (Image *) NULL) 9314 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9315 wand->images->gamma=gamma; 9316 return(MagickTrue); 9317} 9318 9319/* 9320%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9321% % 9322% % 9323% % 9324% M a g i c k S e t I m a g e G r a v i t y % 9325% % 9326% % 9327% % 9328%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9329% 9330% MagickSetImageGravity() sets the image gravity type. 9331% 9332% The format of the MagickSetImageGravity method is: 9333% 9334% MagickBooleanType MagickSetImageGravity(MagickWand *wand, 9335% const GravityType gravity) 9336% 9337% A description of each parameter follows: 9338% 9339% o wand: the magick wand. 9340% 9341% o gravity: the image interlace scheme: NoInterlace, LineInterlace, 9342% PlaneInterlace, PartitionInterlace. 9343% 9344*/ 9345WandExport MagickBooleanType MagickSetImageGravity(MagickWand *wand, 9346 const GravityType gravity) 9347{ 9348 assert(wand != (MagickWand *) NULL); 9349 assert(wand->signature == WandSignature); 9350 if (wand->debug != MagickFalse) 9351 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9352 if (wand->images == (Image *) NULL) 9353 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9354 wand->images->gravity=gravity; 9355 return(MagickTrue); 9356} 9357 9358/* 9359%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9360% % 9361% % 9362% % 9363% M a g i c k S e t I m a g e G r e e n P r i m a r y % 9364% % 9365% % 9366% % 9367%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9368% 9369% MagickSetImageGreenPrimary() sets the image chromaticity green primary 9370% point. 9371% 9372% The format of the MagickSetImageGreenPrimary method is: 9373% 9374% MagickBooleanType MagickSetImageGreenPrimary(MagickWand *wand, 9375% const double x,const double y) 9376% 9377% A description of each parameter follows: 9378% 9379% o wand: the magick wand. 9380% 9381% o x: the green primary x-point. 9382% 9383% o y: the green primary y-point. 9384% 9385% 9386*/ 9387WandExport MagickBooleanType MagickSetImageGreenPrimary(MagickWand *wand, 9388 const double x,const double y) 9389{ 9390 assert(wand != (MagickWand *) NULL); 9391 assert(wand->signature == WandSignature); 9392 if (wand->debug != MagickFalse) 9393 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9394 if (wand->images == (Image *) NULL) 9395 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9396 wand->images->chromaticity.green_primary.x=x; 9397 wand->images->chromaticity.green_primary.y=y; 9398 return(MagickTrue); 9399} 9400 9401/* 9402%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9403% % 9404% % 9405% % 9406% M a g i c k S e t I m a g e I n t e r l a c e S c h e m e % 9407% % 9408% % 9409% % 9410%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9411% 9412% MagickSetImageInterlaceScheme() sets the image interlace scheme. 9413% 9414% The format of the MagickSetImageInterlaceScheme method is: 9415% 9416% MagickBooleanType MagickSetImageInterlaceScheme(MagickWand *wand, 9417% const InterlaceType interlace) 9418% 9419% A description of each parameter follows: 9420% 9421% o wand: the magick wand. 9422% 9423% o interlace: the image interlace scheme: NoInterlace, LineInterlace, 9424% PlaneInterlace, PartitionInterlace. 9425% 9426*/ 9427WandExport MagickBooleanType MagickSetImageInterlaceScheme(MagickWand *wand, 9428 const InterlaceType interlace) 9429{ 9430 assert(wand != (MagickWand *) NULL); 9431 assert(wand->signature == WandSignature); 9432 if (wand->debug != MagickFalse) 9433 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9434 if (wand->images == (Image *) NULL) 9435 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9436 wand->images->interlace=interlace; 9437 return(MagickTrue); 9438} 9439 9440/* 9441%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9442% % 9443% % 9444% % 9445% M a g i c k S e t I m a g e I n t e r p o l a t e M e t h o d % 9446% % 9447% % 9448% % 9449%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9450% 9451% MagickSetImagePixelInterpolateMethod() sets the image interpolate pixel method. 9452% 9453% The format of the MagickSetImagePixelInterpolateMethod method is: 9454% 9455% MagickBooleanType MagickSetImagePixelInterpolateMethod(MagickWand *wand, 9456% const PixelInterpolateMethod method) 9457% 9458% A description of each parameter follows: 9459% 9460% o wand: the magick wand. 9461% 9462% o method: the image interpole pixel methods: choose from Undefined, 9463% Average, Bicubic, Bilinear, Filter, Integer, Mesh, NearestNeighbor. 9464% 9465*/ 9466WandExport MagickBooleanType MagickSetImagePixelInterpolateMethod(MagickWand *wand, 9467 const PixelInterpolateMethod method) 9468{ 9469 assert(wand != (MagickWand *) NULL); 9470 assert(wand->signature == WandSignature); 9471 if (wand->debug != MagickFalse) 9472 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9473 if (wand->images == (Image *) NULL) 9474 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9475 wand->images->interpolate=method; 9476 return(MagickTrue); 9477} 9478 9479/* 9480%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9481% % 9482% % 9483% % 9484% M a g i c k S e t I m a g e I t e r a t i o n s % 9485% % 9486% % 9487% % 9488%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9489% 9490% MagickSetImageIterations() sets the image iterations. 9491% 9492% The format of the MagickSetImageIterations method is: 9493% 9494% MagickBooleanType MagickSetImageIterations(MagickWand *wand, 9495% const size_t iterations) 9496% 9497% A description of each parameter follows: 9498% 9499% o wand: the magick wand. 9500% 9501% o delay: the image delay in 1/100th of a second. 9502% 9503*/ 9504WandExport MagickBooleanType MagickSetImageIterations(MagickWand *wand, 9505 const size_t iterations) 9506{ 9507 assert(wand != (MagickWand *) NULL); 9508 assert(wand->signature == WandSignature); 9509 if (wand->debug != MagickFalse) 9510 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9511 if (wand->images == (Image *) NULL) 9512 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9513 wand->images->iterations=iterations; 9514 return(MagickTrue); 9515} 9516 9517/* 9518%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9519% % 9520% % 9521% % 9522% M a g i c k S e t I m a g e M a t t e % 9523% % 9524% % 9525% % 9526%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9527% 9528% MagickSetImageMatte() sets the image matte channel. 9529% 9530% The format of the MagickSetImageMatteColor method is: 9531% 9532% MagickBooleanType MagickSetImageMatteColor(MagickWand *wand, 9533% const MagickBooleanType *matte) 9534% 9535% A description of each parameter follows: 9536% 9537% o wand: the magick wand. 9538% 9539% o matte: Set to MagickTrue to enable the image matte channel otherwise 9540% MagickFalse. 9541% 9542*/ 9543WandExport MagickBooleanType MagickSetImageMatte(MagickWand *wand, 9544 const MagickBooleanType matte) 9545{ 9546 assert(wand != (MagickWand *) NULL); 9547 assert(wand->signature == WandSignature); 9548 if (wand->debug != MagickFalse) 9549 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9550 if (wand->images == (Image *) NULL) 9551 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9552 if ((wand->images->matte == MagickFalse) && (matte != MagickFalse)) 9553 (void) SetImageAlpha(wand->images,OpaqueAlpha,wand->exception); 9554 wand->images->matte=matte; 9555 return(MagickTrue); 9556} 9557 9558/* 9559%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9560% % 9561% % 9562% % 9563% M a g i c k S e t I m a g e M a t t e C o l o r % 9564% % 9565% % 9566% % 9567%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9568% 9569% MagickSetImageMatteColor() sets the image matte color. 9570% 9571% The format of the MagickSetImageMatteColor method is: 9572% 9573% MagickBooleanType MagickSetImageMatteColor(MagickWand *wand, 9574% const PixelWand *matte) 9575% 9576% A description of each parameter follows: 9577% 9578% o wand: the magick wand. 9579% 9580% o matte: the matte pixel wand. 9581% 9582*/ 9583WandExport MagickBooleanType MagickSetImageMatteColor(MagickWand *wand, 9584 const PixelWand *matte) 9585{ 9586 assert(wand != (MagickWand *) NULL); 9587 assert(wand->signature == WandSignature); 9588 if (wand->debug != MagickFalse) 9589 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9590 if (wand->images == (Image *) NULL) 9591 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9592 PixelGetQuantumPacket(matte,&wand->images->matte_color); 9593 return(MagickTrue); 9594} 9595 9596/* 9597%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9598% % 9599% % 9600% % 9601% M a g i c k S e t I m a g e O p a c i t y % 9602% % 9603% % 9604% % 9605%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9606% 9607% MagickSetImageAlpha() sets the image to the specified alpha level. 9608% 9609% The format of the MagickSetImageAlpha method is: 9610% 9611% MagickBooleanType MagickSetImageAlpha(MagickWand *wand, 9612% const double alpha) 9613% 9614% A description of each parameter follows: 9615% 9616% o wand: the magick wand. 9617% 9618% o alpha: the level of transparency: 1.0 is fully opaque and 0.0 is fully 9619% transparent. 9620% 9621*/ 9622WandExport MagickBooleanType MagickSetImageAlpha(MagickWand *wand, 9623 const double alpha) 9624{ 9625 MagickBooleanType 9626 status; 9627 9628 assert(wand != (MagickWand *) NULL); 9629 assert(wand->signature == WandSignature); 9630 if (wand->debug != MagickFalse) 9631 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9632 if (wand->images == (Image *) NULL) 9633 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9634 status=SetImageAlpha(wand->images,ClampToQuantum(QuantumRange*alpha), 9635 wand->exception); 9636 return(status); 9637} 9638 9639/* 9640%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9641% % 9642% % 9643% % 9644% M a g i c k S e t I m a g e O r i e n t a t i o n % 9645% % 9646% % 9647% % 9648%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9649% 9650% MagickSetImageOrientation() sets the image orientation. 9651% 9652% The format of the MagickSetImageOrientation method is: 9653% 9654% MagickBooleanType MagickSetImageOrientation(MagickWand *wand, 9655% const OrientationType orientation) 9656% 9657% A description of each parameter follows: 9658% 9659% o wand: the magick wand. 9660% 9661% o orientation: the image orientation type. 9662% 9663*/ 9664WandExport MagickBooleanType MagickSetImageOrientation(MagickWand *wand, 9665 const OrientationType orientation) 9666{ 9667 assert(wand != (MagickWand *) NULL); 9668 assert(wand->signature == WandSignature); 9669 if (wand->debug != MagickFalse) 9670 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9671 if (wand->images == (Image *) NULL) 9672 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9673 wand->images->orientation=orientation; 9674 return(MagickTrue); 9675} 9676 9677/* 9678%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9679% % 9680% % 9681% % 9682% M a g i c k S e t I m a g e P a g e % 9683% % 9684% % 9685% % 9686%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9687% 9688% MagickSetImagePage() sets the page geometry of the image. 9689% 9690% The format of the MagickSetImagePage method is: 9691% 9692% MagickBooleanType MagickSetImagePage(MagickWand *wand, 9693% const size_t width,const size_t height,const ssize_t x, 9694% const ssize_t y) 9695% 9696% A description of each parameter follows: 9697% 9698% o wand: the magick wand. 9699% 9700% o width: the page width. 9701% 9702% o height: the page height. 9703% 9704% o x: the page x-offset. 9705% 9706% o y: the page y-offset. 9707% 9708*/ 9709WandExport MagickBooleanType MagickSetImagePage(MagickWand *wand, 9710 const size_t width,const size_t height,const ssize_t x, 9711 const ssize_t y) 9712{ 9713 assert(wand != (MagickWand *) NULL); 9714 assert(wand->signature == WandSignature); 9715 if (wand->debug != MagickFalse) 9716 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9717 if (wand->images == (Image *) NULL) 9718 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9719 wand->images->page.width=width; 9720 wand->images->page.height=height; 9721 wand->images->page.x=x; 9722 wand->images->page.y=y; 9723 return(MagickTrue); 9724} 9725 9726/* 9727%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9728% % 9729% % 9730% % 9731% M a g i c k S e t I m a g e P r o g r e s s M o n i t o r % 9732% % 9733% % 9734% % 9735%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9736% 9737% MagickSetImageProgressMonitor() sets the wand image progress monitor to the 9738% specified method and returns the previous progress monitor if any. The 9739% progress monitor method looks like this: 9740% 9741% MagickBooleanType MagickProgressMonitor(const char *text, 9742% const MagickOffsetType offset,const MagickSizeType span, 9743% void *client_data) 9744% 9745% If the progress monitor returns MagickFalse, the current operation is 9746% interrupted. 9747% 9748% The format of the MagickSetImageProgressMonitor method is: 9749% 9750% MagickProgressMonitor MagickSetImageProgressMonitor(MagickWand *wand 9751% const MagickProgressMonitor progress_monitor,void *client_data) 9752% 9753% A description of each parameter follows: 9754% 9755% o wand: the magick wand. 9756% 9757% o progress_monitor: Specifies a pointer to a method to monitor progress 9758% of an image operation. 9759% 9760% o client_data: Specifies a pointer to any client data. 9761% 9762*/ 9763WandExport MagickProgressMonitor MagickSetImageProgressMonitor(MagickWand *wand, 9764 const MagickProgressMonitor progress_monitor,void *client_data) 9765{ 9766 MagickProgressMonitor 9767 previous_monitor; 9768 9769 assert(wand != (MagickWand *) NULL); 9770 assert(wand->signature == WandSignature); 9771 if (wand->debug != MagickFalse) 9772 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9773 if (wand->images == (Image *) NULL) 9774 { 9775 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 9776 "ContainsNoImages","`%s'",wand->name); 9777 return((MagickProgressMonitor) NULL); 9778 } 9779 previous_monitor=SetImageProgressMonitor(wand->images, 9780 progress_monitor,client_data); 9781 return(previous_monitor); 9782} 9783 9784/* 9785%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9786% % 9787% % 9788% % 9789% M a g i c k S e t I m a g e R e d P r i m a r y % 9790% % 9791% % 9792% % 9793%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9794% 9795% MagickSetImageRedPrimary() sets the image chromaticity red primary point. 9796% 9797% The format of the MagickSetImageRedPrimary method is: 9798% 9799% MagickBooleanType MagickSetImageRedPrimary(MagickWand *wand, 9800% const double x,const double y) 9801% 9802% A description of each parameter follows: 9803% 9804% o wand: the magick wand. 9805% 9806% o x: the red primary x-point. 9807% 9808% o y: the red primary y-point. 9809% 9810*/ 9811WandExport MagickBooleanType MagickSetImageRedPrimary(MagickWand *wand, 9812 const double x,const double y) 9813{ 9814 assert(wand != (MagickWand *) NULL); 9815 assert(wand->signature == WandSignature); 9816 if (wand->debug != MagickFalse) 9817 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9818 if (wand->images == (Image *) NULL) 9819 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9820 wand->images->chromaticity.red_primary.x=x; 9821 wand->images->chromaticity.red_primary.y=y; 9822 return(MagickTrue); 9823} 9824 9825/* 9826%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9827% % 9828% % 9829% % 9830% M a g i c k S e t I m a g e R e n d e r i n g I n t e n t % 9831% % 9832% % 9833% % 9834%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9835% 9836% MagickSetImageRenderingIntent() sets the image rendering intent. 9837% 9838% The format of the MagickSetImageRenderingIntent method is: 9839% 9840% MagickBooleanType MagickSetImageRenderingIntent(MagickWand *wand, 9841% const RenderingIntent rendering_intent) 9842% 9843% A description of each parameter follows: 9844% 9845% o wand: the magick wand. 9846% 9847% o rendering_intent: the image rendering intent: UndefinedIntent, 9848% SaturationIntent, PerceptualIntent, AbsoluteIntent, or RelativeIntent. 9849% 9850*/ 9851WandExport MagickBooleanType MagickSetImageRenderingIntent(MagickWand *wand, 9852 const RenderingIntent rendering_intent) 9853{ 9854 assert(wand != (MagickWand *) NULL); 9855 assert(wand->signature == WandSignature); 9856 if (wand->debug != MagickFalse) 9857 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9858 if (wand->images == (Image *) NULL) 9859 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9860 wand->images->rendering_intent=rendering_intent; 9861 return(MagickTrue); 9862} 9863 9864/* 9865%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9866% % 9867% % 9868% % 9869% M a g i c k S e t I m a g e R e s o l u t i o n % 9870% % 9871% % 9872% % 9873%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9874% 9875% MagickSetImageResolution() sets the image resolution. 9876% 9877% The format of the MagickSetImageResolution method is: 9878% 9879% MagickBooleanType MagickSetImageResolution(MagickWand *wand, 9880% const double x_resolution,const doubtl y_resolution) 9881% 9882% A description of each parameter follows: 9883% 9884% o wand: the magick wand. 9885% 9886% o x_resolution: the image x resolution. 9887% 9888% o y_resolution: the image y resolution. 9889% 9890*/ 9891WandExport MagickBooleanType MagickSetImageResolution(MagickWand *wand, 9892 const double x_resolution,const double y_resolution) 9893{ 9894 assert(wand != (MagickWand *) NULL); 9895 assert(wand->signature == WandSignature); 9896 if (wand->debug != MagickFalse) 9897 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9898 if (wand->images == (Image *) NULL) 9899 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9900 wand->images->resolution.x=x_resolution; 9901 wand->images->resolution.y=y_resolution; 9902 return(MagickTrue); 9903} 9904 9905/* 9906%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9907% % 9908% % 9909% % 9910% M a g i c k S e t I m a g e S c e n e % 9911% % 9912% % 9913% % 9914%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9915% 9916% MagickSetImageScene() sets the image scene. 9917% 9918% The format of the MagickSetImageScene method is: 9919% 9920% MagickBooleanType MagickSetImageScene(MagickWand *wand, 9921% const size_t scene) 9922% 9923% A description of each parameter follows: 9924% 9925% o wand: the magick wand. 9926% 9927% o delay: the image scene number. 9928% 9929*/ 9930WandExport MagickBooleanType MagickSetImageScene(MagickWand *wand, 9931 const size_t scene) 9932{ 9933 assert(wand != (MagickWand *) NULL); 9934 assert(wand->signature == WandSignature); 9935 if (wand->debug != MagickFalse) 9936 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9937 if (wand->images == (Image *) NULL) 9938 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9939 wand->images->scene=scene; 9940 return(MagickTrue); 9941} 9942 9943/* 9944%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9945% % 9946% % 9947% % 9948% M a g i c k S e t I m a g e T i c k s P e r S e c o n d % 9949% % 9950% % 9951% % 9952%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9953% 9954% MagickSetImageTicksPerSecond() sets the image ticks-per-second. 9955% 9956% The format of the MagickSetImageTicksPerSecond method is: 9957% 9958% MagickBooleanType MagickSetImageTicksPerSecond(MagickWand *wand, 9959% const ssize_t ticks_per-second) 9960% 9961% A description of each parameter follows: 9962% 9963% o wand: the magick wand. 9964% 9965% o ticks_per_second: the units to use for the image delay. 9966% 9967*/ 9968WandExport MagickBooleanType MagickSetImageTicksPerSecond(MagickWand *wand, 9969 const ssize_t ticks_per_second) 9970{ 9971 assert(wand != (MagickWand *) NULL); 9972 assert(wand->signature == WandSignature); 9973 if (wand->debug != MagickFalse) 9974 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9975 if (wand->images == (Image *) NULL) 9976 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9977 wand->images->ticks_per_second=ticks_per_second; 9978 return(MagickTrue); 9979} 9980 9981/* 9982%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9983% % 9984% % 9985% % 9986% M a g i c k S e t I m a g e T y p e % 9987% % 9988% % 9989% % 9990%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9991% 9992% MagickSetImageType() sets the image type. 9993% 9994% The format of the MagickSetImageType method is: 9995% 9996% MagickBooleanType MagickSetImageType(MagickWand *wand, 9997% const ImageType image_type) 9998% 9999% A description of each parameter follows: 10000% 10001% o wand: the magick wand. 10002% 10003% o image_type: the image type: UndefinedType, BilevelType, GrayscaleType, 10004% GrayscaleMatteType, PaletteType, PaletteMatteType, TrueColorType, 10005% TrueColorMatteType, ColorSeparationType, ColorSeparationMatteType, 10006% or OptimizeType. 10007% 10008*/ 10009WandExport MagickBooleanType MagickSetImageType(MagickWand *wand, 10010 const ImageType image_type) 10011{ 10012 assert(wand != (MagickWand *) NULL); 10013 assert(wand->signature == WandSignature); 10014 if (wand->debug != MagickFalse) 10015 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10016 if (wand->images == (Image *) NULL) 10017 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10018 return(SetImageType(wand->images,image_type,wand->exception)); 10019} 10020 10021/* 10022%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10023% % 10024% % 10025% % 10026% M a g i c k S e t I m a g e U n i t s % 10027% % 10028% % 10029% % 10030%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10031% 10032% MagickSetImageUnits() sets the image units of resolution. 10033% 10034% The format of the MagickSetImageUnits method is: 10035% 10036% MagickBooleanType MagickSetImageUnits(MagickWand *wand, 10037% const ResolutionType units) 10038% 10039% A description of each parameter follows: 10040% 10041% o wand: the magick wand. 10042% 10043% o units: the image units of resolution : UndefinedResolution, 10044% PixelsPerInchResolution, or PixelsPerCentimeterResolution. 10045% 10046*/ 10047WandExport MagickBooleanType MagickSetImageUnits(MagickWand *wand, 10048 const ResolutionType units) 10049{ 10050 assert(wand != (MagickWand *) NULL); 10051 assert(wand->signature == WandSignature); 10052 if (wand->debug != MagickFalse) 10053 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10054 if (wand->images == (Image *) NULL) 10055 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10056 wand->images->units=units; 10057 return(MagickTrue); 10058} 10059 10060/* 10061%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10062% % 10063% % 10064% % 10065% M a g i c k S e t I m a g e V i r t u a l P i x e l M e t h o d % 10066% % 10067% % 10068% % 10069%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10070% 10071% MagickSetImageVirtualPixelMethod() sets the image virtual pixel method. 10072% 10073% The format of the MagickSetImageVirtualPixelMethod method is: 10074% 10075% VirtualPixelMethod MagickSetImageVirtualPixelMethod(MagickWand *wand, 10076% const VirtualPixelMethod method) 10077% 10078% A description of each parameter follows: 10079% 10080% o wand: the magick wand. 10081% 10082% o method: the image virtual pixel method : UndefinedVirtualPixelMethod, 10083% ConstantVirtualPixelMethod, EdgeVirtualPixelMethod, 10084% MirrorVirtualPixelMethod, or TileVirtualPixelMethod. 10085% 10086*/ 10087WandExport VirtualPixelMethod MagickSetImageVirtualPixelMethod(MagickWand *wand, 10088 const VirtualPixelMethod method) 10089{ 10090 assert(wand != (MagickWand *) NULL); 10091 assert(wand->signature == WandSignature); 10092 if (wand->debug != MagickFalse) 10093 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10094 if (wand->images == (Image *) NULL) 10095 return(UndefinedVirtualPixelMethod); 10096 return(SetImageVirtualPixelMethod(wand->images,method)); 10097} 10098 10099/* 10100%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10101% % 10102% % 10103% % 10104% M a g i c k S e t I m a g e W h i t e P o i n t % 10105% % 10106% % 10107% % 10108%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10109% 10110% MagickSetImageWhitePoint() sets the image chromaticity white point. 10111% 10112% The format of the MagickSetImageWhitePoint method is: 10113% 10114% MagickBooleanType MagickSetImageWhitePoint(MagickWand *wand, 10115% const double x,const double y) 10116% 10117% A description of each parameter follows: 10118% 10119% o wand: the magick wand. 10120% 10121% o x: the white x-point. 10122% 10123% o y: the white y-point. 10124% 10125*/ 10126WandExport MagickBooleanType MagickSetImageWhitePoint(MagickWand *wand, 10127 const double x,const double y) 10128{ 10129 assert(wand != (MagickWand *) NULL); 10130 assert(wand->signature == WandSignature); 10131 if (wand->debug != MagickFalse) 10132 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10133 if (wand->images == (Image *) NULL) 10134 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10135 wand->images->chromaticity.white_point.x=x; 10136 wand->images->chromaticity.white_point.y=y; 10137 return(MagickTrue); 10138} 10139 10140/* 10141%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10142% % 10143% % 10144% % 10145% M a g i c k S h a d e I m a g e C h a n n e l % 10146% % 10147% % 10148% % 10149%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10150% 10151% MagickShadeImage() shines a distant light on an image to create a 10152% three-dimensional effect. You control the positioning of the light with 10153% azimuth and elevation; azimuth is measured in degrees off the x axis 10154% and elevation is measured in pixels above the Z axis. 10155% 10156% The format of the MagickShadeImage method is: 10157% 10158% MagickBooleanType MagickShadeImage(MagickWand *wand, 10159% const MagickBooleanType gray,const double azimuth, 10160% const double elevation) 10161% 10162% A description of each parameter follows: 10163% 10164% o wand: the magick wand. 10165% 10166% o gray: A value other than zero shades the intensity of each pixel. 10167% 10168% o azimuth, elevation: Define the light source direction. 10169% 10170*/ 10171WandExport MagickBooleanType MagickShadeImage(MagickWand *wand, 10172 const MagickBooleanType gray,const double asimuth,const double elevation) 10173{ 10174 Image 10175 *shade_image; 10176 10177 assert(wand != (MagickWand *) NULL); 10178 assert(wand->signature == WandSignature); 10179 if (wand->debug != MagickFalse) 10180 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10181 if (wand->images == (Image *) NULL) 10182 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10183 shade_image=ShadeImage(wand->images,gray,asimuth,elevation,wand->exception); 10184 if (shade_image == (Image *) NULL) 10185 return(MagickFalse); 10186 ReplaceImageInList(&wand->images,shade_image); 10187 return(MagickTrue); 10188} 10189 10190/* 10191%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10192% % 10193% % 10194% % 10195% M a g i c k S h a d o w I m a g e % 10196% % 10197% % 10198% % 10199%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10200% 10201% MagickShadowImage() simulates an image shadow. 10202% 10203% The format of the MagickShadowImage method is: 10204% 10205% MagickBooleanType MagickShadowImage(MagickWand *wand, 10206% const double alpha,const double sigma,const ssize_t x,const ssize_t y) 10207% 10208% A description of each parameter follows: 10209% 10210% o wand: the magick wand. 10211% 10212% o alpha: percentage transparency. 10213% 10214% o sigma: the standard deviation of the Gaussian, in pixels. 10215% 10216% o x: the shadow x-offset. 10217% 10218% o y: the shadow y-offset. 10219% 10220*/ 10221WandExport MagickBooleanType MagickShadowImage(MagickWand *wand, 10222 const double alpha,const double sigma,const ssize_t x,const ssize_t y) 10223{ 10224 Image 10225 *shadow_image; 10226 10227 assert(wand != (MagickWand *) NULL); 10228 assert(wand->signature == WandSignature); 10229 if (wand->debug != MagickFalse) 10230 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10231 if (wand->images == (Image *) NULL) 10232 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10233 shadow_image=ShadowImage(wand->images,alpha,sigma,x,y,wand->exception); 10234 if (shadow_image == (Image *) NULL) 10235 return(MagickFalse); 10236 ReplaceImageInList(&wand->images,shadow_image); 10237 return(MagickTrue); 10238} 10239 10240/* 10241%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10242% % 10243% % 10244% % 10245% M a g i c k S h a r p e n I m a g e % 10246% % 10247% % 10248% % 10249%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10250% 10251% MagickSharpenImage() sharpens an image. We convolve the image with a 10252% Gaussian operator of the given radius and standard deviation (sigma). 10253% For reasonable results, the radius should be larger than sigma. Use a 10254% radius of 0 and MagickSharpenImage() selects a suitable radius for you. 10255% 10256% The format of the MagickSharpenImage method is: 10257% 10258% MagickBooleanType MagickSharpenImage(MagickWand *wand, 10259% const double radius,const double sigma,const double bias) 10260% 10261% A description of each parameter follows: 10262% 10263% o wand: the magick wand. 10264% 10265% o radius: the radius of the Gaussian, in pixels, not counting the center 10266% pixel. 10267% 10268% o sigma: the standard deviation of the Gaussian, in pixels. 10269% 10270% o bias: the bias. 10271% 10272*/ 10273WandExport MagickBooleanType MagickSharpenImage(MagickWand *wand, 10274 const double radius,const double sigma,const double bias) 10275{ 10276 Image 10277 *sharp_image; 10278 10279 assert(wand != (MagickWand *) NULL); 10280 assert(wand->signature == WandSignature); 10281 if (wand->debug != MagickFalse) 10282 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10283 if (wand->images == (Image *) NULL) 10284 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10285 sharp_image=SharpenImage(wand->images,radius,sigma,bias,wand->exception); 10286 if (sharp_image == (Image *) NULL) 10287 return(MagickFalse); 10288 ReplaceImageInList(&wand->images,sharp_image); 10289 return(MagickTrue); 10290} 10291 10292/* 10293%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10294% % 10295% % 10296% % 10297% M a g i c k S h a v e I m a g e % 10298% % 10299% % 10300% % 10301%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10302% 10303% MagickShaveImage() shaves pixels from the image edges. It allocates the 10304% memory necessary for the new Image structure and returns a pointer to the 10305% new image. 10306% 10307% The format of the MagickShaveImage method is: 10308% 10309% MagickBooleanType MagickShaveImage(MagickWand *wand, 10310% const size_t columns,const size_t rows) 10311% 10312% A description of each parameter follows: 10313% 10314% o wand: the magick wand. 10315% 10316% o columns: the number of columns in the scaled image. 10317% 10318% o rows: the number of rows in the scaled image. 10319% 10320% 10321*/ 10322WandExport MagickBooleanType MagickShaveImage(MagickWand *wand, 10323 const size_t columns,const size_t rows) 10324{ 10325 Image 10326 *shave_image; 10327 10328 RectangleInfo 10329 shave_info; 10330 10331 assert(wand != (MagickWand *) NULL); 10332 assert(wand->signature == WandSignature); 10333 if (wand->debug != MagickFalse) 10334 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10335 if (wand->images == (Image *) NULL) 10336 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10337 shave_info.width=columns; 10338 shave_info.height=rows; 10339 shave_info.x=0; 10340 shave_info.y=0; 10341 shave_image=ShaveImage(wand->images,&shave_info,wand->exception); 10342 if (shave_image == (Image *) NULL) 10343 return(MagickFalse); 10344 ReplaceImageInList(&wand->images,shave_image); 10345 return(MagickTrue); 10346} 10347 10348/* 10349%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10350% % 10351% % 10352% % 10353% M a g i c k S h e a r I m a g e % 10354% % 10355% % 10356% % 10357%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10358% 10359% MagickShearImage() slides one edge of an image along the X or Y axis, 10360% creating a parallelogram. An X direction shear slides an edge along the X 10361% axis, while a Y direction shear slides an edge along the Y axis. The amount 10362% of the shear is controlled by a shear angle. For X direction shears, x_shear 10363% is measured relative to the Y axis, and similarly, for Y direction shears 10364% y_shear is measured relative to the X axis. Empty triangles left over from 10365% shearing the image are filled with the background color. 10366% 10367% The format of the MagickShearImage method is: 10368% 10369% MagickBooleanType MagickShearImage(MagickWand *wand, 10370% const PixelWand *background,const double x_shear,onst double y_shear) 10371% 10372% A description of each parameter follows: 10373% 10374% o wand: the magick wand. 10375% 10376% o background: the background pixel wand. 10377% 10378% o x_shear: the number of degrees to shear the image. 10379% 10380% o y_shear: the number of degrees to shear the image. 10381% 10382*/ 10383WandExport MagickBooleanType MagickShearImage(MagickWand *wand, 10384 const PixelWand *background,const double x_shear,const double y_shear) 10385{ 10386 Image 10387 *shear_image; 10388 10389 assert(wand != (MagickWand *) NULL); 10390 assert(wand->signature == WandSignature); 10391 if (wand->debug != MagickFalse) 10392 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10393 if (wand->images == (Image *) NULL) 10394 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10395 PixelGetQuantumPacket(background,&wand->images->background_color); 10396 shear_image=ShearImage(wand->images,x_shear,y_shear,wand->exception); 10397 if (shear_image == (Image *) NULL) 10398 return(MagickFalse); 10399 ReplaceImageInList(&wand->images,shear_image); 10400 return(MagickTrue); 10401} 10402 10403/* 10404%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10405% % 10406% % 10407% % 10408% M a g i c k S i g m o i d a l C o n t r a s t I m a g e % 10409% % 10410% % 10411% % 10412%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10413% 10414% MagickSigmoidalContrastImage() adjusts the contrast of an image with a 10415% non-linear sigmoidal contrast algorithm. Increase the contrast of the 10416% image using a sigmoidal transfer function without saturating highlights or 10417% shadows. Contrast indicates how much to increase the contrast (0 is none; 10418% 3 is typical; 20 is pushing it); mid-point indicates where midtones fall in 10419% the resultant image (0 is white; 50% is middle-gray; 100% is black). Set 10420% sharpen to MagickTrue to increase the image contrast otherwise the contrast 10421% is reduced. 10422% 10423% The format of the MagickSigmoidalContrastImage method is: 10424% 10425% MagickBooleanType MagickSigmoidalContrastImage(MagickWand *wand, 10426% const MagickBooleanType sharpen,const double alpha,const double beta) 10427% 10428% A description of each parameter follows: 10429% 10430% o wand: the magick wand. 10431% 10432% o sharpen: Increase or decrease image contrast. 10433% 10434% o alpha: strength of the contrast, the larger the number the more 10435% 'threshold-like' it becomes. 10436% 10437% o beta: midpoint of the function as a color value 0 to QuantumRange. 10438% 10439*/ 10440WandExport MagickBooleanType MagickSigmoidalContrastImage( 10441 MagickWand *wand,const MagickBooleanType sharpen,const double alpha, 10442 const double beta) 10443{ 10444 MagickBooleanType 10445 status; 10446 10447 assert(wand != (MagickWand *) NULL); 10448 assert(wand->signature == WandSignature); 10449 if (wand->debug != MagickFalse) 10450 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10451 if (wand->images == (Image *) NULL) 10452 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10453 status=SigmoidalContrastImage(wand->images,sharpen,alpha,beta, 10454 wand->exception); 10455 return(status); 10456} 10457 10458/* 10459%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10460% % 10461% % 10462% % 10463% M a g i c k S i m i l a r i t y I m a g e % 10464% % 10465% % 10466% % 10467%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10468% 10469% MagickSimilarityImage() compares the reference image of the image and 10470% returns the best match offset. In addition, it returns a similarity image 10471% such that an exact match location is completely white and if none of the 10472% pixels match, black, otherwise some gray level in-between. 10473% 10474% The format of the MagickSimilarityImage method is: 10475% 10476% MagickWand *MagickSimilarityImage(MagickWand *wand, 10477% const MagickWand *reference,const MetricType metric, 10478% RectangeInfo *offset,double *similarity) 10479% 10480% A description of each parameter follows: 10481% 10482% o wand: the magick wand. 10483% 10484% o reference: the reference wand. 10485% 10486% o metric: the metric. 10487% 10488% o offset: the best match offset of the reference image within the image. 10489% 10490% o similarity: the computed similarity between the images. 10491% 10492*/ 10493WandExport MagickWand *MagickSimilarityImage(MagickWand *wand, 10494 const MagickWand *reference,const MetricType metric,RectangleInfo *offset, 10495 double *similarity) 10496{ 10497 Image 10498 *similarity_image; 10499 10500 assert(wand != (MagickWand *) NULL); 10501 assert(wand->signature == WandSignature); 10502 if (wand->debug != MagickFalse) 10503 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10504 if ((wand->images == (Image *) NULL) || (reference->images == (Image *) NULL)) 10505 { 10506 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 10507 "ContainsNoImages","`%s'",wand->name); 10508 return((MagickWand *) NULL); 10509 } 10510 similarity_image=SimilarityImage(wand->images,reference->images,metric,offset, 10511 similarity,wand->exception); 10512 if (similarity_image == (Image *) NULL) 10513 return((MagickWand *) NULL); 10514 return(CloneMagickWandFromImages(wand,similarity_image)); 10515} 10516 10517/* 10518%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10519% % 10520% % 10521% % 10522% M a g i c k S k e t c h I m a g e % 10523% % 10524% % 10525% % 10526%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10527% 10528% MagickSketchImage() simulates a pencil sketch. We convolve the image with 10529% a Gaussian operator of the given radius and standard deviation (sigma). 10530% For reasonable results, radius should be larger than sigma. Use a 10531% radius of 0 and SketchImage() selects a suitable radius for you. 10532% Angle gives the angle of the blurring motion. 10533% 10534% The format of the MagickSketchImage method is: 10535% 10536% MagickBooleanType MagickSketchImage(MagickWand *wand, 10537% const double radius,const double sigma,const double angle, 10538% const double bias) 10539% 10540% A description of each parameter follows: 10541% 10542% o wand: the magick wand. 10543% 10544% o radius: the radius of the Gaussian, in pixels, not counting 10545% the center pixel. 10546% 10547% o sigma: the standard deviation of the Gaussian, in pixels. 10548% 10549% o angle: apply the effect along this angle. 10550% 10551% o bias: the bias. 10552% 10553*/ 10554WandExport MagickBooleanType MagickSketchImage(MagickWand *wand, 10555 const double radius,const double sigma,const double angle,const double bias) 10556{ 10557 Image 10558 *sketch_image; 10559 10560 assert(wand != (MagickWand *) NULL); 10561 assert(wand->signature == WandSignature); 10562 if (wand->debug != MagickFalse) 10563 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10564 if (wand->images == (Image *) NULL) 10565 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10566 sketch_image=SketchImage(wand->images,radius,sigma,angle,bias, 10567 wand->exception); 10568 if (sketch_image == (Image *) NULL) 10569 return(MagickFalse); 10570 ReplaceImageInList(&wand->images,sketch_image); 10571 return(MagickTrue); 10572} 10573 10574/* 10575%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10576% % 10577% % 10578% % 10579% M a g i c k S m u s h I m a g e s % 10580% % 10581% % 10582% % 10583%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10584% 10585% MagickSmushImages() takes all images from the current image pointer to the 10586% end of the image list and smushs them to each other top-to-bottom if the 10587% stack parameter is true, otherwise left-to-right. 10588% 10589% The format of the MagickSmushImages method is: 10590% 10591% MagickWand *MagickSmushImages(MagickWand *wand, 10592% const MagickBooleanType stack,const ssize_t offset) 10593% 10594% A description of each parameter follows: 10595% 10596% o wand: the magick wand. 10597% 10598% o stack: By default, images are stacked left-to-right. Set stack to 10599% MagickTrue to stack them top-to-bottom. 10600% 10601% o offset: minimum distance in pixels between images. 10602% 10603*/ 10604WandExport MagickWand *MagickSmushImages(MagickWand *wand, 10605 const MagickBooleanType stack,const ssize_t offset) 10606{ 10607 Image 10608 *smush_image; 10609 10610 assert(wand != (MagickWand *) NULL); 10611 assert(wand->signature == WandSignature); 10612 if (wand->debug != MagickFalse) 10613 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10614 if (wand->images == (Image *) NULL) 10615 return((MagickWand *) NULL); 10616 smush_image=SmushImages(wand->images,stack,offset,wand->exception); 10617 if (smush_image == (Image *) NULL) 10618 return((MagickWand *) NULL); 10619 return(CloneMagickWandFromImages(wand,smush_image)); 10620} 10621 10622/* 10623%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10624% % 10625% % 10626% % 10627% M a g i c k S o l a r i z e I m a g e % 10628% % 10629% % 10630% % 10631%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10632% 10633% MagickSolarizeImage() applies a special effect to the image, similar to the 10634% effect achieved in a photo darkroom by selectively exposing areas of photo 10635% sensitive paper to light. Threshold ranges from 0 to QuantumRange and is a 10636% measure of the extent of the solarization. 10637% 10638% The format of the MagickSolarizeImage method is: 10639% 10640% MagickBooleanType MagickSolarizeImage(MagickWand *wand, 10641% const double threshold) 10642% 10643% A description of each parameter follows: 10644% 10645% o wand: the magick wand. 10646% 10647% o threshold: Define the extent of the solarization. 10648% 10649*/ 10650WandExport MagickBooleanType MagickSolarizeImage(MagickWand *wand, 10651 const double threshold) 10652{ 10653 MagickBooleanType 10654 status; 10655 10656 assert(wand != (MagickWand *) NULL); 10657 assert(wand->signature == WandSignature); 10658 if (wand->debug != MagickFalse) 10659 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10660 if (wand->images == (Image *) NULL) 10661 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10662 status=SolarizeImage(wand->images,threshold,wand->exception); 10663 return(status); 10664} 10665 10666/* 10667%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10668% % 10669% % 10670% % 10671% M a g i c k S p a r s e C o l o r I m a g e % 10672% % 10673% % 10674% % 10675%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10676% 10677% MagickSparseColorImage(), given a set of coordinates, interpolates the 10678% colors found at those coordinates, across the whole image, using various 10679% methods. 10680% 10681% The format of the MagickSparseColorImage method is: 10682% 10683% MagickBooleanType MagickSparseColorImage(MagickWand *wand, 10684% const SparseColorMethod method,const size_t number_arguments, 10685% const double *arguments) 10686% 10687% A description of each parameter follows: 10688% 10689% o image: the image to be sparseed. 10690% 10691% o method: the method of image sparseion. 10692% 10693% ArcSparseColorion will always ignore source image offset, and always 10694% 'bestfit' the destination image with the top left corner offset 10695% relative to the polar mapping center. 10696% 10697% Bilinear has no simple inverse mapping so will not allow 'bestfit' 10698% style of image sparseion. 10699% 10700% Affine, Perspective, and Bilinear, will do least squares fitting of 10701% the distrotion when more than the minimum number of control point 10702% pairs are provided. 10703% 10704% Perspective, and Bilinear, will fall back to a Affine sparseion when 10705% less than 4 control point pairs are provided. While Affine sparseions 10706% will let you use any number of control point pairs, that is Zero pairs 10707% is a No-Op (viewport only) distrotion, one pair is a translation and 10708% two pairs of control points will do a scale-rotate-translate, without 10709% any shearing. 10710% 10711% o number_arguments: the number of arguments given for this sparseion 10712% method. 10713% 10714% o arguments: the arguments for this sparseion method. 10715% 10716*/ 10717WandExport MagickBooleanType MagickSparseColorImage(MagickWand *wand, 10718 const SparseColorMethod method,const size_t number_arguments, 10719 const double *arguments) 10720{ 10721 Image 10722 *sparse_image; 10723 10724 assert(wand != (MagickWand *) NULL); 10725 assert(wand->signature == WandSignature); 10726 if (wand->debug != MagickFalse) 10727 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10728 if (wand->images == (Image *) NULL) 10729 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10730 sparse_image=SparseColorImage(wand->images,method,number_arguments,arguments, 10731 wand->exception); 10732 if (sparse_image == (Image *) NULL) 10733 return(MagickFalse); 10734 ReplaceImageInList(&wand->images,sparse_image); 10735 return(MagickTrue); 10736} 10737 10738/* 10739%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10740% % 10741% % 10742% % 10743% M a g i c k S p l i c e I m a g e % 10744% % 10745% % 10746% % 10747%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10748% 10749% MagickSpliceImage() splices a solid color into the image. 10750% 10751% The format of the MagickSpliceImage method is: 10752% 10753% MagickBooleanType MagickSpliceImage(MagickWand *wand, 10754% const size_t width,const size_t height,const ssize_t x, 10755% const ssize_t y) 10756% 10757% A description of each parameter follows: 10758% 10759% o wand: the magick wand. 10760% 10761% o width: the region width. 10762% 10763% o height: the region height. 10764% 10765% o x: the region x offset. 10766% 10767% o y: the region y offset. 10768% 10769*/ 10770WandExport MagickBooleanType MagickSpliceImage(MagickWand *wand, 10771 const size_t width,const size_t height,const ssize_t x, 10772 const ssize_t y) 10773{ 10774 Image 10775 *splice_image; 10776 10777 RectangleInfo 10778 splice; 10779 10780 assert(wand != (MagickWand *) NULL); 10781 assert(wand->signature == WandSignature); 10782 if (wand->debug != MagickFalse) 10783 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10784 if (wand->images == (Image *) NULL) 10785 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10786 splice.width=width; 10787 splice.height=height; 10788 splice.x=x; 10789 splice.y=y; 10790 splice_image=SpliceImage(wand->images,&splice,wand->exception); 10791 if (splice_image == (Image *) NULL) 10792 return(MagickFalse); 10793 ReplaceImageInList(&wand->images,splice_image); 10794 return(MagickTrue); 10795} 10796 10797/* 10798%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10799% % 10800% % 10801% % 10802% M a g i c k S p r e a d I m a g e % 10803% % 10804% % 10805% % 10806%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10807% 10808% MagickSpreadImage() is a special effects method that randomly displaces each 10809% pixel in a block defined by the radius parameter. 10810% 10811% The format of the MagickSpreadImage method is: 10812% 10813% MagickBooleanType MagickSpreadImage(MagickWand *wand,const double radius, 10814% const PixelInterpolateMethod method) 10815% 10816% A description of each parameter follows: 10817% 10818% o wand: the magick wand. 10819% 10820% o radius: Choose a random pixel in a neighborhood of this extent. 10821% 10822% o method: the pixel interpolation method. 10823% 10824*/ 10825WandExport MagickBooleanType MagickSpreadImage(MagickWand *wand, 10826 const double radius,const PixelInterpolateMethod method) 10827{ 10828 Image 10829 *spread_image; 10830 10831 assert(wand != (MagickWand *) NULL); 10832 assert(wand->signature == WandSignature); 10833 if (wand->debug != MagickFalse) 10834 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10835 if (wand->images == (Image *) NULL) 10836 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10837 spread_image=SpreadImage(wand->images,radius,method,wand->exception); 10838 if (spread_image == (Image *) NULL) 10839 return(MagickFalse); 10840 ReplaceImageInList(&wand->images,spread_image); 10841 return(MagickTrue); 10842} 10843 10844/* 10845%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10846% % 10847% % 10848% % 10849% M a g i c k S t a t i s t i c I m a g e % 10850% % 10851% % 10852% % 10853%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10854% 10855% MagickStatisticImage() replace each pixel with corresponding statistic from 10856% the neighborhood of the specified width and height. 10857% 10858% The format of the MagickStatisticImage method is: 10859% 10860% MagickBooleanType MagickStatisticImage(MagickWand *wand, 10861% const StatisticType type,const double width,const size_t height) 10862% 10863% A description of each parameter follows: 10864% 10865% o wand: the magick wand. 10866% 10867% o type: the statistic type (e.g. median, mode, etc.). 10868% 10869% o width: the width of the pixel neighborhood. 10870% 10871% o height: the height of the pixel neighborhood. 10872% 10873*/ 10874WandExport MagickBooleanType MagickStatisticImage(MagickWand *wand, 10875 const StatisticType type,const size_t width,const size_t height) 10876{ 10877 Image 10878 *statistic_image; 10879 10880 assert(wand != (MagickWand *) NULL); 10881 assert(wand->signature == WandSignature); 10882 if (wand->debug != MagickFalse) 10883 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10884 if (wand->images == (Image *) NULL) 10885 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10886 statistic_image=StatisticImage(wand->images,type,width,height, 10887 wand->exception); 10888 if (statistic_image == (Image *) NULL) 10889 return(MagickFalse); 10890 ReplaceImageInList(&wand->images,statistic_image); 10891 return(MagickTrue); 10892} 10893 10894/* 10895%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10896% % 10897% % 10898% % 10899% M a g i c k S t e g a n o I m a g e % 10900% % 10901% % 10902% % 10903%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10904% 10905% MagickSteganoImage() hides a digital watermark within the image. 10906% Recover the hidden watermark later to prove that the authenticity of 10907% an image. Offset defines the start position within the image to hide 10908% the watermark. 10909% 10910% The format of the MagickSteganoImage method is: 10911% 10912% MagickWand *MagickSteganoImage(MagickWand *wand, 10913% const MagickWand *watermark_wand,const ssize_t offset) 10914% 10915% A description of each parameter follows: 10916% 10917% o wand: the magick wand. 10918% 10919% o watermark_wand: the watermark wand. 10920% 10921% o offset: Start hiding at this offset into the image. 10922% 10923*/ 10924WandExport MagickWand *MagickSteganoImage(MagickWand *wand, 10925 const MagickWand *watermark_wand,const ssize_t offset) 10926{ 10927 Image 10928 *stegano_image; 10929 10930 assert(wand != (MagickWand *) NULL); 10931 assert(wand->signature == WandSignature); 10932 if (wand->debug != MagickFalse) 10933 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10934 if ((wand->images == (Image *) NULL) || 10935 (watermark_wand->images == (Image *) NULL)) 10936 { 10937 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 10938 "ContainsNoImages","`%s'",wand->name); 10939 return((MagickWand *) NULL); 10940 } 10941 wand->images->offset=offset; 10942 stegano_image=SteganoImage(wand->images,watermark_wand->images, 10943 wand->exception); 10944 if (stegano_image == (Image *) NULL) 10945 return((MagickWand *) NULL); 10946 return(CloneMagickWandFromImages(wand,stegano_image)); 10947} 10948 10949/* 10950%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10951% % 10952% % 10953% % 10954% M a g i c k S t e r e o I m a g e % 10955% % 10956% % 10957% % 10958%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10959% 10960% MagickStereoImage() composites two images and produces a single image that 10961% is the composite of a left and right image of a stereo pair 10962% 10963% The format of the MagickStereoImage method is: 10964% 10965% MagickWand *MagickStereoImage(MagickWand *wand, 10966% const MagickWand *offset_wand) 10967% 10968% A description of each parameter follows: 10969% 10970% o wand: the magick wand. 10971% 10972% o offset_wand: Another image wand. 10973% 10974*/ 10975WandExport MagickWand *MagickStereoImage(MagickWand *wand, 10976 const MagickWand *offset_wand) 10977{ 10978 Image 10979 *stereo_image; 10980 10981 assert(wand != (MagickWand *) NULL); 10982 assert(wand->signature == WandSignature); 10983 if (wand->debug != MagickFalse) 10984 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10985 if ((wand->images == (Image *) NULL) || 10986 (offset_wand->images == (Image *) NULL)) 10987 { 10988 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 10989 "ContainsNoImages","`%s'",wand->name); 10990 return((MagickWand *) NULL); 10991 } 10992 stereo_image=StereoImage(wand->images,offset_wand->images,wand->exception); 10993 if (stereo_image == (Image *) NULL) 10994 return((MagickWand *) NULL); 10995 return(CloneMagickWandFromImages(wand,stereo_image)); 10996} 10997 10998/* 10999%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11000% % 11001% % 11002% % 11003% M a g i c k S t r i p I m a g e % 11004% % 11005% % 11006% % 11007%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11008% 11009% MagickStripImage() strips an image of all profiles and comments. 11010% 11011% The format of the MagickStripImage method is: 11012% 11013% MagickBooleanType MagickStripImage(MagickWand *wand) 11014% 11015% A description of each parameter follows: 11016% 11017% o wand: the magick wand. 11018% 11019*/ 11020WandExport MagickBooleanType MagickStripImage(MagickWand *wand) 11021{ 11022 assert(wand != (MagickWand *) NULL); 11023 assert(wand->signature == WandSignature); 11024 if (wand->debug != MagickFalse) 11025 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11026 if (wand->images == (Image *) NULL) 11027 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11028 return(StripImage(wand->images,wand->exception)); 11029} 11030 11031/* 11032%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11033% % 11034% % 11035% % 11036% M a g i c k S w i r l I m a g e % 11037% % 11038% % 11039% % 11040%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11041% 11042% MagickSwirlImage() swirls the pixels about the center of the image, where 11043% degrees indicates the sweep of the arc through which each pixel is moved. 11044% You get a more dramatic effect as the degrees move from 1 to 360. 11045% 11046% The format of the MagickSwirlImage method is: 11047% 11048% MagickBooleanType MagickSwirlImage(MagickWand *wand,const double degrees, 11049% const PixelInterpolateMethod method) 11050% 11051% A description of each parameter follows: 11052% 11053% o wand: the magick wand. 11054% 11055% o degrees: Define the tightness of the swirling effect. 11056% 11057% o method: the pixel interpolation method. 11058% 11059*/ 11060WandExport MagickBooleanType MagickSwirlImage(MagickWand *wand, 11061 const double degrees,const PixelInterpolateMethod method) 11062{ 11063 Image 11064 *swirl_image; 11065 11066 assert(wand != (MagickWand *) NULL); 11067 assert(wand->signature == WandSignature); 11068 if (wand->debug != MagickFalse) 11069 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11070 if (wand->images == (Image *) NULL) 11071 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11072 swirl_image=SwirlImage(wand->images,degrees,method,wand->exception); 11073 if (swirl_image == (Image *) NULL) 11074 return(MagickFalse); 11075 ReplaceImageInList(&wand->images,swirl_image); 11076 return(MagickTrue); 11077} 11078 11079/* 11080%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11081% % 11082% % 11083% % 11084% M a g i c k T e x t u r e I m a g e % 11085% % 11086% % 11087% % 11088%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11089% 11090% MagickTextureImage() repeatedly tiles the texture image across and down the 11091% image canvas. 11092% 11093% The format of the MagickTextureImage method is: 11094% 11095% MagickWand *MagickTextureImage(MagickWand *wand, 11096% const MagickWand *texture_wand) 11097% 11098% A description of each parameter follows: 11099% 11100% o wand: the magick wand. 11101% 11102% o texture_wand: the texture wand 11103% 11104*/ 11105WandExport MagickWand *MagickTextureImage(MagickWand *wand, 11106 const MagickWand *texture_wand) 11107{ 11108 Image 11109 *texture_image; 11110 11111 MagickBooleanType 11112 status; 11113 11114 assert(wand != (MagickWand *) NULL); 11115 assert(wand->signature == WandSignature); 11116 if (wand->debug != MagickFalse) 11117 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11118 if ((wand->images == (Image *) NULL) || 11119 (texture_wand->images == (Image *) NULL)) 11120 { 11121 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 11122 "ContainsNoImages","`%s'",wand->name); 11123 return((MagickWand *) NULL); 11124 } 11125 texture_image=CloneImage(wand->images,0,0,MagickTrue,wand->exception); 11126 if (texture_image == (Image *) NULL) 11127 return((MagickWand *) NULL); 11128 status=TextureImage(texture_image,texture_wand->images,wand->exception); 11129 if (status == MagickFalse) 11130 { 11131 texture_image=DestroyImage(texture_image); 11132 return((MagickWand *) NULL); 11133 } 11134 return(CloneMagickWandFromImages(wand,texture_image)); 11135} 11136 11137/* 11138%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11139% % 11140% % 11141% % 11142% M a g i c k T h r e s h o l d I m a g e % 11143% % 11144% % 11145% % 11146%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11147% 11148% MagickThresholdImage() changes the value of individual pixels based on 11149% the intensity of each pixel compared to threshold. The result is a 11150% high-contrast, two color image. 11151% 11152% The format of the MagickThresholdImage method is: 11153% 11154% MagickBooleanType MagickThresholdImage(MagickWand *wand, 11155% const double threshold) 11156% MagickBooleanType MagickThresholdImageChannel(MagickWand *wand, 11157% const ChannelType channel,const double threshold) 11158% 11159% A description of each parameter follows: 11160% 11161% o wand: the magick wand. 11162% 11163% o channel: the image channel(s). 11164% 11165% o threshold: Define the threshold value. 11166% 11167*/ 11168WandExport MagickBooleanType MagickThresholdImage(MagickWand *wand, 11169 const double threshold) 11170{ 11171 MagickBooleanType 11172 status; 11173 11174 status=MagickThresholdImageChannel(wand,DefaultChannels,threshold); 11175 return(status); 11176} 11177 11178WandExport MagickBooleanType MagickThresholdImageChannel(MagickWand *wand, 11179 const ChannelType channel,const double threshold) 11180{ 11181 MagickBooleanType 11182 status; 11183 11184 assert(wand != (MagickWand *) NULL); 11185 assert(wand->signature == WandSignature); 11186 if (wand->debug != MagickFalse) 11187 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11188 if (wand->images == (Image *) NULL) 11189 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11190 status=BilevelImage(wand->images,threshold,wand->exception); 11191 return(status); 11192} 11193 11194/* 11195%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11196% % 11197% % 11198% % 11199% M a g i c k T h u m b n a i l I m a g e % 11200% % 11201% % 11202% % 11203%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11204% 11205% MagickThumbnailImage() changes the size of an image to the given dimensions 11206% and removes any associated profiles. The goal is to produce small low cost 11207% thumbnail images suited for display on the Web. 11208% 11209% The format of the MagickThumbnailImage method is: 11210% 11211% MagickBooleanType MagickThumbnailImage(MagickWand *wand, 11212% const size_t columns,const size_t rows) 11213% 11214% A description of each parameter follows: 11215% 11216% o wand: the magick wand. 11217% 11218% o columns: the number of columns in the scaled image. 11219% 11220% o rows: the number of rows in the scaled image. 11221% 11222*/ 11223WandExport MagickBooleanType MagickThumbnailImage(MagickWand *wand, 11224 const size_t columns,const size_t rows) 11225{ 11226 Image 11227 *thumbnail_image; 11228 11229 assert(wand != (MagickWand *) NULL); 11230 assert(wand->signature == WandSignature); 11231 if (wand->debug != MagickFalse) 11232 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11233 if (wand->images == (Image *) NULL) 11234 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11235 thumbnail_image=ThumbnailImage(wand->images,columns,rows,wand->exception); 11236 if (thumbnail_image == (Image *) NULL) 11237 return(MagickFalse); 11238 ReplaceImageInList(&wand->images,thumbnail_image); 11239 return(MagickTrue); 11240} 11241 11242/* 11243%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11244% % 11245% % 11246% % 11247% M a g i c k T i n t I m a g e % 11248% % 11249% % 11250% % 11251%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11252% 11253% MagickTintImage() applies a color vector to each pixel in the image. The 11254% length of the vector is 0 for black and white and at its maximum for the 11255% midtones. The vector weighting function is 11256% f(x)=(1-(4.0*((x-0.5)*(x-0.5)))). 11257% 11258% The format of the MagickTintImage method is: 11259% 11260% MagickBooleanType MagickTintImage(MagickWand *wand, 11261% const PixelWand *tint,const PixelWand *blend) 11262% 11263% A description of each parameter follows: 11264% 11265% o wand: the magick wand. 11266% 11267% o tint: the tint pixel wand. 11268% 11269% o alpha: the alpha pixel wand. 11270% 11271*/ 11272WandExport MagickBooleanType MagickTintImage(MagickWand *wand, 11273 const PixelWand *tint,const PixelWand *blend) 11274{ 11275 char 11276 percent_blend[MaxTextExtent]; 11277 11278 Image 11279 *tint_image; 11280 11281 PixelInfo 11282 target; 11283 11284 assert(wand != (MagickWand *) NULL); 11285 assert(wand->signature == WandSignature); 11286 if (wand->debug != MagickFalse) 11287 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11288 if (wand->images == (Image *) NULL) 11289 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11290 if (wand->images->colorspace != CMYKColorspace) 11291 (void) FormatLocaleString(percent_blend,MaxTextExtent, 11292 "%g,%g,%g,%g",(double) (100.0*QuantumScale* 11293 PixelGetRedQuantum(blend)),(double) (100.0*QuantumScale* 11294 PixelGetGreenQuantum(blend)),(double) (100.0*QuantumScale* 11295 PixelGetBlueQuantum(blend)),(double) (100.0*QuantumScale* 11296 PixelGetAlphaQuantum(blend))); 11297 else 11298 (void) FormatLocaleString(percent_blend,MaxTextExtent, 11299 "%g,%g,%g,%g,%g",(double) (100.0*QuantumScale* 11300 PixelGetCyanQuantum(blend)),(double) (100.0*QuantumScale* 11301 PixelGetMagentaQuantum(blend)),(double) (100.0*QuantumScale* 11302 PixelGetYellowQuantum(blend)),(double) (100.0*QuantumScale* 11303 PixelGetBlackQuantum(blend)),(double) (100.0*QuantumScale* 11304 PixelGetAlphaQuantum(blend))); 11305 target=PixelGetPixel(tint); 11306 tint_image=TintImage(wand->images,percent_blend,&target,wand->exception); 11307 if (tint_image == (Image *) NULL) 11308 return(MagickFalse); 11309 ReplaceImageInList(&wand->images,tint_image); 11310 return(MagickTrue); 11311} 11312 11313/* 11314%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11315% % 11316% % 11317% % 11318% M a g i c k T r a n s f o r m I m a g e % 11319% % 11320% % 11321% % 11322%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11323% 11324% MagickTransformImage() is a convenience method that behaves like 11325% MagickResizeImage() or MagickCropImage() but accepts scaling and/or cropping 11326% information as a region geometry specification. If the operation fails, 11327% a NULL image handle is returned. 11328% 11329% The format of the MagickTransformImage method is: 11330% 11331% MagickWand *MagickTransformImage(MagickWand *wand,const char *crop, 11332% const char *geometry) 11333% 11334% A description of each parameter follows: 11335% 11336% o wand: the magick wand. 11337% 11338% o crop: A crop geometry string. This geometry defines a subregion of the 11339% image to crop. 11340% 11341% o geometry: An image geometry string. This geometry defines the final 11342% size of the image. 11343% 11344*/ 11345WandExport MagickWand *MagickTransformImage(MagickWand *wand, 11346 const char *crop,const char *geometry) 11347{ 11348 Image 11349 *transform_image; 11350 11351 MagickBooleanType 11352 status; 11353 11354 assert(wand != (MagickWand *) NULL); 11355 assert(wand->signature == WandSignature); 11356 if (wand->debug != MagickFalse) 11357 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11358 if (wand->images == (Image *) NULL) 11359 return((MagickWand *) NULL); 11360 transform_image=CloneImage(wand->images,0,0,MagickTrue,wand->exception); 11361 if (transform_image == (Image *) NULL) 11362 return((MagickWand *) NULL); 11363 status=TransformImage(&transform_image,crop,geometry,wand->exception); 11364 if (status == MagickFalse) 11365 { 11366 transform_image=DestroyImage(transform_image); 11367 return((MagickWand *) NULL); 11368 } 11369 return(CloneMagickWandFromImages(wand,transform_image)); 11370} 11371 11372/* 11373%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11374% % 11375% % 11376% % 11377% M a g i c k T r a n s f o r m I m a g e C o l o r s p a c e % 11378% % 11379% % 11380% % 11381%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11382% 11383% MagickTransformImageColorspace() transform the image colorspace. 11384% 11385% The format of the MagickTransformImageColorspace method is: 11386% 11387% MagickBooleanType MagickTransformImageColorspace(MagickWand *wand, 11388% const ColorspaceType colorspace) 11389% 11390% A description of each parameter follows: 11391% 11392% o wand: the magick wand. 11393% 11394% o colorspace: the image colorspace: UndefinedColorspace, RGBColorspace, 11395% GRAYColorspace, TransparentColorspace, OHTAColorspace, XYZColorspace, 11396% YCbCrColorspace, YCCColorspace, YIQColorspace, YPbPrColorspace, 11397% YPbPrColorspace, YUVColorspace, CMYKColorspace, sRGBColorspace, 11398% HSLColorspace, or HWBColorspace. 11399% 11400*/ 11401WandExport MagickBooleanType MagickTransformImageColorspace(MagickWand *wand, 11402 const ColorspaceType colorspace) 11403{ 11404 assert(wand != (MagickWand *) NULL); 11405 assert(wand->signature == WandSignature); 11406 if (wand->debug != MagickFalse) 11407 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11408 if (wand->images == (Image *) NULL) 11409 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11410 return(TransformImageColorspace(wand->images,colorspace,wand->exception)); 11411} 11412 11413/* 11414%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11415% % 11416% % 11417% % 11418% M a g i c k T r a n s p a r e n t P a i n t I m a g e % 11419% % 11420% % 11421% % 11422%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11423% 11424% MagickTransparentPaintImage() changes any pixel that matches color with the 11425% color defined by fill. 11426% 11427% The format of the MagickTransparentPaintImage method is: 11428% 11429% MagickBooleanType MagickTransparentPaintImage(MagickWand *wand, 11430% const PixelWand *target,const double alpha,const double fuzz, 11431% const MagickBooleanType invert) 11432% 11433% A description of each parameter follows: 11434% 11435% o wand: the magick wand. 11436% 11437% o target: Change this target color to specified alpha value within 11438% the image. 11439% 11440% o alpha: the level of transparency: 1.0 is fully opaque and 0.0 is fully 11441% transparent. 11442% 11443% o fuzz: By default target must match a particular pixel color 11444% exactly. However, in many cases two colors may differ by a small amount. 11445% The fuzz member of image defines how much tolerance is acceptable to 11446% consider two colors as the same. For example, set fuzz to 10 and the 11447% color red at intensities of 100 and 102 respectively are now interpreted 11448% as the same color for the purposes of the floodfill. 11449% 11450% o invert: paint any pixel that does not match the target color. 11451% 11452*/ 11453WandExport MagickBooleanType MagickTransparentPaintImage(MagickWand *wand, 11454 const PixelWand *target,const double alpha,const double fuzz, 11455 const MagickBooleanType invert) 11456{ 11457 MagickBooleanType 11458 status; 11459 11460 PixelInfo 11461 target_pixel; 11462 11463 assert(wand != (MagickWand *) NULL); 11464 assert(wand->signature == WandSignature); 11465 if (wand->debug != MagickFalse) 11466 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11467 if (wand->images == (Image *) NULL) 11468 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11469 PixelGetMagickColor(target,&target_pixel); 11470 wand->images->fuzz=fuzz; 11471 status=TransparentPaintImage(wand->images,&target_pixel,ClampToQuantum( 11472 QuantumRange*alpha),invert,wand->exception); 11473 return(status); 11474} 11475 11476/* 11477%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11478% % 11479% % 11480% % 11481% M a g i c k T r a n s p o s e I m a g e % 11482% % 11483% % 11484% % 11485%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11486% 11487% MagickTransposeImage() creates a vertical mirror image by reflecting the 11488% pixels around the central x-axis while rotating them 90-degrees. 11489% 11490% The format of the MagickTransposeImage method is: 11491% 11492% MagickBooleanType MagickTransposeImage(MagickWand *wand) 11493% 11494% A description of each parameter follows: 11495% 11496% o wand: the magick wand. 11497% 11498*/ 11499WandExport MagickBooleanType MagickTransposeImage(MagickWand *wand) 11500{ 11501 Image 11502 *transpose_image; 11503 11504 assert(wand != (MagickWand *) NULL); 11505 assert(wand->signature == WandSignature); 11506 if (wand->debug != MagickFalse) 11507 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11508 if (wand->images == (Image *) NULL) 11509 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11510 transpose_image=TransposeImage(wand->images,wand->exception); 11511 if (transpose_image == (Image *) NULL) 11512 return(MagickFalse); 11513 ReplaceImageInList(&wand->images,transpose_image); 11514 return(MagickTrue); 11515} 11516 11517/* 11518%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11519% % 11520% % 11521% % 11522% M a g i c k T r a n s v e r s e I m a g e % 11523% % 11524% % 11525% % 11526%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11527% 11528% MagickTransverseImage() creates a horizontal mirror image by reflecting the 11529% pixels around the central y-axis while rotating them 270-degrees. 11530% 11531% The format of the MagickTransverseImage method is: 11532% 11533% MagickBooleanType MagickTransverseImage(MagickWand *wand) 11534% 11535% A description of each parameter follows: 11536% 11537% o wand: the magick wand. 11538% 11539*/ 11540WandExport MagickBooleanType MagickTransverseImage(MagickWand *wand) 11541{ 11542 Image 11543 *transverse_image; 11544 11545 assert(wand != (MagickWand *) NULL); 11546 assert(wand->signature == WandSignature); 11547 if (wand->debug != MagickFalse) 11548 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11549 if (wand->images == (Image *) NULL) 11550 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11551 transverse_image=TransverseImage(wand->images,wand->exception); 11552 if (transverse_image == (Image *) NULL) 11553 return(MagickFalse); 11554 ReplaceImageInList(&wand->images,transverse_image); 11555 return(MagickTrue); 11556} 11557 11558/* 11559%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11560% % 11561% % 11562% % 11563% M a g i c k T r i m I m a g e % 11564% % 11565% % 11566% % 11567%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11568% 11569% MagickTrimImage() remove edges that are the background color from the image. 11570% 11571% The format of the MagickTrimImage method is: 11572% 11573% MagickBooleanType MagickTrimImage(MagickWand *wand,const double fuzz) 11574% 11575% A description of each parameter follows: 11576% 11577% o wand: the magick wand. 11578% 11579% o fuzz: By default target must match a particular pixel color 11580% exactly. However, in many cases two colors may differ by a small amount. 11581% The fuzz member of image defines how much tolerance is acceptable to 11582% consider two colors as the same. For example, set fuzz to 10 and the 11583% color red at intensities of 100 and 102 respectively are now interpreted 11584% as the same color for the purposes of the floodfill. 11585% 11586*/ 11587WandExport MagickBooleanType MagickTrimImage(MagickWand *wand,const double fuzz) 11588{ 11589 Image 11590 *trim_image; 11591 11592 assert(wand != (MagickWand *) NULL); 11593 assert(wand->signature == WandSignature); 11594 if (wand->debug != MagickFalse) 11595 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11596 if (wand->images == (Image *) NULL) 11597 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11598 wand->images->fuzz=fuzz; 11599 trim_image=TrimImage(wand->images,wand->exception); 11600 if (trim_image == (Image *) NULL) 11601 return(MagickFalse); 11602 ReplaceImageInList(&wand->images,trim_image); 11603 return(MagickTrue); 11604} 11605 11606/* 11607%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11608% % 11609% % 11610% % 11611% M a g i c k U n i q u e I m a g e C o l o r s % 11612% % 11613% % 11614% % 11615%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11616% 11617% MagickUniqueImageColors() discards all but one of any pixel color. 11618% 11619% The format of the MagickUniqueImageColors method is: 11620% 11621% MagickBooleanType MagickUniqueImageColors(MagickWand *wand) 11622% 11623% A description of each parameter follows: 11624% 11625% o wand: the magick wand. 11626% 11627*/ 11628WandExport MagickBooleanType MagickUniqueImageColors(MagickWand *wand) 11629{ 11630 Image 11631 *unique_image; 11632 11633 assert(wand != (MagickWand *) NULL); 11634 assert(wand->signature == WandSignature); 11635 if (wand->debug != MagickFalse) 11636 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11637 if (wand->images == (Image *) NULL) 11638 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11639 unique_image=UniqueImageColors(wand->images,wand->exception); 11640 if (unique_image == (Image *) NULL) 11641 return(MagickFalse); 11642 ReplaceImageInList(&wand->images,unique_image); 11643 return(MagickTrue); 11644} 11645 11646/* 11647%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11648% % 11649% % 11650% % 11651% M a g i c k U n s h a r p M a s k I m a g e % 11652% % 11653% % 11654% % 11655%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11656% 11657% MagickUnsharpMaskImage() sharpens an image. We convolve the image with a 11658% Gaussian operator of the given radius and standard deviation (sigma). 11659% For reasonable results, radius should be larger than sigma. Use a radius 11660% of 0 and UnsharpMaskImage() selects a suitable radius for you. 11661% 11662% The format of the MagickUnsharpMaskImage method is: 11663% 11664% MagickBooleanType MagickUnsharpMaskImage(MagickWand *wand, 11665% const double radius,const double sigma,const double amount, 11666% const double threshold) 11667% 11668% A description of each parameter follows: 11669% 11670% o wand: the magick wand. 11671% 11672% o radius: the radius of the Gaussian, in pixels, not counting the center 11673% pixel. 11674% 11675% o sigma: the standard deviation of the Gaussian, in pixels. 11676% 11677% o amount: the percentage of the difference between the original and the 11678% blur image that is added back into the original. 11679% 11680% o threshold: the threshold in pixels needed to apply the diffence amount. 11681% 11682*/ 11683WandExport MagickBooleanType MagickUnsharpMaskImage(MagickWand *wand, 11684 const double radius,const double sigma,const double amount, 11685 const double threshold) 11686{ 11687 Image 11688 *unsharp_image; 11689 11690 assert(wand != (MagickWand *) NULL); 11691 assert(wand->signature == WandSignature); 11692 if (wand->debug != MagickFalse) 11693 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11694 if (wand->images == (Image *) NULL) 11695 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11696 unsharp_image=UnsharpMaskImage(wand->images,radius,sigma,amount,threshold, 11697 wand->exception); 11698 if (unsharp_image == (Image *) NULL) 11699 return(MagickFalse); 11700 ReplaceImageInList(&wand->images,unsharp_image); 11701 return(MagickTrue); 11702} 11703 11704/* 11705%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11706% % 11707% % 11708% % 11709% M a g i c k V i g n e t t e I m a g e % 11710% % 11711% % 11712% % 11713%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11714% 11715% MagickVignetteImage() softens the edges of the image in vignette style. 11716% 11717% The format of the MagickVignetteImage method is: 11718% 11719% MagickBooleanType MagickVignetteImage(MagickWand *wand, 11720% const double black_point,const double white_point,const ssize_t x, 11721% const ssize_t y) 11722% 11723% A description of each parameter follows: 11724% 11725% o wand: the magick wand. 11726% 11727% o black_point: the black point. 11728% 11729% o white_point: the white point. 11730% 11731% o x, y: Define the x and y ellipse offset. 11732% 11733*/ 11734WandExport MagickBooleanType MagickVignetteImage(MagickWand *wand, 11735 const double black_point,const double white_point,const ssize_t x,const ssize_t y) 11736{ 11737 Image 11738 *vignette_image; 11739 11740 assert(wand != (MagickWand *) NULL); 11741 assert(wand->signature == WandSignature); 11742 if (wand->debug != MagickFalse) 11743 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11744 if (wand->images == (Image *) NULL) 11745 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11746 vignette_image=VignetteImage(wand->images,black_point,white_point,x,y, 11747 wand->exception); 11748 if (vignette_image == (Image *) NULL) 11749 return(MagickFalse); 11750 ReplaceImageInList(&wand->images,vignette_image); 11751 return(MagickTrue); 11752} 11753 11754/* 11755%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11756% % 11757% % 11758% % 11759% M a g i c k W a v e I m a g e % 11760% % 11761% % 11762% % 11763%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11764% 11765% MagickWaveImage() creates a "ripple" effect in the image by shifting 11766% the pixels vertically along a sine wave whose amplitude and wavelength 11767% is specified by the given parameters. 11768% 11769% The format of the MagickWaveImage method is: 11770% 11771% MagickBooleanType MagickWaveImage(MagickWand *wand, 11772% const double amplitude,const double wave_length, 11773% const PixelInterpolateMethod method) 11774% 11775% A description of each parameter follows: 11776% 11777% o wand: the magick wand. 11778% 11779% o amplitude, wave_length: Define the amplitude and wave length of the 11780% sine wave. 11781% 11782% o method: the pixel interpolation method. 11783% 11784*/ 11785WandExport MagickBooleanType MagickWaveImage(MagickWand *wand, 11786 const double amplitude,const double wave_length, 11787 const PixelInterpolateMethod method) 11788{ 11789 Image 11790 *wave_image; 11791 11792 assert(wand != (MagickWand *) NULL); 11793 assert(wand->signature == WandSignature); 11794 if (wand->debug != MagickFalse) 11795 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11796 if (wand->images == (Image *) NULL) 11797 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11798 wave_image=WaveImage(wand->images,amplitude,wave_length,method, 11799 wand->exception); 11800 if (wave_image == (Image *) NULL) 11801 return(MagickFalse); 11802 ReplaceImageInList(&wand->images,wave_image); 11803 return(MagickTrue); 11804} 11805 11806/* 11807%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11808% % 11809% % 11810% % 11811% M a g i c k W h i t e T h r e s h o l d I m a g e % 11812% % 11813% % 11814% % 11815%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11816% 11817% MagickWhiteThresholdImage() is like ThresholdImage() but force all pixels 11818% above the threshold into white while leaving all pixels below the threshold 11819% unchanged. 11820% 11821% The format of the MagickWhiteThresholdImage method is: 11822% 11823% MagickBooleanType MagickWhiteThresholdImage(MagickWand *wand, 11824% const PixelWand *threshold) 11825% 11826% A description of each parameter follows: 11827% 11828% o wand: the magick wand. 11829% 11830% o threshold: the pixel wand. 11831% 11832*/ 11833WandExport MagickBooleanType MagickWhiteThresholdImage(MagickWand *wand, 11834 const PixelWand *threshold) 11835{ 11836 char 11837 thresholds[MaxTextExtent]; 11838 11839 assert(wand != (MagickWand *) NULL); 11840 assert(wand->signature == WandSignature); 11841 if (wand->debug != MagickFalse) 11842 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11843 if (wand->images == (Image *) NULL) 11844 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11845 (void) FormatLocaleString(thresholds,MaxTextExtent, 11846 QuantumFormat "," QuantumFormat "," QuantumFormat "," QuantumFormat, 11847 PixelGetRedQuantum(threshold),PixelGetGreenQuantum(threshold), 11848 PixelGetBlueQuantum(threshold),PixelGetAlphaQuantum(threshold)); 11849 return(WhiteThresholdImage(wand->images,thresholds,wand->exception)); 11850} 11851 11852/* 11853%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11854% % 11855% % 11856% % 11857% M a g i c k W r i t e I m a g e % 11858% % 11859% % 11860% % 11861%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11862% 11863% MagickWriteImage() writes an image to the specified filename. If the 11864% filename parameter is NULL, the image is written to the filename set 11865% by MagickReadImage() or MagickSetImageFilename(). 11866% 11867% The format of the MagickWriteImage method is: 11868% 11869% MagickBooleanType MagickWriteImage(MagickWand *wand, 11870% const char *filename) 11871% 11872% A description of each parameter follows: 11873% 11874% o wand: the magick wand. 11875% 11876% o filename: the image filename. 11877% 11878% 11879*/ 11880WandExport MagickBooleanType MagickWriteImage(MagickWand *wand, 11881 const char *filename) 11882{ 11883 Image 11884 *image; 11885 11886 ImageInfo 11887 *write_info; 11888 11889 MagickBooleanType 11890 status; 11891 11892 assert(wand != (MagickWand *) NULL); 11893 assert(wand->signature == WandSignature); 11894 if (wand->debug != MagickFalse) 11895 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11896 if (wand->images == (Image *) NULL) 11897 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11898 if (filename != (const char *) NULL) 11899 (void) CopyMagickString(wand->images->filename,filename,MaxTextExtent); 11900 image=CloneImage(wand->images,0,0,MagickTrue,wand->exception); 11901 if (image == (Image *) NULL) 11902 return(MagickFalse); 11903 write_info=CloneImageInfo(wand->image_info); 11904 write_info->adjoin=MagickTrue; 11905 status=WriteImage(write_info,image,wand->exception); 11906 image=DestroyImage(image); 11907 write_info=DestroyImageInfo(write_info); 11908 return(status); 11909} 11910 11911/* 11912%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11913% % 11914% % 11915% % 11916% M a g i c k W r i t e I m a g e F i l e % 11917% % 11918% % 11919% % 11920%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11921% 11922% MagickWriteImageFile() writes an image to an open file descriptor. 11923% 11924% The format of the MagickWriteImageFile method is: 11925% 11926% MagickBooleanType MagickWriteImageFile(MagickWand *wand,FILE *file) 11927% 11928% A description of each parameter follows: 11929% 11930% o wand: the magick wand. 11931% 11932% o file: the file descriptor. 11933% 11934*/ 11935WandExport MagickBooleanType MagickWriteImageFile(MagickWand *wand,FILE *file) 11936{ 11937 Image 11938 *image; 11939 11940 ImageInfo 11941 *write_info; 11942 11943 MagickBooleanType 11944 status; 11945 11946 assert(wand != (MagickWand *) NULL); 11947 assert(wand->signature == WandSignature); 11948 assert(file != (FILE *) NULL); 11949 if (wand->debug != MagickFalse) 11950 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11951 if (wand->images == (Image *) NULL) 11952 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11953 image=CloneImage(wand->images,0,0,MagickTrue,wand->exception); 11954 if (image == (Image *) NULL) 11955 return(MagickFalse); 11956 write_info=CloneImageInfo(wand->image_info); 11957 SetImageInfoFile(write_info,file); 11958 write_info->adjoin=MagickTrue; 11959 status=WriteImage(write_info,image,wand->exception); 11960 write_info=DestroyImageInfo(write_info); 11961 image=DestroyImage(image); 11962 return(status); 11963} 11964 11965/* 11966%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11967% % 11968% % 11969% % 11970% M a g i c k W r i t e I m a g e s % 11971% % 11972% % 11973% % 11974%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11975% 11976% MagickWriteImages() writes an image or image sequence. 11977% 11978% The format of the MagickWriteImages method is: 11979% 11980% MagickBooleanType MagickWriteImages(MagickWand *wand, 11981% const char *filename,const MagickBooleanType adjoin) 11982% 11983% A description of each parameter follows: 11984% 11985% o wand: the magick wand. 11986% 11987% o filename: the image filename. 11988% 11989% o adjoin: join images into a single multi-image file. 11990% 11991*/ 11992WandExport MagickBooleanType MagickWriteImages(MagickWand *wand, 11993 const char *filename,const MagickBooleanType adjoin) 11994{ 11995 ImageInfo 11996 *write_info; 11997 11998 MagickBooleanType 11999 status; 12000 12001 assert(wand != (MagickWand *) NULL); 12002 assert(wand->signature == WandSignature); 12003 if (wand->debug != MagickFalse) 12004 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 12005 if (wand->images == (Image *) NULL) 12006 ThrowWandException(WandError,"ContainsNoImages",wand->name); 12007 write_info=CloneImageInfo(wand->image_info); 12008 write_info->adjoin=adjoin; 12009 status=WriteImages(write_info,wand->images,filename,wand->exception); 12010 write_info=DestroyImageInfo(write_info); 12011 return(status); 12012} 12013 12014/* 12015%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12016% % 12017% % 12018% % 12019% M a g i c k W r i t e I m a g e s F i l e % 12020% % 12021% % 12022% % 12023%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12024% 12025% MagickWriteImagesFile() writes an image sequence to an open file descriptor. 12026% 12027% The format of the MagickWriteImagesFile method is: 12028% 12029% MagickBooleanType MagickWriteImagesFile(MagickWand *wand,FILE *file) 12030% 12031% A description of each parameter follows: 12032% 12033% o wand: the magick wand. 12034% 12035% o file: the file descriptor. 12036% 12037*/ 12038WandExport MagickBooleanType MagickWriteImagesFile(MagickWand *wand,FILE *file) 12039{ 12040 ImageInfo 12041 *write_info; 12042 12043 MagickBooleanType 12044 status; 12045 12046 assert(wand != (MagickWand *) NULL); 12047 assert(wand->signature == WandSignature); 12048 if (wand->debug != MagickFalse) 12049 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 12050 if (wand->images == (Image *) NULL) 12051 ThrowWandException(WandError,"ContainsNoImages",wand->name); 12052 write_info=CloneImageInfo(wand->image_info); 12053 SetImageInfoFile(write_info,file); 12054 write_info->adjoin=MagickTrue; 12055 status=WriteImages(write_info,wand->images,(const char *) NULL, 12056 wand->exception); 12057 write_info=DestroyImageInfo(write_info); 12058 return(status); 12059} 12060