magick-image.c revision 8b9f21cab4c50eb7d6e558a7a43a68833fe0b55d
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% Cristy % 23% August 2003 % 24% % 25% % 26% Copyright 1999-2016 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#include "MagickCore/image-private.h" 55 56/* 57 Define declarations. 58*/ 59#define MagickWandId "MagickWand" 60 61/* 62%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 63% % 64% % 65% % 66+ 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 % 67% % 68% % 69% % 70%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 71% 72% CloneMagickWandFromImages() clones the magick wand and inserts a new image 73% list. 74% 75% The format of the CloneMagickWandFromImages method is: 76% 77% MagickWand *CloneMagickWandFromImages(const MagickWand *wand, 78% Image *images) 79% 80% A description of each parameter follows: 81% 82% o wand: the magick wand. 83% 84% o images: replace the image list with these image(s). 85% 86*/ 87static MagickWand *CloneMagickWandFromImages(const MagickWand *wand, 88 Image *images) 89{ 90 MagickWand 91 *clone_wand; 92 93 assert(wand != (MagickWand *) NULL); 94 assert(wand->signature == MagickWandSignature); 95 if (wand->debug != MagickFalse) 96 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 97 clone_wand=(MagickWand *) AcquireMagickMemory(sizeof(*clone_wand)); 98 if (clone_wand == (MagickWand *) NULL) 99 ThrowWandFatalException(ResourceLimitFatalError,"MemoryAllocationFailed", 100 images->filename); 101 (void) ResetMagickMemory(clone_wand,0,sizeof(*clone_wand)); 102 clone_wand->id=AcquireWandId(); 103 (void) FormatLocaleString(clone_wand->name,MagickPathExtent,"%s-%.20g", 104 MagickWandId,(double) clone_wand->id); 105 clone_wand->exception=AcquireExceptionInfo(); 106 InheritException(clone_wand->exception,wand->exception); 107 clone_wand->image_info=CloneImageInfo(wand->image_info); 108 clone_wand->images=images; 109 clone_wand->debug=IsEventLogging(); 110 clone_wand->signature=MagickWandSignature; 111 if (clone_wand->debug != MagickFalse) 112 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",clone_wand->name); 113 return(clone_wand); 114} 115 116/* 117%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 118% % 119% % 120% % 121% G e t I m a g e F r o m M a g i c k W a n d % 122% % 123% % 124% % 125%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 126% 127% GetImageFromMagickWand() returns the current image from the magick wand. 128% 129% The format of the GetImageFromMagickWand method is: 130% 131% Image *GetImageFromMagickWand(const MagickWand *wand) 132% 133% A description of each parameter follows: 134% 135% o wand: the magick wand. 136% 137*/ 138WandExport Image *GetImageFromMagickWand(const MagickWand *wand) 139{ 140 assert(wand != (MagickWand *) NULL); 141 assert(wand->signature == MagickWandSignature); 142 if (wand->debug != MagickFalse) 143 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 144 if (wand->images == (Image *) NULL) 145 { 146 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 147 "ContainsNoImages","`%s'",wand->name); 148 return((Image *) NULL); 149 } 150 return(wand->images); 151} 152 153/* 154%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 155% % 156% % 157% % 158% 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 % 159% % 160% % 161% % 162%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 163% 164% MagickAdaptiveBlurImage() adaptively blurs the image by blurring 165% less intensely near image edges and more intensely far from edges. We 166% blur the image with a Gaussian operator of the given radius and standard 167% deviation (sigma). For reasonable results, radius should be larger than 168% sigma. Use a radius of 0 and MagickAdaptiveBlurImage() selects a 169% suitable radius for you. 170% 171% The format of the MagickAdaptiveBlurImage method is: 172% 173% MagickBooleanType MagickAdaptiveBlurImage(MagickWand *wand, 174% const double radius,const double sigma) 175% 176% A description of each parameter follows: 177% 178% o wand: the magick wand. 179% 180% o radius: the radius of the Gaussian, in pixels, not counting the center 181% pixel. 182% 183% o sigma: the standard deviation of the Gaussian, in pixels. 184% 185*/ 186WandExport MagickBooleanType MagickAdaptiveBlurImage(MagickWand *wand, 187 const double radius,const double sigma) 188{ 189 Image 190 *sharp_image; 191 192 assert(wand != (MagickWand *) NULL); 193 assert(wand->signature == MagickWandSignature); 194 if (wand->debug != MagickFalse) 195 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 196 if (wand->images == (Image *) NULL) 197 ThrowWandException(WandError,"ContainsNoImages",wand->name); 198 sharp_image=AdaptiveBlurImage(wand->images,radius,sigma,wand->exception); 199 if (sharp_image == (Image *) NULL) 200 return(MagickFalse); 201 ReplaceImageInList(&wand->images,sharp_image); 202 return(MagickTrue); 203} 204 205/* 206%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 207% % 208% % 209% % 210% 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 % 211% % 212% % 213% % 214%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 215% 216% MagickAdaptiveResizeImage() adaptively resize image with data dependent 217% triangulation. 218% 219% MagickBooleanType MagickAdaptiveResizeImage(MagickWand *wand, 220% const size_t columns,const size_t rows) 221% 222% A description of each parameter follows: 223% 224% o wand: the magick wand. 225% 226% o columns: the number of columns in the scaled image. 227% 228% o rows: the number of rows in the scaled image. 229% 230*/ 231WandExport MagickBooleanType MagickAdaptiveResizeImage(MagickWand *wand, 232 const size_t columns,const size_t rows) 233{ 234 Image 235 *resize_image; 236 237 assert(wand != (MagickWand *) NULL); 238 assert(wand->signature == MagickWandSignature); 239 if (wand->debug != MagickFalse) 240 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 241 if (wand->images == (Image *) NULL) 242 ThrowWandException(WandError,"ContainsNoImages",wand->name); 243 resize_image=AdaptiveResizeImage(wand->images,columns,rows,wand->exception); 244 if (resize_image == (Image *) NULL) 245 return(MagickFalse); 246 ReplaceImageInList(&wand->images,resize_image); 247 return(MagickTrue); 248} 249 250/* 251%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 252% % 253% % 254% % 255% 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 % 256% % 257% % 258% % 259%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 260% 261% MagickAdaptiveSharpenImage() adaptively sharpens the image by sharpening 262% more intensely near image edges and less intensely far from edges. We 263% sharpen the image with a Gaussian operator of the given radius and standard 264% deviation (sigma). For reasonable results, radius should be larger than 265% sigma. Use a radius of 0 and MagickAdaptiveSharpenImage() selects a 266% suitable radius for you. 267% 268% The format of the MagickAdaptiveSharpenImage method is: 269% 270% MagickBooleanType MagickAdaptiveSharpenImage(MagickWand *wand, 271% const double radius,const double sigma) 272% 273% A description of each parameter follows: 274% 275% o wand: the magick wand. 276% 277% o radius: the radius of the Gaussian, in pixels, not counting the center 278% pixel. 279% 280% o sigma: the standard deviation of the Gaussian, in pixels. 281% 282*/ 283WandExport MagickBooleanType MagickAdaptiveSharpenImage(MagickWand *wand, 284 const double radius,const double sigma) 285{ 286 Image 287 *sharp_image; 288 289 assert(wand != (MagickWand *) NULL); 290 assert(wand->signature == MagickWandSignature); 291 if (wand->debug != MagickFalse) 292 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 293 if (wand->images == (Image *) NULL) 294 ThrowWandException(WandError,"ContainsNoImages",wand->name); 295 sharp_image=AdaptiveSharpenImage(wand->images,radius,sigma,wand->exception); 296 if (sharp_image == (Image *) NULL) 297 return(MagickFalse); 298 ReplaceImageInList(&wand->images,sharp_image); 299 return(MagickTrue); 300} 301 302/* 303%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 304% % 305% % 306% % 307% 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 % 308% % 309% % 310% % 311%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 312% 313% MagickAdaptiveThresholdImage() selects an individual threshold for each pixel 314% based on the range of intensity values in its local neighborhood. This 315% allows for thresholding of an image whose global intensity histogram 316% doesn't contain distinctive peaks. 317% 318% The format of the AdaptiveThresholdImage method is: 319% 320% MagickBooleanType MagickAdaptiveThresholdImage(MagickWand *wand, 321% const size_t width,const size_t height,const double bias) 322% 323% A description of each parameter follows: 324% 325% o wand: the magick wand. 326% 327% o width: the width of the local neighborhood. 328% 329% o height: the height of the local neighborhood. 330% 331% o offset: the mean bias. 332% 333*/ 334WandExport MagickBooleanType MagickAdaptiveThresholdImage(MagickWand *wand, 335 const size_t width,const size_t height,const double bias) 336{ 337 Image 338 *threshold_image; 339 340 assert(wand != (MagickWand *) NULL); 341 assert(wand->signature == MagickWandSignature); 342 if (wand->debug != MagickFalse) 343 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 344 if (wand->images == (Image *) NULL) 345 ThrowWandException(WandError,"ContainsNoImages",wand->name); 346 threshold_image=AdaptiveThresholdImage(wand->images,width,height,bias, 347 wand->exception); 348 if (threshold_image == (Image *) NULL) 349 return(MagickFalse); 350 ReplaceImageInList(&wand->images,threshold_image); 351 return(MagickTrue); 352} 353 354/* 355%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 356% % 357% % 358% % 359% M a g i c k A d d I m a g e % 360% % 361% % 362% % 363%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 364% 365% MagickAddImage() adds a clone of the images from the second wand and 366% inserts them into the first wand. 367% 368% Use MagickSetLastIterator(), to append new images into an existing wand, 369% current image will be set to last image so later adds with also be 370% appened to end of wand. 371% 372% Use MagickSetFirstIterator() to prepend new images into wand, any more 373% images added will also be prepended before other images in the wand. 374% However the order of a list of new images will not change. 375% 376% Otherwise the new images will be inserted just after the current image, 377% and any later image will also be added after this current image but 378% before the previously added images. Caution is advised when multiple 379% image adds are inserted into the middle of the wand image list. 380% 381% The format of the MagickAddImage method is: 382% 383% MagickBooleanType MagickAddImage(MagickWand *wand, 384% const MagickWand *add_wand) 385% 386% A description of each parameter follows: 387% 388% o wand: the magick wand. 389% 390% o add_wand: A wand that contains the image list to be added 391% 392*/ 393static inline MagickBooleanType InsertImageInWand(MagickWand *wand, 394 Image *images) 395{ 396 if (wand->images == (Image *) NULL) 397 { 398 /* 399 No images in wand, just add them, set current as appropriate. 400 */ 401 if (wand->insert_before != MagickFalse) 402 wand->images=GetFirstImageInList(images); 403 else 404 wand->images=GetLastImageInList(images); 405 return(MagickTrue); 406 } 407 /* user jumped to first image, so prepend new images - remain active */ 408 if ((wand->insert_before != MagickFalse) && 409 (wand->images->previous == (Image *) NULL)) 410 { 411 PrependImageToList(&wand->images,images); 412 wand->images=GetFirstImageInList(images); 413 return(MagickTrue); 414 } 415 /* 416 Note you should never have 'insert_before' true when current image is not 417 the first image in the wand! That is no insert before current image, only 418 after current image 419 */ 420 if (wand->images->next == (Image *) NULL) 421 { 422 /* 423 At last image, append new images. 424 */ 425 InsertImageInList(&wand->images,images); 426 wand->images=GetLastImageInList(images); 427 return(MagickTrue); 428 } 429 /* 430 Insert new images, just after the current image. 431 */ 432 InsertImageInList(&wand->images,images); 433 return(MagickTrue); 434} 435 436WandExport MagickBooleanType MagickAddImage(MagickWand *wand, 437 const MagickWand *add_wand) 438{ 439 Image 440 *images; 441 442 assert(wand != (MagickWand *) NULL); 443 assert(wand->signature == MagickWandSignature); 444 if (wand->debug != MagickFalse) 445 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 446 assert(add_wand != (MagickWand *) NULL); 447 assert(add_wand->signature == MagickWandSignature); 448 if (add_wand->images == (Image *) NULL) 449 ThrowWandException(WandError,"ContainsNoImages",add_wand->name); 450 /* 451 Clone images in second wand, and insert into first. 452 */ 453 images=CloneImageList(add_wand->images,wand->exception); 454 if (images == (Image *) NULL) 455 return(MagickFalse); 456 return(InsertImageInWand(wand,images)); 457} 458 459/* 460%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 461% % 462% % 463% % 464% M a g i c k A d d N o i s e I m a g e % 465% % 466% % 467% % 468%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 469% 470% MagickAddNoiseImage() adds random noise to the image. 471% 472% The format of the MagickAddNoiseImage method is: 473% 474% MagickBooleanType MagickAddNoiseImage(MagickWand *wand, 475% const NoiseType noise_type,const double attenuate) 476% 477% A description of each parameter follows: 478% 479% o wand: the magick wand. 480% 481% o noise_type: The type of noise: Uniform, Gaussian, Multiplicative, 482% Impulse, Laplacian, or Poisson. 483% 484% o attenuate: attenuate the random distribution. 485% 486*/ 487WandExport MagickBooleanType MagickAddNoiseImage(MagickWand *wand, 488 const NoiseType noise_type,const double attenuate) 489{ 490 Image 491 *noise_image; 492 493 assert(wand != (MagickWand *) NULL); 494 assert(wand->signature == MagickWandSignature); 495 if (wand->debug != MagickFalse) 496 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 497 if (wand->images == (Image *) NULL) 498 ThrowWandException(WandError,"ContainsNoImages",wand->name); 499 noise_image=AddNoiseImage(wand->images,noise_type,attenuate,wand->exception); 500 if (noise_image == (Image *) NULL) 501 return(MagickFalse); 502 ReplaceImageInList(&wand->images,noise_image); 503 return(MagickTrue); 504} 505 506/* 507%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 508% % 509% % 510% % 511% 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 % 512% % 513% % 514% % 515%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 516% 517% MagickAffineTransformImage() transforms an image as dictated by the affine 518% matrix of the drawing wand. 519% 520% The format of the MagickAffineTransformImage method is: 521% 522% MagickBooleanType MagickAffineTransformImage(MagickWand *wand, 523% const DrawingWand *drawing_wand) 524% 525% A description of each parameter follows: 526% 527% o wand: the magick wand. 528% 529% o drawing_wand: the draw wand. 530% 531*/ 532WandExport MagickBooleanType MagickAffineTransformImage(MagickWand *wand, 533 const DrawingWand *drawing_wand) 534{ 535 DrawInfo 536 *draw_info; 537 538 Image 539 *affine_image; 540 541 assert(wand != (MagickWand *) NULL); 542 assert(wand->signature == MagickWandSignature); 543 if (wand->debug != MagickFalse) 544 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 545 if (wand->images == (Image *) NULL) 546 ThrowWandException(WandError,"ContainsNoImages",wand->name); 547 draw_info=PeekDrawingWand(drawing_wand); 548 if (draw_info == (DrawInfo *) NULL) 549 return(MagickFalse); 550 affine_image=AffineTransformImage(wand->images,&draw_info->affine, 551 wand->exception); 552 draw_info=DestroyDrawInfo(draw_info); 553 if (affine_image == (Image *) NULL) 554 return(MagickFalse); 555 ReplaceImageInList(&wand->images,affine_image); 556 return(MagickTrue); 557} 558 559/* 560%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 561% % 562% % 563% % 564% M a g i c k A n n o t a t e I m a g e % 565% % 566% % 567% % 568%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 569% 570% MagickAnnotateImage() annotates an image with text. 571% 572% The format of the MagickAnnotateImage method is: 573% 574% MagickBooleanType MagickAnnotateImage(MagickWand *wand, 575% const DrawingWand *drawing_wand,const double x,const double y, 576% const double angle,const char *text) 577% 578% A description of each parameter follows: 579% 580% o wand: the magick wand. 581% 582% o drawing_wand: the draw wand. 583% 584% o x: x ordinate to left of text 585% 586% o y: y ordinate to text baseline 587% 588% o angle: rotate text relative to this angle. 589% 590% o text: text to draw 591% 592*/ 593WandExport MagickBooleanType MagickAnnotateImage(MagickWand *wand, 594 const DrawingWand *drawing_wand,const double x,const double y, 595 const double angle,const char *text) 596{ 597 char 598 geometry[MagickPathExtent]; 599 600 DrawInfo 601 *draw_info; 602 603 MagickBooleanType 604 status; 605 606 assert(wand != (MagickWand *) NULL); 607 assert(wand->signature == MagickWandSignature); 608 if (wand->debug != MagickFalse) 609 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 610 if (wand->images == (Image *) NULL) 611 ThrowWandException(WandError,"ContainsNoImages",wand->name); 612 draw_info=PeekDrawingWand(drawing_wand); 613 if (draw_info == (DrawInfo *) NULL) 614 return(MagickFalse); 615 (void) CloneString(&draw_info->text,text); 616 (void) FormatLocaleString(geometry,MagickPathExtent,"%+g%+g",x,y); 617 draw_info->affine.sx=cos((double) DegreesToRadians(fmod(angle,360.0))); 618 draw_info->affine.rx=sin((double) DegreesToRadians(fmod(angle,360.0))); 619 draw_info->affine.ry=(-sin((double) DegreesToRadians(fmod(angle,360.0)))); 620 draw_info->affine.sy=cos((double) DegreesToRadians(fmod(angle,360.0))); 621 (void) CloneString(&draw_info->geometry,geometry); 622 status=AnnotateImage(wand->images,draw_info,wand->exception); 623 draw_info=DestroyDrawInfo(draw_info); 624 return(status); 625} 626 627/* 628%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 629% % 630% % 631% % 632% M a g i c k A n i m a t e I m a g e s % 633% % 634% % 635% % 636%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 637% 638% MagickAnimateImages() animates an image or image sequence. 639% 640% The format of the MagickAnimateImages method is: 641% 642% MagickBooleanType MagickAnimateImages(MagickWand *wand, 643% const char *server_name) 644% 645% A description of each parameter follows: 646% 647% o wand: the magick wand. 648% 649% o server_name: the X server name. 650% 651*/ 652WandExport MagickBooleanType MagickAnimateImages(MagickWand *wand, 653 const char *server_name) 654{ 655 MagickBooleanType 656 status; 657 658 assert(wand != (MagickWand *) NULL); 659 assert(wand->signature == MagickWandSignature); 660 if (wand->debug != MagickFalse) 661 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 662 (void) CloneString(&wand->image_info->server_name,server_name); 663 status=AnimateImages(wand->image_info,wand->images,wand->exception); 664 return(status); 665} 666 667/* 668%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 669% % 670% % 671% % 672% M a g i c k A p p e n d I m a g e s % 673% % 674% % 675% % 676%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 677% 678% MagickAppendImages() append the images in a wand from the current image 679% onwards, creating a new wand with the single image result. This is 680% affected by the gravity and background settings of the first image. 681% 682% Typically you would call either MagickResetIterator() or 683% MagickSetFirstImage() before calling this function to ensure that all 684% the images in the wand's image list will be appended together. 685% 686% The format of the MagickAppendImages method is: 687% 688% MagickWand *MagickAppendImages(MagickWand *wand, 689% const MagickBooleanType stack) 690% 691% A description of each parameter follows: 692% 693% o wand: the magick wand. 694% 695% o stack: By default, images are stacked left-to-right. Set stack to 696% MagickTrue to stack them top-to-bottom. 697% 698*/ 699WandExport MagickWand *MagickAppendImages(MagickWand *wand, 700 const MagickBooleanType stack) 701{ 702 Image 703 *append_image; 704 705 assert(wand != (MagickWand *) NULL); 706 assert(wand->signature == MagickWandSignature); 707 if (wand->debug != MagickFalse) 708 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 709 if (wand->images == (Image *) NULL) 710 return((MagickWand *) NULL); 711 append_image=AppendImages(wand->images,stack,wand->exception); 712 if (append_image == (Image *) NULL) 713 return((MagickWand *) NULL); 714 return(CloneMagickWandFromImages(wand,append_image)); 715} 716 717/* 718%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 719% % 720% % 721% % 722% M a g i c k A u t o G a m m a I m a g e % 723% % 724% % 725% % 726%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 727% 728% MagickAutoGammaImage() extracts the 'mean' from the image and adjust the 729% image to try make set its gamma appropriatally. 730% 731% The format of the MagickAutoGammaImage method is: 732% 733% MagickBooleanType MagickAutoGammaImage(MagickWand *wand) 734% 735% A description of each parameter follows: 736% 737% o wand: the magick wand. 738% 739*/ 740WandExport MagickBooleanType MagickAutoGammaImage(MagickWand *wand) 741{ 742 MagickBooleanType 743 status; 744 745 assert(wand != (MagickWand *) NULL); 746 assert(wand->signature == MagickWandSignature); 747 if (wand->debug != MagickFalse) 748 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 749 if (wand->images == (Image *) NULL) 750 ThrowWandException(WandError,"ContainsNoImages",wand->name); 751 status=AutoGammaImage(wand->images,wand->exception); 752 return(status); 753} 754 755/* 756%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 757% % 758% % 759% % 760% M a g i c k A u t o L e v e l I m a g e % 761% % 762% % 763% % 764%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 765% 766% MagickAutoLevelImage() adjusts the levels of a particular image channel by 767% scaling the minimum and maximum values to the full quantum range. 768% 769% The format of the MagickAutoLevelImage method is: 770% 771% MagickBooleanType MagickAutoLevelImage(MagickWand *wand) 772% 773% A description of each parameter follows: 774% 775% o wand: the magick wand. 776% 777*/ 778WandExport MagickBooleanType MagickAutoLevelImage(MagickWand *wand) 779{ 780 MagickBooleanType 781 status; 782 783 assert(wand != (MagickWand *) NULL); 784 assert(wand->signature == MagickWandSignature); 785 if (wand->debug != MagickFalse) 786 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 787 if (wand->images == (Image *) NULL) 788 ThrowWandException(WandError,"ContainsNoImages",wand->name); 789 status=AutoLevelImage(wand->images,wand->exception); 790 return(status); 791} 792 793/* 794%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 795% % 796% % 797% % 798% M a g i c k A u t o O r i e n t I m a g e % 799% % 800% % 801% % 802%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 803% 804% MagickAutoOrientImage() adjusts an image so that its orientation is suitable 805$ for viewing (i.e. top-left orientation). 806% 807% The format of the MagickAutoOrientImage method is: 808% 809% MagickBooleanType MagickAutoOrientImage(MagickWand *image) 810% 811% A description of each parameter follows: 812% 813% o wand: the magick wand. 814% 815*/ 816WandExport MagickBooleanType MagickAutoOrientImage(MagickWand *wand) 817{ 818 819 Image 820 *orient_image; 821 822 assert(wand != (MagickWand *) NULL); 823 assert(wand->signature == MagickWandSignature); 824 if (wand->debug != MagickFalse) 825 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 826 if (wand->images == (Image *) NULL) 827 ThrowWandException(WandError,"ContainsNoImages",wand->name); 828 orient_image=AutoOrientImage(wand->images,wand->images->orientation, 829 wand->exception); 830 if (orient_image == (Image *) NULL) 831 return(MagickFalse); 832 ReplaceImageInList(&wand->images,orient_image); 833 return(MagickTrue); 834} 835 836/* 837%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 838% % 839% % 840% % 841% 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 % 842% % 843% % 844% % 845%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 846% 847% MagickBlackThresholdImage() is like MagickThresholdImage() but forces all 848% pixels below the threshold into black while leaving all pixels above the 849% threshold unchanged. 850% 851% The format of the MagickBlackThresholdImage method is: 852% 853% MagickBooleanType MagickBlackThresholdImage(MagickWand *wand, 854% const PixelWand *threshold) 855% 856% A description of each parameter follows: 857% 858% o wand: the magick wand. 859% 860% o threshold: the pixel wand. 861% 862*/ 863WandExport MagickBooleanType MagickBlackThresholdImage(MagickWand *wand, 864 const PixelWand *threshold) 865{ 866 char 867 thresholds[MagickPathExtent]; 868 869 MagickBooleanType 870 status; 871 872 assert(wand != (MagickWand *) NULL); 873 assert(wand->signature == MagickWandSignature); 874 if (wand->debug != MagickFalse) 875 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 876 if (wand->images == (Image *) NULL) 877 ThrowWandException(WandError,"ContainsNoImages",wand->name); 878 (void) FormatLocaleString(thresholds,MagickPathExtent, 879 QuantumFormat "," QuantumFormat "," QuantumFormat "," QuantumFormat, 880 PixelGetRedQuantum(threshold),PixelGetGreenQuantum(threshold), 881 PixelGetBlueQuantum(threshold),PixelGetAlphaQuantum(threshold)); 882 status=BlackThresholdImage(wand->images,thresholds,wand->exception); 883 return(status); 884} 885 886/* 887%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 888% % 889% % 890% % 891% M a g i c k B l u e S h i f t I m a g e % 892% % 893% % 894% % 895%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 896% 897% MagickBlueShiftImage() mutes the colors of the image to simulate a scene at 898% nighttime in the moonlight. 899% 900% The format of the MagickBlueShiftImage method is: 901% 902% MagickBooleanType MagickBlueShiftImage(MagickWand *wand, 903% const double factor) 904% 905% A description of each parameter follows: 906% 907% o wand: the magick wand. 908% 909% o factor: the blue shift factor (default 1.5) 910% 911*/ 912WandExport MagickBooleanType MagickBlueShiftImage(MagickWand *wand, 913 const double factor) 914{ 915 Image 916 *shift_image; 917 918 assert(wand != (MagickWand *) NULL); 919 assert(wand->signature == MagickWandSignature); 920 if (wand->debug != MagickFalse) 921 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 922 if (wand->images == (Image *) NULL) 923 ThrowWandException(WandError,"ContainsNoImages",wand->name); 924 shift_image=BlueShiftImage(wand->images,factor,wand->exception); 925 if (shift_image == (Image *) NULL) 926 return(MagickFalse); 927 ReplaceImageInList(&wand->images,shift_image); 928 return(MagickTrue); 929} 930 931/* 932%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 933% % 934% % 935% % 936% M a g i c k B l u r I m a g e % 937% % 938% % 939% % 940%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 941% 942% MagickBlurImage() blurs an image. We convolve the image with a 943% gaussian operator of the given radius and standard deviation (sigma). 944% For reasonable results, the radius should be larger than sigma. Use a 945% radius of 0 and BlurImage() selects a suitable radius for you. 946% 947% The format of the MagickBlurImage method is: 948% 949% MagickBooleanType MagickBlurImage(MagickWand *wand,const double radius, 950% const double sigma) 951% 952% A description of each parameter follows: 953% 954% o wand: the magick wand. 955% 956% o radius: the radius of the , in pixels, not counting the center 957% pixel. 958% 959% o sigma: the standard deviation of the , in pixels. 960% 961*/ 962WandExport MagickBooleanType MagickBlurImage(MagickWand *wand, 963 const double radius,const double sigma) 964{ 965 Image 966 *blur_image; 967 968 assert(wand != (MagickWand *) NULL); 969 assert(wand->signature == MagickWandSignature); 970 if (wand->debug != MagickFalse) 971 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 972 if (wand->images == (Image *) NULL) 973 ThrowWandException(WandError,"ContainsNoImages",wand->name); 974 blur_image=BlurImage(wand->images,radius,sigma,wand->exception); 975 if (blur_image == (Image *) NULL) 976 return(MagickFalse); 977 ReplaceImageInList(&wand->images,blur_image); 978 return(MagickTrue); 979} 980 981/* 982%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 983% % 984% % 985% % 986% M a g i c k B o r d e r I m a g e % 987% % 988% % 989% % 990%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 991% 992% MagickBorderImage() surrounds the image with a border of the color defined 993% by the bordercolor pixel wand. 994% 995% The format of the MagickBorderImage method is: 996% 997% MagickBooleanType MagickBorderImage(MagickWand *wand, 998% const PixelWand *bordercolor,const size_t width, 999% const size_t height,const CompositeOperator compose) 1000% 1001% A description of each parameter follows: 1002% 1003% o wand: the magick wand. 1004% 1005% o bordercolor: the border color pixel wand. 1006% 1007% o width: the border width. 1008% 1009% o height: the border height. 1010% 1011% o compose: the composite operator. 1012% 1013*/ 1014WandExport MagickBooleanType MagickBorderImage(MagickWand *wand, 1015 const PixelWand *bordercolor,const size_t width,const size_t height, 1016 const CompositeOperator compose) 1017{ 1018 Image 1019 *border_image; 1020 1021 RectangleInfo 1022 border_info; 1023 1024 assert(wand != (MagickWand *) NULL); 1025 assert(wand->signature == MagickWandSignature); 1026 if (wand->debug != MagickFalse) 1027 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1028 if (wand->images == (Image *) NULL) 1029 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1030 border_info.width=width; 1031 border_info.height=height; 1032 border_info.x=0; 1033 border_info.y=0; 1034 PixelGetQuantumPacket(bordercolor,&wand->images->border_color); 1035 border_image=BorderImage(wand->images,&border_info,compose,wand->exception); 1036 if (border_image == (Image *) NULL) 1037 return(MagickFalse); 1038 ReplaceImageInList(&wand->images,border_image); 1039 return(MagickTrue); 1040} 1041 1042/* 1043%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1044% % 1045% % 1046% % 1047% 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 % 1048% % 1049% % 1050% % 1051%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1052% 1053% Use MagickBrightnessContrastImage() to change the brightness and/or contrast 1054% of an image. It converts the brightness and contrast parameters into slope 1055% and intercept and calls a polynomical function to apply to the image. 1056 1057% 1058% The format of the MagickBrightnessContrastImage method is: 1059% 1060% MagickBooleanType MagickBrightnessContrastImage(MagickWand *wand, 1061% const double brightness,const double contrast) 1062% 1063% A description of each parameter follows: 1064% 1065% o wand: the magick wand. 1066% 1067% o brightness: the brightness percent (-100 .. 100). 1068% 1069% o contrast: the contrast percent (-100 .. 100). 1070% 1071*/ 1072WandExport MagickBooleanType MagickBrightnessContrastImage( 1073 MagickWand *wand,const double brightness,const double contrast) 1074{ 1075 MagickBooleanType 1076 status; 1077 1078 assert(wand != (MagickWand *) NULL); 1079 assert(wand->signature == MagickWandSignature); 1080 if (wand->debug != MagickFalse) 1081 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1082 if (wand->images == (Image *) NULL) 1083 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1084 status=BrightnessContrastImage(wand->images,brightness,contrast, 1085 wand->exception); 1086 return(status); 1087} 1088 1089/* 1090%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1091% % 1092% % 1093% % 1094% M a g i c k C h a n n e l F x I m a g e % 1095% % 1096% % 1097% % 1098%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1099% 1100% MagickChannelFxImage() applies a channel expression to the specified image. 1101% The expression consists of one or more channels, either mnemonic or numeric 1102% (e.g. red, 1), separated by actions as follows: 1103% 1104% <=> exchange two channels (e.g. red<=>blue) 1105% => transfer a channel to another (e.g. red=>green) 1106% , separate channel operations (e.g. red, green) 1107% | read channels from next input image (e.g. red | green) 1108% ; write channels to next output image (e.g. red; green; blue) 1109% 1110% A channel without a operation symbol implies extract. For example, to create 1111% 3 grayscale images from the red, green, and blue channels of an image, use: 1112% 1113% -channel-fx "red; green; blue" 1114% 1115% The format of the MagickChannelFxImage method is: 1116% 1117% MagickWand *MagickChannelFxImage(MagickWand *wand,const char *expression) 1118% 1119% A description of each parameter follows: 1120% 1121% o wand: the magick wand. 1122% 1123% o expression: the expression. 1124% 1125*/ 1126WandExport MagickWand *MagickChannelFxImage(MagickWand *wand, 1127 const char *expression) 1128{ 1129 Image 1130 *fx_image; 1131 1132 assert(wand != (MagickWand *) NULL); 1133 assert(wand->signature == MagickWandSignature); 1134 if (wand->debug != MagickFalse) 1135 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1136 if (wand->images == (Image *) NULL) 1137 return((MagickWand *) NULL); 1138 fx_image=ChannelFxImage(wand->images,expression,wand->exception); 1139 if (fx_image == (Image *) NULL) 1140 return((MagickWand *) NULL); 1141 return(CloneMagickWandFromImages(wand,fx_image)); 1142} 1143 1144/* 1145%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1146% % 1147% % 1148% % 1149% M a g i c k C h a r c o a l I m a g e % 1150% % 1151% % 1152% % 1153%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1154% 1155% MagickCharcoalImage() simulates a charcoal drawing. 1156% 1157% The format of the MagickCharcoalImage method is: 1158% 1159% MagickBooleanType MagickCharcoalImage(MagickWand *wand, 1160% const double radius,const double sigma) 1161% 1162% A description of each parameter follows: 1163% 1164% o wand: the magick wand. 1165% 1166% o radius: the radius of the Gaussian, in pixels, not counting the center 1167% pixel. 1168% 1169% o sigma: the standard deviation of the Gaussian, in pixels. 1170% 1171*/ 1172WandExport MagickBooleanType MagickCharcoalImage(MagickWand *wand, 1173 const double radius,const double sigma) 1174{ 1175 Image 1176 *charcoal_image; 1177 1178 assert(wand != (MagickWand *) NULL); 1179 assert(wand->signature == MagickWandSignature); 1180 if (wand->debug != MagickFalse) 1181 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1182 if (wand->images == (Image *) NULL) 1183 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1184 charcoal_image=CharcoalImage(wand->images,radius,sigma,wand->exception); 1185 if (charcoal_image == (Image *) NULL) 1186 return(MagickFalse); 1187 ReplaceImageInList(&wand->images,charcoal_image); 1188 return(MagickTrue); 1189} 1190 1191/* 1192%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1193% % 1194% % 1195% % 1196% M a g i c k C h o p I m a g e % 1197% % 1198% % 1199% % 1200%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1201% 1202% MagickChopImage() removes a region of an image and collapses the image to 1203% occupy the removed portion 1204% 1205% The format of the MagickChopImage method is: 1206% 1207% MagickBooleanType MagickChopImage(MagickWand *wand, 1208% const size_t width,const size_t height,const ssize_t x, 1209% const ssize_t y) 1210% 1211% A description of each parameter follows: 1212% 1213% o wand: the magick wand. 1214% 1215% o width: the region width. 1216% 1217% o height: the region height. 1218% 1219% o x: the region x offset. 1220% 1221% o y: the region y offset. 1222% 1223% 1224*/ 1225WandExport MagickBooleanType MagickChopImage(MagickWand *wand, 1226 const size_t width,const size_t height,const ssize_t x, 1227 const ssize_t y) 1228{ 1229 Image 1230 *chop_image; 1231 1232 RectangleInfo 1233 chop; 1234 1235 assert(wand != (MagickWand *) NULL); 1236 assert(wand->signature == MagickWandSignature); 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 chop.width=width; 1242 chop.height=height; 1243 chop.x=x; 1244 chop.y=y; 1245 chop_image=ChopImage(wand->images,&chop,wand->exception); 1246 if (chop_image == (Image *) NULL) 1247 return(MagickFalse); 1248 ReplaceImageInList(&wand->images,chop_image); 1249 return(MagickTrue); 1250} 1251 1252/* 1253%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1254% % 1255% % 1256% % 1257% M a g i c k C l a m p I m a g e % 1258% % 1259% % 1260% % 1261%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1262% 1263% MagickClampImage() restricts the color range from 0 to the quantum depth. 1264% 1265% The format of the MagickClampImage method is: 1266% 1267% MagickBooleanType MagickClampImage(MagickWand *wand) 1268% 1269% A description of each parameter follows: 1270% 1271% o wand: the magick wand. 1272% 1273% o channel: the channel. 1274% 1275*/ 1276WandExport MagickBooleanType MagickClampImage(MagickWand *wand) 1277{ 1278 assert(wand != (MagickWand *) NULL); 1279 assert(wand->signature == MagickWandSignature); 1280 if (wand->debug != MagickFalse) 1281 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1282 if (wand->images == (Image *) NULL) 1283 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1284 return(ClampImage(wand->images,wand->exception)); 1285} 1286 1287/* 1288%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1289% % 1290% % 1291% % 1292% M a g i c k C l i p I m a g e % 1293% % 1294% % 1295% % 1296%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1297% 1298% MagickClipImage() clips along the first path from the 8BIM profile, if 1299% present. 1300% 1301% The format of the MagickClipImage method is: 1302% 1303% MagickBooleanType MagickClipImage(MagickWand *wand) 1304% 1305% A description of each parameter follows: 1306% 1307% o wand: the magick wand. 1308% 1309*/ 1310WandExport MagickBooleanType MagickClipImage(MagickWand *wand) 1311{ 1312 MagickBooleanType 1313 status; 1314 1315 assert(wand != (MagickWand *) NULL); 1316 assert(wand->signature == MagickWandSignature); 1317 if (wand->debug != MagickFalse) 1318 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1319 if (wand->images == (Image *) NULL) 1320 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1321 status=ClipImage(wand->images,wand->exception); 1322 return(status); 1323} 1324 1325/* 1326%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1327% % 1328% % 1329% % 1330% M a g i c k C l i p I m a g e P a t h % 1331% % 1332% % 1333% % 1334%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1335% 1336% MagickClipImagePath() clips along the named paths from the 8BIM profile, if 1337% present. Later operations take effect inside the path. Id may be a number 1338% if preceded with #, to work on a numbered path, e.g., "#1" to use the first 1339% path. 1340% 1341% The format of the MagickClipImagePath method is: 1342% 1343% MagickBooleanType MagickClipImagePath(MagickWand *wand, 1344% const char *pathname,const MagickBooleanType inside) 1345% 1346% A description of each parameter follows: 1347% 1348% o wand: the magick wand. 1349% 1350% o pathname: name of clipping path resource. If name is preceded by #, use 1351% clipping path numbered by name. 1352% 1353% o inside: if non-zero, later operations take effect inside clipping path. 1354% Otherwise later operations take effect outside clipping path. 1355% 1356*/ 1357WandExport MagickBooleanType MagickClipImagePath(MagickWand *wand, 1358 const char *pathname,const MagickBooleanType inside) 1359{ 1360 MagickBooleanType 1361 status; 1362 1363 assert(wand != (MagickWand *) NULL); 1364 assert(wand->signature == MagickWandSignature); 1365 if (wand->debug != MagickFalse) 1366 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1367 if (wand->images == (Image *) NULL) 1368 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1369 status=ClipImagePath(wand->images,pathname,inside,wand->exception); 1370 return(status); 1371} 1372 1373/* 1374%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1375% % 1376% % 1377% % 1378% M a g i c k C l u t I m a g e % 1379% % 1380% % 1381% % 1382%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1383% 1384% MagickClutImage() replaces colors in the image from a color lookup table. 1385% 1386% The format of the MagickClutImage method is: 1387% 1388% MagickBooleanType MagickClutImage(MagickWand *wand, 1389% const MagickWand *clut_wand,const PixelInterpolateMethod method) 1390% 1391% A description of each parameter follows: 1392% 1393% o wand: the magick wand. 1394% 1395% o clut_image: the clut image. 1396% 1397% o method: the pixel interpolation method. 1398% 1399*/ 1400WandExport MagickBooleanType MagickClutImage(MagickWand *wand, 1401 const MagickWand *clut_wand,const PixelInterpolateMethod method) 1402{ 1403 MagickBooleanType 1404 status; 1405 1406 assert(wand != (MagickWand *) NULL); 1407 assert(wand->signature == MagickWandSignature); 1408 if (wand->debug != MagickFalse) 1409 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1410 if ((wand->images == (Image *) NULL) || (clut_wand->images == (Image *) NULL)) 1411 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1412 status=ClutImage(wand->images,clut_wand->images,method,wand->exception); 1413 return(status); 1414} 1415 1416/* 1417%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1418% % 1419% % 1420% % 1421% M a g i c k C o a l e s c e I m a g e s % 1422% % 1423% % 1424% % 1425%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1426% 1427% MagickCoalesceImages() composites a set of images while respecting any page 1428% offsets and disposal methods. GIF, MIFF, and MNG animation sequences 1429% typically start with an image background and each subsequent image 1430% varies in size and offset. MagickCoalesceImages() returns a new sequence 1431% where each image in the sequence is the same size as the first and 1432% composited with the next image in the sequence. 1433% 1434% The format of the MagickCoalesceImages method is: 1435% 1436% MagickWand *MagickCoalesceImages(MagickWand *wand) 1437% 1438% A description of each parameter follows: 1439% 1440% o wand: the magick wand. 1441% 1442*/ 1443WandExport MagickWand *MagickCoalesceImages(MagickWand *wand) 1444{ 1445 Image 1446 *coalesce_image; 1447 1448 assert(wand != (MagickWand *) NULL); 1449 assert(wand->signature == MagickWandSignature); 1450 if (wand->debug != MagickFalse) 1451 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1452 if (wand->images == (Image *) NULL) 1453 return((MagickWand *) NULL); 1454 coalesce_image=CoalesceImages(wand->images,wand->exception); 1455 if (coalesce_image == (Image *) NULL) 1456 return((MagickWand *) NULL); 1457 return(CloneMagickWandFromImages(wand,coalesce_image)); 1458} 1459 1460/* 1461%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1462% % 1463% % 1464% % 1465% M a g i c k C o l o r D e c i s i o n I m a g e % 1466% % 1467% % 1468% % 1469%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1470% 1471% MagickColorDecisionListImage() accepts a lightweight Color Correction 1472% Collection (CCC) file which solely contains one or more color corrections 1473% and applies the color correction to the image. Here is a sample CCC file: 1474% 1475% <ColorCorrectionCollection xmlns="urn:ASC:CDL:v1.2"> 1476% <ColorCorrection id="cc03345"> 1477% <SOPNode> 1478% <Slope> 0.9 1.2 0.5 </Slope> 1479% <Offset> 0.4 -0.5 0.6 </Offset> 1480% <Power> 1.0 0.8 1.5 </Power> 1481% </SOPNode> 1482% <SATNode> 1483% <Saturation> 0.85 </Saturation> 1484% </SATNode> 1485% </ColorCorrection> 1486% </ColorCorrectionCollection> 1487% 1488% which includes the offset, slope, and power for each of the RGB channels 1489% as well as the saturation. 1490% 1491% The format of the MagickColorDecisionListImage method is: 1492% 1493% MagickBooleanType MagickColorDecisionListImage(MagickWand *wand, 1494% const char *color_correction_collection) 1495% 1496% A description of each parameter follows: 1497% 1498% o wand: the magick wand. 1499% 1500% o color_correction_collection: the color correction collection in XML. 1501% 1502*/ 1503WandExport MagickBooleanType MagickColorDecisionListImage(MagickWand *wand, 1504 const char *color_correction_collection) 1505{ 1506 MagickBooleanType 1507 status; 1508 1509 assert(wand != (MagickWand *) NULL); 1510 assert(wand->signature == MagickWandSignature); 1511 if (wand->debug != MagickFalse) 1512 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1513 if (wand->images == (Image *) NULL) 1514 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1515 status=ColorDecisionListImage(wand->images,color_correction_collection, 1516 wand->exception); 1517 return(status); 1518} 1519 1520/* 1521%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1522% % 1523% % 1524% % 1525% M a g i c k C o l o r i z e I m a g e % 1526% % 1527% % 1528% % 1529%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1530% 1531% MagickColorizeImage() blends the fill color with each pixel in the image. 1532% 1533% The format of the MagickColorizeImage method is: 1534% 1535% MagickBooleanType MagickColorizeImage(MagickWand *wand, 1536% const PixelWand *colorize,const PixelWand *blend) 1537% 1538% A description of each parameter follows: 1539% 1540% o wand: the magick wand. 1541% 1542% o colorize: the colorize pixel wand. 1543% 1544% o alpha: the alpha pixel wand. 1545% 1546*/ 1547WandExport MagickBooleanType MagickColorizeImage(MagickWand *wand, 1548 const PixelWand *colorize,const PixelWand *blend) 1549{ 1550 char 1551 percent_blend[MagickPathExtent]; 1552 1553 Image 1554 *colorize_image; 1555 1556 PixelInfo 1557 target; 1558 1559 assert(wand != (MagickWand *) NULL); 1560 assert(wand->signature == MagickWandSignature); 1561 if (wand->debug != MagickFalse) 1562 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1563 if (wand->images == (Image *) NULL) 1564 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1565 GetPixelInfo(wand->images,&target); 1566 if (target.colorspace != CMYKColorspace) 1567 (void) FormatLocaleString(percent_blend,MagickPathExtent, 1568 "%g,%g,%g,%g",(double) (100.0*QuantumScale* 1569 PixelGetRedQuantum(blend)),(double) (100.0*QuantumScale* 1570 PixelGetGreenQuantum(blend)),(double) (100.0*QuantumScale* 1571 PixelGetBlueQuantum(blend)),(double) (100.0*QuantumScale* 1572 PixelGetAlphaQuantum(blend))); 1573 else 1574 (void) FormatLocaleString(percent_blend,MagickPathExtent, 1575 "%g,%g,%g,%g,%g",(double) (100.0*QuantumScale* 1576 PixelGetRedQuantum(blend)),(double) (100.0*QuantumScale* 1577 PixelGetGreenQuantum(blend)),(double) (100.0*QuantumScale* 1578 PixelGetBlueQuantum(blend)),(double) (100.0*QuantumScale* 1579 PixelGetBlackQuantum(blend)),(double) (100.0*QuantumScale* 1580 PixelGetAlphaQuantum(blend))); 1581 target=PixelGetPixel(colorize); 1582 colorize_image=ColorizeImage(wand->images,percent_blend,&target, 1583 wand->exception); 1584 if (colorize_image == (Image *) NULL) 1585 return(MagickFalse); 1586 ReplaceImageInList(&wand->images,colorize_image); 1587 return(MagickTrue); 1588} 1589 1590/* 1591%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1592% % 1593% % 1594% % 1595% M a g i c k C o l o r M a t r i x I m a g e % 1596% % 1597% % 1598% % 1599%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1600% 1601% MagickColorMatrixImage() apply color transformation to an image. The method 1602% permits saturation changes, hue rotation, luminance to alpha, and various 1603% other effects. Although variable-sized transformation matrices can be used, 1604% typically one uses a 5x5 matrix for an RGBA image and a 6x6 for CMYKA 1605% (or RGBA with offsets). The matrix is similar to those used by Adobe Flash 1606% except offsets are in column 6 rather than 5 (in support of CMYKA images) 1607% and offsets are normalized (divide Flash offset by 255). 1608% 1609% The format of the MagickColorMatrixImage method is: 1610% 1611% MagickBooleanType MagickColorMatrixImage(MagickWand *wand, 1612% const KernelInfo *color_matrix) 1613% 1614% A description of each parameter follows: 1615% 1616% o wand: the magick wand. 1617% 1618% o color_matrix: the color matrix. 1619% 1620*/ 1621WandExport MagickBooleanType MagickColorMatrixImage(MagickWand *wand, 1622 const KernelInfo *color_matrix) 1623{ 1624 Image 1625 *color_image; 1626 1627 assert(wand != (MagickWand *) NULL); 1628 assert(wand->signature == MagickWandSignature); 1629 if (wand->debug != MagickFalse) 1630 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1631 if (color_matrix == (const KernelInfo *) NULL) 1632 return(MagickFalse); 1633 if (wand->images == (Image *) NULL) 1634 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1635 color_image=ColorMatrixImage(wand->images,color_matrix,wand->exception); 1636 if (color_image == (Image *) NULL) 1637 return(MagickFalse); 1638 ReplaceImageInList(&wand->images,color_image); 1639 return(MagickTrue); 1640} 1641 1642/* 1643%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1644% % 1645% % 1646% % 1647% M a g i c k C o m b i n e I m a g e s % 1648% % 1649% % 1650% % 1651%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1652% 1653% MagickCombineImages() combines one or more images into a single image. The 1654% grayscale value of the pixels of each image in the sequence is assigned in 1655% order to the specified hannels of the combined image. The typical 1656% ordering would be image 1 => Red, 2 => Green, 3 => Blue, etc. 1657% 1658% The format of the MagickCombineImages method is: 1659% 1660% MagickWand *MagickCombineImages(MagickWand *wand, 1661% const ColorspaceType colorspace) 1662% 1663% A description of each parameter follows: 1664% 1665% o wand: the magick wand. 1666% 1667% o colorspace: the colorspace. 1668% 1669*/ 1670WandExport MagickWand *MagickCombineImages(MagickWand *wand, 1671 const ColorspaceType colorspace) 1672{ 1673 Image 1674 *combine_image; 1675 1676 assert(wand != (MagickWand *) NULL); 1677 assert(wand->signature == MagickWandSignature); 1678 if (wand->debug != MagickFalse) 1679 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1680 if (wand->images == (Image *) NULL) 1681 return((MagickWand *) NULL); 1682 combine_image=CombineImages(wand->images,colorspace,wand->exception); 1683 if (combine_image == (Image *) NULL) 1684 return((MagickWand *) NULL); 1685 return(CloneMagickWandFromImages(wand,combine_image)); 1686} 1687 1688/* 1689%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1690% % 1691% % 1692% % 1693% M a g i c k C o m m e n t I m a g e % 1694% % 1695% % 1696% % 1697%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1698% 1699% MagickCommentImage() adds a comment to your image. 1700% 1701% The format of the MagickCommentImage method is: 1702% 1703% MagickBooleanType MagickCommentImage(MagickWand *wand, 1704% const char *comment) 1705% 1706% A description of each parameter follows: 1707% 1708% o wand: the magick wand. 1709% 1710% o comment: the image comment. 1711% 1712*/ 1713WandExport MagickBooleanType MagickCommentImage(MagickWand *wand, 1714 const char *comment) 1715{ 1716 MagickBooleanType 1717 status; 1718 1719 assert(wand != (MagickWand *) NULL); 1720 assert(wand->signature == MagickWandSignature); 1721 if (wand->debug != MagickFalse) 1722 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1723 if (wand->images == (Image *) NULL) 1724 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1725 status=SetImageProperty(wand->images,"comment",comment,wand->exception); 1726 return(status); 1727} 1728 1729/* 1730%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1731% % 1732% % 1733% % 1734% M a g i c k C o m p a r e I m a g e L a y e r s % 1735% % 1736% % 1737% % 1738%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1739% 1740% MagickCompareImagesLayers() compares each image with the next in a sequence 1741% and returns the maximum bounding region of any pixel differences it 1742% discovers. 1743% 1744% The format of the MagickCompareImagesLayers method is: 1745% 1746% MagickWand *MagickCompareImagesLayers(MagickWand *wand, 1747% const LayerMethod method) 1748% 1749% A description of each parameter follows: 1750% 1751% o wand: the magick wand. 1752% 1753% o method: the compare method. 1754% 1755*/ 1756WandExport MagickWand *MagickCompareImagesLayers(MagickWand *wand, 1757 const LayerMethod method) 1758{ 1759 Image 1760 *layers_image; 1761 1762 assert(wand != (MagickWand *) NULL); 1763 assert(wand->signature == MagickWandSignature); 1764 if (wand->debug != MagickFalse) 1765 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1766 if (wand->images == (Image *) NULL) 1767 return((MagickWand *) NULL); 1768 layers_image=CompareImagesLayers(wand->images,method,wand->exception); 1769 if (layers_image == (Image *) NULL) 1770 return((MagickWand *) NULL); 1771 return(CloneMagickWandFromImages(wand,layers_image)); 1772} 1773 1774/* 1775%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1776% % 1777% % 1778% % 1779% M a g i c k C o m p a r e I m a g e s % 1780% % 1781% % 1782% % 1783%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1784% 1785% MagickCompareImages() compares an image to a reconstructed image and returns 1786% the specified difference image. 1787% 1788% The format of the MagickCompareImages method is: 1789% 1790% MagickWand *MagickCompareImages(MagickWand *wand, 1791% const MagickWand *reference,const MetricType metric, 1792% double *distortion) 1793% 1794% A description of each parameter follows: 1795% 1796% o wand: the magick wand. 1797% 1798% o reference: the reference wand. 1799% 1800% o metric: the metric. 1801% 1802% o distortion: the computed distortion between the images. 1803% 1804*/ 1805WandExport MagickWand *MagickCompareImages(MagickWand *wand, 1806 const MagickWand *reference,const MetricType metric,double *distortion) 1807{ 1808 Image 1809 *compare_image; 1810 1811 1812 assert(wand != (MagickWand *) NULL); 1813 assert(wand->signature == MagickWandSignature); 1814 if (wand->debug != MagickFalse) 1815 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1816 if ((wand->images == (Image *) NULL) || (reference->images == (Image *) NULL)) 1817 { 1818 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 1819 "ContainsNoImages","`%s'",wand->name); 1820 return((MagickWand *) NULL); 1821 } 1822 compare_image=CompareImages(wand->images,reference->images,metric,distortion, 1823 wand->exception); 1824 if (compare_image == (Image *) NULL) 1825 return((MagickWand *) NULL); 1826 return(CloneMagickWandFromImages(wand,compare_image)); 1827} 1828 1829/* 1830%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1831% % 1832% % 1833% % 1834% M a g i c k C o m p o s i t e I m a g e % 1835% % 1836% % 1837% % 1838%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1839% 1840% MagickCompositeImage() composite one image onto another at the specified 1841% offset. 1842% 1843% The format of the MagickCompositeImage method is: 1844% 1845% MagickBooleanType MagickCompositeImage(MagickWand *wand, 1846% const MagickWand *source_wand,const CompositeOperator compose, 1847% const MagickBooleanType clip_to_self,const ssize_t x,const ssize_t y) 1848% 1849% A description of each parameter follows: 1850% 1851% o wand: the magick wand holding the destination images 1852% 1853% o source_image: the magick wand holding source image. 1854% 1855% o compose: This operator affects how the composite is applied to the 1856% image. The default is Over. These are some of the compose methods 1857% availble. 1858% 1859% OverCompositeOp InCompositeOp OutCompositeOp 1860% AtopCompositeOp XorCompositeOp PlusCompositeOp 1861% MinusCompositeOp AddCompositeOp SubtractCompositeOp 1862% DifferenceCompositeOp BumpmapCompositeOp CopyCompositeOp 1863% DisplaceCompositeOp 1864% 1865% o clip_to_self: set to MagickTrue to limit composition to area composed. 1866% 1867% o x: the column offset of the composited image. 1868% 1869% o y: the row offset of the composited image. 1870% 1871*/ 1872WandExport MagickBooleanType MagickCompositeImage(MagickWand *wand, 1873 const MagickWand *source_wand,const CompositeOperator compose, 1874 const MagickBooleanType clip_to_self,const ssize_t x,const ssize_t y) 1875{ 1876 MagickBooleanType 1877 status; 1878 1879 assert(wand != (MagickWand *) NULL); 1880 assert(wand->signature == MagickWandSignature); 1881 if (wand->debug != MagickFalse) 1882 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1883 if ((wand->images == (Image *) NULL) || 1884 (source_wand->images == (Image *) NULL)) 1885 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1886 status=CompositeImage(wand->images,source_wand->images,compose,clip_to_self, 1887 x,y,wand->exception); 1888 return(status); 1889} 1890 1891/* 1892%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1893% % 1894% % 1895% % 1896% M a g i c k C o m p o s i t e I m a g e G r a v i t y % 1897% % 1898% % 1899% % 1900%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1901% 1902% MagickCompositeImageGravity() composite one image onto another using the 1903% specified gravity. 1904% 1905% The format of the MagickCompositeImageGravity method is: 1906% 1907% MagickBooleanType MagickCompositeImageGravity(MagickWand *wand, 1908% const MagickWand *source_wand,const CompositeOperator compose, 1909% const GravityType gravity) 1910% 1911% A description of each parameter follows: 1912% 1913% o wand: the magick wand holding the destination images 1914% 1915% o source_image: the magick wand holding source image. 1916% 1917% o compose: This operator affects how the composite is applied to the 1918% image. The default is Over. These are some of the compose methods 1919% availble. 1920% 1921% OverCompositeOp InCompositeOp OutCompositeOp 1922% AtopCompositeOp XorCompositeOp PlusCompositeOp 1923% MinusCompositeOp AddCompositeOp SubtractCompositeOp 1924% DifferenceCompositeOp BumpmapCompositeOp CopyCompositeOp 1925% DisplaceCompositeOp 1926% 1927% o gravity: positioning gravity (NorthWestGravity, NorthGravity, 1928% NorthEastGravity, WestGravity, CenterGravity, 1929% EastGravity, SouthWestGravity, SouthGravity, 1930% SouthEastGravity) 1931% 1932*/ 1933WandExport MagickBooleanType MagickCompositeImageGravity(MagickWand *wand, 1934 const MagickWand *source_wand,const CompositeOperator compose, 1935 const GravityType gravity) 1936{ 1937 MagickBooleanType 1938 status; 1939 1940 RectangleInfo 1941 geometry; 1942 1943 assert(wand != (MagickWand *) NULL); 1944 assert(wand->signature == MagickWandSignature); 1945 if (wand->debug != MagickFalse) 1946 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1947 if ((wand->images == (Image *) NULL) || 1948 (source_wand->images == (Image *) NULL)) 1949 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1950 SetGeometry(source_wand->images,&geometry); 1951 GravityAdjustGeometry(wand->images->columns,wand->images->rows,gravity, 1952 &geometry); 1953 status=CompositeImage(wand->images,source_wand->images,compose,MagickTrue, 1954 geometry.x,geometry.y,wand->exception); 1955 return(status); 1956} 1957 1958/* 1959%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1960% % 1961% % 1962% % 1963% M a g i c k C o m p o s i t e L a y e r s % 1964% % 1965% % 1966% % 1967%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1968% 1969% MagickCompositeLayers() composite the images in the source wand over the 1970% images in the destination wand in sequence, starting with the current 1971% image in both lists. 1972% 1973% Each layer from the two image lists are composted together until the end of 1974% one of the image lists is reached. The offset of each composition is also 1975% adjusted to match the virtual canvas offsets of each layer. As such the 1976% given offset is relative to the virtual canvas, and not the actual image. 1977% 1978% Composition uses given x and y offsets, as the 'origin' location of the 1979% source images virtual canvas (not the real image) allowing you to compose a 1980% list of 'layer images' into the destiantioni images. This makes it well 1981% sutiable for directly composing 'Clears Frame Animations' or 'Coaleased 1982% Animations' onto a static or other 'Coaleased Animation' destination image 1983% list. GIF disposal handling is not looked at. 1984% 1985% Special case:- If one of the image sequences is the last image (just a 1986% single image remaining), that image is repeatally composed with all the 1987% images in the other image list. Either the source or destination lists may 1988% be the single image, for this situation. 1989% 1990% In the case of a single destination image (or last image given), that image 1991% will ve cloned to match the number of images remaining in the source image 1992% list. 1993% 1994% This is equivelent to the "-layer Composite" Shell API operator. 1995% 1996% The format of the MagickCompositeLayers method is: 1997% 1998% MagickBooleanType MagickCompositeLayers(MagickWand *wand, 1999% const MagickWand *source_wand, const CompositeOperator compose, 2000% const ssize_t x,const ssize_t y) 2001% 2002% A description of each parameter follows: 2003% 2004% o wand: the magick wand holding destaintion images 2005% 2006% o source_wand: the wand holding the source images 2007% 2008% o compose, x, y: composition arguments 2009% 2010*/ 2011WandExport MagickBooleanType MagickCompositeLayers(MagickWand *wand, 2012 const MagickWand *source_wand,const CompositeOperator compose, 2013 const ssize_t x,const ssize_t y) 2014{ 2015 MagickBooleanType 2016 status; 2017 2018 assert(wand != (MagickWand *) NULL); 2019 assert(wand->signature == MagickWandSignature); 2020 if (wand->debug != MagickFalse) 2021 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2022 if ((wand->images == (Image *) NULL) || 2023 (source_wand->images == (Image *) NULL)) 2024 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2025 CompositeLayers(wand->images,compose,source_wand->images,x,y,wand->exception); 2026 status=MagickTrue; /* FUTURE: determine status from exceptions */ 2027 return(status); 2028} 2029 2030/* 2031%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2032% % 2033% % 2034% % 2035% M a g i c k C o n t r a s t I m a g e % 2036% % 2037% % 2038% % 2039%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2040% 2041% MagickContrastImage() enhances the intensity differences between the lighter 2042% and darker elements of the image. Set sharpen to a value other than 0 to 2043% increase the image contrast otherwise the contrast is reduced. 2044% 2045% The format of the MagickContrastImage method is: 2046% 2047% MagickBooleanType MagickContrastImage(MagickWand *wand, 2048% const MagickBooleanType sharpen) 2049% 2050% A description of each parameter follows: 2051% 2052% o wand: the magick wand. 2053% 2054% o sharpen: Increase or decrease image contrast. 2055% 2056% 2057*/ 2058WandExport MagickBooleanType MagickContrastImage(MagickWand *wand, 2059 const MagickBooleanType sharpen) 2060{ 2061 MagickBooleanType 2062 status; 2063 2064 assert(wand != (MagickWand *) NULL); 2065 assert(wand->signature == MagickWandSignature); 2066 if (wand->debug != MagickFalse) 2067 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2068 if (wand->images == (Image *) NULL) 2069 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2070 status=ContrastImage(wand->images,sharpen,wand->exception); 2071 return(status); 2072} 2073 2074/* 2075%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2076% % 2077% % 2078% % 2079% 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 % 2080% % 2081% % 2082% % 2083%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2084% 2085% MagickContrastStretchImage() enhances the contrast of a color image by 2086% adjusting the pixels color to span the entire range of colors available. 2087% You can also reduce the influence of a particular channel with a gamma 2088% value of 0. 2089% 2090% The format of the MagickContrastStretchImage method is: 2091% 2092% MagickBooleanType MagickContrastStretchImage(MagickWand *wand, 2093% const double black_point,const double white_point) 2094% 2095% A description of each parameter follows: 2096% 2097% o wand: the magick wand. 2098% 2099% o black_point: the black point. 2100% 2101% o white_point: the white point. 2102% 2103*/ 2104WandExport MagickBooleanType MagickContrastStretchImage(MagickWand *wand, 2105 const double black_point,const double white_point) 2106{ 2107 MagickBooleanType 2108 status; 2109 2110 assert(wand != (MagickWand *) NULL); 2111 assert(wand->signature == MagickWandSignature); 2112 if (wand->debug != MagickFalse) 2113 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2114 if (wand->images == (Image *) NULL) 2115 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2116 status=ContrastStretchImage(wand->images,black_point,white_point, 2117 wand->exception); 2118 return(status); 2119} 2120 2121/* 2122%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2123% % 2124% % 2125% % 2126% M a g i c k C o n v o l v e I m a g e % 2127% % 2128% % 2129% % 2130%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2131% 2132% MagickConvolveImage() applies a custom convolution kernel to the image. 2133% 2134% The format of the MagickConvolveImage method is: 2135% 2136% MagickBooleanType MagickConvolveImage(MagickWand *wand, 2137% const KernelInfo *kernel) 2138% 2139% A description of each parameter follows: 2140% 2141% o wand: the magick wand. 2142% 2143% o kernel: An array of doubles representing the convolution kernel. 2144% 2145*/ 2146WandExport MagickBooleanType MagickConvolveImage(MagickWand *wand, 2147 const KernelInfo *kernel) 2148{ 2149 Image 2150 *filter_image; 2151 2152 assert(wand != (MagickWand *) NULL); 2153 assert(wand->signature == MagickWandSignature); 2154 if (wand->debug != MagickFalse) 2155 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2156 if (kernel == (const KernelInfo *) NULL) 2157 return(MagickFalse); 2158 if (wand->images == (Image *) NULL) 2159 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2160 filter_image=ConvolveImage(wand->images,kernel,wand->exception); 2161 if (filter_image == (Image *) NULL) 2162 return(MagickFalse); 2163 ReplaceImageInList(&wand->images,filter_image); 2164 return(MagickTrue); 2165} 2166 2167/* 2168%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2169% % 2170% % 2171% % 2172% M a g i c k C r o p I m a g e % 2173% % 2174% % 2175% % 2176%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2177% 2178% MagickCropImage() extracts a region of the image. 2179% 2180% The format of the MagickCropImage method is: 2181% 2182% MagickBooleanType MagickCropImage(MagickWand *wand, 2183% const size_t width,const size_t height,const ssize_t x,const ssize_t y) 2184% 2185% A description of each parameter follows: 2186% 2187% o wand: the magick wand. 2188% 2189% o width: the region width. 2190% 2191% o height: the region height. 2192% 2193% o x: the region x-offset. 2194% 2195% o y: the region y-offset. 2196% 2197*/ 2198WandExport MagickBooleanType MagickCropImage(MagickWand *wand, 2199 const size_t width,const size_t height,const ssize_t x,const ssize_t y) 2200{ 2201 Image 2202 *crop_image; 2203 2204 RectangleInfo 2205 crop; 2206 2207 assert(wand != (MagickWand *) NULL); 2208 assert(wand->signature == MagickWandSignature); 2209 if (wand->debug != MagickFalse) 2210 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2211 if (wand->images == (Image *) NULL) 2212 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2213 crop.width=width; 2214 crop.height=height; 2215 crop.x=x; 2216 crop.y=y; 2217 crop_image=CropImage(wand->images,&crop,wand->exception); 2218 if (crop_image == (Image *) NULL) 2219 return(MagickFalse); 2220 ReplaceImageInList(&wand->images,crop_image); 2221 return(MagickTrue); 2222} 2223 2224/* 2225%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2226% % 2227% % 2228% % 2229% M a g i c k C y c l e C o l o r m a p I m a g e % 2230% % 2231% % 2232% % 2233%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2234% 2235% MagickCycleColormapImage() displaces an image's colormap by a given number 2236% of positions. If you cycle the colormap a number of times you can produce 2237% a psychodelic effect. 2238% 2239% The format of the MagickCycleColormapImage method is: 2240% 2241% MagickBooleanType MagickCycleColormapImage(MagickWand *wand, 2242% const ssize_t displace) 2243% 2244% A description of each parameter follows: 2245% 2246% o wand: the magick wand. 2247% 2248% o pixel_wand: the pixel wand. 2249% 2250*/ 2251WandExport MagickBooleanType MagickCycleColormapImage(MagickWand *wand, 2252 const ssize_t displace) 2253{ 2254 MagickBooleanType 2255 status; 2256 2257 assert(wand != (MagickWand *) NULL); 2258 assert(wand->signature == MagickWandSignature); 2259 if (wand->debug != MagickFalse) 2260 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2261 if (wand->images == (Image *) NULL) 2262 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2263 status=CycleColormapImage(wand->images,displace,wand->exception); 2264 return(status); 2265} 2266 2267/* 2268%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2269% % 2270% % 2271% % 2272% M a g i c k C o n s t i t u t e I m a g e % 2273% % 2274% % 2275% % 2276%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2277% 2278% MagickConstituteImage() adds an image to the wand comprised of the pixel 2279% data you supply. The pixel data must be in scanline order top-to-bottom. 2280% The data can be char, short int, int, float, or double. Float and double 2281% require the pixels to be normalized [0..1], otherwise [0..Max], where Max 2282% is the maximum value the type can accomodate (e.g. 255 for char). For 2283% example, to create a 640x480 image from unsigned red-green-blue character 2284% data, use 2285% 2286% MagickConstituteImage(wand,640,480,"RGB",CharPixel,pixels); 2287% 2288% The format of the MagickConstituteImage method is: 2289% 2290% MagickBooleanType MagickConstituteImage(MagickWand *wand, 2291% const size_t columns,const size_t rows,const char *map, 2292% const StorageType storage,void *pixels) 2293% 2294% A description of each parameter follows: 2295% 2296% o wand: the magick wand. 2297% 2298% o columns: width in pixels of the image. 2299% 2300% o rows: height in pixels of the image. 2301% 2302% o map: This string reflects the expected ordering of the pixel array. 2303% It can be any combination or order of R = red, G = green, B = blue, 2304% A = alpha (0 is transparent), O = alpha (0 is opaque), C = cyan, 2305% Y = yellow, M = magenta, K = black, I = intensity (for grayscale), 2306% P = pad. 2307% 2308% o storage: Define the data type of the pixels. Float and double types are 2309% expected to be normalized [0..1] otherwise [0..QuantumRange]. Choose from 2310% these types: CharPixel, DoublePixel, FloatPixel, IntegerPixel, 2311% LongPixel, QuantumPixel, or ShortPixel. 2312% 2313% o pixels: This array of values contain the pixel components as defined by 2314% map and type. You must preallocate this array where the expected 2315% length varies depending on the values of width, height, map, and type. 2316% 2317% 2318*/ 2319WandExport MagickBooleanType MagickConstituteImage(MagickWand *wand, 2320 const size_t columns,const size_t rows,const char *map, 2321 const StorageType storage,const void *pixels) 2322{ 2323 Image 2324 *images; 2325 2326 assert(wand != (MagickWand *) NULL); 2327 assert(wand->signature == MagickWandSignature); 2328 if (wand->debug != MagickFalse) 2329 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2330 images=ConstituteImage(columns,rows,map,storage,pixels,wand->exception); 2331 if (images == (Image *) NULL) 2332 return(MagickFalse); 2333 return(InsertImageInWand(wand,images)); 2334} 2335 2336/* 2337%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2338% % 2339% % 2340% % 2341% M a g i c k D e c i p h e r I m a g e % 2342% % 2343% % 2344% % 2345%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2346% 2347% MagickDecipherImage() converts cipher pixels to plain pixels. 2348% 2349% The format of the MagickDecipherImage method is: 2350% 2351% MagickBooleanType MagickDecipherImage(MagickWand *wand, 2352% const char *passphrase) 2353% 2354% A description of each parameter follows: 2355% 2356% o wand: the magick wand. 2357% 2358% o passphrase: the passphrase. 2359% 2360*/ 2361WandExport MagickBooleanType MagickDecipherImage(MagickWand *wand, 2362 const char *passphrase) 2363{ 2364 assert(wand != (MagickWand *) NULL); 2365 assert(wand->signature == MagickWandSignature); 2366 if (wand->debug != MagickFalse) 2367 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2368 if (wand->images == (Image *) NULL) 2369 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2370 return(DecipherImage(wand->images,passphrase,wand->exception)); 2371} 2372 2373/* 2374%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2375% % 2376% % 2377% % 2378% M a g i c k D e c o n s t r u c t I m a g e s % 2379% % 2380% % 2381% % 2382%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2383% 2384% MagickDeconstructImages() compares each image with the next in a sequence 2385% and returns the maximum bounding region of any pixel differences it 2386% discovers. 2387% 2388% The format of the MagickDeconstructImages method is: 2389% 2390% MagickWand *MagickDeconstructImages(MagickWand *wand) 2391% 2392% A description of each parameter follows: 2393% 2394% o wand: the magick wand. 2395% 2396*/ 2397WandExport MagickWand *MagickDeconstructImages(MagickWand *wand) 2398{ 2399 Image 2400 *deconstruct_image; 2401 2402 assert(wand != (MagickWand *) NULL); 2403 assert(wand->signature == MagickWandSignature); 2404 if (wand->debug != MagickFalse) 2405 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2406 if (wand->images == (Image *) NULL) 2407 return((MagickWand *) NULL); 2408 deconstruct_image=CompareImagesLayers(wand->images,CompareAnyLayer, 2409 wand->exception); 2410 if (deconstruct_image == (Image *) NULL) 2411 return((MagickWand *) NULL); 2412 return(CloneMagickWandFromImages(wand,deconstruct_image)); 2413} 2414 2415/* 2416%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2417% % 2418% % 2419% % 2420% M a g i c k D e s k e w I m a g e % 2421% % 2422% % 2423% % 2424%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2425% 2426% MagickDeskewImage() removes skew from the image. Skew is an artifact that 2427% occurs in scanned images because of the camera being misaligned, 2428% imperfections in the scanning or surface, or simply because the paper was 2429% not placed completely flat when scanned. 2430% 2431% The format of the MagickDeskewImage method is: 2432% 2433% MagickBooleanType MagickDeskewImage(MagickWand *wand, 2434% const double threshold) 2435% 2436% A description of each parameter follows: 2437% 2438% o wand: the magick wand. 2439% 2440% o threshold: separate background from foreground. 2441% 2442*/ 2443WandExport MagickBooleanType MagickDeskewImage(MagickWand *wand, 2444 const double threshold) 2445{ 2446 Image 2447 *sepia_image; 2448 2449 assert(wand != (MagickWand *) NULL); 2450 assert(wand->signature == MagickWandSignature); 2451 if (wand->debug != MagickFalse) 2452 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2453 if (wand->images == (Image *) NULL) 2454 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2455 sepia_image=DeskewImage(wand->images,threshold,wand->exception); 2456 if (sepia_image == (Image *) NULL) 2457 return(MagickFalse); 2458 ReplaceImageInList(&wand->images,sepia_image); 2459 return(MagickTrue); 2460} 2461 2462/* 2463%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2464% % 2465% % 2466% % 2467% M a g i c k D e s p e c k l e I m a g e % 2468% % 2469% % 2470% % 2471%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2472% 2473% MagickDespeckleImage() reduces the speckle noise in an image while 2474% perserving the edges of the original image. 2475% 2476% The format of the MagickDespeckleImage method is: 2477% 2478% MagickBooleanType MagickDespeckleImage(MagickWand *wand) 2479% 2480% A description of each parameter follows: 2481% 2482% o wand: the magick wand. 2483% 2484*/ 2485WandExport MagickBooleanType MagickDespeckleImage(MagickWand *wand) 2486{ 2487 Image 2488 *despeckle_image; 2489 2490 assert(wand != (MagickWand *) NULL); 2491 assert(wand->signature == MagickWandSignature); 2492 if (wand->debug != MagickFalse) 2493 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2494 if (wand->images == (Image *) NULL) 2495 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2496 despeckle_image=DespeckleImage(wand->images,wand->exception); 2497 if (despeckle_image == (Image *) NULL) 2498 return(MagickFalse); 2499 ReplaceImageInList(&wand->images,despeckle_image); 2500 return(MagickTrue); 2501} 2502 2503/* 2504%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2505% % 2506% % 2507% % 2508% M a g i c k D e s t r o y I m a g e % 2509% % 2510% % 2511% % 2512%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2513% 2514% MagickDestroyImage() dereferences an image, deallocating memory associated 2515% with the image if the reference count becomes zero. 2516% 2517% The format of the MagickDestroyImage method is: 2518% 2519% Image *MagickDestroyImage(Image *image) 2520% 2521% A description of each parameter follows: 2522% 2523% o image: the image. 2524% 2525*/ 2526WandExport Image *MagickDestroyImage(Image *image) 2527{ 2528 return(DestroyImage(image)); 2529} 2530 2531/* 2532%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2533% % 2534% % 2535% % 2536% M a g i c k D i s p l a y I m a g e % 2537% % 2538% % 2539% % 2540%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2541% 2542% MagickDisplayImage() displays an image. 2543% 2544% The format of the MagickDisplayImage method is: 2545% 2546% MagickBooleanType MagickDisplayImage(MagickWand *wand, 2547% const char *server_name) 2548% 2549% A description of each parameter follows: 2550% 2551% o wand: the magick wand. 2552% 2553% o server_name: the X server name. 2554% 2555*/ 2556WandExport MagickBooleanType MagickDisplayImage(MagickWand *wand, 2557 const char *server_name) 2558{ 2559 Image 2560 *image; 2561 2562 MagickBooleanType 2563 status; 2564 2565 assert(wand != (MagickWand *) NULL); 2566 assert(wand->signature == MagickWandSignature); 2567 if (wand->debug != MagickFalse) 2568 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2569 if (wand->images == (Image *) NULL) 2570 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2571 image=CloneImage(wand->images,0,0,MagickTrue,wand->exception); 2572 if (image == (Image *) NULL) 2573 return(MagickFalse); 2574 (void) CloneString(&wand->image_info->server_name,server_name); 2575 status=DisplayImages(wand->image_info,image,wand->exception); 2576 image=DestroyImage(image); 2577 return(status); 2578} 2579 2580/* 2581%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2582% % 2583% % 2584% % 2585% M a g i c k D i s p l a y I m a g e s % 2586% % 2587% % 2588% % 2589%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2590% 2591% MagickDisplayImages() displays an image or image sequence. 2592% 2593% The format of the MagickDisplayImages method is: 2594% 2595% MagickBooleanType MagickDisplayImages(MagickWand *wand, 2596% const char *server_name) 2597% 2598% A description of each parameter follows: 2599% 2600% o wand: the magick wand. 2601% 2602% o server_name: the X server name. 2603% 2604*/ 2605WandExport MagickBooleanType MagickDisplayImages(MagickWand *wand, 2606 const char *server_name) 2607{ 2608 MagickBooleanType 2609 status; 2610 2611 assert(wand != (MagickWand *) NULL); 2612 assert(wand->signature == MagickWandSignature); 2613 if (wand->debug != MagickFalse) 2614 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2615 (void) CloneString(&wand->image_info->server_name,server_name); 2616 status=DisplayImages(wand->image_info,wand->images,wand->exception); 2617 return(status); 2618} 2619 2620/* 2621%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2622% % 2623% % 2624% % 2625% M a g i c k D i s t o r t I m a g e % 2626% % 2627% % 2628% % 2629%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2630% 2631% MagickDistortImage() distorts an image using various distortion methods, by 2632% mapping color lookups of the source image to a new destination image 2633% usally of the same size as the source image, unless 'bestfit' is set to 2634% true. 2635% 2636% If 'bestfit' is enabled, and distortion allows it, the destination image is 2637% adjusted to ensure the whole source 'image' will just fit within the final 2638% destination image, which will be sized and offset accordingly. Also in 2639% many cases the virtual offset of the source image will be taken into 2640% account in the mapping. 2641% 2642% The format of the MagickDistortImage method is: 2643% 2644% MagickBooleanType MagickDistortImage(MagickWand *wand, 2645% const DistortImageMethod method,const size_t number_arguments, 2646% const double *arguments,const MagickBooleanType bestfit) 2647% 2648% A description of each parameter follows: 2649% 2650% o image: the image to be distorted. 2651% 2652% o method: the method of image distortion. 2653% 2654% ArcDistortion always ignores the source image offset, and always 2655% 'bestfit' the destination image with the top left corner offset 2656% relative to the polar mapping center. 2657% 2658% Bilinear has no simple inverse mapping so it does not allow 'bestfit' 2659% style of image distortion. 2660% 2661% Affine, Perspective, and Bilinear, do least squares fitting of the 2662% distortion when more than the minimum number of control point pairs 2663% are provided. 2664% 2665% Perspective, and Bilinear, falls back to a Affine distortion when less 2666% that 4 control point pairs are provided. While Affine distortions let 2667% you use any number of control point pairs, that is Zero pairs is a 2668% no-Op (viewport only) distrotion, one pair is a translation and two 2669% pairs of control points do a scale-rotate-translate, without any 2670% shearing. 2671% 2672% o number_arguments: the number of arguments given for this distortion 2673% method. 2674% 2675% o arguments: the arguments for this distortion method. 2676% 2677% o bestfit: Attempt to resize destination to fit distorted source. 2678% 2679*/ 2680WandExport MagickBooleanType MagickDistortImage(MagickWand *wand, 2681 const DistortImageMethod method,const size_t number_arguments, 2682 const double *arguments,const MagickBooleanType bestfit) 2683{ 2684 Image 2685 *distort_image; 2686 2687 assert(wand != (MagickWand *) NULL); 2688 assert(wand->signature == MagickWandSignature); 2689 if (wand->debug != MagickFalse) 2690 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2691 if (wand->images == (Image *) NULL) 2692 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2693 distort_image=DistortImage(wand->images,method,number_arguments,arguments, 2694 bestfit,wand->exception); 2695 if (distort_image == (Image *) NULL) 2696 return(MagickFalse); 2697 ReplaceImageInList(&wand->images,distort_image); 2698 return(MagickTrue); 2699} 2700 2701/* 2702%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2703% % 2704% % 2705% % 2706% M a g i c k D r a w I m a g e % 2707% % 2708% % 2709% % 2710%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2711% 2712% MagickDrawImage() renders the drawing wand on the current image. 2713% 2714% The format of the MagickDrawImage method is: 2715% 2716% MagickBooleanType MagickDrawImage(MagickWand *wand, 2717% const DrawingWand *drawing_wand) 2718% 2719% A description of each parameter follows: 2720% 2721% o wand: the magick wand. 2722% 2723% o drawing_wand: the draw wand. 2724% 2725*/ 2726WandExport MagickBooleanType MagickDrawImage(MagickWand *wand, 2727 const DrawingWand *drawing_wand) 2728{ 2729 char 2730 *primitive; 2731 2732 DrawInfo 2733 *draw_info; 2734 2735 MagickBooleanType 2736 status; 2737 2738 assert(wand != (MagickWand *) NULL); 2739 assert(wand->signature == MagickWandSignature); 2740 if (wand->debug != MagickFalse) 2741 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2742 if (wand->images == (Image *) NULL) 2743 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2744 draw_info=PeekDrawingWand(drawing_wand); 2745 if ((draw_info == (DrawInfo *) NULL) || 2746 (draw_info->primitive == (char *) NULL)) 2747 return(MagickFalse); 2748 primitive=AcquireString(draw_info->primitive); 2749 draw_info=DestroyDrawInfo(draw_info); 2750 draw_info=CloneDrawInfo(wand->image_info,(DrawInfo *) NULL); 2751 draw_info->primitive=primitive; 2752 status=DrawImage(wand->images,draw_info,wand->exception); 2753 draw_info=DestroyDrawInfo(draw_info); 2754 return(status); 2755} 2756 2757/* 2758%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2759% % 2760% % 2761% % 2762% M a g i c k E d g e I m a g e % 2763% % 2764% % 2765% % 2766%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2767% 2768% MagickEdgeImage() enhance edges within the image with a convolution filter 2769% of the given radius. Use a radius of 0 and Edge() selects a suitable 2770% radius for you. 2771% 2772% The format of the MagickEdgeImage method is: 2773% 2774% MagickBooleanType MagickEdgeImage(MagickWand *wand,const double radius) 2775% 2776% A description of each parameter follows: 2777% 2778% o wand: the magick wand. 2779% 2780% o radius: the radius of the pixel neighborhood. 2781% 2782*/ 2783WandExport MagickBooleanType MagickEdgeImage(MagickWand *wand, 2784 const double radius) 2785{ 2786 Image 2787 *edge_image; 2788 2789 assert(wand != (MagickWand *) NULL); 2790 assert(wand->signature == MagickWandSignature); 2791 if (wand->debug != MagickFalse) 2792 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2793 if (wand->images == (Image *) NULL) 2794 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2795 edge_image=EdgeImage(wand->images,radius,wand->exception); 2796 if (edge_image == (Image *) NULL) 2797 return(MagickFalse); 2798 ReplaceImageInList(&wand->images,edge_image); 2799 return(MagickTrue); 2800} 2801 2802/* 2803%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2804% % 2805% % 2806% % 2807% M a g i c k E m b o s s I m a g e % 2808% % 2809% % 2810% % 2811%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2812% 2813% MagickEmbossImage() returns a grayscale image with a three-dimensional 2814% effect. We convolve the image with a Gaussian operator of the given radius 2815% and standard deviation (sigma). For reasonable results, radius should be 2816% larger than sigma. Use a radius of 0 and Emboss() selects a suitable 2817% radius for you. 2818% 2819% The format of the MagickEmbossImage method is: 2820% 2821% MagickBooleanType MagickEmbossImage(MagickWand *wand,const double radius, 2822% const double sigma) 2823% 2824% A description of each parameter follows: 2825% 2826% o wand: the magick wand. 2827% 2828% o radius: the radius of the Gaussian, in pixels, not counting the center 2829% pixel. 2830% 2831% o sigma: the standard deviation of the Gaussian, in pixels. 2832% 2833*/ 2834WandExport MagickBooleanType MagickEmbossImage(MagickWand *wand, 2835 const double radius,const double sigma) 2836{ 2837 Image 2838 *emboss_image; 2839 2840 assert(wand != (MagickWand *) NULL); 2841 assert(wand->signature == MagickWandSignature); 2842 if (wand->debug != MagickFalse) 2843 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2844 if (wand->images == (Image *) NULL) 2845 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2846 emboss_image=EmbossImage(wand->images,radius,sigma,wand->exception); 2847 if (emboss_image == (Image *) NULL) 2848 return(MagickFalse); 2849 ReplaceImageInList(&wand->images,emboss_image); 2850 return(MagickTrue); 2851} 2852 2853/* 2854%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2855% % 2856% % 2857% % 2858% M a g i c k E n c i p h e r I m a g e % 2859% % 2860% % 2861% % 2862%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2863% 2864% MagickEncipherImage() converts plaint pixels to cipher pixels. 2865% 2866% The format of the MagickEncipherImage method is: 2867% 2868% MagickBooleanType MagickEncipherImage(MagickWand *wand, 2869% const char *passphrase) 2870% 2871% A description of each parameter follows: 2872% 2873% o wand: the magick wand. 2874% 2875% o passphrase: the passphrase. 2876% 2877*/ 2878WandExport MagickBooleanType MagickEncipherImage(MagickWand *wand, 2879 const char *passphrase) 2880{ 2881 assert(wand != (MagickWand *) NULL); 2882 assert(wand->signature == MagickWandSignature); 2883 if (wand->debug != MagickFalse) 2884 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2885 if (wand->images == (Image *) NULL) 2886 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2887 return(EncipherImage(wand->images,passphrase,wand->exception)); 2888} 2889 2890/* 2891%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2892% % 2893% % 2894% % 2895% M a g i c k E n h a n c e I m a g e % 2896% % 2897% % 2898% % 2899%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2900% 2901% MagickEnhanceImage() applies a digital filter that improves the quality of a 2902% noisy image. 2903% 2904% The format of the MagickEnhanceImage method is: 2905% 2906% MagickBooleanType MagickEnhanceImage(MagickWand *wand) 2907% 2908% A description of each parameter follows: 2909% 2910% o wand: the magick wand. 2911% 2912*/ 2913WandExport MagickBooleanType MagickEnhanceImage(MagickWand *wand) 2914{ 2915 Image 2916 *enhance_image; 2917 2918 assert(wand != (MagickWand *) NULL); 2919 assert(wand->signature == MagickWandSignature); 2920 if (wand->debug != MagickFalse) 2921 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2922 if (wand->images == (Image *) NULL) 2923 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2924 enhance_image=EnhanceImage(wand->images,wand->exception); 2925 if (enhance_image == (Image *) NULL) 2926 return(MagickFalse); 2927 ReplaceImageInList(&wand->images,enhance_image); 2928 return(MagickTrue); 2929} 2930 2931/* 2932%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2933% % 2934% % 2935% % 2936% M a g i c k E q u a l i z e I m a g e % 2937% % 2938% % 2939% % 2940%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2941% 2942% MagickEqualizeImage() equalizes the image histogram. 2943% 2944% The format of the MagickEqualizeImage method is: 2945% 2946% MagickBooleanType MagickEqualizeImage(MagickWand *wand) 2947% 2948% A description of each parameter follows: 2949% 2950% o wand: the magick wand. 2951% 2952% o channel: the image channel(s). 2953% 2954*/ 2955WandExport MagickBooleanType MagickEqualizeImage(MagickWand *wand) 2956{ 2957 MagickBooleanType 2958 status; 2959 2960 assert(wand != (MagickWand *) NULL); 2961 assert(wand->signature == MagickWandSignature); 2962 if (wand->debug != MagickFalse) 2963 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2964 if (wand->images == (Image *) NULL) 2965 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2966 status=EqualizeImage(wand->images,wand->exception); 2967 return(status); 2968} 2969 2970/* 2971%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2972% % 2973% % 2974% % 2975% M a g i c k E v a l u a t e I m a g e % 2976% % 2977% % 2978% % 2979%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2980% 2981% MagickEvaluateImage() applys an arithmetic, relational, or logical 2982% expression to an image. Use these operators to lighten or darken an image, 2983% to increase or decrease contrast in an image, or to produce the "negative" 2984% of an image. 2985% 2986% The format of the MagickEvaluateImage method is: 2987% 2988% MagickBooleanType MagickEvaluateImage(MagickWand *wand, 2989% const MagickEvaluateOperator operator,const double value) 2990% MagickBooleanType MagickEvaluateImages(MagickWand *wand, 2991% const MagickEvaluateOperator operator) 2992% 2993% A description of each parameter follows: 2994% 2995% o wand: the magick wand. 2996% 2997% o op: A channel operator. 2998% 2999% o value: A value value. 3000% 3001*/ 3002 3003WandExport MagickWand *MagickEvaluateImages(MagickWand *wand, 3004 const MagickEvaluateOperator op) 3005{ 3006 Image 3007 *evaluate_image; 3008 3009 assert(wand != (MagickWand *) NULL); 3010 assert(wand->signature == MagickWandSignature); 3011 if (wand->debug != MagickFalse) 3012 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3013 if (wand->images == (Image *) NULL) 3014 return((MagickWand *) NULL); 3015 evaluate_image=EvaluateImages(wand->images,op,wand->exception); 3016 if (evaluate_image == (Image *) NULL) 3017 return((MagickWand *) NULL); 3018 return(CloneMagickWandFromImages(wand,evaluate_image)); 3019} 3020 3021WandExport MagickBooleanType MagickEvaluateImage(MagickWand *wand, 3022 const MagickEvaluateOperator op,const double value) 3023{ 3024 MagickBooleanType 3025 status; 3026 3027 assert(wand != (MagickWand *) NULL); 3028 assert(wand->signature == MagickWandSignature); 3029 if (wand->debug != MagickFalse) 3030 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3031 if (wand->images == (Image *) NULL) 3032 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3033 status=EvaluateImage(wand->images,op,value,wand->exception); 3034 return(status); 3035} 3036 3037/* 3038%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3039% % 3040% % 3041% % 3042% M a g i c k E x p o r t I m a g e P i x e l s % 3043% % 3044% % 3045% % 3046%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3047% 3048% MagickExportImagePixels() extracts pixel data from an image and returns it 3049% to you. The method returns MagickTrue on success otherwise MagickFalse if 3050% an error is encountered. The data is returned as char, short int, int, 3051% ssize_t, float, or double in the order specified by map. 3052% 3053% Suppose you want to extract the first scanline of a 640x480 image as 3054% character data in red-green-blue order: 3055% 3056% MagickExportImagePixels(wand,0,0,640,1,"RGB",CharPixel,pixels); 3057% 3058% The format of the MagickExportImagePixels method is: 3059% 3060% MagickBooleanType MagickExportImagePixels(MagickWand *wand, 3061% const ssize_t x,const ssize_t y,const size_t columns, 3062% const size_t rows,const char *map,const StorageType storage, 3063% void *pixels) 3064% 3065% A description of each parameter follows: 3066% 3067% o wand: the magick wand. 3068% 3069% o x, y, columns, rows: These values define the perimeter 3070% of a region of pixels you want to extract. 3071% 3072% o map: This string reflects the expected ordering of the pixel array. 3073% It can be any combination or order of R = red, G = green, B = blue, 3074% A = alpha (0 is transparent), O = alpha (0 is opaque), C = cyan, 3075% Y = yellow, M = magenta, K = black, I = intensity (for grayscale), 3076% P = pad. 3077% 3078% o storage: Define the data type of the pixels. Float and double types are 3079% expected to be normalized [0..1] otherwise [0..QuantumRange]. Choose from 3080% these types: CharPixel, DoublePixel, FloatPixel, IntegerPixel, 3081% LongPixel, QuantumPixel, or ShortPixel. 3082% 3083% o pixels: This array of values contain the pixel components as defined by 3084% map and type. You must preallocate this array where the expected 3085% length varies depending on the values of width, height, map, and type. 3086% 3087*/ 3088WandExport MagickBooleanType MagickExportImagePixels(MagickWand *wand, 3089 const ssize_t x,const ssize_t y,const size_t columns, 3090 const size_t rows,const char *map,const StorageType storage, 3091 void *pixels) 3092{ 3093 MagickBooleanType 3094 status; 3095 3096 assert(wand != (MagickWand *) NULL); 3097 assert(wand->signature == MagickWandSignature); 3098 if (wand->debug != MagickFalse) 3099 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3100 if (wand->images == (Image *) NULL) 3101 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3102 status=ExportImagePixels(wand->images,x,y,columns,rows,map, 3103 storage,pixels,wand->exception); 3104 return(status); 3105} 3106 3107/* 3108%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3109% % 3110% % 3111% % 3112% M a g i c k E x t e n t I m a g e % 3113% % 3114% % 3115% % 3116%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3117% 3118% MagickExtentImage() extends the image as defined by the geometry, gravity, 3119% and wand background color. Set the (x,y) offset of the geometry to move 3120% the original wand relative to the extended wand. 3121% 3122% The format of the MagickExtentImage method is: 3123% 3124% MagickBooleanType MagickExtentImage(MagickWand *wand,const size_t width, 3125% const size_t height,const ssize_t x,const ssize_t y) 3126% 3127% A description of each parameter follows: 3128% 3129% o wand: the magick wand. 3130% 3131% o width: the region width. 3132% 3133% o height: the region height. 3134% 3135% o x: the region x offset. 3136% 3137% o y: the region y offset. 3138% 3139*/ 3140WandExport MagickBooleanType MagickExtentImage(MagickWand *wand, 3141 const size_t width,const size_t height,const ssize_t x,const ssize_t y) 3142{ 3143 Image 3144 *extent_image; 3145 3146 RectangleInfo 3147 extent; 3148 3149 assert(wand != (MagickWand *) NULL); 3150 assert(wand->signature == MagickWandSignature); 3151 if (wand->debug != MagickFalse) 3152 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3153 if (wand->images == (Image *) NULL) 3154 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3155 extent.width=width; 3156 extent.height=height; 3157 extent.x=x; 3158 extent.y=y; 3159 extent_image=ExtentImage(wand->images,&extent,wand->exception); 3160 if (extent_image == (Image *) NULL) 3161 return(MagickFalse); 3162 ReplaceImageInList(&wand->images,extent_image); 3163 return(MagickTrue); 3164} 3165 3166/* 3167%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3168% % 3169% % 3170% % 3171% M a g i c k F l i p I m a g e % 3172% % 3173% % 3174% % 3175%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3176% 3177% MagickFlipImage() creates a vertical mirror image by reflecting the pixels 3178% around the central x-axis. 3179% 3180% The format of the MagickFlipImage method is: 3181% 3182% MagickBooleanType MagickFlipImage(MagickWand *wand) 3183% 3184% A description of each parameter follows: 3185% 3186% o wand: the magick wand. 3187% 3188*/ 3189WandExport MagickBooleanType MagickFlipImage(MagickWand *wand) 3190{ 3191 Image 3192 *flip_image; 3193 3194 assert(wand != (MagickWand *) NULL); 3195 assert(wand->signature == MagickWandSignature); 3196 if (wand->debug != MagickFalse) 3197 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3198 if (wand->images == (Image *) NULL) 3199 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3200 flip_image=FlipImage(wand->images,wand->exception); 3201 if (flip_image == (Image *) NULL) 3202 return(MagickFalse); 3203 ReplaceImageInList(&wand->images,flip_image); 3204 return(MagickTrue); 3205} 3206 3207/* 3208%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3209% % 3210% % 3211% % 3212% 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 % 3213% % 3214% % 3215% % 3216%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3217% 3218% MagickFloodfillPaintImage() changes the color value of any pixel that matches 3219% target and is an immediate neighbor. If the method FillToBorderMethod is 3220% specified, the color value is changed for any neighbor pixel that does not 3221% match the bordercolor member of image. 3222% 3223% The format of the MagickFloodfillPaintImage method is: 3224% 3225% MagickBooleanType MagickFloodfillPaintImage(MagickWand *wand, 3226% const PixelWand *fill,const double fuzz,const PixelWand *bordercolor, 3227% const ssize_t x,const ssize_t y,const MagickBooleanType invert) 3228% 3229% A description of each parameter follows: 3230% 3231% o wand: the magick wand. 3232% 3233% o fill: the floodfill color pixel wand. 3234% 3235% o fuzz: By default target must match a particular pixel color 3236% exactly. However, in many cases two colors may differ by a small amount. 3237% The fuzz member of image defines how much tolerance is acceptable to 3238% consider two colors as the same. For example, set fuzz to 10 and the 3239% color red at intensities of 100 and 102 respectively are now interpreted 3240% as the same color for the purposes of the floodfill. 3241% 3242% o bordercolor: the border color pixel wand. 3243% 3244% o x,y: the starting location of the operation. 3245% 3246% o invert: paint any pixel that does not match the target color. 3247% 3248*/ 3249WandExport MagickBooleanType MagickFloodfillPaintImage(MagickWand *wand, 3250 const PixelWand *fill,const double fuzz,const PixelWand *bordercolor, 3251 const ssize_t x,const ssize_t y,const MagickBooleanType invert) 3252{ 3253 DrawInfo 3254 *draw_info; 3255 3256 MagickBooleanType 3257 status; 3258 3259 PixelInfo 3260 target; 3261 3262 assert(wand != (MagickWand *) NULL); 3263 assert(wand->signature == MagickWandSignature); 3264 if (wand->debug != MagickFalse) 3265 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3266 if (wand->images == (Image *) NULL) 3267 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3268 draw_info=CloneDrawInfo(wand->image_info,(DrawInfo *) NULL); 3269 PixelGetQuantumPacket(fill,&draw_info->fill); 3270 (void) GetOneVirtualPixelInfo(wand->images,TileVirtualPixelMethod,x % 3271 wand->images->columns,y % wand->images->rows,&target,wand->exception); 3272 if (bordercolor != (PixelWand *) NULL) 3273 PixelGetMagickColor(bordercolor,&target); 3274 wand->images->fuzz=fuzz; 3275 status=FloodfillPaintImage(wand->images,draw_info,&target,x,y,invert, 3276 wand->exception); 3277 draw_info=DestroyDrawInfo(draw_info); 3278 return(status); 3279} 3280 3281/* 3282%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3283% % 3284% % 3285% % 3286% M a g i c k F l o p I m a g e % 3287% % 3288% % 3289% % 3290%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3291% 3292% MagickFlopImage() creates a horizontal mirror image by reflecting the pixels 3293% around the central y-axis. 3294% 3295% The format of the MagickFlopImage method is: 3296% 3297% MagickBooleanType MagickFlopImage(MagickWand *wand) 3298% 3299% A description of each parameter follows: 3300% 3301% o wand: the magick wand. 3302% 3303*/ 3304WandExport MagickBooleanType MagickFlopImage(MagickWand *wand) 3305{ 3306 Image 3307 *flop_image; 3308 3309 assert(wand != (MagickWand *) NULL); 3310 assert(wand->signature == MagickWandSignature); 3311 if (wand->debug != MagickFalse) 3312 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3313 if (wand->images == (Image *) NULL) 3314 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3315 flop_image=FlopImage(wand->images,wand->exception); 3316 if (flop_image == (Image *) NULL) 3317 return(MagickFalse); 3318 ReplaceImageInList(&wand->images,flop_image); 3319 return(MagickTrue); 3320} 3321 3322/* 3323%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3324% % 3325% % 3326% % 3327% 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 % 3328% % 3329% % 3330% % 3331%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3332% 3333% MagickForwardFourierTransformImage() implements the discrete Fourier 3334% transform (DFT) of the image either as a magnitude / phase or real / 3335% imaginary image pair. 3336% 3337% The format of the MagickForwardFourierTransformImage method is: 3338% 3339% MagickBooleanType MagickForwardFourierTransformImage(MagickWand *wand, 3340% const MagickBooleanType magnitude) 3341% 3342% A description of each parameter follows: 3343% 3344% o wand: the magick wand. 3345% 3346% o magnitude: if true, return as magnitude / phase pair otherwise a real / 3347% imaginary image pair. 3348% 3349*/ 3350WandExport MagickBooleanType MagickForwardFourierTransformImage( 3351 MagickWand *wand,const MagickBooleanType magnitude) 3352{ 3353 Image 3354 *forward_image; 3355 3356 assert(wand != (MagickWand *) NULL); 3357 assert(wand->signature == MagickWandSignature); 3358 if (wand->debug != MagickFalse) 3359 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3360 if (wand->images == (Image *) NULL) 3361 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3362 forward_image=ForwardFourierTransformImage(wand->images,magnitude, 3363 wand->exception); 3364 if (forward_image == (Image *) NULL) 3365 return(MagickFalse); 3366 ReplaceImageInList(&wand->images,forward_image); 3367 return(MagickTrue); 3368} 3369 3370/* 3371%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3372% % 3373% % 3374% % 3375% M a g i c k F r a m e I m a g e % 3376% % 3377% % 3378% % 3379%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3380% 3381% MagickFrameImage() adds a simulated three-dimensional border around the 3382% image. The width and height specify the border width of the vertical and 3383% horizontal sides of the frame. The inner and outer bevels indicate the 3384% width of the inner and outer shadows of the frame. 3385% 3386% The format of the MagickFrameImage method is: 3387% 3388% MagickBooleanType MagickFrameImage(MagickWand *wand, 3389% const PixelWand *alpha_color,const size_t width, 3390% const size_t height,const ssize_t inner_bevel, 3391% const ssize_t outer_bevel,const CompositeOperator compose) 3392% 3393% A description of each parameter follows: 3394% 3395% o wand: the magick wand. 3396% 3397% o alpha_color: the frame color pixel wand. 3398% 3399% o width: the border width. 3400% 3401% o height: the border height. 3402% 3403% o inner_bevel: the inner bevel width. 3404% 3405% o outer_bevel: the outer bevel width. 3406% 3407% o compose: the composite operator. 3408% 3409*/ 3410WandExport MagickBooleanType MagickFrameImage(MagickWand *wand, 3411 const PixelWand *alpha_color,const size_t width,const size_t height, 3412 const ssize_t inner_bevel,const ssize_t outer_bevel, 3413 const CompositeOperator compose) 3414{ 3415 Image 3416 *frame_image; 3417 3418 FrameInfo 3419 frame_info; 3420 3421 assert(wand != (MagickWand *) NULL); 3422 assert(wand->signature == MagickWandSignature); 3423 if (wand->debug != MagickFalse) 3424 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3425 if (wand->images == (Image *) NULL) 3426 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3427 (void) ResetMagickMemory(&frame_info,0,sizeof(frame_info)); 3428 frame_info.width=wand->images->columns+2*width; 3429 frame_info.height=wand->images->rows+2*height; 3430 frame_info.x=(ssize_t) width; 3431 frame_info.y=(ssize_t) height; 3432 frame_info.inner_bevel=inner_bevel; 3433 frame_info.outer_bevel=outer_bevel; 3434 PixelGetQuantumPacket(alpha_color,&wand->images->alpha_color); 3435 frame_image=FrameImage(wand->images,&frame_info,compose,wand->exception); 3436 if (frame_image == (Image *) NULL) 3437 return(MagickFalse); 3438 ReplaceImageInList(&wand->images,frame_image); 3439 return(MagickTrue); 3440} 3441 3442/* 3443%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3444% % 3445% % 3446% % 3447% M a g i c k F u n c t i o n I m a g e % 3448% % 3449% % 3450% % 3451%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3452% 3453% MagickFunctionImage() applys an arithmetic, relational, or logical 3454% expression to an image. Use these operators to lighten or darken an image, 3455% to increase or decrease contrast in an image, or to produce the "negative" 3456% of an image. 3457% 3458% The format of the MagickFunctionImage method is: 3459% 3460% MagickBooleanType MagickFunctionImage(MagickWand *wand, 3461% const MagickFunction function,const size_t number_arguments, 3462% const double *arguments) 3463% 3464% A description of each parameter follows: 3465% 3466% o wand: the magick wand. 3467% 3468% o function: the image function. 3469% 3470% o number_arguments: the number of function arguments. 3471% 3472% o arguments: the function arguments. 3473% 3474*/ 3475WandExport MagickBooleanType MagickFunctionImage(MagickWand *wand, 3476 const MagickFunction function,const size_t number_arguments, 3477 const double *arguments) 3478{ 3479 MagickBooleanType 3480 status; 3481 3482 assert(wand != (MagickWand *) NULL); 3483 assert(wand->signature == MagickWandSignature); 3484 if (wand->debug != MagickFalse) 3485 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3486 if (wand->images == (Image *) NULL) 3487 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3488 status=FunctionImage(wand->images,function,number_arguments,arguments, 3489 wand->exception); 3490 return(status); 3491} 3492 3493/* 3494%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3495% % 3496% % 3497% % 3498% M a g i c k F x I m a g e % 3499% % 3500% % 3501% % 3502%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3503% 3504% MagickFxImage() evaluate expression for each pixel in the image. 3505% 3506% The format of the MagickFxImage method is: 3507% 3508% MagickWand *MagickFxImage(MagickWand *wand,const char *expression) 3509% 3510% A description of each parameter follows: 3511% 3512% o wand: the magick wand. 3513% 3514% o expression: the expression. 3515% 3516*/ 3517WandExport MagickWand *MagickFxImage(MagickWand *wand,const char *expression) 3518{ 3519 Image 3520 *fx_image; 3521 3522 assert(wand != (MagickWand *) NULL); 3523 assert(wand->signature == MagickWandSignature); 3524 if (wand->debug != MagickFalse) 3525 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3526 if (wand->images == (Image *) NULL) 3527 return((MagickWand *) NULL); 3528 fx_image=FxImage(wand->images,expression,wand->exception); 3529 if (fx_image == (Image *) NULL) 3530 return((MagickWand *) NULL); 3531 return(CloneMagickWandFromImages(wand,fx_image)); 3532} 3533 3534/* 3535%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3536% % 3537% % 3538% % 3539% M a g i c k G a m m a I m a g e % 3540% % 3541% % 3542% % 3543%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3544% 3545% MagickGammaImage() gamma-corrects an image. The same image viewed on 3546% different devices will have perceptual differences in the way the image's 3547% intensities are represented on the screen. Specify individual gamma levels 3548% for the red, green, and blue channels, or adjust all three with the gamma 3549% parameter. Values typically range from 0.8 to 2.3. 3550% 3551% You can also reduce the influence of a particular channel with a gamma 3552% value of 0. 3553% 3554% The format of the MagickGammaImage method is: 3555% 3556% MagickBooleanType MagickGammaImage(MagickWand *wand,const double gamma) 3557% 3558% A description of each parameter follows: 3559% 3560% o wand: the magick wand. 3561% 3562% o level: Define the level of gamma correction. 3563% 3564*/ 3565WandExport MagickBooleanType MagickGammaImage(MagickWand *wand, 3566 const double gamma) 3567{ 3568 MagickBooleanType 3569 status; 3570 3571 assert(wand != (MagickWand *) NULL); 3572 assert(wand->signature == MagickWandSignature); 3573 if (wand->debug != MagickFalse) 3574 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3575 if (wand->images == (Image *) NULL) 3576 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3577 status=GammaImage(wand->images,gamma,wand->exception); 3578 return(status); 3579} 3580 3581/* 3582%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3583% % 3584% % 3585% % 3586% M a g i c k G a u s s i a n B l u r I m a g e % 3587% % 3588% % 3589% % 3590%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3591% 3592% MagickGaussianBlurImage() blurs an image. We convolve the image with a 3593% Gaussian operator of the given radius and standard deviation (sigma). 3594% For reasonable results, the radius should be larger than sigma. Use a 3595% radius of 0 and MagickGaussianBlurImage() selects a suitable radius for you. 3596% 3597% The format of the MagickGaussianBlurImage method is: 3598% 3599% MagickBooleanType MagickGaussianBlurImage(MagickWand *wand, 3600% const double radius,const double sigma) 3601% 3602% A description of each parameter follows: 3603% 3604% o wand: the magick wand. 3605% 3606% o radius: the radius of the Gaussian, in pixels, not counting the center 3607% pixel. 3608% 3609% o sigma: the standard deviation of the Gaussian, in pixels. 3610% 3611*/ 3612WandExport MagickBooleanType MagickGaussianBlurImage(MagickWand *wand, 3613 const double radius,const double sigma) 3614{ 3615 Image 3616 *blur_image; 3617 3618 assert(wand != (MagickWand *) NULL); 3619 assert(wand->signature == MagickWandSignature); 3620 if (wand->debug != MagickFalse) 3621 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3622 if (wand->images == (Image *) NULL) 3623 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3624 blur_image=GaussianBlurImage(wand->images,radius,sigma,wand->exception); 3625 if (blur_image == (Image *) NULL) 3626 return(MagickFalse); 3627 ReplaceImageInList(&wand->images,blur_image); 3628 return(MagickTrue); 3629} 3630 3631/* 3632%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3633% % 3634% % 3635% % 3636% M a g i c k G e t I m a g e % 3637% % 3638% % 3639% % 3640%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3641% 3642% MagickGetImage() gets the image at the current image index. 3643% 3644% The format of the MagickGetImage method is: 3645% 3646% MagickWand *MagickGetImage(MagickWand *wand) 3647% 3648% A description of each parameter follows: 3649% 3650% o wand: the magick wand. 3651% 3652*/ 3653WandExport MagickWand *MagickGetImage(MagickWand *wand) 3654{ 3655 Image 3656 *image; 3657 3658 assert(wand != (MagickWand *) NULL); 3659 assert(wand->signature == MagickWandSignature); 3660 if (wand->debug != MagickFalse) 3661 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3662 if (wand->images == (Image *) NULL) 3663 { 3664 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 3665 "ContainsNoImages","`%s'",wand->name); 3666 return((MagickWand *) NULL); 3667 } 3668 image=CloneImage(wand->images,0,0,MagickTrue,wand->exception); 3669 if (image == (Image *) NULL) 3670 return((MagickWand *) NULL); 3671 return(CloneMagickWandFromImages(wand,image)); 3672} 3673 3674/* 3675%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3676% % 3677% % 3678% % 3679% 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 % 3680% % 3681% % 3682% % 3683%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3684% 3685% MagickGetImageAlphaChannel() returns MagickFalse if the image alpha channel 3686% is not activated. That is, the image is RGB rather than RGBA or CMYK rather 3687% than CMYKA. 3688% 3689% The format of the MagickGetImageAlphaChannel method is: 3690% 3691% MagickBooleanType MagickGetImageAlphaChannel(MagickWand *wand) 3692% 3693% A description of each parameter follows: 3694% 3695% o wand: the magick wand. 3696% 3697*/ 3698WandExport MagickBooleanType MagickGetImageAlphaChannel(MagickWand *wand) 3699{ 3700 assert(wand != (MagickWand *) NULL); 3701 assert(wand->signature == MagickWandSignature); 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 return(GetImageAlphaChannel(wand->images)); 3707} 3708 3709/* 3710%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3711% % 3712% % 3713% % 3714% M a g i c k G e t I m a g e A l p h a C o l o r % 3715% % 3716% % 3717% % 3718%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3719% 3720% MagickGetImageAlhpaColor() returns the image alpha color. 3721% 3722% The format of the MagickGetImageAlhpaColor method is: 3723% 3724% MagickBooleanType MagickGetImageAlhpaColor(MagickWand *wand, 3725% PixelWand *alpha_color) 3726% 3727% A description of each parameter follows: 3728% 3729% o wand: the magick wand. 3730% 3731% o alpha_color: return the alpha color. 3732% 3733*/ 3734WandExport MagickBooleanType MagickGetImageAlhpaColor(MagickWand *wand, 3735 PixelWand *alpha_color) 3736{ 3737 assert(wand != (MagickWand *)NULL); 3738 assert(wand->signature == MagickWandSignature); 3739 if (wand->debug != MagickFalse) 3740 (void) LogMagickEvent(WandEvent, GetMagickModule(), "%s", wand->name); 3741 if (wand->images == (Image *)NULL) 3742 ThrowWandException(WandError, "ContainsNoImages", wand->name); 3743 PixelSetPixelColor(alpha_color, &wand->images->alpha_color); 3744 return(MagickTrue); 3745} 3746 3747/* 3748%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3749% % 3750% % 3751% % 3752% M a g i c k G e t I m a g e C l i p M a s k % 3753% % 3754% % 3755% % 3756%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3757% 3758% MagickGetImageMask() gets the image clip mask at the current image index. 3759% 3760% The format of the MagickGetImageMask method is: 3761% 3762% MagickWand *MagickGetImageMask(MagickWand *wand) 3763% 3764% A description of each parameter follows: 3765% 3766% o wand: the magick wand. 3767% 3768% o type: type of mask, ReadPixelMask or WritePixelMask. 3769% 3770*/ 3771WandExport MagickWand *MagickGetImageMask(MagickWand *wand, 3772 const PixelMask type) 3773{ 3774 Image 3775 *image; 3776 3777 assert(wand != (MagickWand *) NULL); 3778 assert(wand->signature == MagickWandSignature); 3779 if (wand->debug != MagickFalse) 3780 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3781 if (wand->images == (Image *) NULL) 3782 { 3783 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 3784 "ContainsNoImages","`%s'",wand->name); 3785 return((MagickWand *) NULL); 3786 } 3787 image=GetImageMask(wand->images,type,wand->exception); 3788 if (image == (Image *) NULL) 3789 return((MagickWand *) NULL); 3790 return(CloneMagickWandFromImages(wand,image)); 3791} 3792 3793/* 3794%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3795% % 3796% % 3797% % 3798% 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 % 3799% % 3800% % 3801% % 3802%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3803% 3804% MagickGetImageBackgroundColor() returns the image background color. 3805% 3806% The format of the MagickGetImageBackgroundColor method is: 3807% 3808% MagickBooleanType MagickGetImageBackgroundColor(MagickWand *wand, 3809% PixelWand *background_color) 3810% 3811% A description of each parameter follows: 3812% 3813% o wand: the magick wand. 3814% 3815% o background_color: Return the background color. 3816% 3817*/ 3818WandExport MagickBooleanType MagickGetImageBackgroundColor(MagickWand *wand, 3819 PixelWand *background_color) 3820{ 3821 assert(wand != (MagickWand *) NULL); 3822 assert(wand->signature == MagickWandSignature); 3823 if (wand->debug != MagickFalse) 3824 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3825 if (wand->images == (Image *) NULL) 3826 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3827 PixelSetPixelColor(background_color,&wand->images->background_color); 3828 return(MagickTrue); 3829} 3830 3831/* 3832%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3833% % 3834% % 3835% % 3836% M a g i c k G e t I m a g e B l o b % 3837% % 3838% % 3839% % 3840%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3841% 3842% MagickGetImageBlob() implements direct to memory image formats. It returns 3843% the image as a blob (a formatted "file" in memory) and its length, starting 3844% from the current position in the image sequence. Use MagickSetImageFormat() 3845% to set the format to write to the blob (GIF, JPEG, PNG, etc.). 3846% 3847% Utilize MagickResetIterator() to ensure the write is from the beginning of 3848% the image sequence. 3849% 3850% Use MagickRelinquishMemory() to free the blob when you are done with it. 3851% 3852% The format of the MagickGetImageBlob method is: 3853% 3854% unsigned char *MagickGetImageBlob(MagickWand *wand,size_t *length) 3855% 3856% A description of each parameter follows: 3857% 3858% o wand: the magick wand. 3859% 3860% o length: the length of the blob. 3861% 3862*/ 3863WandExport unsigned char *MagickGetImageBlob(MagickWand *wand,size_t *length) 3864{ 3865 unsigned char 3866 *blob; 3867 3868 assert(wand != (MagickWand *) NULL); 3869 assert(wand->signature == MagickWandSignature); 3870 if (wand->debug != MagickFalse) 3871 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3872 if (wand->images == (Image *) NULL) 3873 { 3874 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 3875 "ContainsNoImages","`%s'",wand->name); 3876 return((unsigned char *) NULL); 3877 } 3878 blob=(unsigned char *) ImageToBlob(wand->image_info,wand->images,length, 3879 wand->exception); 3880 return(blob); 3881} 3882 3883/* 3884%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3885% % 3886% % 3887% % 3888% M a g i c k G e t I m a g e s B l o b % 3889% % 3890% % 3891% % 3892%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3893% 3894% MagickGetImageBlob() implements direct to memory image formats. It 3895% returns the image sequence as a blob and its length. The format of the image 3896% determines the format of the returned blob (GIF, JPEG, PNG, etc.). To 3897% return a different image format, use MagickSetImageFormat(). 3898% 3899% Note, some image formats do not permit multiple images to the same image 3900% stream (e.g. JPEG). in this instance, just the first image of the 3901% sequence is returned as a blob. 3902% 3903% The format of the MagickGetImagesBlob method is: 3904% 3905% unsigned char *MagickGetImagesBlob(MagickWand *wand,size_t *length) 3906% 3907% A description of each parameter follows: 3908% 3909% o wand: the magick wand. 3910% 3911% o length: the length of the blob. 3912% 3913*/ 3914WandExport unsigned char *MagickGetImagesBlob(MagickWand *wand,size_t *length) 3915{ 3916 unsigned char 3917 *blob; 3918 3919 assert(wand != (MagickWand *) NULL); 3920 assert(wand->signature == MagickWandSignature); 3921 if (wand->debug != MagickFalse) 3922 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3923 if (wand->images == (Image *) NULL) 3924 { 3925 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 3926 "ContainsNoImages","`%s'",wand->name); 3927 return((unsigned char *) NULL); 3928 } 3929 blob=(unsigned char *) ImagesToBlob(wand->image_info,GetFirstImageInList( 3930 wand->images),length,wand->exception); 3931 return(blob); 3932} 3933 3934/* 3935%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3936% % 3937% % 3938% % 3939% 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 % 3940% % 3941% % 3942% % 3943%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3944% 3945% MagickGetImageBluePrimary() returns the chromaticy blue primary point for the 3946% image. 3947% 3948% The format of the MagickGetImageBluePrimary method is: 3949% 3950% MagickBooleanType MagickGetImageBluePrimary(MagickWand *wand,double *x, 3951% double *y,double *z) 3952% 3953% A description of each parameter follows: 3954% 3955% o wand: the magick wand. 3956% 3957% o x: the chromaticity blue primary x-point. 3958% 3959% o y: the chromaticity blue primary y-point. 3960% 3961% o z: the chromaticity blue primary z-point. 3962% 3963*/ 3964WandExport MagickBooleanType MagickGetImageBluePrimary(MagickWand *wand, 3965 double *x,double *y,double *z) 3966{ 3967 assert(wand != (MagickWand *) NULL); 3968 assert(wand->signature == MagickWandSignature); 3969 if (wand->debug != MagickFalse) 3970 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3971 if (wand->images == (Image *) NULL) 3972 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3973 *x=wand->images->chromaticity.blue_primary.x; 3974 *y=wand->images->chromaticity.blue_primary.y; 3975 *z=wand->images->chromaticity.blue_primary.z; 3976 return(MagickTrue); 3977} 3978 3979/* 3980%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3981% % 3982% % 3983% % 3984% 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 % 3985% % 3986% % 3987% % 3988%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3989% 3990% MagickGetImageBorderColor() returns the image border color. 3991% 3992% The format of the MagickGetImageBorderColor method is: 3993% 3994% MagickBooleanType MagickGetImageBorderColor(MagickWand *wand, 3995% PixelWand *border_color) 3996% 3997% A description of each parameter follows: 3998% 3999% o wand: the magick wand. 4000% 4001% o border_color: Return the border color. 4002% 4003*/ 4004WandExport MagickBooleanType MagickGetImageBorderColor(MagickWand *wand, 4005 PixelWand *border_color) 4006{ 4007 assert(wand != (MagickWand *) NULL); 4008 assert(wand->signature == MagickWandSignature); 4009 if (wand->debug != MagickFalse) 4010 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4011 if (wand->images == (Image *) NULL) 4012 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4013 PixelSetPixelColor(border_color,&wand->images->border_color); 4014 return(MagickTrue); 4015} 4016 4017/* 4018%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4019% % 4020% % 4021% % 4022% M a g i c k G e t I m a g e F e a t u r e s % 4023% % 4024% % 4025% % 4026%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4027% 4028% MagickGetImageFeatures() returns features for each channel in the 4029% image in each of four directions (horizontal, vertical, left and right 4030% diagonals) for the specified distance. The features include the angular 4031% second moment, contrast, correlation, sum of squares: variance, inverse 4032% difference moment, sum average, sum varience, sum entropy, entropy, 4033% difference variance, difference entropy, information measures of 4034% correlation 1, information measures of correlation 2, and maximum 4035% correlation coefficient. You can access the red channel contrast, for 4036% example, like this: 4037% 4038% channel_features=MagickGetImageFeatures(wand,1); 4039% contrast=channel_features[RedPixelChannel].contrast[0]; 4040% 4041% Use MagickRelinquishMemory() to free the statistics buffer. 4042% 4043% The format of the MagickGetImageFeatures method is: 4044% 4045% ChannelFeatures *MagickGetImageFeatures(MagickWand *wand, 4046% const size_t distance) 4047% 4048% A description of each parameter follows: 4049% 4050% o wand: the magick wand. 4051% 4052% o distance: the distance. 4053% 4054*/ 4055WandExport ChannelFeatures *MagickGetImageFeatures(MagickWand *wand, 4056 const size_t distance) 4057{ 4058 assert(wand != (MagickWand *) NULL); 4059 assert(wand->signature == MagickWandSignature); 4060 if (wand->debug != MagickFalse) 4061 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4062 if (wand->images == (Image *) NULL) 4063 { 4064 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4065 "ContainsNoImages","`%s'",wand->name); 4066 return((ChannelFeatures *) NULL); 4067 } 4068 return(GetImageFeatures(wand->images,distance,wand->exception)); 4069} 4070 4071/* 4072%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4073% % 4074% % 4075% % 4076% M a g i c k G e t I m a g e K u r t o s i s % 4077% % 4078% % 4079% % 4080%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4081% 4082% MagickGetImageKurtosis() gets the kurtosis and skewness of one or 4083% more image channels. 4084% 4085% The format of the MagickGetImageKurtosis method is: 4086% 4087% MagickBooleanType MagickGetImageKurtosis(MagickWand *wand, 4088% double *kurtosis,double *skewness) 4089% 4090% A description of each parameter follows: 4091% 4092% o wand: the magick wand. 4093% 4094% o kurtosis: The kurtosis for the specified channel(s). 4095% 4096% o skewness: The skewness for the specified channel(s). 4097% 4098*/ 4099WandExport MagickBooleanType MagickGetImageKurtosis(MagickWand *wand, 4100 double *kurtosis,double *skewness) 4101{ 4102 MagickBooleanType 4103 status; 4104 4105 assert(wand != (MagickWand *) NULL); 4106 assert(wand->signature == MagickWandSignature); 4107 if (wand->debug != MagickFalse) 4108 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4109 if (wand->images == (Image *) NULL) 4110 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4111 status=GetImageKurtosis(wand->images,kurtosis,skewness,wand->exception); 4112 return(status); 4113} 4114 4115/* 4116%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4117% % 4118% % 4119% % 4120% M a g i c k G e t I m a g e M e a n % 4121% % 4122% % 4123% % 4124%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4125% 4126% MagickGetImageMean() gets the mean and standard deviation of one or more 4127% image channels. 4128% 4129% The format of the MagickGetImageMean method is: 4130% 4131% MagickBooleanType MagickGetImageMean(MagickWand *wand,double *mean, 4132% double *standard_deviation) 4133% 4134% A description of each parameter follows: 4135% 4136% o wand: the magick wand. 4137% 4138% o channel: the image channel(s). 4139% 4140% o mean: The mean pixel value for the specified channel(s). 4141% 4142% o standard_deviation: The standard deviation for the specified channel(s). 4143% 4144*/ 4145WandExport MagickBooleanType MagickGetImageMean(MagickWand *wand,double *mean, 4146 double *standard_deviation) 4147{ 4148 MagickBooleanType 4149 status; 4150 4151 assert(wand != (MagickWand *) NULL); 4152 assert(wand->signature == MagickWandSignature); 4153 if (wand->debug != MagickFalse) 4154 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4155 if (wand->images == (Image *) NULL) 4156 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4157 status=GetImageMean(wand->images,mean,standard_deviation,wand->exception); 4158 return(status); 4159} 4160 4161/* 4162%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4163% % 4164% % 4165% % 4166% M a g i c k G e t I m a g e R a n g e % 4167% % 4168% % 4169% % 4170%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4171% 4172% MagickGetImageRange() gets the range for one or more image channels. 4173% 4174% The format of the MagickGetImageRange method is: 4175% 4176% MagickBooleanType MagickGetImageRange(MagickWand *wand,double *minima, 4177% double *maxima) 4178% 4179% A description of each parameter follows: 4180% 4181% o wand: the magick wand. 4182% 4183% o minima: The minimum pixel value for the specified channel(s). 4184% 4185% o maxima: The maximum pixel value for the specified channel(s). 4186% 4187*/ 4188WandExport MagickBooleanType MagickGetImageRange(MagickWand *wand, 4189 double *minima,double *maxima) 4190{ 4191 MagickBooleanType 4192 status; 4193 4194 assert(wand != (MagickWand *) NULL); 4195 assert(wand->signature == MagickWandSignature); 4196 if (wand->debug != MagickFalse) 4197 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4198 if (wand->images == (Image *) NULL) 4199 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4200 status=GetImageRange(wand->images,minima,maxima,wand->exception); 4201 return(status); 4202} 4203 4204/* 4205%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4206% % 4207% % 4208% % 4209% M a g i c k G e t I m a g e S t a t i s t i c s % 4210% % 4211% % 4212% % 4213%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4214% 4215% MagickGetImageStatistics() returns statistics for each channel in the 4216% image. The statistics include the channel depth, its minima and 4217% maxima, the mean, the standard deviation, the kurtosis and the skewness. 4218% You can access the red channel mean, for example, like this: 4219% 4220% channel_statistics=MagickGetImageStatistics(wand); 4221% red_mean=channel_statistics[RedPixelChannel].mean; 4222% 4223% Use MagickRelinquishMemory() to free the statistics buffer. 4224% 4225% The format of the MagickGetImageStatistics method is: 4226% 4227% ChannelStatistics *MagickGetImageStatistics(MagickWand *wand) 4228% 4229% A description of each parameter follows: 4230% 4231% o wand: the magick wand. 4232% 4233*/ 4234WandExport ChannelStatistics *MagickGetImageStatistics(MagickWand *wand) 4235{ 4236 assert(wand != (MagickWand *) NULL); 4237 assert(wand->signature == MagickWandSignature); 4238 if (wand->debug != MagickFalse) 4239 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4240 if (wand->images == (Image *) NULL) 4241 { 4242 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4243 "ContainsNoImages","`%s'",wand->name); 4244 return((ChannelStatistics *) NULL); 4245 } 4246 return(GetImageStatistics(wand->images,wand->exception)); 4247} 4248 4249/* 4250%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4251% % 4252% % 4253% % 4254% 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 % 4255% % 4256% % 4257% % 4258%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4259% 4260% MagickGetImageColormapColor() returns the color of the specified colormap 4261% index. 4262% 4263% The format of the MagickGetImageColormapColor method is: 4264% 4265% MagickBooleanType MagickGetImageColormapColor(MagickWand *wand, 4266% const size_t index,PixelWand *color) 4267% 4268% A description of each parameter follows: 4269% 4270% o wand: the magick wand. 4271% 4272% o index: the offset into the image colormap. 4273% 4274% o color: Return the colormap color in this wand. 4275% 4276*/ 4277WandExport MagickBooleanType MagickGetImageColormapColor(MagickWand *wand, 4278 const size_t index,PixelWand *color) 4279{ 4280 assert(wand != (MagickWand *) NULL); 4281 assert(wand->signature == MagickWandSignature); 4282 if (wand->debug != MagickFalse) 4283 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4284 if (wand->images == (Image *) NULL) 4285 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4286 if ((wand->images->colormap == (PixelInfo *) NULL) || 4287 (index >= wand->images->colors)) 4288 { 4289 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4290 "InvalidColormapIndex","`%s'",wand->name); 4291 return(MagickFalse); 4292 } 4293 PixelSetPixelColor(color,wand->images->colormap+index); 4294 return(MagickTrue); 4295} 4296 4297/* 4298%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4299% % 4300% % 4301% % 4302% M a g i c k G e t I m a g e C o l o r s % 4303% % 4304% % 4305% % 4306%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4307% 4308% MagickGetImageColors() gets the number of unique colors in the image. 4309% 4310% The format of the MagickGetImageColors method is: 4311% 4312% size_t MagickGetImageColors(MagickWand *wand) 4313% 4314% A description of each parameter follows: 4315% 4316% o wand: the magick wand. 4317% 4318*/ 4319WandExport size_t MagickGetImageColors(MagickWand *wand) 4320{ 4321 assert(wand != (MagickWand *) NULL); 4322 assert(wand->signature == MagickWandSignature); 4323 if (wand->debug != MagickFalse) 4324 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4325 if (wand->images == (Image *) NULL) 4326 { 4327 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4328 "ContainsNoImages","`%s'",wand->name); 4329 return(0); 4330 } 4331 return(GetNumberColors(wand->images,(FILE *) NULL,wand->exception)); 4332} 4333 4334/* 4335%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4336% % 4337% % 4338% % 4339% M a g i c k G e t I m a g e C o l o r s p a c e % 4340% % 4341% % 4342% % 4343%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4344% 4345% MagickGetImageColorspace() gets the image colorspace. 4346% 4347% The format of the MagickGetImageColorspace method is: 4348% 4349% ColorspaceType MagickGetImageColorspace(MagickWand *wand) 4350% 4351% A description of each parameter follows: 4352% 4353% o wand: the magick wand. 4354% 4355*/ 4356WandExport ColorspaceType MagickGetImageColorspace(MagickWand *wand) 4357{ 4358 assert(wand != (MagickWand *) NULL); 4359 assert(wand->signature == MagickWandSignature); 4360 if (wand->debug != MagickFalse) 4361 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4362 if (wand->images == (Image *) NULL) 4363 { 4364 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4365 "ContainsNoImages","`%s'",wand->name); 4366 return(UndefinedColorspace); 4367 } 4368 return(wand->images->colorspace); 4369} 4370 4371/* 4372%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4373% % 4374% % 4375% % 4376% M a g i c k G e t I m a g e C o m p o s e % 4377% % 4378% % 4379% % 4380%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4381% 4382% MagickGetImageCompose() returns the composite operator associated with the 4383% image. 4384% 4385% The format of the MagickGetImageCompose method is: 4386% 4387% CompositeOperator MagickGetImageCompose(MagickWand *wand) 4388% 4389% A description of each parameter follows: 4390% 4391% o wand: the magick wand. 4392% 4393*/ 4394WandExport CompositeOperator MagickGetImageCompose(MagickWand *wand) 4395{ 4396 assert(wand != (MagickWand *) NULL); 4397 assert(wand->signature == MagickWandSignature); 4398 if (wand->debug != MagickFalse) 4399 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4400 if (wand->images == (Image *) NULL) 4401 { 4402 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4403 "ContainsNoImages","`%s'",wand->name); 4404 return(UndefinedCompositeOp); 4405 } 4406 return(wand->images->compose); 4407} 4408 4409/* 4410%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4411% % 4412% % 4413% % 4414% 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 % 4415% % 4416% % 4417% % 4418%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4419% 4420% MagickGetImageCompression() gets the image compression. 4421% 4422% The format of the MagickGetImageCompression method is: 4423% 4424% CompressionType MagickGetImageCompression(MagickWand *wand) 4425% 4426% A description of each parameter follows: 4427% 4428% o wand: the magick wand. 4429% 4430*/ 4431WandExport CompressionType MagickGetImageCompression(MagickWand *wand) 4432{ 4433 assert(wand != (MagickWand *) NULL); 4434 assert(wand->signature == MagickWandSignature); 4435 if (wand->debug != MagickFalse) 4436 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4437 if (wand->images == (Image *) NULL) 4438 { 4439 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4440 "ContainsNoImages","`%s'",wand->name); 4441 return(UndefinedCompression); 4442 } 4443 return(wand->images->compression); 4444} 4445 4446/* 4447%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4448% % 4449% % 4450% % 4451% 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 % 4452% % 4453% % 4454% % 4455%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4456% 4457% MagickGetImageCompressionQuality() gets the image compression quality. 4458% 4459% The format of the MagickGetImageCompressionQuality method is: 4460% 4461% size_t MagickGetImageCompressionQuality(MagickWand *wand) 4462% 4463% A description of each parameter follows: 4464% 4465% o wand: the magick wand. 4466% 4467*/ 4468WandExport size_t MagickGetImageCompressionQuality(MagickWand *wand) 4469{ 4470 assert(wand != (MagickWand *) NULL); 4471 assert(wand->signature == MagickWandSignature); 4472 if (wand->debug != MagickFalse) 4473 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4474 if (wand->images == (Image *) NULL) 4475 { 4476 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4477 "ContainsNoImages","`%s'",wand->name); 4478 return(0UL); 4479 } 4480 return(wand->images->quality); 4481} 4482 4483/* 4484%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4485% % 4486% % 4487% % 4488% M a g i c k G e t I m a g e D e l a y % 4489% % 4490% % 4491% % 4492%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4493% 4494% MagickGetImageDelay() gets the image delay. 4495% 4496% The format of the MagickGetImageDelay method is: 4497% 4498% size_t MagickGetImageDelay(MagickWand *wand) 4499% 4500% A description of each parameter follows: 4501% 4502% o wand: the magick wand. 4503% 4504*/ 4505WandExport size_t MagickGetImageDelay(MagickWand *wand) 4506{ 4507 assert(wand != (MagickWand *) NULL); 4508 assert(wand->signature == MagickWandSignature); 4509 if (wand->debug != MagickFalse) 4510 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4511 if (wand->images == (Image *) NULL) 4512 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4513 return(wand->images->delay); 4514} 4515 4516/* 4517%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4518% % 4519% % 4520% % 4521% M a g i c k G e t I m a g e D e p t h % 4522% % 4523% % 4524% % 4525%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4526% 4527% MagickGetImageDepth() gets the image depth. 4528% 4529% The format of the MagickGetImageDepth method is: 4530% 4531% size_t MagickGetImageDepth(MagickWand *wand) 4532% 4533% A description of each parameter follows: 4534% 4535% o wand: the magick wand. 4536% 4537*/ 4538WandExport size_t MagickGetImageDepth(MagickWand *wand) 4539{ 4540 assert(wand != (MagickWand *) NULL); 4541 assert(wand->signature == MagickWandSignature); 4542 if (wand->debug != MagickFalse) 4543 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4544 if (wand->images == (Image *) NULL) 4545 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4546 return(wand->images->depth); 4547} 4548 4549/* 4550%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4551% % 4552% % 4553% % 4554% M a g i c k G e t I m a g e D i s p o s e % 4555% % 4556% % 4557% % 4558%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4559% 4560% MagickGetImageDispose() gets the image disposal method. 4561% 4562% The format of the MagickGetImageDispose method is: 4563% 4564% DisposeType MagickGetImageDispose(MagickWand *wand) 4565% 4566% A description of each parameter follows: 4567% 4568% o wand: the magick wand. 4569% 4570*/ 4571WandExport DisposeType MagickGetImageDispose(MagickWand *wand) 4572{ 4573 assert(wand != (MagickWand *) NULL); 4574 assert(wand->signature == MagickWandSignature); 4575 if (wand->debug != MagickFalse) 4576 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4577 if (wand->images == (Image *) NULL) 4578 { 4579 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4580 "ContainsNoImages","`%s'",wand->name); 4581 return(UndefinedDispose); 4582 } 4583 return((DisposeType) wand->images->dispose); 4584} 4585 4586/* 4587%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4588% % 4589% % 4590% % 4591% M a g i c k G e t I m a g e D i s t o r t i o n % 4592% % 4593% % 4594% % 4595%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4596% 4597% MagickGetImageDistortion() compares an image to a reconstructed image and 4598% returns the specified distortion metric. 4599% 4600% The format of the MagickGetImageDistortion method is: 4601% 4602% MagickBooleanType MagickGetImageDistortion(MagickWand *wand, 4603% const MagickWand *reference,const MetricType metric, 4604% double *distortion) 4605% 4606% A description of each parameter follows: 4607% 4608% o wand: the magick wand. 4609% 4610% o reference: the reference wand. 4611% 4612% o metric: the metric. 4613% 4614% o distortion: the computed distortion between the images. 4615% 4616*/ 4617WandExport MagickBooleanType MagickGetImageDistortion(MagickWand *wand, 4618 const MagickWand *reference,const MetricType metric,double *distortion) 4619{ 4620 MagickBooleanType 4621 status; 4622 4623 assert(wand != (MagickWand *) NULL); 4624 assert(wand->signature == MagickWandSignature); 4625 if (wand->debug != MagickFalse) 4626 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4627 if ((wand->images == (Image *) NULL) || (reference->images == (Image *) NULL)) 4628 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4629 status=GetImageDistortion(wand->images,reference->images,metric,distortion, 4630 wand->exception); 4631 return(status); 4632} 4633 4634/* 4635%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4636% % 4637% % 4638% % 4639% 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 % 4640% % 4641% % 4642% % 4643%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4644% 4645% MagickGetImageDistortions() compares one or more pixel channels of an 4646% image to a reconstructed image and returns the specified distortion metrics. 4647% 4648% Use MagickRelinquishMemory() to free the metrics when you are done with them. 4649% 4650% The format of the MagickGetImageDistortion method is: 4651% 4652% double *MagickGetImageDistortion(MagickWand *wand, 4653% const MagickWand *reference,const MetricType metric) 4654% 4655% A description of each parameter follows: 4656% 4657% o wand: the magick wand. 4658% 4659% o reference: the reference wand. 4660% 4661% o metric: the metric. 4662% 4663*/ 4664WandExport double *MagickGetImageDistortions(MagickWand *wand, 4665 const MagickWand *reference,const MetricType metric) 4666{ 4667 double 4668 *channel_distortion; 4669 4670 assert(wand != (MagickWand *) NULL); 4671 assert(wand->signature == MagickWandSignature); 4672 if (wand->debug != MagickFalse) 4673 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4674 assert(reference != (MagickWand *) NULL); 4675 assert(reference->signature == MagickWandSignature); 4676 if ((wand->images == (Image *) NULL) || (reference->images == (Image *) NULL)) 4677 { 4678 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4679 "ContainsNoImages","`%s'",wand->name); 4680 return((double *) NULL); 4681 } 4682 channel_distortion=GetImageDistortions(wand->images,reference->images, 4683 metric,wand->exception); 4684 return(channel_distortion); 4685} 4686 4687/* 4688%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4689% % 4690% % 4691% % 4692% M a g i c k G e t I m a g e E n d i a n % 4693% % 4694% % 4695% % 4696%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4697% 4698% MagickGetImageEndian() gets the image endian. 4699% 4700% The format of the MagickGetImageEndian method is: 4701% 4702% EndianType MagickGetImageEndian(MagickWand *wand) 4703% 4704% A description of each parameter follows: 4705% 4706% o wand: the magick wand. 4707% 4708*/ 4709WandExport EndianType MagickGetImageEndian(MagickWand *wand) 4710{ 4711 assert(wand != (MagickWand *) NULL); 4712 assert(wand->signature == MagickWandSignature); 4713 if (wand->debug != MagickFalse) 4714 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4715 if (wand->images == (Image *) NULL) 4716 { 4717 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4718 "ContainsNoImages","`%s'",wand->name); 4719 return(UndefinedEndian); 4720 } 4721 return(wand->images->endian); 4722} 4723 4724/* 4725%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4726% % 4727% % 4728% % 4729% M a g i c k G e t I m a g e F i l e n a m e % 4730% % 4731% % 4732% % 4733%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4734% 4735% MagickGetImageFilename() returns the filename of a particular image in a 4736% sequence. 4737% 4738% The format of the MagickGetImageFilename method is: 4739% 4740% char *MagickGetImageFilename(MagickWand *wand) 4741% 4742% A description of each parameter follows: 4743% 4744% o wand: the magick wand. 4745% 4746*/ 4747WandExport char *MagickGetImageFilename(MagickWand *wand) 4748{ 4749 assert(wand != (MagickWand *) NULL); 4750 assert(wand->signature == MagickWandSignature); 4751 if (wand->debug != MagickFalse) 4752 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4753 if (wand->images == (Image *) NULL) 4754 { 4755 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4756 "ContainsNoImages","`%s'",wand->name); 4757 return((char *) NULL); 4758 } 4759 return(AcquireString(wand->images->filename)); 4760} 4761 4762/* 4763%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4764% % 4765% % 4766% % 4767% M a g i c k G e t I m a g e F o r m a t % 4768% % 4769% % 4770% % 4771%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4772% 4773% MagickGetImageFormat() returns the format of a particular image in a 4774% sequence. 4775% 4776% The format of the MagickGetImageFormat method is: 4777% 4778% char *MagickGetImageFormat(MagickWand *wand) 4779% 4780% A description of each parameter follows: 4781% 4782% o wand: the magick wand. 4783% 4784*/ 4785WandExport char *MagickGetImageFormat(MagickWand *wand) 4786{ 4787 assert(wand != (MagickWand *) NULL); 4788 assert(wand->signature == MagickWandSignature); 4789 if (wand->debug != MagickFalse) 4790 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4791 if (wand->images == (Image *) NULL) 4792 { 4793 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4794 "ContainsNoImages","`%s'",wand->name); 4795 return((char *) NULL); 4796 } 4797 return(AcquireString(wand->images->magick)); 4798} 4799 4800/* 4801%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4802% % 4803% % 4804% % 4805% M a g i c k G e t I m a g e F u z z % 4806% % 4807% % 4808% % 4809%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4810% 4811% MagickGetImageFuzz() gets the image fuzz. 4812% 4813% The format of the MagickGetImageFuzz method is: 4814% 4815% double MagickGetImageFuzz(MagickWand *wand) 4816% 4817% A description of each parameter follows: 4818% 4819% o wand: the magick wand. 4820% 4821*/ 4822WandExport double MagickGetImageFuzz(MagickWand *wand) 4823{ 4824 assert(wand != (MagickWand *) NULL); 4825 assert(wand->signature == MagickWandSignature); 4826 if (wand->debug != MagickFalse) 4827 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4828 if (wand->images == (Image *) NULL) 4829 { 4830 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4831 "ContainsNoImages","`%s'",wand->name); 4832 return(0.0); 4833 } 4834 return(wand->images->fuzz); 4835} 4836 4837/* 4838%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4839% % 4840% % 4841% % 4842% M a g i c k G e t I m a g e G a m m a % 4843% % 4844% % 4845% % 4846%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4847% 4848% MagickGetImageGamma() gets the image gamma. 4849% 4850% The format of the MagickGetImageGamma method is: 4851% 4852% double MagickGetImageGamma(MagickWand *wand) 4853% 4854% A description of each parameter follows: 4855% 4856% o wand: the magick wand. 4857% 4858*/ 4859WandExport double MagickGetImageGamma(MagickWand *wand) 4860{ 4861 assert(wand != (MagickWand *) NULL); 4862 assert(wand->signature == MagickWandSignature); 4863 if (wand->debug != MagickFalse) 4864 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4865 if (wand->images == (Image *) NULL) 4866 { 4867 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4868 "ContainsNoImages","`%s'",wand->name); 4869 return(0.0); 4870 } 4871 return(wand->images->gamma); 4872} 4873 4874/* 4875%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4876% % 4877% % 4878% % 4879% M a g i c k G e t I m a g e G r a v i t y % 4880% % 4881% % 4882% % 4883%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4884% 4885% MagickGetImageGravity() gets the image gravity. 4886% 4887% The format of the MagickGetImageGravity method is: 4888% 4889% GravityType MagickGetImageGravity(MagickWand *wand) 4890% 4891% A description of each parameter follows: 4892% 4893% o wand: the magick wand. 4894% 4895*/ 4896WandExport GravityType MagickGetImageGravity(MagickWand *wand) 4897{ 4898 assert(wand != (MagickWand *) NULL); 4899 assert(wand->signature == MagickWandSignature); 4900 if (wand->debug != MagickFalse) 4901 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4902 if (wand->images == (Image *) NULL) 4903 { 4904 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4905 "ContainsNoImages","`%s'",wand->name); 4906 return(UndefinedGravity); 4907 } 4908 return(wand->images->gravity); 4909} 4910 4911/* 4912%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4913% % 4914% % 4915% % 4916% 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 % 4917% % 4918% % 4919% % 4920%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4921% 4922% MagickGetImageGreenPrimary() returns the chromaticy green primary point. 4923% 4924% The format of the MagickGetImageGreenPrimary method is: 4925% 4926% MagickBooleanType MagickGetImageGreenPrimary(MagickWand *wand,double *x, 4927% double *y,double *z) 4928% 4929% A description of each parameter follows: 4930% 4931% o wand: the magick wand. 4932% 4933% o x: the chromaticity green primary x-point. 4934% 4935% o y: the chromaticity green primary y-point. 4936% 4937% o z: the chromaticity green primary z-point. 4938% 4939*/ 4940WandExport MagickBooleanType MagickGetImageGreenPrimary(MagickWand *wand, 4941 double *x,double *y,double *z) 4942{ 4943 assert(wand != (MagickWand *) NULL); 4944 assert(wand->signature == MagickWandSignature); 4945 if (wand->debug != MagickFalse) 4946 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4947 if (wand->images == (Image *) NULL) 4948 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4949 *x=wand->images->chromaticity.green_primary.x; 4950 *y=wand->images->chromaticity.green_primary.y; 4951 *z=wand->images->chromaticity.green_primary.z; 4952 return(MagickTrue); 4953} 4954 4955/* 4956%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4957% % 4958% % 4959% % 4960% M a g i c k G e t I m a g e H e i g h t % 4961% % 4962% % 4963% % 4964%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4965% 4966% MagickGetImageHeight() returns the image height. 4967% 4968% The format of the MagickGetImageHeight method is: 4969% 4970% size_t MagickGetImageHeight(MagickWand *wand) 4971% 4972% A description of each parameter follows: 4973% 4974% o wand: the magick wand. 4975% 4976*/ 4977WandExport size_t MagickGetImageHeight(MagickWand *wand) 4978{ 4979 assert(wand != (MagickWand *) NULL); 4980 assert(wand->signature == MagickWandSignature); 4981 if (wand->debug != MagickFalse) 4982 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4983 if (wand->images == (Image *) NULL) 4984 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4985 return(wand->images->rows); 4986} 4987 4988/* 4989%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4990% % 4991% % 4992% % 4993% M a g i c k G e t I m a g e H i s t o g r a m % 4994% % 4995% % 4996% % 4997%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4998% 4999% MagickGetImageHistogram() returns the image histogram as an array of 5000% PixelWand wands. 5001% 5002% The format of the MagickGetImageHistogram method is: 5003% 5004% PixelWand **MagickGetImageHistogram(MagickWand *wand, 5005% size_t *number_colors) 5006% 5007% A description of each parameter follows: 5008% 5009% o wand: the magick wand. 5010% 5011% o number_colors: the number of unique colors in the image and the number 5012% of pixel wands returned. 5013% 5014*/ 5015WandExport PixelWand **MagickGetImageHistogram(MagickWand *wand, 5016 size_t *number_colors) 5017{ 5018 PixelInfo 5019 *histogram; 5020 5021 PixelWand 5022 **pixel_wands; 5023 5024 register ssize_t 5025 i; 5026 5027 assert(wand != (MagickWand *) NULL); 5028 assert(wand->signature == MagickWandSignature); 5029 if (wand->debug != MagickFalse) 5030 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5031 if (wand->images == (Image *) NULL) 5032 { 5033 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 5034 "ContainsNoImages","`%s'",wand->name); 5035 return((PixelWand **) NULL); 5036 } 5037 histogram=GetImageHistogram(wand->images,number_colors,wand->exception); 5038 if (histogram == (PixelInfo *) NULL) 5039 return((PixelWand **) NULL); 5040 pixel_wands=NewPixelWands(*number_colors); 5041 for (i=0; i < (ssize_t) *number_colors; i++) 5042 { 5043 PixelSetPixelColor(pixel_wands[i],&histogram[i]); 5044 PixelSetColorCount(pixel_wands[i],(size_t) histogram[i].count); 5045 } 5046 histogram=(PixelInfo *) RelinquishMagickMemory(histogram); 5047 return(pixel_wands); 5048} 5049 5050/* 5051%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5052% % 5053% % 5054% % 5055% 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 % 5056% % 5057% % 5058% % 5059%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5060% 5061% MagickGetImageInterlaceScheme() gets the image interlace scheme. 5062% 5063% The format of the MagickGetImageInterlaceScheme method is: 5064% 5065% InterlaceType MagickGetImageInterlaceScheme(MagickWand *wand) 5066% 5067% A description of each parameter follows: 5068% 5069% o wand: the magick wand. 5070% 5071*/ 5072WandExport InterlaceType MagickGetImageInterlaceScheme(MagickWand *wand) 5073{ 5074 assert(wand != (MagickWand *) NULL); 5075 assert(wand->signature == MagickWandSignature); 5076 if (wand->debug != MagickFalse) 5077 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5078 if (wand->images == (Image *) NULL) 5079 { 5080 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 5081 "ContainsNoImages","`%s'",wand->name); 5082 return(UndefinedInterlace); 5083 } 5084 return(wand->images->interlace); 5085} 5086 5087/* 5088%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5089% % 5090% % 5091% % 5092% 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 % 5093% % 5094% % 5095% % 5096%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5097% 5098% MagickGetImageInterpolateMethod() returns the interpolation method for the 5099% sepcified image. 5100% 5101% The format of the MagickGetImageInterpolateMethod method is: 5102% 5103% PixelInterpolateMethod MagickGetImagePixelInterpolateMethod( 5104% MagickWand *wand) 5105% 5106% A description of each parameter follows: 5107% 5108% o wand: the magick wand. 5109% 5110*/ 5111WandExport PixelInterpolateMethod MagickGetImageInterpolateMethod( 5112 MagickWand *wand) 5113{ 5114 assert(wand != (MagickWand *) NULL); 5115 assert(wand->signature == MagickWandSignature); 5116 if (wand->debug != MagickFalse) 5117 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5118 if (wand->images == (Image *) NULL) 5119 { 5120 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 5121 "ContainsNoImages","`%s'",wand->name); 5122 return(UndefinedInterpolatePixel); 5123 } 5124 return(wand->images->interpolate); 5125} 5126 5127/* 5128%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5129% % 5130% % 5131% % 5132% M a g i c k G e t I m a g e I t e r a t i o n s % 5133% % 5134% % 5135% % 5136%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5137% 5138% MagickGetImageIterations() gets the image iterations. 5139% 5140% The format of the MagickGetImageIterations method is: 5141% 5142% size_t MagickGetImageIterations(MagickWand *wand) 5143% 5144% A description of each parameter follows: 5145% 5146% o wand: the magick wand. 5147% 5148*/ 5149WandExport size_t MagickGetImageIterations(MagickWand *wand) 5150{ 5151 assert(wand != (MagickWand *) NULL); 5152 assert(wand->signature == MagickWandSignature); 5153 if (wand->debug != MagickFalse) 5154 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5155 if (wand->images == (Image *) NULL) 5156 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5157 return(wand->images->iterations); 5158} 5159 5160/* 5161%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5162% % 5163% % 5164% % 5165% M a g i c k G e t I m a g e L e n g t h % 5166% % 5167% % 5168% % 5169%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5170% 5171% MagickGetImageLength() returns the image length in bytes. 5172% 5173% The format of the MagickGetImageLength method is: 5174% 5175% MagickBooleanType MagickGetImageLength(MagickWand *wand, 5176% MagickSizeType *length) 5177% 5178% A description of each parameter follows: 5179% 5180% o wand: the magick wand. 5181% 5182% o length: the image length in bytes. 5183% 5184*/ 5185WandExport MagickBooleanType MagickGetImageLength(MagickWand *wand, 5186 MagickSizeType *length) 5187{ 5188 assert(wand != (MagickWand *) NULL); 5189 assert(wand->signature == MagickWandSignature); 5190 if (wand->debug != MagickFalse) 5191 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5192 if (wand->images == (Image *) NULL) 5193 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5194 *length=GetBlobSize(wand->images); 5195 return(MagickTrue); 5196} 5197 5198/* 5199%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5200% % 5201% % 5202% % 5203% 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 % 5204% % 5205% % 5206% % 5207%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5208% 5209% MagickGetImageOrientation() returns the image orientation. 5210% 5211% The format of the MagickGetImageOrientation method is: 5212% 5213% OrientationType MagickGetImageOrientation(MagickWand *wand) 5214% 5215% A description of each parameter follows: 5216% 5217% o wand: the magick wand. 5218% 5219*/ 5220WandExport OrientationType MagickGetImageOrientation(MagickWand *wand) 5221{ 5222 assert(wand != (MagickWand *) NULL); 5223 assert(wand->signature == MagickWandSignature); 5224 if (wand->debug != MagickFalse) 5225 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5226 if (wand->images == (Image *) NULL) 5227 { 5228 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 5229 "ContainsNoImages","`%s'",wand->name); 5230 return(UndefinedOrientation); 5231 } 5232 return(wand->images->orientation); 5233} 5234 5235/* 5236%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5237% % 5238% % 5239% % 5240% M a g i c k G e t I m a g e P a g e % 5241% % 5242% % 5243% % 5244%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5245% 5246% MagickGetImagePage() returns the page geometry associated with the image. 5247% 5248% The format of the MagickGetImagePage method is: 5249% 5250% MagickBooleanType MagickGetImagePage(MagickWand *wand, 5251% size_t *width,size_t *height,ssize_t *x,ssize_t *y) 5252% 5253% A description of each parameter follows: 5254% 5255% o wand: the magick wand. 5256% 5257% o width: the page width. 5258% 5259% o height: the page height. 5260% 5261% o x: the page x-offset. 5262% 5263% o y: the page y-offset. 5264% 5265*/ 5266WandExport MagickBooleanType MagickGetImagePage(MagickWand *wand, 5267 size_t *width,size_t *height,ssize_t *x,ssize_t *y) 5268{ 5269 assert(wand != (const MagickWand *) NULL); 5270 assert(wand->signature == MagickWandSignature); 5271 if (wand->debug != MagickFalse) 5272 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5273 if (wand->images == (Image *) NULL) 5274 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5275 *width=wand->images->page.width; 5276 *height=wand->images->page.height; 5277 *x=wand->images->page.x; 5278 *y=wand->images->page.y; 5279 return(MagickTrue); 5280} 5281 5282/* 5283%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5284% % 5285% % 5286% % 5287% M a g i c k G e t I m a g e P i x e l C o l o r % 5288% % 5289% % 5290% % 5291%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5292% 5293% MagickGetImagePixelColor() returns the color of the specified pixel. 5294% 5295% The format of the MagickGetImagePixelColor method is: 5296% 5297% MagickBooleanType MagickGetImagePixelColor(MagickWand *wand, 5298% const ssize_t x,const ssize_t y,PixelWand *color) 5299% 5300% A description of each parameter follows: 5301% 5302% o wand: the magick wand. 5303% 5304% o x,y: the pixel offset into the image. 5305% 5306% o color: Return the colormap color in this wand. 5307% 5308*/ 5309WandExport MagickBooleanType MagickGetImagePixelColor(MagickWand *wand, 5310 const ssize_t x,const ssize_t y,PixelWand *color) 5311{ 5312 register const Quantum 5313 *p; 5314 5315 CacheView 5316 *image_view; 5317 5318 assert(wand != (MagickWand *) NULL); 5319 assert(wand->signature == MagickWandSignature); 5320 if (wand->debug != MagickFalse) 5321 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5322 if (wand->images == (Image *) NULL) 5323 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5324 image_view=AcquireVirtualCacheView(wand->images,wand->exception); 5325 p=GetCacheViewVirtualPixels(image_view,x,y,1,1,wand->exception); 5326 if (p == (const Quantum *) NULL) 5327 { 5328 image_view=DestroyCacheView(image_view); 5329 return(MagickFalse); 5330 } 5331 PixelSetQuantumPixel(wand->images,p,color); 5332 image_view=DestroyCacheView(image_view); 5333 return(MagickTrue); 5334} 5335 5336/* 5337%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5338% % 5339% % 5340% % 5341% M a g i c k G e t I m a g e R e d P r i m a r y % 5342% % 5343% % 5344% % 5345%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5346% 5347% MagickGetImageRedPrimary() returns the chromaticy red primary point. 5348% 5349% The format of the MagickGetImageRedPrimary method is: 5350% 5351% MagickBooleanType MagickGetImageRedPrimary(MagickWand *wand,double *x, 5352% double *y, double *z) 5353% 5354% A description of each parameter follows: 5355% 5356% o wand: the magick wand. 5357% 5358% o x: the chromaticity red primary x-point. 5359% 5360% o y: the chromaticity red primary y-point. 5361% 5362% o z: the chromaticity red primary z-point. 5363% 5364*/ 5365WandExport MagickBooleanType MagickGetImageRedPrimary(MagickWand *wand, 5366 double *x,double *y,double *z) 5367{ 5368 assert(wand != (MagickWand *) NULL); 5369 assert(wand->signature == MagickWandSignature); 5370 if (wand->debug != MagickFalse) 5371 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5372 if (wand->images == (Image *) NULL) 5373 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5374 *x=wand->images->chromaticity.red_primary.x; 5375 *y=wand->images->chromaticity.red_primary.y; 5376 *z=wand->images->chromaticity.red_primary.z; 5377 return(MagickTrue); 5378} 5379 5380/* 5381%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5382% % 5383% % 5384% % 5385% M a g i c k G e t I m a g e R e g i o n % 5386% % 5387% % 5388% % 5389%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5390% 5391% MagickGetImageRegion() extracts a region of the image and returns it as a 5392% a new wand. 5393% 5394% The format of the MagickGetImageRegion method is: 5395% 5396% MagickWand *MagickGetImageRegion(MagickWand *wand, 5397% const size_t width,const size_t height,const ssize_t x, 5398% const ssize_t y) 5399% 5400% A description of each parameter follows: 5401% 5402% o wand: the magick wand. 5403% 5404% o width: the region width. 5405% 5406% o height: the region height. 5407% 5408% o x: the region x offset. 5409% 5410% o y: the region y offset. 5411% 5412*/ 5413WandExport MagickWand *MagickGetImageRegion(MagickWand *wand, 5414 const size_t width,const size_t height,const ssize_t x, 5415 const ssize_t y) 5416{ 5417 Image 5418 *region_image; 5419 5420 RectangleInfo 5421 region; 5422 5423 assert(wand != (MagickWand *) NULL); 5424 assert(wand->signature == MagickWandSignature); 5425 if (wand->debug != MagickFalse) 5426 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5427 if (wand->images == (Image *) NULL) 5428 return((MagickWand *) NULL); 5429 region.width=width; 5430 region.height=height; 5431 region.x=x; 5432 region.y=y; 5433 region_image=CropImage(wand->images,®ion,wand->exception); 5434 if (region_image == (Image *) NULL) 5435 return((MagickWand *) NULL); 5436 return(CloneMagickWandFromImages(wand,region_image)); 5437} 5438 5439/* 5440%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5441% % 5442% % 5443% % 5444% 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 % 5445% % 5446% % 5447% % 5448%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5449% 5450% MagickGetImageRenderingIntent() gets the image rendering intent. 5451% 5452% The format of the MagickGetImageRenderingIntent method is: 5453% 5454% RenderingIntent MagickGetImageRenderingIntent(MagickWand *wand) 5455% 5456% A description of each parameter follows: 5457% 5458% o wand: the magick wand. 5459% 5460*/ 5461WandExport RenderingIntent MagickGetImageRenderingIntent(MagickWand *wand) 5462{ 5463 assert(wand != (MagickWand *) NULL); 5464 assert(wand->signature == MagickWandSignature); 5465 if (wand->debug != MagickFalse) 5466 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5467 if (wand->images == (Image *) NULL) 5468 { 5469 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 5470 "ContainsNoImages","`%s'",wand->name); 5471 return(UndefinedIntent); 5472 } 5473 return((RenderingIntent) wand->images->rendering_intent); 5474} 5475 5476/* 5477%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5478% % 5479% % 5480% % 5481% M a g i c k G e t I m a g e R e s o l u t i o n % 5482% % 5483% % 5484% % 5485%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5486% 5487% MagickGetImageResolution() gets the image X and Y resolution. 5488% 5489% The format of the MagickGetImageResolution method is: 5490% 5491% MagickBooleanType MagickGetImageResolution(MagickWand *wand,double *x, 5492% double *y) 5493% 5494% A description of each parameter follows: 5495% 5496% o wand: the magick wand. 5497% 5498% o x: the image x-resolution. 5499% 5500% o y: the image y-resolution. 5501% 5502*/ 5503WandExport MagickBooleanType MagickGetImageResolution(MagickWand *wand, 5504 double *x,double *y) 5505{ 5506 assert(wand != (MagickWand *) NULL); 5507 assert(wand->signature == MagickWandSignature); 5508 if (wand->debug != MagickFalse) 5509 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5510 if (wand->images == (Image *) NULL) 5511 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5512 *x=wand->images->resolution.x; 5513 *y=wand->images->resolution.y; 5514 return(MagickTrue); 5515} 5516 5517/* 5518%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5519% % 5520% % 5521% % 5522% M a g i c k G e t I m a g e S c e n e % 5523% % 5524% % 5525% % 5526%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5527% 5528% MagickGetImageScene() gets the image scene. 5529% 5530% The format of the MagickGetImageScene method is: 5531% 5532% size_t MagickGetImageScene(MagickWand *wand) 5533% 5534% A description of each parameter follows: 5535% 5536% o wand: the magick wand. 5537% 5538*/ 5539WandExport size_t MagickGetImageScene(MagickWand *wand) 5540{ 5541 assert(wand != (MagickWand *) NULL); 5542 assert(wand->signature == MagickWandSignature); 5543 if (wand->debug != MagickFalse) 5544 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5545 if (wand->images == (Image *) NULL) 5546 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5547 return(wand->images->scene); 5548} 5549 5550/* 5551%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5552% % 5553% % 5554% % 5555% M a g i c k G e t I m a g e S i g n a t u r e % 5556% % 5557% % 5558% % 5559%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5560% 5561% MagickGetImageSignature() generates an SHA-256 message digest for the image 5562% pixel stream. 5563% 5564% The format of the MagickGetImageSignature method is: 5565% 5566% char *MagickGetImageSignature(MagickWand *wand) 5567% 5568% A description of each parameter follows: 5569% 5570% o wand: the magick wand. 5571% 5572*/ 5573WandExport char *MagickGetImageSignature(MagickWand *wand) 5574{ 5575 const char 5576 *value; 5577 5578 MagickBooleanType 5579 status; 5580 5581 assert(wand != (MagickWand *) NULL); 5582 assert(wand->signature == MagickWandSignature); 5583 if (wand->debug != MagickFalse) 5584 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5585 if (wand->images == (Image *) NULL) 5586 { 5587 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 5588 "ContainsNoImages","`%s'",wand->name); 5589 return((char *) NULL); 5590 } 5591 status=SignatureImage(wand->images,wand->exception); 5592 if (status == MagickFalse) 5593 return((char *) NULL); 5594 value=GetImageProperty(wand->images,"signature",wand->exception); 5595 if (value == (const char *) NULL) 5596 return((char *) NULL); 5597 return(AcquireString(value)); 5598} 5599 5600/* 5601%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5602% % 5603% % 5604% % 5605% 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 % 5606% % 5607% % 5608% % 5609%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5610% 5611% MagickGetImageTicksPerSecond() gets the image ticks-per-second. 5612% 5613% The format of the MagickGetImageTicksPerSecond method is: 5614% 5615% size_t MagickGetImageTicksPerSecond(MagickWand *wand) 5616% 5617% A description of each parameter follows: 5618% 5619% o wand: the magick wand. 5620% 5621*/ 5622WandExport size_t MagickGetImageTicksPerSecond(MagickWand *wand) 5623{ 5624 assert(wand != (MagickWand *) NULL); 5625 assert(wand->signature == MagickWandSignature); 5626 if (wand->debug != MagickFalse) 5627 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5628 if (wand->images == (Image *) NULL) 5629 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5630 return((size_t) wand->images->ticks_per_second); 5631} 5632 5633/* 5634%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5635% % 5636% % 5637% % 5638% M a g i c k G e t I m a g e T y p e % 5639% % 5640% % 5641% % 5642%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5643% 5644% MagickGetImageType() gets the potential image type: 5645% 5646% Bilevel Grayscale GrayscaleMatte 5647% Palette PaletteMatte TrueColor 5648% TrueColorMatte ColorSeparation ColorSeparationMatte 5649% 5650% The format of the MagickGetImageType method is: 5651% 5652% ImageType MagickGetImageType(MagickWand *wand) 5653% 5654% A description of each parameter follows: 5655% 5656% o wand: the magick wand. 5657% 5658*/ 5659WandExport ImageType MagickGetImageType(MagickWand *wand) 5660{ 5661 assert(wand != (MagickWand *) NULL); 5662 assert(wand->signature == MagickWandSignature); 5663 if (wand->debug != MagickFalse) 5664 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5665 if (wand->images == (Image *) NULL) 5666 { 5667 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 5668 "ContainsNoImages","`%s'",wand->name); 5669 return(UndefinedType); 5670 } 5671 return(GetImageType(wand->images)); 5672} 5673 5674/* 5675%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5676% % 5677% % 5678% % 5679% M a g i c k G e t I m a g e U n i t s % 5680% % 5681% % 5682% % 5683%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5684% 5685% MagickGetImageUnits() gets the image units of resolution. 5686% 5687% The format of the MagickGetImageUnits method is: 5688% 5689% ResolutionType MagickGetImageUnits(MagickWand *wand) 5690% 5691% A description of each parameter follows: 5692% 5693% o wand: the magick wand. 5694% 5695*/ 5696WandExport ResolutionType MagickGetImageUnits(MagickWand *wand) 5697{ 5698 assert(wand != (MagickWand *) NULL); 5699 assert(wand->signature == MagickWandSignature); 5700 if (wand->debug != MagickFalse) 5701 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5702 if (wand->images == (Image *) NULL) 5703 { 5704 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 5705 "ContainsNoImages","`%s'",wand->name); 5706 return(UndefinedResolution); 5707 } 5708 return(wand->images->units); 5709} 5710 5711/* 5712%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5713% % 5714% % 5715% % 5716% 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 % 5717% % 5718% % 5719% % 5720%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5721% 5722% MagickGetImageVirtualPixelMethod() returns the virtual pixel method for the 5723% sepcified image. 5724% 5725% The format of the MagickGetImageVirtualPixelMethod method is: 5726% 5727% VirtualPixelMethod MagickGetImageVirtualPixelMethod(MagickWand *wand) 5728% 5729% A description of each parameter follows: 5730% 5731% o wand: the magick wand. 5732% 5733*/ 5734WandExport VirtualPixelMethod MagickGetImageVirtualPixelMethod(MagickWand *wand) 5735{ 5736 assert(wand != (MagickWand *) NULL); 5737 assert(wand->signature == MagickWandSignature); 5738 if (wand->debug != MagickFalse) 5739 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5740 if (wand->images == (Image *) NULL) 5741 { 5742 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 5743 "ContainsNoImages","`%s'",wand->name); 5744 return(UndefinedVirtualPixelMethod); 5745 } 5746 return(GetImageVirtualPixelMethod(wand->images)); 5747} 5748 5749/* 5750%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5751% % 5752% % 5753% % 5754% M a g i c k G e t I m a g e W h i t e P o i n t % 5755% % 5756% % 5757% % 5758%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5759% 5760% MagickGetImageWhitePoint() returns the chromaticy white point. 5761% 5762% The format of the MagickGetImageWhitePoint method is: 5763% 5764% MagickBooleanType MagickGetImageWhitePoint(MagickWand *wand,double *x, 5765% double *y,double *z) 5766% 5767% A description of each parameter follows: 5768% 5769% o wand: the magick wand. 5770% 5771% o x: the chromaticity white x-point. 5772% 5773% o y: the chromaticity white y-point. 5774% 5775% o z: the chromaticity white z-point. 5776% 5777*/ 5778WandExport MagickBooleanType MagickGetImageWhitePoint(MagickWand *wand, 5779 double *x,double *y,double *z) 5780{ 5781 assert(wand != (MagickWand *) NULL); 5782 assert(wand->signature == MagickWandSignature); 5783 if (wand->debug != MagickFalse) 5784 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5785 if (wand->images == (Image *) NULL) 5786 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5787 *x=wand->images->chromaticity.white_point.x; 5788 *y=wand->images->chromaticity.white_point.y; 5789 *z=wand->images->chromaticity.white_point.z; 5790 return(MagickTrue); 5791} 5792 5793/* 5794%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5795% % 5796% % 5797% % 5798% M a g i c k G e t I m a g e W i d t h % 5799% % 5800% % 5801% % 5802%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5803% 5804% MagickGetImageWidth() returns the image width. 5805% 5806% The format of the MagickGetImageWidth method is: 5807% 5808% size_t MagickGetImageWidth(MagickWand *wand) 5809% 5810% A description of each parameter follows: 5811% 5812% o wand: the magick wand. 5813% 5814*/ 5815WandExport size_t MagickGetImageWidth(MagickWand *wand) 5816{ 5817 assert(wand != (MagickWand *) NULL); 5818 assert(wand->signature == MagickWandSignature); 5819 if (wand->debug != MagickFalse) 5820 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5821 if (wand->images == (Image *) NULL) 5822 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5823 return(wand->images->columns); 5824} 5825 5826/* 5827%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5828% % 5829% % 5830% % 5831% M a g i c k G e t N u m b e r I m a g e s % 5832% % 5833% % 5834% % 5835%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5836% 5837% MagickGetNumberImages() returns the number of images associated with a 5838% magick wand. 5839% 5840% The format of the MagickGetNumberImages method is: 5841% 5842% size_t MagickGetNumberImages(MagickWand *wand) 5843% 5844% A description of each parameter follows: 5845% 5846% o wand: the magick wand. 5847% 5848*/ 5849WandExport size_t MagickGetNumberImages(MagickWand *wand) 5850{ 5851 assert(wand != (MagickWand *) NULL); 5852 assert(wand->signature == MagickWandSignature); 5853 if (wand->debug != MagickFalse) 5854 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5855 return(GetImageListLength(wand->images)); 5856} 5857 5858/* 5859%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5860% % 5861% % 5862% % 5863% 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 % 5864% % 5865% % 5866% % 5867%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5868% 5869% MagickGetImageTotalInkDensity() gets the image total ink density. 5870% 5871% The format of the MagickGetImageTotalInkDensity method is: 5872% 5873% double MagickGetImageTotalInkDensity(MagickWand *wand) 5874% 5875% A description of each parameter follows: 5876% 5877% o wand: the magick wand. 5878% 5879*/ 5880WandExport double MagickGetImageTotalInkDensity(MagickWand *wand) 5881{ 5882 assert(wand != (MagickWand *) NULL); 5883 assert(wand->signature == MagickWandSignature); 5884 if (wand->debug != MagickFalse) 5885 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5886 if (wand->images == (Image *) NULL) 5887 { 5888 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 5889 "ContainsNoImages","`%s'",wand->name); 5890 return(0.0); 5891 } 5892 return(GetImageTotalInkDensity(wand->images,wand->exception)); 5893} 5894 5895/* 5896%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5897% % 5898% % 5899% % 5900% M a g i c k H a l d C l u t I m a g e % 5901% % 5902% % 5903% % 5904%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5905% 5906% MagickHaldClutImage() replaces colors in the image from a Hald color lookup 5907% table. A Hald color lookup table is a 3-dimensional color cube mapped to 2 5908% dimensions. Create it with the HALD coder. You can apply any color 5909% transformation to the Hald image and then use this method to apply the 5910% transform to the image. 5911% 5912% The format of the MagickHaldClutImage method is: 5913% 5914% MagickBooleanType MagickHaldClutImage(MagickWand *wand, 5915% const MagickWand *hald_wand) 5916% 5917% A description of each parameter follows: 5918% 5919% o wand: the magick wand. 5920% 5921% o hald_image: the hald CLUT image. 5922% 5923*/ 5924WandExport MagickBooleanType MagickHaldClutImage(MagickWand *wand, 5925 const MagickWand *hald_wand) 5926{ 5927 MagickBooleanType 5928 status; 5929 5930 assert(wand != (MagickWand *) NULL); 5931 assert(wand->signature == MagickWandSignature); 5932 if (wand->debug != MagickFalse) 5933 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5934 if ((wand->images == (Image *) NULL) || (hald_wand->images == (Image *) NULL)) 5935 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5936 status=HaldClutImage(wand->images,hald_wand->images,wand->exception); 5937 return(status); 5938} 5939 5940/* 5941%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5942% % 5943% % 5944% % 5945% M a g i c k H a s N e x t I m a g e % 5946% % 5947% % 5948% % 5949%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5950% 5951% MagickHasNextImage() returns MagickTrue if the wand has more images when 5952% traversing the list in the forward direction 5953% 5954% The format of the MagickHasNextImage method is: 5955% 5956% MagickBooleanType MagickHasNextImage(MagickWand *wand) 5957% 5958% A description of each parameter follows: 5959% 5960% o wand: the magick wand. 5961% 5962*/ 5963WandExport MagickBooleanType MagickHasNextImage(MagickWand *wand) 5964{ 5965 assert(wand != (MagickWand *) NULL); 5966 assert(wand->signature == MagickWandSignature); 5967 if (wand->debug != MagickFalse) 5968 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5969 if (wand->images == (Image *) NULL) 5970 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5971 if (GetNextImageInList(wand->images) == (Image *) NULL) 5972 return(MagickFalse); 5973 return(MagickTrue); 5974} 5975 5976/* 5977%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5978% % 5979% % 5980% % 5981% M a g i c k H a s P r e v i o u s I m a g e % 5982% % 5983% % 5984% % 5985%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5986% 5987% MagickHasPreviousImage() returns MagickTrue if the wand has more images when 5988% traversing the list in the reverse direction 5989% 5990% The format of the MagickHasPreviousImage method is: 5991% 5992% MagickBooleanType MagickHasPreviousImage(MagickWand *wand) 5993% 5994% A description of each parameter follows: 5995% 5996% o wand: the magick wand. 5997% 5998*/ 5999WandExport MagickBooleanType MagickHasPreviousImage(MagickWand *wand) 6000{ 6001 assert(wand != (MagickWand *) NULL); 6002 assert(wand->signature == MagickWandSignature); 6003 if (wand->debug != MagickFalse) 6004 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6005 if (wand->images == (Image *) NULL) 6006 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6007 if (GetPreviousImageInList(wand->images) == (Image *) NULL) 6008 return(MagickFalse); 6009 return(MagickTrue); 6010} 6011 6012/* 6013%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6014% % 6015% % 6016% % 6017% M a g i c k I d e n t i f y I m a g e % 6018% % 6019% % 6020% % 6021%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6022% 6023% MagickIdentifyImage() identifies an image by printing its attributes to the 6024% file. Attributes include the image width, height, size, and others. 6025% 6026% The format of the MagickIdentifyImage method is: 6027% 6028% const char *MagickIdentifyImage(MagickWand *wand) 6029% 6030% A description of each parameter follows: 6031% 6032% o wand: the magick wand. 6033% 6034*/ 6035WandExport char *MagickIdentifyImage(MagickWand *wand) 6036{ 6037 char 6038 *description, 6039 filename[MagickPathExtent]; 6040 6041 FILE 6042 *file; 6043 6044 int 6045 unique_file; 6046 6047 assert(wand != (MagickWand *) NULL); 6048 assert(wand->signature == MagickWandSignature); 6049 if (wand->debug != MagickFalse) 6050 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6051 if (wand->images == (Image *) NULL) 6052 { 6053 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 6054 "ContainsNoImages","`%s'",wand->name); 6055 return((char *) NULL); 6056 } 6057 description=(char *) NULL; 6058 unique_file=AcquireUniqueFileResource(filename); 6059 file=(FILE *) NULL; 6060 if (unique_file != -1) 6061 file=fdopen(unique_file,"wb"); 6062 if ((unique_file == -1) || (file == (FILE *) NULL)) 6063 { 6064 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 6065 "UnableToCreateTemporaryFile","`%s'",wand->name); 6066 return((char *) NULL); 6067 } 6068 (void) IdentifyImage(wand->images,file,MagickTrue,wand->exception); 6069 (void) fclose(file); 6070 description=FileToString(filename,~0UL,wand->exception); 6071 (void) RelinquishUniqueFileResource(filename); 6072 return(description); 6073} 6074 6075/* 6076%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6077% % 6078% % 6079% % 6080% M a g i c k I d e n t i f y I m a g e T y p e % 6081% % 6082% % 6083% % 6084%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6085% 6086% MagickIdentifyImageType() gets the potential image type: 6087% 6088% Bilevel Grayscale GrayscaleMatte 6089% Palette PaletteMatte TrueColor 6090% TrueColorMatte ColorSeparation ColorSeparationMatte 6091% 6092% To ensure the image type matches its potential, use MagickSetImageType(): 6093% 6094% (void) MagickSetImageType(wand,MagickIdentifyImageType(wand)); 6095% 6096% The format of the MagickIdentifyImageType method is: 6097% 6098% ImageType MagickIdentifyImageType(MagickWand *wand) 6099% 6100% A description of each parameter follows: 6101% 6102% o wand: the magick wand. 6103% 6104*/ 6105WandExport ImageType MagickIdentifyImageType(MagickWand *wand) 6106{ 6107 assert(wand != (MagickWand *) NULL); 6108 assert(wand->signature == MagickWandSignature); 6109 if (wand->debug != MagickFalse) 6110 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6111 if (wand->images == (Image *) NULL) 6112 { 6113 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 6114 "ContainsNoImages","`%s'",wand->name); 6115 return(UndefinedType); 6116 } 6117 return(IdentifyImageType(wand->images,wand->exception)); 6118} 6119 6120/* 6121%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6122% % 6123% % 6124% % 6125% M a g i c k I m p l o d e I m a g e % 6126% % 6127% % 6128% % 6129%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6130% 6131% MagickImplodeImage() creates a new image that is a copy of an existing 6132% one with the image pixels "implode" by the specified percentage. It 6133% allocates the memory necessary for the new Image structure and returns a 6134% pointer to the new image. 6135% 6136% The format of the MagickImplodeImage method is: 6137% 6138% MagickBooleanType MagickImplodeImage(MagickWand *wand, 6139% const double radius,const PixelInterpolateMethod method) 6140% 6141% A description of each parameter follows: 6142% 6143% o wand: the magick wand. 6144% 6145% o amount: Define the extent of the implosion. 6146% 6147% o method: the pixel interpolation method. 6148% 6149*/ 6150WandExport MagickBooleanType MagickImplodeImage(MagickWand *wand, 6151 const double amount,const PixelInterpolateMethod method) 6152{ 6153 Image 6154 *implode_image; 6155 6156 assert(wand != (MagickWand *) NULL); 6157 assert(wand->signature == MagickWandSignature); 6158 if (wand->debug != MagickFalse) 6159 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6160 if (wand->images == (Image *) NULL) 6161 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6162 implode_image=ImplodeImage(wand->images,amount,method,wand->exception); 6163 if (implode_image == (Image *) NULL) 6164 return(MagickFalse); 6165 ReplaceImageInList(&wand->images,implode_image); 6166 return(MagickTrue); 6167} 6168 6169/* 6170%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6171% % 6172% % 6173% % 6174% M a g i c k I m p o r t I m a g e P i x e l s % 6175% % 6176% % 6177% % 6178%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6179% 6180% MagickImportImagePixels() accepts pixel datand stores it in the image at the 6181% location you specify. The method returns MagickFalse on success otherwise 6182% MagickTrue if an error is encountered. The pixel data can be either char, 6183% short int, int, ssize_t, float, or double in the order specified by map. 6184% 6185% Suppose your want to upload the first scanline of a 640x480 image from 6186% character data in red-green-blue order: 6187% 6188% MagickImportImagePixels(wand,0,0,640,1,"RGB",CharPixel,pixels); 6189% 6190% The format of the MagickImportImagePixels method is: 6191% 6192% MagickBooleanType MagickImportImagePixels(MagickWand *wand, 6193% const ssize_t x,const ssize_t y,const size_t columns, 6194% const size_t rows,const char *map,const StorageType storage, 6195% const void *pixels) 6196% 6197% A description of each parameter follows: 6198% 6199% o wand: the magick wand. 6200% 6201% o x, y, columns, rows: These values define the perimeter of a region 6202% of pixels you want to define. 6203% 6204% o map: This string reflects the expected ordering of the pixel array. 6205% It can be any combination or order of R = red, G = green, B = blue, 6206% A = alpha (0 is transparent), O = alpha (0 is opaque), C = cyan, 6207% Y = yellow, M = magenta, K = black, I = intensity (for grayscale), 6208% P = pad. 6209% 6210% o storage: Define the data type of the pixels. Float and double types are 6211% expected to be normalized [0..1] otherwise [0..QuantumRange]. Choose from 6212% these types: CharPixel, ShortPixel, IntegerPixel, LongPixel, FloatPixel, 6213% or DoublePixel. 6214% 6215% o pixels: This array of values contain the pixel components as defined by 6216% map and type. You must preallocate this array where the expected 6217% length varies depending on the values of width, height, map, and type. 6218% 6219*/ 6220WandExport MagickBooleanType MagickImportImagePixels(MagickWand *wand, 6221 const ssize_t x,const ssize_t y,const size_t columns,const size_t rows, 6222 const char *map,const StorageType storage,const void *pixels) 6223{ 6224 MagickBooleanType 6225 status; 6226 6227 assert(wand != (MagickWand *) NULL); 6228 assert(wand->signature == MagickWandSignature); 6229 if (wand->debug != MagickFalse) 6230 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6231 if (wand->images == (Image *) NULL) 6232 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6233 status=ImportImagePixels(wand->images,x,y,columns,rows,map,storage,pixels, 6234 wand->exception); 6235 return(status); 6236} 6237 6238/* 6239%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6240% % 6241% % 6242% % 6243% M a g i c k I n t e r p o l a t i v e R e s i z e I m a g e % 6244% % 6245% % 6246% % 6247%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6248% 6249% MagickInterpolativeResizeImage() resize image using a interpolative 6250% method. 6251% 6252% MagickBooleanType MagickInterpolativeResizeImage(MagickWand *wand, 6253% const size_t columns,const size_t rows, 6254% const PixelInterpolateMethod method) 6255% 6256% A description of each parameter follows: 6257% 6258% o wand: the magick wand. 6259% 6260% o columns: the number of columns in the scaled image. 6261% 6262% o rows: the number of rows in the scaled image. 6263% 6264% o interpolate: the pixel interpolation method. 6265% 6266*/ 6267WandExport MagickBooleanType MagickInterpolativeResizeImage(MagickWand *wand, 6268 const size_t columns,const size_t rows,const PixelInterpolateMethod method) 6269{ 6270 Image 6271 *resize_image; 6272 6273 assert(wand != (MagickWand *) NULL); 6274 assert(wand->signature == MagickWandSignature); 6275 if (wand->debug != MagickFalse) 6276 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6277 if (wand->images == (Image *) NULL) 6278 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6279 resize_image=InterpolativeResizeImage(wand->images,columns,rows,method, 6280 wand->exception); 6281 if (resize_image == (Image *) NULL) 6282 return(MagickFalse); 6283 ReplaceImageInList(&wand->images,resize_image); 6284 return(MagickTrue); 6285} 6286 6287/* 6288%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6289% % 6290% % 6291% % 6292% 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 % 6293% % 6294% % 6295% % 6296%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6297% 6298% MagickInverseFourierTransformImage() implements the inverse discrete 6299% Fourier transform (DFT) of the image either as a magnitude / phase or real / 6300% imaginary image pair. 6301% 6302% The format of the MagickInverseFourierTransformImage method is: 6303% 6304% MagickBooleanType MagickInverseFourierTransformImage( 6305% MagickWand *magnitude_wand,MagickWand *phase_wand, 6306% const MagickBooleanType magnitude) 6307% 6308% A description of each parameter follows: 6309% 6310% o magnitude_wand: the magnitude or real wand. 6311% 6312% o phase_wand: the phase or imaginary wand. 6313% 6314% o magnitude: if true, return as magnitude / phase pair otherwise a real / 6315% imaginary image pair. 6316% 6317*/ 6318WandExport MagickBooleanType MagickInverseFourierTransformImage( 6319 MagickWand *magnitude_wand,MagickWand *phase_wand, 6320 const MagickBooleanType magnitude) 6321{ 6322 Image 6323 *inverse_image; 6324 6325 MagickWand 6326 *wand; 6327 6328 assert(magnitude_wand != (MagickWand *) NULL); 6329 assert(magnitude_wand->signature == MagickWandSignature); 6330 if (magnitude_wand->debug != MagickFalse) 6331 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s", 6332 magnitude_wand->name); 6333 wand=magnitude_wand; 6334 if (magnitude_wand->images == (Image *) NULL) 6335 ThrowWandException(WandError,"ContainsNoImages", 6336 magnitude_wand->name); 6337 assert(phase_wand != (MagickWand *) NULL); 6338 assert(phase_wand->signature == MagickWandSignature); 6339 inverse_image=InverseFourierTransformImage(magnitude_wand->images, 6340 phase_wand->images,magnitude,wand->exception); 6341 if (inverse_image == (Image *) NULL) 6342 return(MagickFalse); 6343 ReplaceImageInList(&wand->images,inverse_image); 6344 return(MagickTrue); 6345} 6346 6347/* 6348%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6349% % 6350% % 6351% % 6352% M a g i c k L a b e l I m a g e % 6353% % 6354% % 6355% % 6356%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6357% 6358% MagickLabelImage() adds a label to your image. 6359% 6360% The format of the MagickLabelImage method is: 6361% 6362% MagickBooleanType MagickLabelImage(MagickWand *wand,const char *label) 6363% 6364% A description of each parameter follows: 6365% 6366% o wand: the magick wand. 6367% 6368% o label: the image label. 6369% 6370*/ 6371WandExport MagickBooleanType MagickLabelImage(MagickWand *wand, 6372 const char *label) 6373{ 6374 MagickBooleanType 6375 status; 6376 6377 assert(wand != (MagickWand *) NULL); 6378 assert(wand->signature == MagickWandSignature); 6379 if (wand->debug != MagickFalse) 6380 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6381 if (wand->images == (Image *) NULL) 6382 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6383 status=SetImageProperty(wand->images,"label",label,wand->exception); 6384 return(status); 6385} 6386 6387/* 6388%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6389% % 6390% % 6391% % 6392% M a g i c k L e v e l I m a g e % 6393% % 6394% % 6395% % 6396%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6397% 6398% MagickLevelImage() adjusts the levels of an image by scaling the colors 6399% falling between specified white and black points to the full available 6400% quantum range. The parameters provided represent the black, mid, and white 6401% points. The black point specifies the darkest color in the image. Colors 6402% darker than the black point are set to zero. Mid point specifies a gamma 6403% correction to apply to the image. White point specifies the lightest color 6404% in the image. Colors brighter than the white point are set to the maximum 6405% quantum value. 6406% 6407% The format of the MagickLevelImage method is: 6408% 6409% MagickBooleanType MagickLevelImage(MagickWand *wand, 6410% const double black_point,const double gamma,const double white_point) 6411% MagickBooleanType MagickLevelImage(MagickWand *wand, 6412% const ChannelType channel,const double black_point,const double gamma, 6413% const double white_point) 6414% 6415% A description of each parameter follows: 6416% 6417% o wand: the magick wand. 6418% 6419% o channel: Identify which channel to level: RedPixelChannel, 6420% GreenPixelChannel, etc. 6421% 6422% o black_point: the black point. 6423% 6424% o gamma: the gamma. 6425% 6426% o white_point: the white point. 6427% 6428*/ 6429WandExport MagickBooleanType MagickLevelImage(MagickWand *wand, 6430 const double black_point,const double gamma,const double white_point) 6431{ 6432 MagickBooleanType 6433 status; 6434 6435 assert(wand != (MagickWand *) NULL); 6436 assert(wand->signature == MagickWandSignature); 6437 if (wand->debug != MagickFalse) 6438 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6439 if (wand->images == (Image *) NULL) 6440 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6441 status=LevelImage(wand->images,black_point,white_point,gamma, 6442 wand->exception); 6443 return(status); 6444} 6445 6446/* 6447%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6448% % 6449% % 6450% % 6451% M a g i c k L i n e a r S t r e t c h I m a g e % 6452% % 6453% % 6454% % 6455%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6456% 6457% MagickLinearStretchImage() stretches with saturation the image intensity. 6458% 6459% You can also reduce the influence of a particular channel with a gamma 6460% value of 0. 6461% 6462% The format of the MagickLinearStretchImage method is: 6463% 6464% MagickBooleanType MagickLinearStretchImage(MagickWand *wand, 6465% const double black_point,const double white_point) 6466% 6467% A description of each parameter follows: 6468% 6469% o wand: the magick wand. 6470% 6471% o black_point: the black point. 6472% 6473% o white_point: the white point. 6474% 6475*/ 6476WandExport MagickBooleanType MagickLinearStretchImage(MagickWand *wand, 6477 const double black_point,const double white_point) 6478{ 6479 MagickBooleanType 6480 status; 6481 6482 assert(wand != (MagickWand *) NULL); 6483 assert(wand->signature == MagickWandSignature); 6484 if (wand->debug != MagickFalse) 6485 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6486 if (wand->images == (Image *) NULL) 6487 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6488 status=LinearStretchImage(wand->images,black_point,white_point, 6489 wand->exception); 6490 return(status); 6491} 6492 6493/* 6494%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6495% % 6496% % 6497% % 6498% M a g i c k L i q u i d R e s c a l e I m a g e % 6499% % 6500% % 6501% % 6502%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6503% 6504% MagickLiquidRescaleImage() rescales image with seam carving. 6505% 6506% MagickBooleanType MagickLiquidRescaleImage(MagickWand *wand, 6507% const size_t columns,const size_t rows, 6508% const double delta_x,const double rigidity) 6509% 6510% A description of each parameter follows: 6511% 6512% o wand: the magick wand. 6513% 6514% o columns: the number of columns in the scaled image. 6515% 6516% o rows: the number of rows in the scaled image. 6517% 6518% o delta_x: maximum seam transversal step (0 means straight seams). 6519% 6520% o rigidity: introduce a bias for non-straight seams (typically 0). 6521% 6522*/ 6523WandExport MagickBooleanType MagickLiquidRescaleImage(MagickWand *wand, 6524 const size_t columns,const size_t rows,const double delta_x, 6525 const double rigidity) 6526{ 6527 Image 6528 *rescale_image; 6529 6530 assert(wand != (MagickWand *) NULL); 6531 assert(wand->signature == MagickWandSignature); 6532 if (wand->debug != MagickFalse) 6533 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6534 if (wand->images == (Image *) NULL) 6535 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6536 rescale_image=LiquidRescaleImage(wand->images,columns,rows,delta_x, 6537 rigidity,wand->exception); 6538 if (rescale_image == (Image *) NULL) 6539 return(MagickFalse); 6540 ReplaceImageInList(&wand->images,rescale_image); 6541 return(MagickTrue); 6542} 6543 6544/* 6545%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6546% % 6547% % 6548% % 6549% M a g i c k L o c a l C o n t r a s t I m a g e % 6550% % 6551% % 6552% % 6553%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6554% 6555% MagickLocalContrastImage() attempts to increase the appearance of 6556% large-scale light-dark transitions. Local contrast enhancement works 6557% similarly to sharpening with an unsharp mask, however the mask is instead 6558% created using an image with a greater blur distance. 6559% 6560% MagickBooleanType MagickLocalContrastImage(MagickWand *wand, 6561% const double radius,const double strength) 6562% 6563% A description of each parameter follows: 6564% 6565% o image: the image. 6566% 6567% o radius: the radius of the Gaussian, in pixels, not counting 6568% the center pixel. 6569% 6570% o strength: the strength of the blur mask in percentage. 6571% 6572*/ 6573WandExport MagickBooleanType MagickLocalContrastImage(MagickWand *wand, 6574 const double radius, const double strength) 6575{ 6576 Image 6577 *contrast_image; 6578 6579 assert(wand != (MagickWand *)NULL); 6580 assert(wand->signature == MagickWandSignature); 6581 if (wand->debug != MagickFalse) 6582 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s", wand->name); 6583 if (wand->images == (Image *)NULL) 6584 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6585 contrast_image=LocalContrastImage(wand->images,radius,strength, 6586 wand->exception); 6587 if (contrast_image == (Image *)NULL) 6588 return(MagickFalse); 6589 ReplaceImageInList(&wand->images,contrast_image); 6590 return(MagickTrue); 6591} 6592 6593/* 6594%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6595% % 6596% % 6597% % 6598% M a g i c k M a g n i f y I m a g e % 6599% % 6600% % 6601% % 6602%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6603% 6604% MagickMagnifyImage() is a convenience method that scales an image 6605% proportionally to twice its original size. 6606% 6607% The format of the MagickMagnifyImage method is: 6608% 6609% MagickBooleanType MagickMagnifyImage(MagickWand *wand) 6610% 6611% A description of each parameter follows: 6612% 6613% o wand: the magick wand. 6614% 6615*/ 6616WandExport MagickBooleanType MagickMagnifyImage(MagickWand *wand) 6617{ 6618 Image 6619 *magnify_image; 6620 6621 assert(wand != (MagickWand *) NULL); 6622 assert(wand->signature == MagickWandSignature); 6623 if (wand->debug != MagickFalse) 6624 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6625 if (wand->images == (Image *) NULL) 6626 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6627 magnify_image=MagnifyImage(wand->images,wand->exception); 6628 if (magnify_image == (Image *) NULL) 6629 return(MagickFalse); 6630 ReplaceImageInList(&wand->images,magnify_image); 6631 return(MagickTrue); 6632} 6633 6634/* 6635%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6636% % 6637% % 6638% % 6639% M a g i c k M e r g e I m a g e L a y e r s % 6640% % 6641% % 6642% % 6643%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6644% 6645% MagickMergeImageLayers() composes all the image layers from the current 6646% given image onward to produce a single image of the merged layers. 6647% 6648% The inital canvas's size depends on the given LayerMethod, and is 6649% initialized using the first images background color. The images 6650% are then compositied onto that image in sequence using the given 6651% composition that has been assigned to each individual image. 6652% 6653% The format of the MagickMergeImageLayers method is: 6654% 6655% MagickWand *MagickMergeImageLayers(MagickWand *wand, 6656% const LayerMethod method) 6657% 6658% A description of each parameter follows: 6659% 6660% o wand: the magick wand. 6661% 6662% o method: the method of selecting the size of the initial canvas. 6663% 6664% MergeLayer: Merge all layers onto a canvas just large enough 6665% to hold all the actual images. The virtual canvas of the 6666% first image is preserved but otherwise ignored. 6667% 6668% FlattenLayer: Use the virtual canvas size of first image. 6669% Images which fall outside this canvas is clipped. 6670% This can be used to 'fill out' a given virtual canvas. 6671% 6672% MosaicLayer: Start with the virtual canvas of the first image, 6673% enlarging left and right edges to contain all images. 6674% Images with negative offsets will be clipped. 6675% 6676*/ 6677WandExport MagickWand *MagickMergeImageLayers(MagickWand *wand, 6678 const LayerMethod method) 6679{ 6680 Image 6681 *mosaic_image; 6682 6683 assert(wand != (MagickWand *) NULL); 6684 assert(wand->signature == MagickWandSignature); 6685 if (wand->debug != MagickFalse) 6686 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6687 if (wand->images == (Image *) NULL) 6688 return((MagickWand *) NULL); 6689 mosaic_image=MergeImageLayers(wand->images,method,wand->exception); 6690 if (mosaic_image == (Image *) NULL) 6691 return((MagickWand *) NULL); 6692 return(CloneMagickWandFromImages(wand,mosaic_image)); 6693} 6694 6695/* 6696%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6697% % 6698% % 6699% % 6700% M a g i c k M i n i f y I m a g e % 6701% % 6702% % 6703% % 6704%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6705% 6706% MagickMinifyImage() is a convenience method that scales an image 6707% proportionally to one-half its original size 6708% 6709% The format of the MagickMinifyImage method is: 6710% 6711% MagickBooleanType MagickMinifyImage(MagickWand *wand) 6712% 6713% A description of each parameter follows: 6714% 6715% o wand: the magick wand. 6716% 6717*/ 6718WandExport MagickBooleanType MagickMinifyImage(MagickWand *wand) 6719{ 6720 Image 6721 *minify_image; 6722 6723 assert(wand != (MagickWand *) NULL); 6724 assert(wand->signature == MagickWandSignature); 6725 if (wand->debug != MagickFalse) 6726 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6727 if (wand->images == (Image *) NULL) 6728 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6729 minify_image=MinifyImage(wand->images,wand->exception); 6730 if (minify_image == (Image *) NULL) 6731 return(MagickFalse); 6732 ReplaceImageInList(&wand->images,minify_image); 6733 return(MagickTrue); 6734} 6735 6736/* 6737%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6738% % 6739% % 6740% % 6741% M a g i c k M o d u l a t e I m a g e % 6742% % 6743% % 6744% % 6745%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6746% 6747% MagickModulateImage() lets you control the brightness, saturation, and hue 6748% of an image. Hue is the percentage of absolute rotation from the current 6749% position. For example 50 results in a counter-clockwise rotation of 90 6750% degrees, 150 results in a clockwise rotation of 90 degrees, with 0 and 200 6751% both resulting in a rotation of 180 degrees. 6752% 6753% To increase the color brightness by 20% and decrease the color saturation by 6754% 10% and leave the hue unchanged, use: 120,90,100. 6755% 6756% The format of the MagickModulateImage method is: 6757% 6758% MagickBooleanType MagickModulateImage(MagickWand *wand, 6759% const double brightness,const double saturation,const double hue) 6760% 6761% A description of each parameter follows: 6762% 6763% o wand: the magick wand. 6764% 6765% o brightness: the percent change in brighness. 6766% 6767% o saturation: the percent change in saturation. 6768% 6769% o hue: the percent change in hue. 6770% 6771*/ 6772WandExport MagickBooleanType MagickModulateImage(MagickWand *wand, 6773 const double brightness,const double saturation,const double hue) 6774{ 6775 char 6776 modulate[MagickPathExtent]; 6777 6778 MagickBooleanType 6779 status; 6780 6781 assert(wand != (MagickWand *) NULL); 6782 assert(wand->signature == MagickWandSignature); 6783 if (wand->debug != MagickFalse) 6784 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6785 if (wand->images == (Image *) NULL) 6786 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6787 (void) FormatLocaleString(modulate,MagickPathExtent,"%g,%g,%g", 6788 brightness,saturation,hue); 6789 status=ModulateImage(wand->images,modulate,wand->exception); 6790 return(status); 6791} 6792 6793/* 6794%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6795% % 6796% % 6797% % 6798% M a g i c k M o n t a g e I m a g e % 6799% % 6800% % 6801% % 6802%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6803% 6804% MagickMontageImage() creates a composite image by combining several 6805% separate images. The images are tiled on the composite image with the name 6806% of the image optionally appearing just below the individual tile. 6807% 6808% The format of the MagickMontageImage method is: 6809% 6810% MagickWand *MagickMontageImage(MagickWand *wand, 6811% const DrawingWand drawing_wand,const char *tile_geometry, 6812% const char *thumbnail_geometry,const MontageMode mode, 6813% const char *frame) 6814% 6815% A description of each parameter follows: 6816% 6817% o wand: the magick wand. 6818% 6819% o drawing_wand: the drawing wand. The font name, size, and color are 6820% obtained from this wand. 6821% 6822% o tile_geometry: the number of tiles per row and page (e.g. 6x4+0+0). 6823% 6824% o thumbnail_geometry: Preferred image size and border size of each 6825% thumbnail (e.g. 120x120+4+3>). 6826% 6827% o mode: Thumbnail framing mode: Frame, Unframe, or Concatenate. 6828% 6829% o frame: Surround the image with an ornamental border (e.g. 15x15+3+3). 6830% The frame color is that of the thumbnail's matte color. 6831% 6832*/ 6833WandExport MagickWand *MagickMontageImage(MagickWand *wand, 6834 const DrawingWand *drawing_wand,const char *tile_geometry, 6835 const char *thumbnail_geometry,const MontageMode mode,const char *frame) 6836{ 6837 char 6838 *font; 6839 6840 Image 6841 *montage_image; 6842 6843 MontageInfo 6844 *montage_info; 6845 6846 PixelWand 6847 *pixel_wand; 6848 6849 assert(wand != (MagickWand *) NULL); 6850 assert(wand->signature == MagickWandSignature); 6851 if (wand->debug != MagickFalse) 6852 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6853 if (wand->images == (Image *) NULL) 6854 return((MagickWand *) NULL); 6855 montage_info=CloneMontageInfo(wand->image_info,(MontageInfo *) NULL); 6856 switch (mode) 6857 { 6858 case FrameMode: 6859 { 6860 (void) CloneString(&montage_info->frame,"15x15+3+3"); 6861 montage_info->shadow=MagickTrue; 6862 break; 6863 } 6864 case UnframeMode: 6865 { 6866 montage_info->frame=(char *) NULL; 6867 montage_info->shadow=MagickFalse; 6868 montage_info->border_width=0; 6869 break; 6870 } 6871 case ConcatenateMode: 6872 { 6873 montage_info->frame=(char *) NULL; 6874 montage_info->shadow=MagickFalse; 6875 (void) CloneString(&montage_info->geometry,"+0+0"); 6876 montage_info->border_width=0; 6877 break; 6878 } 6879 default: 6880 break; 6881 } 6882 font=DrawGetFont(drawing_wand); 6883 if (font != (char *) NULL) 6884 (void) CloneString(&montage_info->font,font); 6885 if (frame != (char *) NULL) 6886 (void) CloneString(&montage_info->frame,frame); 6887 montage_info->pointsize=DrawGetFontSize(drawing_wand); 6888 pixel_wand=NewPixelWand(); 6889 DrawGetFillColor(drawing_wand,pixel_wand); 6890 PixelGetQuantumPacket(pixel_wand,&montage_info->fill); 6891 DrawGetStrokeColor(drawing_wand,pixel_wand); 6892 PixelGetQuantumPacket(pixel_wand,&montage_info->stroke); 6893 pixel_wand=DestroyPixelWand(pixel_wand); 6894 if (thumbnail_geometry != (char *) NULL) 6895 (void) CloneString(&montage_info->geometry,thumbnail_geometry); 6896 if (tile_geometry != (char *) NULL) 6897 (void) CloneString(&montage_info->tile,tile_geometry); 6898 montage_image=MontageImageList(wand->image_info,montage_info,wand->images, 6899 wand->exception); 6900 montage_info=DestroyMontageInfo(montage_info); 6901 if (montage_image == (Image *) NULL) 6902 return((MagickWand *) NULL); 6903 return(CloneMagickWandFromImages(wand,montage_image)); 6904} 6905 6906/* 6907%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6908% % 6909% % 6910% % 6911% M a g i c k M o r p h I m a g e s % 6912% % 6913% % 6914% % 6915%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6916% 6917% MagickMorphImages() method morphs a set of images. Both the image pixels 6918% and size are linearly interpolated to give the appearance of a 6919% meta-morphosis from one image to the next. 6920% 6921% The format of the MagickMorphImages method is: 6922% 6923% MagickWand *MagickMorphImages(MagickWand *wand, 6924% const size_t number_frames) 6925% 6926% A description of each parameter follows: 6927% 6928% o wand: the magick wand. 6929% 6930% o number_frames: the number of in-between images to generate. 6931% 6932*/ 6933WandExport MagickWand *MagickMorphImages(MagickWand *wand, 6934 const size_t number_frames) 6935{ 6936 Image 6937 *morph_image; 6938 6939 assert(wand != (MagickWand *) NULL); 6940 assert(wand->signature == MagickWandSignature); 6941 if (wand->debug != MagickFalse) 6942 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6943 if (wand->images == (Image *) NULL) 6944 return((MagickWand *) NULL); 6945 morph_image=MorphImages(wand->images,number_frames,wand->exception); 6946 if (morph_image == (Image *) NULL) 6947 return((MagickWand *) NULL); 6948 return(CloneMagickWandFromImages(wand,morph_image)); 6949} 6950 6951/* 6952%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6953% % 6954% % 6955% % 6956% M a g i c k M o r p h o l o g y I m a g e % 6957% % 6958% % 6959% % 6960%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6961% 6962% MagickMorphologyImage() applies a user supplied kernel to the image 6963% according to the given mophology method. 6964% 6965% The format of the MagickMorphologyImage method is: 6966% 6967% MagickBooleanType MagickMorphologyImage(MagickWand *wand, 6968% MorphologyMethod method,const ssize_t iterations,KernelInfo *kernel) 6969% 6970% A description of each parameter follows: 6971% 6972% o wand: the magick wand. 6973% 6974% o method: the morphology method to be applied. 6975% 6976% o iterations: apply the operation this many times (or no change). 6977% A value of -1 means loop until no change found. How this is applied 6978% may depend on the morphology method. Typically this is a value of 1. 6979% 6980% o kernel: An array of doubles representing the morphology kernel. 6981% 6982*/ 6983WandExport MagickBooleanType MagickMorphologyImage(MagickWand *wand, 6984 MorphologyMethod method,const ssize_t iterations,KernelInfo *kernel) 6985{ 6986 Image 6987 *morphology_image; 6988 6989 assert(wand != (MagickWand *) NULL); 6990 assert(wand->signature == MagickWandSignature); 6991 if (wand->debug != MagickFalse) 6992 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6993 if (kernel == (const KernelInfo *) NULL) 6994 return(MagickFalse); 6995 if (wand->images == (Image *) NULL) 6996 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6997 morphology_image=MorphologyImage(wand->images,method,iterations,kernel, 6998 wand->exception); 6999 if (morphology_image == (Image *) NULL) 7000 return(MagickFalse); 7001 ReplaceImageInList(&wand->images,morphology_image); 7002 return(MagickTrue); 7003} 7004 7005/* 7006%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7007% % 7008% % 7009% % 7010% M a g i c k M o t i o n B l u r I m a g e % 7011% % 7012% % 7013% % 7014%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7015% 7016% MagickMotionBlurImage() simulates motion blur. We convolve the image with a 7017% Gaussian operator of the given radius and standard deviation (sigma). 7018% For reasonable results, radius should be larger than sigma. Use a 7019% radius of 0 and MotionBlurImage() selects a suitable radius for you. 7020% Angle gives the angle of the blurring motion. 7021% 7022% The format of the MagickMotionBlurImage method is: 7023% 7024% MagickBooleanType MagickMotionBlurImage(MagickWand *wand, 7025% const double radius,const double sigma,const double angle) 7026% 7027% A description of each parameter follows: 7028% 7029% o wand: the magick wand. 7030% 7031% o radius: the radius of the Gaussian, in pixels, not counting 7032% the center pixel. 7033% 7034% o sigma: the standard deviation of the Gaussian, in pixels. 7035% 7036% o angle: Apply the effect along this angle. 7037% 7038*/ 7039WandExport MagickBooleanType MagickMotionBlurImage(MagickWand *wand, 7040 const double radius,const double sigma,const double angle) 7041{ 7042 Image 7043 *blur_image; 7044 7045 assert(wand != (MagickWand *) NULL); 7046 assert(wand->signature == MagickWandSignature); 7047 if (wand->debug != MagickFalse) 7048 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7049 if (wand->images == (Image *) NULL) 7050 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7051 blur_image=MotionBlurImage(wand->images,radius,sigma,angle,wand->exception); 7052 if (blur_image == (Image *) NULL) 7053 return(MagickFalse); 7054 ReplaceImageInList(&wand->images,blur_image); 7055 return(MagickTrue); 7056} 7057 7058/* 7059%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7060% % 7061% % 7062% % 7063% M a g i c k N e g a t e I m a g e % 7064% % 7065% % 7066% % 7067%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7068% 7069% MagickNegateImage() negates the colors in the reference image. The 7070% Grayscale option means that only grayscale values within the image are 7071% negated. 7072% 7073% You can also reduce the influence of a particular channel with a gamma 7074% value of 0. 7075% 7076% The format of the MagickNegateImage method is: 7077% 7078% MagickBooleanType MagickNegateImage(MagickWand *wand, 7079% const MagickBooleanType gray) 7080% 7081% A description of each parameter follows: 7082% 7083% o wand: the magick wand. 7084% 7085% o gray: If MagickTrue, only negate grayscale pixels within the image. 7086% 7087*/ 7088WandExport MagickBooleanType MagickNegateImage(MagickWand *wand, 7089 const MagickBooleanType gray) 7090{ 7091 MagickBooleanType 7092 status; 7093 7094 assert(wand != (MagickWand *) NULL); 7095 assert(wand->signature == MagickWandSignature); 7096 if (wand->debug != MagickFalse) 7097 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7098 if (wand->images == (Image *) NULL) 7099 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7100 status=NegateImage(wand->images,gray,wand->exception); 7101 return(status); 7102} 7103 7104/* 7105%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7106% % 7107% % 7108% % 7109% M a g i c k N e w I m a g e % 7110% % 7111% % 7112% % 7113%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7114% 7115% MagickNewImage() adds a blank image canvas of the specified size and 7116% background color to the wand. 7117% 7118% The format of the MagickNewImage method is: 7119% 7120% MagickBooleanType MagickNewImage(MagickWand *wand, 7121% const size_t columns,const size_t rows, 7122% const PixelWand *background) 7123% 7124% A description of each parameter follows: 7125% 7126% o wand: the magick wand. 7127% 7128% o width: the image width. 7129% 7130% o height: the image height. 7131% 7132% o background: the image color. 7133% 7134*/ 7135WandExport MagickBooleanType MagickNewImage(MagickWand *wand,const size_t width, 7136 const size_t height,const PixelWand *background) 7137{ 7138 Image 7139 *images; 7140 7141 PixelInfo 7142 pixel; 7143 7144 assert(wand != (MagickWand *) NULL); 7145 assert(wand->signature == MagickWandSignature); 7146 if (wand->debug != MagickFalse) 7147 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7148 PixelGetMagickColor(background,&pixel); 7149 images=NewMagickImage(wand->image_info,width,height,&pixel,wand->exception); 7150 if (images == (Image *) NULL) 7151 return(MagickFalse); 7152 return(InsertImageInWand(wand,images)); 7153} 7154 7155/* 7156%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7157% % 7158% % 7159% % 7160% M a g i c k N e x t I m a g e % 7161% % 7162% % 7163% % 7164%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7165% 7166% MagickNextImage() sets the next image in the wand as the current image. 7167% 7168% It is typically used after MagickResetIterator(), after which its first use 7169% will set the first image as the current image (unless the wand is empty). 7170% 7171% It will return MagickFalse when no more images are left to be returned 7172% which happens when the wand is empty, or the current image is the last 7173% image. 7174% 7175% When the above condition (end of image list) is reached, the iterator is 7176% automaticall set so that you can start using MagickPreviousImage() to 7177% again iterate over the images in the reverse direction, starting with the 7178% last image (again). You can jump to this condition immeditally using 7179% MagickSetLastIterator(). 7180% 7181% The format of the MagickNextImage method is: 7182% 7183% MagickBooleanType MagickNextImage(MagickWand *wand) 7184% 7185% A description of each parameter follows: 7186% 7187% o wand: the magick wand. 7188% 7189*/ 7190WandExport MagickBooleanType MagickNextImage(MagickWand *wand) 7191{ 7192 assert(wand != (MagickWand *) NULL); 7193 assert(wand->signature == MagickWandSignature); 7194 if (wand->debug != MagickFalse) 7195 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7196 if (wand->images == (Image *) NULL) 7197 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7198 wand->insert_before=MagickFalse; /* Inserts is now appended */ 7199 if (wand->image_pending != MagickFalse) 7200 { 7201 wand->image_pending=MagickFalse; 7202 return(MagickTrue); 7203 } 7204 if (GetNextImageInList(wand->images) == (Image *) NULL) 7205 { 7206 wand->image_pending=MagickTrue; /* No image, PreviousImage re-gets */ 7207 return(MagickFalse); 7208 } 7209 wand->images=GetNextImageInList(wand->images); 7210 return(MagickTrue); 7211} 7212 7213/* 7214%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7215% % 7216% % 7217% % 7218% M a g i c k N o r m a l i z e I m a g e % 7219% % 7220% % 7221% % 7222%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7223% 7224% MagickNormalizeImage() enhances the contrast of a color image by adjusting 7225% the pixels color to span the entire range of colors available 7226% 7227% You can also reduce the influence of a particular channel with a gamma 7228% value of 0. 7229% 7230% The format of the MagickNormalizeImage method is: 7231% 7232% MagickBooleanType MagickNormalizeImage(MagickWand *wand) 7233% 7234% A description of each parameter follows: 7235% 7236% o wand: the magick wand. 7237% 7238*/ 7239WandExport MagickBooleanType MagickNormalizeImage(MagickWand *wand) 7240{ 7241 MagickBooleanType 7242 status; 7243 7244 assert(wand != (MagickWand *) NULL); 7245 assert(wand->signature == MagickWandSignature); 7246 if (wand->debug != MagickFalse) 7247 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7248 if (wand->images == (Image *) NULL) 7249 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7250 status=NormalizeImage(wand->images,wand->exception); 7251 return(status); 7252} 7253 7254/* 7255%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7256% % 7257% % 7258% % 7259% M a g i c k O i l P a i n t I m a g e % 7260% % 7261% % 7262% % 7263%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7264% 7265% MagickOilPaintImage() applies a special effect filter that simulates an oil 7266% painting. Each pixel is replaced by the most frequent color occurring 7267% in a circular region defined by radius. 7268% 7269% The format of the MagickOilPaintImage method is: 7270% 7271% MagickBooleanType MagickOilPaintImage(MagickWand *wand, 7272% const double radius,const double sigma) 7273% 7274% A description of each parameter follows: 7275% 7276% o wand: the magick wand. 7277% 7278% o radius: the radius of the circular neighborhood. 7279% 7280% o sigma: the standard deviation of the Gaussian, in pixels. 7281% 7282*/ 7283WandExport MagickBooleanType MagickOilPaintImage(MagickWand *wand, 7284 const double radius,const double sigma) 7285{ 7286 Image 7287 *paint_image; 7288 7289 assert(wand != (MagickWand *) NULL); 7290 assert(wand->signature == MagickWandSignature); 7291 if (wand->debug != MagickFalse) 7292 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7293 if (wand->images == (Image *) NULL) 7294 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7295 paint_image=OilPaintImage(wand->images,radius,sigma,wand->exception); 7296 if (paint_image == (Image *) NULL) 7297 return(MagickFalse); 7298 ReplaceImageInList(&wand->images,paint_image); 7299 return(MagickTrue); 7300} 7301 7302/* 7303%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7304% % 7305% % 7306% % 7307% M a g i c k O p a q u e P a i n t I m a g e % 7308% % 7309% % 7310% % 7311%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7312% 7313% MagickOpaquePaintImage() changes any pixel that matches color with the color 7314% defined by fill. 7315% 7316% The format of the MagickOpaquePaintImage method is: 7317% 7318% MagickBooleanType MagickOpaquePaintImage(MagickWand *wand, 7319% const PixelWand *target,const PixelWand *fill,const double fuzz, 7320% const MagickBooleanType invert) 7321% 7322% A description of each parameter follows: 7323% 7324% o wand: the magick wand. 7325% 7326% o target: Change this target color to the fill color within the image. 7327% 7328% o fill: the fill pixel wand. 7329% 7330% o fuzz: By default target must match a particular pixel color 7331% exactly. However, in many cases two colors may differ by a small amount. 7332% The fuzz member of image defines how much tolerance is acceptable to 7333% consider two colors as the same. For example, set fuzz to 10 and the 7334% color red at intensities of 100 and 102 respectively are now interpreted 7335% as the same color for the purposes of the floodfill. 7336% 7337% o invert: paint any pixel that does not match the target color. 7338% 7339*/ 7340WandExport MagickBooleanType MagickOpaquePaintImage(MagickWand *wand, 7341 const PixelWand *target,const PixelWand *fill,const double fuzz, 7342 const MagickBooleanType invert) 7343{ 7344 MagickBooleanType 7345 status; 7346 7347 PixelInfo 7348 fill_pixel, 7349 target_pixel; 7350 7351 assert(wand != (MagickWand *) NULL); 7352 assert(wand->signature == MagickWandSignature); 7353 if (wand->debug != MagickFalse) 7354 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7355 if (wand->images == (Image *) NULL) 7356 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7357 PixelGetMagickColor(target,&target_pixel); 7358 PixelGetMagickColor(fill,&fill_pixel); 7359 wand->images->fuzz=fuzz; 7360 status=OpaquePaintImage(wand->images,&target_pixel,&fill_pixel,invert, 7361 wand->exception); 7362 return(status); 7363} 7364 7365/* 7366%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7367% % 7368% % 7369% % 7370% 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 % 7371% % 7372% % 7373% % 7374%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7375% 7376% MagickOptimizeImageLayers() compares each image the GIF disposed forms of the 7377% previous image in the sequence. From this it attempts to select the 7378% smallest cropped image to replace each frame, while preserving the results 7379% of the animation. 7380% 7381% The format of the MagickOptimizeImageLayers method is: 7382% 7383% MagickWand *MagickOptimizeImageLayers(MagickWand *wand) 7384% 7385% A description of each parameter follows: 7386% 7387% o wand: the magick wand. 7388% 7389*/ 7390WandExport MagickWand *MagickOptimizeImageLayers(MagickWand *wand) 7391{ 7392 Image 7393 *optimize_image; 7394 7395 assert(wand != (MagickWand *) NULL); 7396 assert(wand->signature == MagickWandSignature); 7397 if (wand->debug != MagickFalse) 7398 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7399 if (wand->images == (Image *) NULL) 7400 return((MagickWand *) NULL); 7401 optimize_image=OptimizeImageLayers(wand->images,wand->exception); 7402 if (optimize_image == (Image *) NULL) 7403 return((MagickWand *) NULL); 7404 return(CloneMagickWandFromImages(wand,optimize_image)); 7405} 7406 7407/* 7408%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7409% % 7410% % 7411% % 7412% M a g i c k O p t i m i z e I m a g e T r a n s p a r e n c y % 7413% % 7414% % 7415% % 7416%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7417% 7418% MagickOptimizeImageTransparency() takes a frame optimized GIF animation, and 7419% compares the overlayed pixels against the disposal image resulting from all 7420% the previous frames in the animation. Any pixel that does not change the 7421% disposal image (and thus does not effect the outcome of an overlay) is made 7422% transparent. 7423% 7424% WARNING: This modifies the current images directly, rather than generate 7425% a new image sequence. 7426% The format of the MagickOptimizeImageTransparency method is: 7427% 7428% MagickBooleanType MagickOptimizeImageTransparency(MagickWand *wand) 7429% 7430% A description of each parameter follows: 7431% 7432% o wand: the magick wand. 7433% 7434*/ 7435WandExport MagickBooleanType MagickOptimizeImageTransparency(MagickWand *wand) 7436{ 7437 assert(wand != (MagickWand *) NULL); 7438 assert(wand->signature == MagickWandSignature); 7439 if (wand->debug != MagickFalse) 7440 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7441 if (wand->images == (Image *) NULL) 7442 return(MagickFalse); 7443 OptimizeImageTransparency(wand->images,wand->exception); 7444 return(MagickTrue); 7445} 7446 7447/* 7448%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7449% % 7450% % 7451% % 7452% 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 % 7453% % 7454% % 7455% % 7456%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7457% 7458% MagickOrderedPosterizeImage() performs an ordered dither based on a number 7459% of pre-defined dithering threshold maps, but over multiple intensity levels, 7460% which can be different for different channels, according to the input 7461% arguments. 7462% 7463% The format of the MagickOrderedPosterizeImage method is: 7464% 7465% MagickBooleanType MagickOrderedPosterizeImage(MagickWand *wand, 7466% const char *threshold_map) 7467% 7468% A description of each parameter follows: 7469% 7470% o image: the image. 7471% 7472% o threshold_map: A string containing the name of the threshold dither 7473% map to use, followed by zero or more numbers representing the number of 7474% color levels tho dither between. 7475% 7476% Any level number less than 2 is equivalent to 2, and means only binary 7477% dithering will be applied to each color channel. 7478% 7479% No numbers also means a 2 level (bitmap) dither will be applied to all 7480% channels, while a single number is the number of levels applied to each 7481% channel in sequence. More numbers will be applied in turn to each of 7482% the color channels. 7483% 7484% For example: "o3x3,6" generates a 6 level posterization of the image 7485% with a ordered 3x3 diffused pixel dither being applied between each 7486% level. While checker,8,8,4 will produce a 332 colormaped image with 7487% only a single checkerboard hash pattern (50% grey) between each color 7488% level, to basically double the number of color levels with a bare 7489% minimim of dithering. 7490% 7491*/ 7492WandExport MagickBooleanType MagickOrderedPosterizeImage(MagickWand *wand, 7493 const char *threshold_map) 7494{ 7495 MagickBooleanType 7496 status; 7497 7498 assert(wand != (MagickWand *) NULL); 7499 assert(wand->signature == MagickWandSignature); 7500 if (wand->debug != MagickFalse) 7501 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7502 if (wand->images == (Image *) NULL) 7503 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7504 status=OrderedPosterizeImage(wand->images,threshold_map,wand->exception); 7505 return(status); 7506} 7507 7508/* 7509%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7510% % 7511% % 7512% % 7513% M a g i c k P i n g I m a g e % 7514% % 7515% % 7516% % 7517%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7518% 7519% MagickPingImage() is the same as MagickReadImage() except the only valid 7520% information returned is the image width, height, size, and format. It 7521% is designed to efficiently obtain this information from a file without 7522% reading the entire image sequence into memory. 7523% 7524% The format of the MagickPingImage method is: 7525% 7526% MagickBooleanType MagickPingImage(MagickWand *wand,const char *filename) 7527% 7528% A description of each parameter follows: 7529% 7530% o wand: the magick wand. 7531% 7532% o filename: the image filename. 7533% 7534*/ 7535WandExport MagickBooleanType MagickPingImage(MagickWand *wand, 7536 const char *filename) 7537{ 7538 Image 7539 *images; 7540 7541 ImageInfo 7542 *ping_info; 7543 7544 assert(wand != (MagickWand *) NULL); 7545 assert(wand->signature == MagickWandSignature); 7546 if (wand->debug != MagickFalse) 7547 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7548 ping_info=CloneImageInfo(wand->image_info); 7549 if (filename != (const char *) NULL) 7550 (void) CopyMagickString(ping_info->filename,filename,MagickPathExtent); 7551 images=PingImage(ping_info,wand->exception); 7552 ping_info=DestroyImageInfo(ping_info); 7553 if (images == (Image *) NULL) 7554 return(MagickFalse); 7555 return(InsertImageInWand(wand,images)); 7556} 7557 7558/* 7559%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7560% % 7561% % 7562% % 7563% M a g i c k P i n g I m a g e B l o b % 7564% % 7565% % 7566% % 7567%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7568% 7569% MagickPingImageBlob() pings an image or image sequence from a blob. 7570% 7571% The format of the MagickPingImageBlob method is: 7572% 7573% MagickBooleanType MagickPingImageBlob(MagickWand *wand, 7574% const void *blob,const size_t length) 7575% 7576% A description of each parameter follows: 7577% 7578% o wand: the magick wand. 7579% 7580% o blob: the blob. 7581% 7582% o length: the blob length. 7583% 7584*/ 7585WandExport MagickBooleanType MagickPingImageBlob(MagickWand *wand, 7586 const void *blob,const size_t length) 7587{ 7588 Image 7589 *images; 7590 7591 ImageInfo 7592 *read_info; 7593 7594 assert(wand != (MagickWand *) NULL); 7595 assert(wand->signature == MagickWandSignature); 7596 if (wand->debug != MagickFalse) 7597 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7598 read_info=CloneImageInfo(wand->image_info); 7599 SetImageInfoBlob(read_info,blob,length); 7600 images=PingImage(read_info,wand->exception); 7601 read_info=DestroyImageInfo(read_info); 7602 if (images == (Image *) NULL) 7603 return(MagickFalse); 7604 return(InsertImageInWand(wand,images)); 7605} 7606 7607/* 7608%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7609% % 7610% % 7611% % 7612% M a g i c k P i n g I m a g e F i l e % 7613% % 7614% % 7615% % 7616%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7617% 7618% MagickPingImageFile() pings an image or image sequence from an open file 7619% descriptor. 7620% 7621% The format of the MagickPingImageFile method is: 7622% 7623% MagickBooleanType MagickPingImageFile(MagickWand *wand,FILE *file) 7624% 7625% A description of each parameter follows: 7626% 7627% o wand: the magick wand. 7628% 7629% o file: the file descriptor. 7630% 7631*/ 7632WandExport MagickBooleanType MagickPingImageFile(MagickWand *wand,FILE *file) 7633{ 7634 Image 7635 *images; 7636 7637 ImageInfo 7638 *read_info; 7639 7640 assert(wand != (MagickWand *) NULL); 7641 assert(wand->signature == MagickWandSignature); 7642 assert(file != (FILE *) NULL); 7643 if (wand->debug != MagickFalse) 7644 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7645 read_info=CloneImageInfo(wand->image_info); 7646 SetImageInfoFile(read_info,file); 7647 images=PingImage(read_info,wand->exception); 7648 read_info=DestroyImageInfo(read_info); 7649 if (images == (Image *) NULL) 7650 return(MagickFalse); 7651 return(InsertImageInWand(wand,images)); 7652} 7653 7654/* 7655%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7656% % 7657% % 7658% % 7659% M a g i c k P o l a r o i d I m a g e % 7660% % 7661% % 7662% % 7663%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7664% 7665% MagickPolaroidImage() simulates a Polaroid picture. 7666% 7667% The format of the MagickPolaroidImage method is: 7668% 7669% MagickBooleanType MagickPolaroidImage(MagickWand *wand, 7670% const DrawingWand *drawing_wand,const char *caption,const double angle, 7671% const PixelInterpolateMethod method) 7672% 7673% A description of each parameter follows: 7674% 7675% o wand: the magick wand. 7676% 7677% o drawing_wand: the draw wand. 7678% 7679% o caption: the Polaroid caption. 7680% 7681% o angle: Apply the effect along this angle. 7682% 7683% o method: the pixel interpolation method. 7684% 7685*/ 7686WandExport MagickBooleanType MagickPolaroidImage(MagickWand *wand, 7687 const DrawingWand *drawing_wand,const char *caption,const double angle, 7688 const PixelInterpolateMethod method) 7689{ 7690 DrawInfo 7691 *draw_info; 7692 7693 Image 7694 *polaroid_image; 7695 7696 assert(wand != (MagickWand *) NULL); 7697 assert(wand->signature == MagickWandSignature); 7698 if (wand->debug != MagickFalse) 7699 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7700 if (wand->images == (Image *) NULL) 7701 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7702 draw_info=PeekDrawingWand(drawing_wand); 7703 if (draw_info == (DrawInfo *) NULL) 7704 return(MagickFalse); 7705 polaroid_image=PolaroidImage(wand->images,draw_info,caption,angle,method, 7706 wand->exception); 7707 if (polaroid_image == (Image *) NULL) 7708 return(MagickFalse); 7709 ReplaceImageInList(&wand->images,polaroid_image); 7710 return(MagickTrue); 7711} 7712 7713/* 7714%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7715% % 7716% % 7717% % 7718% M a g i c k P o s t e r i z e I m a g e % 7719% % 7720% % 7721% % 7722%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7723% 7724% MagickPosterizeImage() reduces the image to a limited number of color level. 7725% 7726% The format of the MagickPosterizeImage method is: 7727% 7728% MagickBooleanType MagickPosterizeImage(MagickWand *wand, 7729% const size_t levels,const DitherMethod method) 7730% 7731% A description of each parameter follows: 7732% 7733% o wand: the magick wand. 7734% 7735% o levels: Number of color levels allowed in each channel. Very low values 7736% (2, 3, or 4) have the most visible effect. 7737% 7738% o method: choose the dither method: UndefinedDitherMethod, 7739% NoDitherMethod, RiemersmaDitherMethod, or FloydSteinbergDitherMethod. 7740% 7741*/ 7742WandExport MagickBooleanType MagickPosterizeImage(MagickWand *wand, 7743 const size_t levels,const DitherMethod dither) 7744{ 7745 MagickBooleanType 7746 status; 7747 7748 assert(wand != (MagickWand *) NULL); 7749 assert(wand->signature == MagickWandSignature); 7750 if (wand->debug != MagickFalse) 7751 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7752 if (wand->images == (Image *) NULL) 7753 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7754 status=PosterizeImage(wand->images,levels,dither,wand->exception); 7755 return(status); 7756} 7757 7758/* 7759%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7760% % 7761% % 7762% % 7763% M a g i c k P r e v i e w I m a g e s % 7764% % 7765% % 7766% % 7767%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7768% 7769% MagickPreviewImages() tiles 9 thumbnails of the specified image with an 7770% image processing operation applied at varying strengths. This helpful 7771% to quickly pin-point an appropriate parameter for an image processing 7772% operation. 7773% 7774% The format of the MagickPreviewImages method is: 7775% 7776% MagickWand *MagickPreviewImages(MagickWand *wand, 7777% const PreviewType preview) 7778% 7779% A description of each parameter follows: 7780% 7781% o wand: the magick wand. 7782% 7783% o preview: the preview type. 7784% 7785*/ 7786WandExport MagickWand *MagickPreviewImages(MagickWand *wand, 7787 const PreviewType preview) 7788{ 7789 Image 7790 *preview_image; 7791 7792 assert(wand != (MagickWand *) NULL); 7793 assert(wand->signature == MagickWandSignature); 7794 if (wand->debug != MagickFalse) 7795 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7796 if (wand->images == (Image *) NULL) 7797 return((MagickWand *) NULL); 7798 preview_image=PreviewImage(wand->images,preview,wand->exception); 7799 if (preview_image == (Image *) NULL) 7800 return((MagickWand *) NULL); 7801 return(CloneMagickWandFromImages(wand,preview_image)); 7802} 7803 7804/* 7805%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7806% % 7807% % 7808% % 7809% M a g i c k P r e v i o u s I m a g e % 7810% % 7811% % 7812% % 7813%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7814% 7815% MagickPreviousImage() sets the previous image in the wand as the current 7816% image. 7817% 7818% It is typically used after MagickSetLastIterator(), after which its first 7819% use will set the last image as the current image (unless the wand is empty). 7820% 7821% It will return MagickFalse when no more images are left to be returned 7822% which happens when the wand is empty, or the current image is the first 7823% image. At that point the iterator is than reset to again process images in 7824% the forward direction, again starting with the first image in list. Images 7825% added at this point are prepended. 7826% 7827% Also at that point any images added to the wand using MagickAddImages() or 7828% MagickReadImages() will be prepended before the first image. In this sense 7829% the condition is not quite exactly the same as MagickResetIterator(). 7830% 7831% The format of the MagickPreviousImage method is: 7832% 7833% MagickBooleanType MagickPreviousImage(MagickWand *wand) 7834% 7835% A description of each parameter follows: 7836% 7837% o wand: the magick wand. 7838% 7839*/ 7840WandExport MagickBooleanType MagickPreviousImage(MagickWand *wand) 7841{ 7842 assert(wand != (MagickWand *) NULL); 7843 assert(wand->signature == MagickWandSignature); 7844 if (wand->debug != MagickFalse) 7845 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7846 if (wand->images == (Image *) NULL) 7847 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7848 if (wand->image_pending != MagickFalse) 7849 { 7850 wand->image_pending=MagickFalse; /* image returned no longer pending */ 7851 return(MagickTrue); 7852 } 7853 if (GetPreviousImageInList(wand->images) == (Image *) NULL) 7854 { 7855 wand->image_pending=MagickTrue; /* Next now re-gets first image */ 7856 wand->insert_before=MagickTrue; /* insert/add prepends new images */ 7857 return(MagickFalse); 7858 } 7859 wand->images=GetPreviousImageInList(wand->images); 7860 return(MagickTrue); 7861} 7862 7863/* 7864%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7865% % 7866% % 7867% % 7868% M a g i c k Q u a n t i z e I m a g e % 7869% % 7870% % 7871% % 7872%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7873% 7874% MagickQuantizeImage() analyzes the colors within a reference image and 7875% chooses a fixed number of colors to represent the image. The goal of the 7876% algorithm is to minimize the color difference between the input and output 7877% image while minimizing the processing time. 7878% 7879% The format of the MagickQuantizeImage method is: 7880% 7881% MagickBooleanType MagickQuantizeImage(MagickWand *wand, 7882% const size_t number_colors,const ColorspaceType colorspace, 7883% const size_t treedepth,const DitherMethod dither_method, 7884% const MagickBooleanType measure_error) 7885% 7886% A description of each parameter follows: 7887% 7888% o wand: the magick wand. 7889% 7890% o number_colors: the number of colors. 7891% 7892% o colorspace: Perform color reduction in this colorspace, typically 7893% RGBColorspace. 7894% 7895% o treedepth: Normally, this integer value is zero or one. A zero or 7896% 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 7897% reference image with the least amount of memory and the fastest 7898% computational speed. In some cases, such as an image with low color 7899% dispersion (a few number of colors), a value other than 7900% Log4(number_colors) is required. To expand the color tree completely, 7901% use a value of 8. 7902% 7903% o dither_method: choose from UndefinedDitherMethod, NoDitherMethod, 7904% RiemersmaDitherMethod, FloydSteinbergDitherMethod. 7905% 7906% o measure_error: A value other than zero measures the difference between 7907% the original and quantized images. This difference is the total 7908% quantization error. The error is computed by summing over all pixels 7909% in an image the distance squared in RGB space between each reference 7910% pixel value and its quantized value. 7911% 7912*/ 7913WandExport MagickBooleanType MagickQuantizeImage(MagickWand *wand, 7914 const size_t number_colors,const ColorspaceType colorspace, 7915 const size_t treedepth,const DitherMethod dither_method, 7916 const MagickBooleanType measure_error) 7917{ 7918 MagickBooleanType 7919 status; 7920 7921 QuantizeInfo 7922 *quantize_info; 7923 7924 assert(wand != (MagickWand *) NULL); 7925 assert(wand->signature == MagickWandSignature); 7926 if (wand->debug != MagickFalse) 7927 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7928 if (wand->images == (Image *) NULL) 7929 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7930 quantize_info=CloneQuantizeInfo((QuantizeInfo *) NULL); 7931 quantize_info->number_colors=number_colors; 7932 quantize_info->dither_method=dither_method; 7933 quantize_info->tree_depth=treedepth; 7934 quantize_info->colorspace=colorspace; 7935 quantize_info->measure_error=measure_error; 7936 status=QuantizeImage(quantize_info,wand->images,wand->exception); 7937 quantize_info=DestroyQuantizeInfo(quantize_info); 7938 return(status); 7939} 7940 7941/* 7942%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7943% % 7944% % 7945% % 7946% M a g i c k Q u a n t i z e I m a g e s % 7947% % 7948% % 7949% % 7950%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7951% 7952% MagickQuantizeImages() analyzes the colors within a sequence of images and 7953% chooses a fixed number of colors to represent the image. The goal of the 7954% algorithm is to minimize the color difference between the input and output 7955% image while minimizing the processing time. 7956% 7957% The format of the MagickQuantizeImages method is: 7958% 7959% MagickBooleanType MagickQuantizeImages(MagickWand *wand, 7960% const size_t number_colors,const ColorspaceType colorspace, 7961% const size_t treedepth,const DitherMethod dither_method, 7962% const MagickBooleanType measure_error) 7963% 7964% A description of each parameter follows: 7965% 7966% o wand: the magick wand. 7967% 7968% o number_colors: the number of colors. 7969% 7970% o colorspace: Perform color reduction in this colorspace, typically 7971% RGBColorspace. 7972% 7973% o treedepth: Normally, this integer value is zero or one. A zero or 7974% 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 7975% reference image with the least amount of memory and the fastest 7976% computational speed. In some cases, such as an image with low color 7977% dispersion (a few number of colors), a value other than 7978% Log4(number_colors) is required. To expand the color tree completely, 7979% use a value of 8. 7980% 7981% o dither_method: choose from these dither methods: NoDitherMethod, 7982% RiemersmaDitherMethod, or FloydSteinbergDitherMethod. 7983% 7984% o measure_error: A value other than zero measures the difference between 7985% the original and quantized images. This difference is the total 7986% quantization error. The error is computed by summing over all pixels 7987% in an image the distance squared in RGB space between each reference 7988% pixel value and its quantized value. 7989% 7990*/ 7991WandExport MagickBooleanType MagickQuantizeImages(MagickWand *wand, 7992 const size_t number_colors,const ColorspaceType colorspace, 7993 const size_t treedepth,const DitherMethod dither_method, 7994 const MagickBooleanType measure_error) 7995{ 7996 MagickBooleanType 7997 status; 7998 7999 QuantizeInfo 8000 *quantize_info; 8001 8002 assert(wand != (MagickWand *) NULL); 8003 assert(wand->signature == MagickWandSignature); 8004 if (wand->debug != MagickFalse) 8005 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8006 if (wand->images == (Image *) NULL) 8007 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8008 quantize_info=CloneQuantizeInfo((QuantizeInfo *) NULL); 8009 quantize_info->number_colors=number_colors; 8010 quantize_info->dither_method=dither_method; 8011 quantize_info->tree_depth=treedepth; 8012 quantize_info->colorspace=colorspace; 8013 quantize_info->measure_error=measure_error; 8014 status=QuantizeImages(quantize_info,wand->images,wand->exception); 8015 quantize_info=DestroyQuantizeInfo(quantize_info); 8016 return(status); 8017} 8018 8019/* 8020%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8021% % 8022% % 8023% % 8024% M a g i c k R o t a t i o n a l B l u r I m a g e % 8025% % 8026% % 8027% % 8028%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8029% 8030% MagickRotationalBlurImage() rotational blurs an image. 8031% 8032% The format of the MagickRotationalBlurImage method is: 8033% 8034% MagickBooleanType MagickRotationalBlurImage(MagickWand *wand, 8035% const double angle) 8036% 8037% A description of each parameter follows: 8038% 8039% o wand: the magick wand. 8040% 8041% o angle: the angle of the blur in degrees. 8042% 8043*/ 8044WandExport MagickBooleanType MagickRotationalBlurImage(MagickWand *wand, 8045 const double angle) 8046{ 8047 Image 8048 *blur_image; 8049 8050 assert(wand != (MagickWand *) NULL); 8051 assert(wand->signature == MagickWandSignature); 8052 if (wand->debug != MagickFalse) 8053 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8054 if (wand->images == (Image *) NULL) 8055 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8056 blur_image=RotationalBlurImage(wand->images,angle,wand->exception); 8057 if (blur_image == (Image *) NULL) 8058 return(MagickFalse); 8059 ReplaceImageInList(&wand->images,blur_image); 8060 return(MagickTrue); 8061} 8062 8063/* 8064%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8065% % 8066% % 8067% % 8068% M a g i c k R a i s e I m a g e % 8069% % 8070% % 8071% % 8072%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8073% 8074% MagickRaiseImage() creates a simulated three-dimensional button-like effect 8075% by lightening and darkening the edges of the image. Members width and 8076% height of raise_info define the width of the vertical and horizontal 8077% edge of the effect. 8078% 8079% The format of the MagickRaiseImage method is: 8080% 8081% MagickBooleanType MagickRaiseImage(MagickWand *wand, 8082% const size_t width,const size_t height,const ssize_t x, 8083% const ssize_t y,const MagickBooleanType raise) 8084% 8085% A description of each parameter follows: 8086% 8087% o wand: the magick wand. 8088% 8089% o width,height,x,y: Define the dimensions of the area to raise. 8090% 8091% o raise: A value other than zero creates a 3-D raise effect, 8092% otherwise it has a lowered effect. 8093% 8094*/ 8095WandExport MagickBooleanType MagickRaiseImage(MagickWand *wand, 8096 const size_t width,const size_t height,const ssize_t x, 8097 const ssize_t y,const MagickBooleanType raise) 8098{ 8099 MagickBooleanType 8100 status; 8101 8102 RectangleInfo 8103 raise_info; 8104 8105 assert(wand != (MagickWand *) NULL); 8106 assert(wand->signature == MagickWandSignature); 8107 if (wand->debug != MagickFalse) 8108 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8109 if (wand->images == (Image *) NULL) 8110 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8111 raise_info.width=width; 8112 raise_info.height=height; 8113 raise_info.x=x; 8114 raise_info.y=y; 8115 status=RaiseImage(wand->images,&raise_info,raise,wand->exception); 8116 return(status); 8117} 8118 8119/* 8120%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8121% % 8122% % 8123% % 8124% 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 % 8125% % 8126% % 8127% % 8128%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8129% 8130% MagickRandomThresholdImage() changes the value of individual pixels based on 8131% the intensity of each pixel compared to threshold. The result is a 8132% high-contrast, two color image. 8133% 8134% The format of the MagickRandomThresholdImage method is: 8135% 8136% MagickBooleanType MagickRandomThresholdImage(MagickWand *wand, 8137% const double low,const double high) 8138% 8139% A description of each parameter follows: 8140% 8141% o wand: the magick wand. 8142% 8143% o low,high: Specify the high and low thresholds. These values range from 8144% 0 to QuantumRange. 8145% 8146*/ 8147WandExport MagickBooleanType MagickRandomThresholdImage(MagickWand *wand, 8148 const double low,const double high) 8149{ 8150 char 8151 threshold[MagickPathExtent]; 8152 8153 assert(wand != (MagickWand *) NULL); 8154 assert(wand->signature == MagickWandSignature); 8155 if (wand->debug != MagickFalse) 8156 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8157 if (wand->images == (Image *) NULL) 8158 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8159 (void) FormatLocaleString(threshold,MagickPathExtent,"%gx%g",low,high); 8160 return(RandomThresholdImage(wand->images,threshold,wand->exception)); 8161} 8162 8163/* 8164%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8165% % 8166% % 8167% % 8168% M a g i c k R e a d I m a g e % 8169% % 8170% % 8171% % 8172%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8173% 8174% MagickReadImage() reads an image or image sequence. The images are inserted 8175% jjust before the current image pointer position. 8176% 8177% Use MagickSetFirstIterator(), to insert new images before all the current 8178% images in the wand, MagickSetLastIterator() to append add to the end, 8179% MagickSetIteratorIndex() to place images just after the given index. 8180% 8181% The format of the MagickReadImage method is: 8182% 8183% MagickBooleanType MagickReadImage(MagickWand *wand,const char *filename) 8184% 8185% A description of each parameter follows: 8186% 8187% o wand: the magick wand. 8188% 8189% o filename: the image filename. 8190% 8191*/ 8192WandExport MagickBooleanType MagickReadImage(MagickWand *wand, 8193 const char *filename) 8194{ 8195 Image 8196 *images; 8197 8198 ImageInfo 8199 *read_info; 8200 8201 assert(wand != (MagickWand *) NULL); 8202 assert(wand->signature == MagickWandSignature); 8203 if (wand->debug != MagickFalse) 8204 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8205 read_info=CloneImageInfo(wand->image_info); 8206 if (filename != (const char *) NULL) 8207 (void) CopyMagickString(read_info->filename,filename,MagickPathExtent); 8208 images=ReadImage(read_info,wand->exception); 8209 read_info=DestroyImageInfo(read_info); 8210 if (images == (Image *) NULL) 8211 return(MagickFalse); 8212 return(InsertImageInWand(wand,images)); 8213} 8214 8215/* 8216%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8217% % 8218% % 8219% % 8220% M a g i c k R e a d I m a g e B l o b % 8221% % 8222% % 8223% % 8224%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8225% 8226% MagickReadImageBlob() reads an image or image sequence from a blob. 8227% In all other respects it is like MagickReadImage(). 8228% 8229% The format of the MagickReadImageBlob method is: 8230% 8231% MagickBooleanType MagickReadImageBlob(MagickWand *wand, 8232% const void *blob,const size_t length) 8233% 8234% A description of each parameter follows: 8235% 8236% o wand: the magick wand. 8237% 8238% o blob: the blob. 8239% 8240% o length: the blob length. 8241% 8242*/ 8243WandExport MagickBooleanType MagickReadImageBlob(MagickWand *wand, 8244 const void *blob,const size_t length) 8245{ 8246 Image 8247 *images; 8248 8249 assert(wand != (MagickWand *) NULL); 8250 assert(wand->signature == MagickWandSignature); 8251 if (wand->debug != MagickFalse) 8252 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8253 images=BlobToImage(wand->image_info,blob,length,wand->exception); 8254 if (images == (Image *) NULL) 8255 return(MagickFalse); 8256 return(InsertImageInWand(wand,images)); 8257} 8258 8259/* 8260%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8261% % 8262% % 8263% % 8264% M a g i c k R e a d I m a g e F i l e % 8265% % 8266% % 8267% % 8268%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8269% 8270% MagickReadImageFile() reads an image or image sequence from an already 8271% opened file descriptor. Otherwise it is like MagickReadImage(). 8272% 8273% The format of the MagickReadImageFile method is: 8274% 8275% MagickBooleanType MagickReadImageFile(MagickWand *wand,FILE *file) 8276% 8277% A description of each parameter follows: 8278% 8279% o wand: the magick wand. 8280% 8281% o file: the file descriptor. 8282% 8283*/ 8284WandExport MagickBooleanType MagickReadImageFile(MagickWand *wand,FILE *file) 8285{ 8286 Image 8287 *images; 8288 8289 ImageInfo 8290 *read_info; 8291 8292 assert(wand != (MagickWand *) NULL); 8293 assert(wand->signature == MagickWandSignature); 8294 assert(file != (FILE *) NULL); 8295 if (wand->debug != MagickFalse) 8296 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8297 read_info=CloneImageInfo(wand->image_info); 8298 SetImageInfoFile(read_info,file); 8299 images=ReadImage(read_info,wand->exception); 8300 read_info=DestroyImageInfo(read_info); 8301 if (images == (Image *) NULL) 8302 return(MagickFalse); 8303 return(InsertImageInWand(wand,images)); 8304} 8305 8306/* 8307%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8308% % 8309% % 8310% % 8311% M a g i c k R e m a p I m a g e % 8312% % 8313% % 8314% % 8315%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8316% 8317% MagickRemapImage() replaces the colors of an image with the closest color 8318% from a reference image. 8319% 8320% The format of the MagickRemapImage method is: 8321% 8322% MagickBooleanType MagickRemapImage(MagickWand *wand, 8323% const MagickWand *remap_wand,const DitherMethod method) 8324% 8325% A description of each parameter follows: 8326% 8327% o wand: the magick wand. 8328% 8329% o affinity: the affinity wand. 8330% 8331% o method: choose from these dither methods: NoDitherMethod, 8332% RiemersmaDitherMethod, or FloydSteinbergDitherMethod. 8333% 8334*/ 8335WandExport MagickBooleanType MagickRemapImage(MagickWand *wand, 8336 const MagickWand *remap_wand,const DitherMethod dither_method) 8337{ 8338 MagickBooleanType 8339 status; 8340 8341 QuantizeInfo 8342 *quantize_info; 8343 8344 assert(wand != (MagickWand *) NULL); 8345 assert(wand->signature == MagickWandSignature); 8346 if (wand->debug != MagickFalse) 8347 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8348 if ((wand->images == (Image *) NULL) || 8349 (remap_wand->images == (Image *) NULL)) 8350 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8351 quantize_info=AcquireQuantizeInfo(wand->image_info); 8352 quantize_info->dither_method=dither_method; 8353 status=RemapImage(quantize_info,wand->images,remap_wand->images, 8354 wand->exception); 8355 quantize_info=DestroyQuantizeInfo(quantize_info); 8356 return(status); 8357} 8358 8359/* 8360%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8361% % 8362% % 8363% % 8364% M a g i c k R e m o v e I m a g e % 8365% % 8366% % 8367% % 8368%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8369% 8370% MagickRemoveImage() removes an image from the image list. 8371% 8372% The format of the MagickRemoveImage method is: 8373% 8374% MagickBooleanType MagickRemoveImage(MagickWand *wand) 8375% 8376% A description of each parameter follows: 8377% 8378% o wand: the magick wand. 8379% 8380% o insert: the splice wand. 8381% 8382*/ 8383WandExport MagickBooleanType MagickRemoveImage(MagickWand *wand) 8384{ 8385 assert(wand != (MagickWand *) NULL); 8386 assert(wand->signature == MagickWandSignature); 8387 if (wand->debug != MagickFalse) 8388 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8389 if (wand->images == (Image *) NULL) 8390 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8391 DeleteImageFromList(&wand->images); 8392 return(MagickTrue); 8393} 8394 8395/* 8396%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8397% % 8398% % 8399% % 8400% M a g i c k R e s a m p l e I m a g e % 8401% % 8402% % 8403% % 8404%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8405% 8406% MagickResampleImage() resample image to desired resolution. 8407% 8408% Bessel Blackman Box 8409% Catrom Cubic Gaussian 8410% Hanning Hermite Lanczos 8411% Mitchell Point Quandratic 8412% Sinc Triangle 8413% 8414% Most of the filters are FIR (finite impulse response), however, Bessel, 8415% Gaussian, and Sinc are IIR (infinite impulse response). Bessel and Sinc 8416% are windowed (brought down to zero) with the Blackman filter. 8417% 8418% The format of the MagickResampleImage method is: 8419% 8420% MagickBooleanType MagickResampleImage(MagickWand *wand, 8421% const double x_resolution,const double y_resolution, 8422% const FilterType filter) 8423% 8424% A description of each parameter follows: 8425% 8426% o wand: the magick wand. 8427% 8428% o x_resolution: the new image x resolution. 8429% 8430% o y_resolution: the new image y resolution. 8431% 8432% o filter: Image filter to use. 8433% 8434*/ 8435WandExport MagickBooleanType MagickResampleImage(MagickWand *wand, 8436 const double x_resolution,const double y_resolution,const FilterType filter) 8437{ 8438 Image 8439 *resample_image; 8440 8441 assert(wand != (MagickWand *) NULL); 8442 assert(wand->signature == MagickWandSignature); 8443 if (wand->debug != MagickFalse) 8444 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8445 if (wand->images == (Image *) NULL) 8446 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8447 resample_image=ResampleImage(wand->images,x_resolution,y_resolution,filter, 8448 wand->exception); 8449 if (resample_image == (Image *) NULL) 8450 return(MagickFalse); 8451 ReplaceImageInList(&wand->images,resample_image); 8452 return(MagickTrue); 8453} 8454 8455/* 8456%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8457% % 8458% % 8459% % 8460% M a g i c k R e s e t I m a g e P a g e % 8461% % 8462% % 8463% % 8464%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8465% 8466% MagickResetImagePage() resets the Wand page canvas and position. 8467% 8468% The format of the MagickResetImagePage method is: 8469% 8470% MagickBooleanType MagickResetImagePage(MagickWand *wand, 8471% const char *page) 8472% 8473% A description of each parameter follows: 8474% 8475% o wand: the magick wand. 8476% 8477% o page: the relative page specification. 8478% 8479*/ 8480WandExport MagickBooleanType MagickResetImagePage(MagickWand *wand, 8481 const char *page) 8482{ 8483 assert(wand != (MagickWand *) NULL); 8484 assert(wand->signature == MagickWandSignature); 8485 if (wand->debug != MagickFalse) 8486 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8487 if (wand->images == (Image *) NULL) 8488 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8489 if ((page == (char *) NULL) || (*page == '\0')) 8490 { 8491 (void) ParseAbsoluteGeometry("0x0+0+0",&wand->images->page); 8492 return(MagickTrue); 8493 } 8494 return(ResetImagePage(wand->images,page)); 8495} 8496 8497/* 8498%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8499% % 8500% % 8501% % 8502% M a g i c k R e s i z e I m a g e % 8503% % 8504% % 8505% % 8506%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8507% 8508% MagickResizeImage() scales an image to the desired dimensions with one of 8509% these filters: 8510% 8511% Bessel Blackman Box 8512% Catrom Cubic Gaussian 8513% Hanning Hermite Lanczos 8514% Mitchell Point Quandratic 8515% Sinc Triangle 8516% 8517% Most of the filters are FIR (finite impulse response), however, Bessel, 8518% Gaussian, and Sinc are IIR (infinite impulse response). Bessel and Sinc 8519% are windowed (brought down to zero) with the Blackman filter. 8520% 8521% The format of the MagickResizeImage method is: 8522% 8523% MagickBooleanType MagickResizeImage(MagickWand *wand, 8524% const size_t columns,const size_t rows,const FilterType filter) 8525% 8526% A description of each parameter follows: 8527% 8528% o wand: the magick wand. 8529% 8530% o columns: the number of columns in the scaled image. 8531% 8532% o rows: the number of rows in the scaled image. 8533% 8534% o filter: Image filter to use. 8535% 8536*/ 8537WandExport MagickBooleanType MagickResizeImage(MagickWand *wand, 8538 const size_t columns,const size_t rows,const FilterType filter) 8539{ 8540 Image 8541 *resize_image; 8542 8543 assert(wand != (MagickWand *) NULL); 8544 assert(wand->signature == MagickWandSignature); 8545 if (wand->debug != MagickFalse) 8546 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8547 if (wand->images == (Image *) NULL) 8548 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8549 resize_image=ResizeImage(wand->images,columns,rows,filter,wand->exception); 8550 if (resize_image == (Image *) NULL) 8551 return(MagickFalse); 8552 ReplaceImageInList(&wand->images,resize_image); 8553 return(MagickTrue); 8554} 8555 8556/* 8557%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8558% % 8559% % 8560% % 8561% M a g i c k R o l l I m a g e % 8562% % 8563% % 8564% % 8565%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8566% 8567% MagickRollImage() offsets an image as defined by x and y. 8568% 8569% The format of the MagickRollImage method is: 8570% 8571% MagickBooleanType MagickRollImage(MagickWand *wand,const ssize_t x, 8572% const size_t y) 8573% 8574% A description of each parameter follows: 8575% 8576% o wand: the magick wand. 8577% 8578% o x: the x offset. 8579% 8580% o y: the y offset. 8581% 8582% 8583*/ 8584WandExport MagickBooleanType MagickRollImage(MagickWand *wand, 8585 const ssize_t x,const ssize_t y) 8586{ 8587 Image 8588 *roll_image; 8589 8590 assert(wand != (MagickWand *) NULL); 8591 assert(wand->signature == MagickWandSignature); 8592 if (wand->debug != MagickFalse) 8593 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8594 if (wand->images == (Image *) NULL) 8595 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8596 roll_image=RollImage(wand->images,x,y,wand->exception); 8597 if (roll_image == (Image *) NULL) 8598 return(MagickFalse); 8599 ReplaceImageInList(&wand->images,roll_image); 8600 return(MagickTrue); 8601} 8602 8603/* 8604%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8605% % 8606% % 8607% % 8608% M a g i c k R o t a t e I m a g e % 8609% % 8610% % 8611% % 8612%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8613% 8614% MagickRotateImage() rotates an image the specified number of degrees. Empty 8615% triangles left over from rotating the image are filled with the 8616% background color. 8617% 8618% The format of the MagickRotateImage method is: 8619% 8620% MagickBooleanType MagickRotateImage(MagickWand *wand, 8621% const PixelWand *background,const double degrees) 8622% 8623% A description of each parameter follows: 8624% 8625% o wand: the magick wand. 8626% 8627% o background: the background pixel wand. 8628% 8629% o degrees: the number of degrees to rotate the image. 8630% 8631% 8632*/ 8633WandExport MagickBooleanType MagickRotateImage(MagickWand *wand, 8634 const PixelWand *background,const double degrees) 8635{ 8636 Image 8637 *rotate_image; 8638 8639 assert(wand != (MagickWand *) NULL); 8640 assert(wand->signature == MagickWandSignature); 8641 if (wand->debug != MagickFalse) 8642 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8643 if (wand->images == (Image *) NULL) 8644 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8645 PixelGetQuantumPacket(background,&wand->images->background_color); 8646 rotate_image=RotateImage(wand->images,degrees,wand->exception); 8647 if (rotate_image == (Image *) NULL) 8648 return(MagickFalse); 8649 ReplaceImageInList(&wand->images,rotate_image); 8650 return(MagickTrue); 8651} 8652 8653/* 8654%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8655% % 8656% % 8657% % 8658% M a g i c k S a m p l e I m a g e % 8659% % 8660% % 8661% % 8662%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8663% 8664% MagickSampleImage() scales an image to the desired dimensions with pixel 8665% sampling. Unlike other scaling methods, this method does not introduce 8666% any additional color into the scaled image. 8667% 8668% The format of the MagickSampleImage method is: 8669% 8670% MagickBooleanType MagickSampleImage(MagickWand *wand, 8671% const size_t columns,const size_t rows) 8672% 8673% A description of each parameter follows: 8674% 8675% o wand: the magick wand. 8676% 8677% o columns: the number of columns in the scaled image. 8678% 8679% o rows: the number of rows in the scaled image. 8680% 8681% 8682*/ 8683WandExport MagickBooleanType MagickSampleImage(MagickWand *wand, 8684 const size_t columns,const size_t rows) 8685{ 8686 Image 8687 *sample_image; 8688 8689 assert(wand != (MagickWand *) NULL); 8690 assert(wand->signature == MagickWandSignature); 8691 if (wand->debug != MagickFalse) 8692 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8693 if (wand->images == (Image *) NULL) 8694 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8695 sample_image=SampleImage(wand->images,columns,rows,wand->exception); 8696 if (sample_image == (Image *) NULL) 8697 return(MagickFalse); 8698 ReplaceImageInList(&wand->images,sample_image); 8699 return(MagickTrue); 8700} 8701 8702/* 8703%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8704% % 8705% % 8706% % 8707% M a g i c k S c a l e I m a g e % 8708% % 8709% % 8710% % 8711%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8712% 8713% MagickScaleImage() scales the size of an image to the given dimensions. 8714% 8715% The format of the MagickScaleImage method is: 8716% 8717% MagickBooleanType MagickScaleImage(MagickWand *wand, 8718% const size_t columns,const size_t rows) 8719% 8720% A description of each parameter follows: 8721% 8722% o wand: the magick wand. 8723% 8724% o columns: the number of columns in the scaled image. 8725% 8726% o rows: the number of rows in the scaled image. 8727% 8728% 8729*/ 8730WandExport MagickBooleanType MagickScaleImage(MagickWand *wand, 8731 const size_t columns,const size_t rows) 8732{ 8733 Image 8734 *scale_image; 8735 8736 assert(wand != (MagickWand *) NULL); 8737 assert(wand->signature == MagickWandSignature); 8738 if (wand->debug != MagickFalse) 8739 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8740 if (wand->images == (Image *) NULL) 8741 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8742 scale_image=ScaleImage(wand->images,columns,rows,wand->exception); 8743 if (scale_image == (Image *) NULL) 8744 return(MagickFalse); 8745 ReplaceImageInList(&wand->images,scale_image); 8746 return(MagickTrue); 8747} 8748 8749/* 8750%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8751% % 8752% % 8753% % 8754% M a g i c k S e g m e n t I m a g e % 8755% % 8756% % 8757% % 8758%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8759% 8760% MagickSegmentImage() segments an image by analyzing the histograms of the 8761% color components and identifying units that are homogeneous with the fuzzy 8762% C-means technique. 8763% 8764% The format of the SegmentImage method is: 8765% 8766% MagickBooleanType MagickSegmentImage(MagickWand *wand, 8767% const ColorspaceType colorspace,const MagickBooleanType verbose, 8768% const double cluster_threshold,const double smooth_threshold) 8769% 8770% A description of each parameter follows. 8771% 8772% o wand: the wand. 8773% 8774% o colorspace: the image colorspace. 8775% 8776% o verbose: Set to MagickTrue to print detailed information about the 8777% identified classes. 8778% 8779% o cluster_threshold: This represents the minimum number of pixels 8780% contained in a hexahedra before it can be considered valid (expressed as 8781% a percentage). 8782% 8783% o smooth_threshold: the smoothing threshold eliminates noise in the second 8784% derivative of the histogram. As the value is increased, you can expect a 8785% smoother second derivative. 8786% 8787*/ 8788MagickExport MagickBooleanType MagickSegmentImage(MagickWand *wand, 8789 const ColorspaceType colorspace,const MagickBooleanType verbose, 8790 const double cluster_threshold,const double smooth_threshold) 8791{ 8792 MagickBooleanType 8793 status; 8794 8795 assert(wand != (MagickWand *) NULL); 8796 assert(wand->signature == MagickWandSignature); 8797 if (wand->debug != MagickFalse) 8798 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8799 if (wand->images == (Image *) NULL) 8800 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8801 status=SegmentImage(wand->images,colorspace,verbose,cluster_threshold, 8802 smooth_threshold,wand->exception); 8803 return(status); 8804} 8805 8806/* 8807%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8808% % 8809% % 8810% % 8811% M a g i c k S e l e c t i v e B l u r I m a g e % 8812% % 8813% % 8814% % 8815%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8816% 8817% MagickSelectiveBlurImage() selectively blur an image within a contrast 8818% threshold. It is similar to the unsharpen mask that sharpens everything with 8819% contrast above a certain threshold. 8820% 8821% The format of the MagickSelectiveBlurImage method is: 8822% 8823% MagickBooleanType MagickSelectiveBlurImage(MagickWand *wand, 8824% const double radius,const double sigma,const double threshold) 8825% 8826% A description of each parameter follows: 8827% 8828% o wand: the magick wand. 8829% 8830% o radius: the radius of the gaussian, in pixels, not counting the center 8831% pixel. 8832% 8833% o sigma: the standard deviation of the gaussian, in pixels. 8834% 8835% o threshold: only pixels within this contrast threshold are included 8836% in the blur operation. 8837% 8838*/ 8839WandExport MagickBooleanType MagickSelectiveBlurImage(MagickWand *wand, 8840 const double radius,const double sigma,const double threshold) 8841{ 8842 Image 8843 *blur_image; 8844 8845 assert(wand != (MagickWand *) NULL); 8846 assert(wand->signature == MagickWandSignature); 8847 if (wand->debug != MagickFalse) 8848 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8849 if (wand->images == (Image *) NULL) 8850 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8851 blur_image=SelectiveBlurImage(wand->images,radius,sigma,threshold, 8852 wand->exception); 8853 if (blur_image == (Image *) NULL) 8854 return(MagickFalse); 8855 ReplaceImageInList(&wand->images,blur_image); 8856 return(MagickTrue); 8857} 8858 8859/* 8860%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8861% % 8862% % 8863% % 8864% 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 % 8865% % 8866% % 8867% % 8868%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8869% 8870% MagickSeparateImage() separates a channel from the image and returns a 8871% grayscale image. A channel is a particular color component of each pixel 8872% in the image. 8873% 8874% The format of the MagickSeparateImage method is: 8875% 8876% MagickBooleanType MagickSeparateImage(MagickWand *wand, 8877% const ChannelType channel) 8878% 8879% A description of each parameter follows: 8880% 8881% o wand: the magick wand. 8882% 8883% o channel: the channel. 8884% 8885*/ 8886WandExport MagickBooleanType MagickSeparateImage(MagickWand *wand, 8887 const ChannelType channel) 8888{ 8889 Image 8890 *separate_image; 8891 8892 assert(wand != (MagickWand *) NULL); 8893 assert(wand->signature == MagickWandSignature); 8894 if (wand->debug != MagickFalse) 8895 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8896 if (wand->images == (Image *) NULL) 8897 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8898 separate_image=SeparateImage(wand->images,channel,wand->exception); 8899 if (separate_image == (Image *) NULL) 8900 return(MagickFalse); 8901 ReplaceImageInList(&wand->images,separate_image); 8902 return(MagickTrue); 8903} 8904 8905/* 8906%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8907% % 8908% % 8909% % 8910% M a g i c k S e p i a T o n e I m a g e % 8911% % 8912% % 8913% % 8914%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8915% 8916% MagickSepiaToneImage() applies a special effect to the image, similar to the 8917% effect achieved in a photo darkroom by sepia toning. Threshold ranges from 8918% 0 to QuantumRange and is a measure of the extent of the sepia toning. A 8919% threshold of 80% is a good starting point for a reasonable tone. 8920% 8921% The format of the MagickSepiaToneImage method is: 8922% 8923% MagickBooleanType MagickSepiaToneImage(MagickWand *wand, 8924% const double threshold) 8925% 8926% A description of each parameter follows: 8927% 8928% o wand: the magick wand. 8929% 8930% o threshold: Define the extent of the sepia toning. 8931% 8932*/ 8933WandExport MagickBooleanType MagickSepiaToneImage(MagickWand *wand, 8934 const double threshold) 8935{ 8936 Image 8937 *sepia_image; 8938 8939 assert(wand != (MagickWand *) NULL); 8940 assert(wand->signature == MagickWandSignature); 8941 if (wand->debug != MagickFalse) 8942 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8943 if (wand->images == (Image *) NULL) 8944 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8945 sepia_image=SepiaToneImage(wand->images,threshold,wand->exception); 8946 if (sepia_image == (Image *) NULL) 8947 return(MagickFalse); 8948 ReplaceImageInList(&wand->images,sepia_image); 8949 return(MagickTrue); 8950} 8951 8952/* 8953%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8954% % 8955% % 8956% % 8957% M a g i c k S e t I m a g e % 8958% % 8959% % 8960% % 8961%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8962% 8963% MagickSetImage() replaces the last image returned by MagickSetIteratorIndex(), 8964% MagickNextImage(), MagickPreviousImage() with the images from the specified 8965% wand. 8966% 8967% The format of the MagickSetImage method is: 8968% 8969% MagickBooleanType MagickSetImage(MagickWand *wand, 8970% const MagickWand *set_wand) 8971% 8972% A description of each parameter follows: 8973% 8974% o wand: the magick wand. 8975% 8976% o set_wand: the set_wand wand. 8977% 8978*/ 8979WandExport MagickBooleanType MagickSetImage(MagickWand *wand, 8980 const MagickWand *set_wand) 8981{ 8982 Image 8983 *images; 8984 8985 assert(wand != (MagickWand *) NULL); 8986 assert(wand->signature == MagickWandSignature); 8987 if (wand->debug != MagickFalse) 8988 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8989 assert(set_wand != (MagickWand *) NULL); 8990 assert(set_wand->signature == MagickWandSignature); 8991 if (wand->debug != MagickFalse) 8992 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",set_wand->name); 8993 if (set_wand->images == (Image *) NULL) 8994 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8995 images=CloneImageList(set_wand->images,wand->exception); 8996 if (images == (Image *) NULL) 8997 return(MagickFalse); 8998 ReplaceImageInList(&wand->images,images); 8999 return(MagickTrue); 9000} 9001 9002/* 9003%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9004% % 9005% % 9006% % 9007% 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 % 9008% % 9009% % 9010% % 9011%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9012% 9013% MagickSetImageAlphaChannel() activates, deactivates, resets, or sets the 9014% alpha channel. 9015% 9016% The format of the MagickSetImageAlphaChannel method is: 9017% 9018% MagickBooleanType MagickSetImageAlphaChannel(MagickWand *wand, 9019% const AlphaChannelOption alpha_type) 9020% 9021% A description of each parameter follows: 9022% 9023% o wand: the magick wand. 9024% 9025% o alpha_type: the alpha channel type: ActivateAlphaChannel, 9026% DeactivateAlphaChannel, OpaqueAlphaChannel, or SetAlphaChannel. 9027% 9028*/ 9029WandExport MagickBooleanType MagickSetImageAlphaChannel(MagickWand *wand, 9030 const AlphaChannelOption alpha_type) 9031{ 9032 assert(wand != (MagickWand *) NULL); 9033 assert(wand->signature == MagickWandSignature); 9034 if (wand->debug != MagickFalse) 9035 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9036 if (wand->images == (Image *) NULL) 9037 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9038 return(SetImageAlphaChannel(wand->images,alpha_type,wand->exception)); 9039} 9040 9041/* 9042%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9043% % 9044% % 9045% % 9046% M a g i c k S e t I m a g e A l p h a C o l o r % 9047% % 9048% % 9049% % 9050%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9051% 9052% MagickSetImageAlphaColor() sets the image alpha color. 9053% 9054% The format of the MagickSetImageAlphaColor method is: 9055% 9056% MagickBooleanType MagickSetImageAlphaColor(MagickWand *wand, 9057% const PixelWand *matte) 9058% 9059% A description of each parameter follows: 9060% 9061% o wand: the magick wand. 9062% 9063% o matte: the alpha pixel wand. 9064% 9065*/ 9066WandExport MagickBooleanType MagickSetImageAlphaColor(MagickWand *wand, 9067 const PixelWand *alpha) 9068{ 9069 assert(wand != (MagickWand *)NULL); 9070 assert(wand->signature == MagickWandSignature); 9071 if (wand->debug != MagickFalse) 9072 (void) LogMagickEvent(WandEvent, GetMagickModule(), "%s", wand->name); 9073 if (wand->images == (Image *)NULL) 9074 ThrowWandException(WandError, "ContainsNoImages", wand->name); 9075 PixelGetQuantumPacket(alpha, &wand->images->alpha_color); 9076 return(MagickTrue); 9077} 9078 9079/* 9080%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9081% % 9082% % 9083% % 9084% 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 % 9085% % 9086% % 9087% % 9088%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9089% 9090% MagickSetImageBackgroundColor() sets the image background color. 9091% 9092% The format of the MagickSetImageBackgroundColor method is: 9093% 9094% MagickBooleanType MagickSetImageBackgroundColor(MagickWand *wand, 9095% const PixelWand *background) 9096% 9097% A description of each parameter follows: 9098% 9099% o wand: the magick wand. 9100% 9101% o background: the background pixel wand. 9102% 9103*/ 9104WandExport MagickBooleanType MagickSetImageBackgroundColor(MagickWand *wand, 9105 const PixelWand *background) 9106{ 9107 assert(wand != (MagickWand *) NULL); 9108 assert(wand->signature == MagickWandSignature); 9109 if (wand->debug != MagickFalse) 9110 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9111 if (wand->images == (Image *) NULL) 9112 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9113 PixelGetQuantumPacket(background,&wand->images->background_color); 9114 return(MagickTrue); 9115} 9116 9117/* 9118%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9119% % 9120% % 9121% % 9122% 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 % 9123% % 9124% % 9125% % 9126%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9127% 9128% MagickSetImageBluePrimary() sets the image chromaticity blue primary point. 9129% 9130% The format of the MagickSetImageBluePrimary method is: 9131% 9132% MagickBooleanType MagickSetImageBluePrimary(MagickWand *wand, 9133% const double x,const double y,const double z) 9134% 9135% A description of each parameter follows: 9136% 9137% o wand: the magick wand. 9138% 9139% o x: the blue primary x-point. 9140% 9141% o y: the blue primary y-point. 9142% 9143% o z: the blue primary z-point. 9144% 9145*/ 9146WandExport MagickBooleanType MagickSetImageBluePrimary(MagickWand *wand, 9147 const double x,const double y,const double z) 9148{ 9149 assert(wand != (MagickWand *) NULL); 9150 assert(wand->signature == MagickWandSignature); 9151 if (wand->debug != MagickFalse) 9152 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9153 if (wand->images == (Image *) NULL) 9154 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9155 wand->images->chromaticity.blue_primary.x=x; 9156 wand->images->chromaticity.blue_primary.y=y; 9157 wand->images->chromaticity.blue_primary.z=z; 9158 return(MagickTrue); 9159} 9160 9161/* 9162%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9163% % 9164% % 9165% % 9166% 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 % 9167% % 9168% % 9169% % 9170%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9171% 9172% MagickSetImageBorderColor() sets the image border color. 9173% 9174% The format of the MagickSetImageBorderColor method is: 9175% 9176% MagickBooleanType MagickSetImageBorderColor(MagickWand *wand, 9177% const PixelWand *border) 9178% 9179% A description of each parameter follows: 9180% 9181% o wand: the magick wand. 9182% 9183% o border: the border pixel wand. 9184% 9185*/ 9186WandExport MagickBooleanType MagickSetImageBorderColor(MagickWand *wand, 9187 const PixelWand *border) 9188{ 9189 assert(wand != (MagickWand *) NULL); 9190 assert(wand->signature == MagickWandSignature); 9191 if (wand->debug != MagickFalse) 9192 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9193 if (wand->images == (Image *) NULL) 9194 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9195 PixelGetQuantumPacket(border,&wand->images->border_color); 9196 return(MagickTrue); 9197} 9198 9199/* 9200%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9201% % 9202% % 9203% % 9204% M a g i c k S e t I m a g e C h a n n e l M a s k % 9205% % 9206% % 9207% % 9208%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9209% 9210% MagickSetImageChannelMask() sets image channel mask. 9211% 9212% The format of the MagickSetImageChannelMask method is: 9213% 9214% ChannelType MagickSetImageChannelMask(MagickWand *wand, 9215% const ChannelType channel_mask) 9216% 9217% A description of each parameter follows: 9218% 9219% o wand: the magick wand. 9220% 9221% o channel_mask: the channel_mask wand. 9222% 9223*/ 9224WandExport ChannelType MagickSetImageChannelMask(MagickWand *wand, 9225 const ChannelType channel_mask) 9226{ 9227 assert(wand != (MagickWand *) NULL); 9228 assert(wand->signature == MagickWandSignature); 9229 if (wand->debug != MagickFalse) 9230 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9231 return(SetImageChannelMask(wand->images,channel_mask)); 9232} 9233 9234/* 9235%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9236% % 9237% % 9238% % 9239% M a g i c k S e t I m a g e M a s k % 9240% % 9241% % 9242% % 9243%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9244% 9245% MagickSetImageMask() sets image clip mask. 9246% 9247% The format of the MagickSetImageMask method is: 9248% 9249% MagickBooleanType MagickSetImageMask(MagickWand *wand, 9250% const PixelMask type,const MagickWand *clip_mask) 9251% 9252% A description of each parameter follows: 9253% 9254% o wand: the magick wand. 9255% 9256% o type: type of mask, ReadPixelMask or WritePixelMask. 9257% 9258% o clip_mask: the clip_mask wand. 9259% 9260*/ 9261WandExport MagickBooleanType MagickSetImageMask(MagickWand *wand, 9262 const PixelMask type,const MagickWand *clip_mask) 9263{ 9264 assert(wand != (MagickWand *) NULL); 9265 assert(wand->signature == MagickWandSignature); 9266 if (wand->debug != MagickFalse) 9267 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9268 assert(clip_mask != (MagickWand *) NULL); 9269 assert(clip_mask->signature == MagickWandSignature); 9270 if (clip_mask->debug != MagickFalse) 9271 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",clip_mask->name); 9272 if (clip_mask->images == (Image *) NULL) 9273 ThrowWandException(WandError,"ContainsNoImages",clip_mask->name); 9274 return(SetImageMask(wand->images,type,clip_mask->images,wand->exception)); 9275} 9276 9277/* 9278%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9279% % 9280% % 9281% % 9282% M a g i c k S e t I m a g e C o l o r % 9283% % 9284% % 9285% % 9286%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9287% 9288% MagickSetImageColor() set the entire wand canvas to the specified color. 9289% 9290% The format of the MagickSetImageColor method is: 9291% 9292% MagickBooleanType MagickSetImageColor(MagickWand *wand, 9293% const PixelWand *color) 9294% 9295% A description of each parameter follows: 9296% 9297% o wand: the magick wand. 9298% 9299% o background: the image color. 9300% 9301*/ 9302WandExport MagickBooleanType MagickSetImageColor(MagickWand *wand, 9303 const PixelWand *color) 9304{ 9305 PixelInfo 9306 pixel; 9307 9308 assert(wand != (MagickWand *) NULL); 9309 assert(wand->signature == MagickWandSignature); 9310 if (wand->debug != MagickFalse) 9311 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9312 PixelGetMagickColor(color,&pixel); 9313 return(SetImageColor(wand->images,&pixel,wand->exception)); 9314} 9315 9316/* 9317%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9318% % 9319% % 9320% % 9321% 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 % 9322% % 9323% % 9324% % 9325%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9326% 9327% MagickSetImageColormapColor() sets the color of the specified colormap 9328% index. 9329% 9330% The format of the MagickSetImageColormapColor method is: 9331% 9332% MagickBooleanType MagickSetImageColormapColor(MagickWand *wand, 9333% const size_t index,const PixelWand *color) 9334% 9335% A description of each parameter follows: 9336% 9337% o wand: the magick wand. 9338% 9339% o index: the offset into the image colormap. 9340% 9341% o color: Return the colormap color in this wand. 9342% 9343*/ 9344WandExport MagickBooleanType MagickSetImageColormapColor(MagickWand *wand, 9345 const size_t index,const PixelWand *color) 9346{ 9347 assert(wand != (MagickWand *) NULL); 9348 assert(wand->signature == MagickWandSignature); 9349 if (wand->debug != MagickFalse) 9350 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9351 if (wand->images == (Image *) NULL) 9352 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9353 if ((wand->images->colormap == (PixelInfo *) NULL) || 9354 (index >= wand->images->colors)) 9355 ThrowWandException(WandError,"InvalidColormapIndex",wand->name); 9356 PixelGetQuantumPacket(color,wand->images->colormap+index); 9357 return(SyncImage(wand->images,wand->exception)); 9358} 9359 9360/* 9361%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9362% % 9363% % 9364% % 9365% M a g i c k S e t I m a g e C o l o r s p a c e % 9366% % 9367% % 9368% % 9369%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9370% 9371% MagickSetImageColorspace() sets the image colorspace. But does not modify 9372% the image data. 9373% 9374% The format of the MagickSetImageColorspace method is: 9375% 9376% MagickBooleanType MagickSetImageColorspace(MagickWand *wand, 9377% const ColorspaceType colorspace) 9378% 9379% A description of each parameter follows: 9380% 9381% o wand: the magick wand. 9382% 9383% o colorspace: the image colorspace: UndefinedColorspace, RGBColorspace, 9384% GRAYColorspace, TransparentColorspace, OHTAColorspace, XYZColorspace, 9385% YCbCrColorspace, YCCColorspace, YIQColorspace, YPbPrColorspace, 9386% YPbPrColorspace, YUVColorspace, CMYKColorspace, sRGBColorspace, 9387% HSLColorspace, or HWBColorspace. 9388% 9389*/ 9390WandExport MagickBooleanType MagickSetImageColorspace(MagickWand *wand, 9391 const ColorspaceType colorspace) 9392{ 9393 assert(wand != (MagickWand *) NULL); 9394 assert(wand->signature == MagickWandSignature); 9395 if (wand->debug != MagickFalse) 9396 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9397 if (wand->images == (Image *) NULL) 9398 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9399 return(SetImageColorspace(wand->images,colorspace,wand->exception)); 9400} 9401 9402/* 9403%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9404% % 9405% % 9406% % 9407% M a g i c k S e t I m a g e C o m p o s e % 9408% % 9409% % 9410% % 9411%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9412% 9413% MagickSetImageCompose() sets the image composite operator, useful for 9414% specifying how to composite the image thumbnail when using the 9415% MagickMontageImage() method. 9416% 9417% The format of the MagickSetImageCompose method is: 9418% 9419% MagickBooleanType MagickSetImageCompose(MagickWand *wand, 9420% const CompositeOperator compose) 9421% 9422% A description of each parameter follows: 9423% 9424% o wand: the magick wand. 9425% 9426% o compose: the image composite operator. 9427% 9428*/ 9429WandExport MagickBooleanType MagickSetImageCompose(MagickWand *wand, 9430 const CompositeOperator compose) 9431{ 9432 assert(wand != (MagickWand *) NULL); 9433 assert(wand->signature == MagickWandSignature); 9434 if (wand->debug != MagickFalse) 9435 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9436 if (wand->images == (Image *) NULL) 9437 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9438 wand->images->compose=compose; 9439 return(MagickTrue); 9440} 9441 9442/* 9443%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9444% % 9445% % 9446% % 9447% 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 % 9448% % 9449% % 9450% % 9451%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9452% 9453% MagickSetImageCompression() sets the image compression. 9454% 9455% The format of the MagickSetImageCompression method is: 9456% 9457% MagickBooleanType MagickSetImageCompression(MagickWand *wand, 9458% const CompressionType compression) 9459% 9460% A description of each parameter follows: 9461% 9462% o wand: the magick wand. 9463% 9464% o compression: the image compression type. 9465% 9466*/ 9467WandExport MagickBooleanType MagickSetImageCompression(MagickWand *wand, 9468 const CompressionType compression) 9469{ 9470 assert(wand != (MagickWand *) NULL); 9471 assert(wand->signature == MagickWandSignature); 9472 if (wand->debug != MagickFalse) 9473 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9474 if (wand->images == (Image *) NULL) 9475 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9476 wand->images->compression=compression; 9477 return(MagickTrue); 9478} 9479 9480/* 9481%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9482% % 9483% % 9484% % 9485% 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 % 9486% % 9487% % 9488% % 9489%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9490% 9491% MagickSetImageCompressionQuality() sets the image compression quality. 9492% 9493% The format of the MagickSetImageCompressionQuality method is: 9494% 9495% MagickBooleanType MagickSetImageCompressionQuality(MagickWand *wand, 9496% const size_t quality) 9497% 9498% A description of each parameter follows: 9499% 9500% o wand: the magick wand. 9501% 9502% o quality: the image compression tlityype. 9503% 9504*/ 9505WandExport MagickBooleanType MagickSetImageCompressionQuality(MagickWand *wand, 9506 const size_t quality) 9507{ 9508 assert(wand != (MagickWand *) NULL); 9509 assert(wand->signature == MagickWandSignature); 9510 if (wand->debug != MagickFalse) 9511 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9512 if (wand->images == (Image *) NULL) 9513 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9514 wand->images->quality=quality; 9515 return(MagickTrue); 9516} 9517 9518/* 9519%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9520% % 9521% % 9522% % 9523% M a g i c k S e t I m a g e D e l a y % 9524% % 9525% % 9526% % 9527%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9528% 9529% MagickSetImageDelay() sets the image delay. 9530% 9531% The format of the MagickSetImageDelay method is: 9532% 9533% MagickBooleanType MagickSetImageDelay(MagickWand *wand, 9534% const size_t delay) 9535% 9536% A description of each parameter follows: 9537% 9538% o wand: the magick wand. 9539% 9540% o delay: the image delay in ticks-per-second units. 9541% 9542*/ 9543WandExport MagickBooleanType MagickSetImageDelay(MagickWand *wand, 9544 const size_t delay) 9545{ 9546 assert(wand != (MagickWand *) NULL); 9547 assert(wand->signature == MagickWandSignature); 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 wand->images->delay=delay; 9553 return(MagickTrue); 9554} 9555 9556/* 9557%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9558% % 9559% % 9560% % 9561% M a g i c k S e t I m a g e D e p t h % 9562% % 9563% % 9564% % 9565%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9566% 9567% MagickSetImageDepth() sets the image depth. 9568% 9569% The format of the MagickSetImageDepth method is: 9570% 9571% MagickBooleanType MagickSetImageDepth(MagickWand *wand, 9572% const size_t depth) 9573% 9574% A description of each parameter follows: 9575% 9576% o wand: the magick wand. 9577% 9578% o depth: the image depth in bits: 8, 16, or 32. 9579% 9580*/ 9581WandExport MagickBooleanType MagickSetImageDepth(MagickWand *wand, 9582 const size_t depth) 9583{ 9584 assert(wand != (MagickWand *) NULL); 9585 assert(wand->signature == MagickWandSignature); 9586 if (wand->debug != MagickFalse) 9587 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9588 if (wand->images == (Image *) NULL) 9589 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9590 return(SetImageDepth(wand->images,depth,wand->exception)); 9591} 9592 9593/* 9594%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9595% % 9596% % 9597% % 9598% M a g i c k S e t I m a g e D i s p o s e % 9599% % 9600% % 9601% % 9602%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9603% 9604% MagickSetImageDispose() sets the image disposal method. 9605% 9606% The format of the MagickSetImageDispose method is: 9607% 9608% MagickBooleanType MagickSetImageDispose(MagickWand *wand, 9609% const DisposeType dispose) 9610% 9611% A description of each parameter follows: 9612% 9613% o wand: the magick wand. 9614% 9615% o dispose: the image disposeal type. 9616% 9617*/ 9618WandExport MagickBooleanType MagickSetImageDispose(MagickWand *wand, 9619 const DisposeType dispose) 9620{ 9621 assert(wand != (MagickWand *) NULL); 9622 assert(wand->signature == MagickWandSignature); 9623 if (wand->debug != MagickFalse) 9624 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9625 if (wand->images == (Image *) NULL) 9626 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9627 wand->images->dispose=dispose; 9628 return(MagickTrue); 9629} 9630 9631/* 9632%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9633% % 9634% % 9635% % 9636% M a g i c k S e t I m a g e E n d i a n % 9637% % 9638% % 9639% % 9640%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9641% 9642% MagickSetImageEndian() sets the image endian method. 9643% 9644% The format of the MagickSetImageEndian method is: 9645% 9646% MagickBooleanType MagickSetImageEndian(MagickWand *wand, 9647% const EndianType endian) 9648% 9649% A description of each parameter follows: 9650% 9651% o wand: the magick wand. 9652% 9653% o endian: the image endian type. 9654% 9655*/ 9656WandExport MagickBooleanType MagickSetImageEndian(MagickWand *wand, 9657 const EndianType endian) 9658{ 9659 assert(wand != (MagickWand *) NULL); 9660 assert(wand->signature == MagickWandSignature); 9661 if (wand->debug != MagickFalse) 9662 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9663 if (wand->images == (Image *) NULL) 9664 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9665 wand->images->endian=endian; 9666 return(MagickTrue); 9667} 9668 9669/* 9670%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9671% % 9672% % 9673% % 9674% M a g i c k S e t I m a g e E x t e n t % 9675% % 9676% % 9677% % 9678%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9679% 9680% MagickSetImageExtent() sets the image size (i.e. columns & rows). 9681% 9682% The format of the MagickSetImageExtent method is: 9683% 9684% MagickBooleanType MagickSetImageExtent(MagickWand *wand, 9685% const size_t columns,const unsigned rows) 9686% 9687% A description of each parameter follows: 9688% 9689% o wand: the magick wand. 9690% 9691% o columns: The image width in pixels. 9692% 9693% o rows: The image height in pixels. 9694% 9695*/ 9696WandExport MagickBooleanType MagickSetImageExtent(MagickWand *wand, 9697 const size_t columns,const size_t rows) 9698{ 9699 assert(wand != (MagickWand *) NULL); 9700 assert(wand->signature == MagickWandSignature); 9701 if (wand->debug != MagickFalse) 9702 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9703 if (wand->images == (Image *) NULL) 9704 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9705 return(SetImageExtent(wand->images,columns,rows,wand->exception)); 9706} 9707 9708/* 9709%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9710% % 9711% % 9712% % 9713% M a g i c k S e t I m a g e F i l e n a m e % 9714% % 9715% % 9716% % 9717%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9718% 9719% MagickSetImageFilename() sets the filename of a particular image in a 9720% sequence. 9721% 9722% The format of the MagickSetImageFilename method is: 9723% 9724% MagickBooleanType MagickSetImageFilename(MagickWand *wand, 9725% const char *filename) 9726% 9727% A description of each parameter follows: 9728% 9729% o wand: the magick wand. 9730% 9731% o filename: the image filename. 9732% 9733*/ 9734WandExport MagickBooleanType MagickSetImageFilename(MagickWand *wand, 9735 const char *filename) 9736{ 9737 assert(wand != (MagickWand *) NULL); 9738 assert(wand->signature == MagickWandSignature); 9739 if (wand->debug != MagickFalse) 9740 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9741 if (wand->images == (Image *) NULL) 9742 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9743 if (filename != (const char *) NULL) 9744 (void) CopyMagickString(wand->images->filename,filename,MagickPathExtent); 9745 return(MagickTrue); 9746} 9747 9748/* 9749%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9750% % 9751% % 9752% % 9753% M a g i c k S e t I m a g e F o r m a t % 9754% % 9755% % 9756% % 9757%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9758% 9759% MagickSetImageFormat() sets the format of a particular image in a 9760% sequence. 9761% 9762% The format of the MagickSetImageFormat method is: 9763% 9764% MagickBooleanType MagickSetImageFormat(MagickWand *wand, 9765% const char *format) 9766% 9767% A description of each parameter follows: 9768% 9769% o wand: the magick wand. 9770% 9771% o format: the image format. 9772% 9773*/ 9774WandExport MagickBooleanType MagickSetImageFormat(MagickWand *wand, 9775 const char *format) 9776{ 9777 const MagickInfo 9778 *magick_info; 9779 9780 assert(wand != (MagickWand *) NULL); 9781 assert(wand->signature == MagickWandSignature); 9782 if (wand->debug != MagickFalse) 9783 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9784 if (wand->images == (Image *) NULL) 9785 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9786 if ((format == (char *) NULL) || (*format == '\0')) 9787 { 9788 *wand->images->magick='\0'; 9789 return(MagickTrue); 9790 } 9791 magick_info=GetMagickInfo(format,wand->exception); 9792 if (magick_info == (const MagickInfo *) NULL) 9793 return(MagickFalse); 9794 ClearMagickException(wand->exception); 9795 (void) CopyMagickString(wand->images->magick,format,MagickPathExtent); 9796 return(MagickTrue); 9797} 9798 9799/* 9800%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9801% % 9802% % 9803% % 9804% M a g i c k S e t I m a g e F u z z % 9805% % 9806% % 9807% % 9808%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9809% 9810% MagickSetImageFuzz() sets the image fuzz. 9811% 9812% The format of the MagickSetImageFuzz method is: 9813% 9814% MagickBooleanType MagickSetImageFuzz(MagickWand *wand, 9815% const double fuzz) 9816% 9817% A description of each parameter follows: 9818% 9819% o wand: the magick wand. 9820% 9821% o fuzz: the image fuzz. 9822% 9823*/ 9824WandExport MagickBooleanType MagickSetImageFuzz(MagickWand *wand, 9825 const double fuzz) 9826{ 9827 assert(wand != (MagickWand *) NULL); 9828 assert(wand->signature == MagickWandSignature); 9829 if (wand->debug != MagickFalse) 9830 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9831 if (wand->images == (Image *) NULL) 9832 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9833 wand->images->fuzz=fuzz; 9834 return(MagickTrue); 9835} 9836 9837/* 9838%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9839% % 9840% % 9841% % 9842% M a g i c k S e t I m a g e G a m m a % 9843% % 9844% % 9845% % 9846%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9847% 9848% MagickSetImageGamma() sets the image gamma. 9849% 9850% The format of the MagickSetImageGamma method is: 9851% 9852% MagickBooleanType MagickSetImageGamma(MagickWand *wand, 9853% const double gamma) 9854% 9855% A description of each parameter follows: 9856% 9857% o wand: the magick wand. 9858% 9859% o gamma: the image gamma. 9860% 9861*/ 9862WandExport MagickBooleanType MagickSetImageGamma(MagickWand *wand, 9863 const double gamma) 9864{ 9865 assert(wand != (MagickWand *) NULL); 9866 assert(wand->signature == MagickWandSignature); 9867 if (wand->debug != MagickFalse) 9868 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9869 if (wand->images == (Image *) NULL) 9870 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9871 wand->images->gamma=gamma; 9872 return(MagickTrue); 9873} 9874 9875/* 9876%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9877% % 9878% % 9879% % 9880% M a g i c k S e t I m a g e G r a v i t y % 9881% % 9882% % 9883% % 9884%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9885% 9886% MagickSetImageGravity() sets the image gravity type. 9887% 9888% The format of the MagickSetImageGravity method is: 9889% 9890% MagickBooleanType MagickSetImageGravity(MagickWand *wand, 9891% const GravityType gravity) 9892% 9893% A description of each parameter follows: 9894% 9895% o wand: the magick wand. 9896% 9897% o gravity: positioning gravity (NorthWestGravity, NorthGravity, 9898% NorthEastGravity, WestGravity, CenterGravity, 9899% EastGravity, SouthWestGravity, SouthGravity, 9900% SouthEastGravity) 9901% 9902*/ 9903WandExport MagickBooleanType MagickSetImageGravity(MagickWand *wand, 9904 const GravityType gravity) 9905{ 9906 assert(wand != (MagickWand *) NULL); 9907 assert(wand->signature == MagickWandSignature); 9908 if (wand->debug != MagickFalse) 9909 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9910 if (wand->images == (Image *) NULL) 9911 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9912 wand->images->gravity=gravity; 9913 return(MagickTrue); 9914} 9915 9916/* 9917%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9918% % 9919% % 9920% % 9921% 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 % 9922% % 9923% % 9924% % 9925%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9926% 9927% MagickSetImageGreenPrimary() sets the image chromaticity green primary 9928% point. 9929% 9930% The format of the MagickSetImageGreenPrimary method is: 9931% 9932% MagickBooleanType MagickSetImageGreenPrimary(MagickWand *wand, 9933% const double x,const double y,const double z) 9934% 9935% A description of each parameter follows: 9936% 9937% o wand: the magick wand. 9938% 9939% o x: the green primary x-point. 9940% 9941% o y: the green primary y-point. 9942% 9943% o z: the green primary z-point. 9944% 9945*/ 9946WandExport MagickBooleanType MagickSetImageGreenPrimary(MagickWand *wand, 9947 const double x,const double y,const double z) 9948{ 9949 assert(wand != (MagickWand *) NULL); 9950 assert(wand->signature == MagickWandSignature); 9951 if (wand->debug != MagickFalse) 9952 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9953 if (wand->images == (Image *) NULL) 9954 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9955 wand->images->chromaticity.green_primary.x=x; 9956 wand->images->chromaticity.green_primary.y=y; 9957 wand->images->chromaticity.green_primary.z=z; 9958 return(MagickTrue); 9959} 9960 9961/* 9962%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9963% % 9964% % 9965% % 9966% 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 % 9967% % 9968% % 9969% % 9970%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9971% 9972% MagickSetImageInterlaceScheme() sets the image interlace scheme. 9973% 9974% The format of the MagickSetImageInterlaceScheme method is: 9975% 9976% MagickBooleanType MagickSetImageInterlaceScheme(MagickWand *wand, 9977% const InterlaceType interlace) 9978% 9979% A description of each parameter follows: 9980% 9981% o wand: the magick wand. 9982% 9983% o interlace: the image interlace scheme: NoInterlace, LineInterlace, 9984% PlaneInterlace, PartitionInterlace. 9985% 9986*/ 9987WandExport MagickBooleanType MagickSetImageInterlaceScheme(MagickWand *wand, 9988 const InterlaceType interlace) 9989{ 9990 assert(wand != (MagickWand *) NULL); 9991 assert(wand->signature == MagickWandSignature); 9992 if (wand->debug != MagickFalse) 9993 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9994 if (wand->images == (Image *) NULL) 9995 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9996 wand->images->interlace=interlace; 9997 return(MagickTrue); 9998} 9999 10000/* 10001%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10002% % 10003% % 10004% % 10005% 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 % 10006% % 10007% % 10008% % 10009%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10010% 10011% MagickSetImagePixelInterpolateMethod() sets the image interpolate pixel 10012% method. 10013% 10014% The format of the MagickSetImagePixelInterpolateMethod method is: 10015% 10016% MagickBooleanType MagickSetImagePixelInterpolateMethod(MagickWand *wand, 10017% const PixelInterpolateMethod method) 10018% 10019% A description of each parameter follows: 10020% 10021% o wand: the magick wand. 10022% 10023% o method: the image interpole pixel methods: choose from Undefined, 10024% Average, Bicubic, Bilinear, Filter, Integer, Mesh, NearestNeighbor. 10025% 10026*/ 10027WandExport MagickBooleanType MagickSetImagePixelInterpolateMethod( 10028 MagickWand *wand,const PixelInterpolateMethod method) 10029{ 10030 assert(wand != (MagickWand *) NULL); 10031 assert(wand->signature == MagickWandSignature); 10032 if (wand->debug != MagickFalse) 10033 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10034 if (wand->images == (Image *) NULL) 10035 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10036 wand->images->interpolate=method; 10037 return(MagickTrue); 10038} 10039 10040/* 10041%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10042% % 10043% % 10044% % 10045% M a g i c k S e t I m a g e I t e r a t i o n s % 10046% % 10047% % 10048% % 10049%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10050% 10051% MagickSetImageIterations() sets the image iterations. 10052% 10053% The format of the MagickSetImageIterations method is: 10054% 10055% MagickBooleanType MagickSetImageIterations(MagickWand *wand, 10056% const size_t iterations) 10057% 10058% A description of each parameter follows: 10059% 10060% o wand: the magick wand. 10061% 10062% o delay: the image delay in 1/100th of a second. 10063% 10064*/ 10065WandExport MagickBooleanType MagickSetImageIterations(MagickWand *wand, 10066 const size_t iterations) 10067{ 10068 assert(wand != (MagickWand *) NULL); 10069 assert(wand->signature == MagickWandSignature); 10070 if (wand->debug != MagickFalse) 10071 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10072 if (wand->images == (Image *) NULL) 10073 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10074 wand->images->iterations=iterations; 10075 return(MagickTrue); 10076} 10077 10078/* 10079%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10080% % 10081% % 10082% % 10083% M a g i c k S e t I m a g e M a t t e % 10084% % 10085% % 10086% % 10087%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10088% 10089% MagickSetImageMatte() sets the image matte channel. 10090% 10091% The format of the MagickSetImageMatte method is: 10092% 10093% MagickBooleanType MagickSetImageMatte(MagickWand *wand, 10094% const MagickBooleanType *matte) 10095% 10096% A description of each parameter follows: 10097% 10098% o wand: the magick wand. 10099% 10100% o matte: Set to MagickTrue to enable the image matte channel otherwise 10101% MagickFalse. 10102% 10103*/ 10104WandExport MagickBooleanType MagickSetImageMatte(MagickWand *wand, 10105 const MagickBooleanType matte) 10106{ 10107 assert(wand != (MagickWand *) NULL); 10108 assert(wand->signature == MagickWandSignature); 10109 if (wand->debug != MagickFalse) 10110 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10111 if (wand->images == (Image *) NULL) 10112 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10113 if (matte == MagickFalse) 10114 wand->images->alpha_trait=UndefinedPixelTrait; 10115 else 10116 { 10117 if (wand->images->alpha_trait == UndefinedPixelTrait) 10118 (void) SetImageAlpha(wand->images,OpaqueAlpha,wand->exception); 10119 wand->images->alpha_trait=BlendPixelTrait; 10120 } 10121 return(MagickTrue); 10122} 10123 10124/* 10125%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10126% % 10127% % 10128% % 10129% M a g i c k S e t I m a g e O p a c i t y % 10130% % 10131% % 10132% % 10133%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10134% 10135% MagickSetImageAlpha() sets the image to the specified alpha level. 10136% 10137% The format of the MagickSetImageAlpha method is: 10138% 10139% MagickBooleanType MagickSetImageAlpha(MagickWand *wand, 10140% const double alpha) 10141% 10142% A description of each parameter follows: 10143% 10144% o wand: the magick wand. 10145% 10146% o alpha: the level of transparency: 1.0 is fully opaque and 0.0 is fully 10147% transparent. 10148% 10149*/ 10150WandExport MagickBooleanType MagickSetImageAlpha(MagickWand *wand, 10151 const double alpha) 10152{ 10153 MagickBooleanType 10154 status; 10155 10156 assert(wand != (MagickWand *) NULL); 10157 assert(wand->signature == MagickWandSignature); 10158 if (wand->debug != MagickFalse) 10159 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10160 if (wand->images == (Image *) NULL) 10161 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10162 status=SetImageAlpha(wand->images,ClampToQuantum(QuantumRange*alpha), 10163 wand->exception); 10164 return(status); 10165} 10166 10167/* 10168%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10169% % 10170% % 10171% % 10172% 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 % 10173% % 10174% % 10175% % 10176%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10177% 10178% MagickSetImageOrientation() sets the image orientation. 10179% 10180% The format of the MagickSetImageOrientation method is: 10181% 10182% MagickBooleanType MagickSetImageOrientation(MagickWand *wand, 10183% const OrientationType orientation) 10184% 10185% A description of each parameter follows: 10186% 10187% o wand: the magick wand. 10188% 10189% o orientation: the image orientation type. 10190% 10191*/ 10192WandExport MagickBooleanType MagickSetImageOrientation(MagickWand *wand, 10193 const OrientationType orientation) 10194{ 10195 assert(wand != (MagickWand *) NULL); 10196 assert(wand->signature == MagickWandSignature); 10197 if (wand->debug != MagickFalse) 10198 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10199 if (wand->images == (Image *) NULL) 10200 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10201 wand->images->orientation=orientation; 10202 return(MagickTrue); 10203} 10204 10205/* 10206%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10207% % 10208% % 10209% % 10210% M a g i c k S e t I m a g e P a g e % 10211% % 10212% % 10213% % 10214%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10215% 10216% MagickSetImagePage() sets the page geometry of the image. 10217% 10218% The format of the MagickSetImagePage method is: 10219% 10220% MagickBooleanType MagickSetImagePage(MagickWand *wand,const size_t width,% const size_t height,const ssize_t x,const ssize_t y) 10221% 10222% A description of each parameter follows: 10223% 10224% o wand: the magick wand. 10225% 10226% o width: the page width. 10227% 10228% o height: the page height. 10229% 10230% o x: the page x-offset. 10231% 10232% o y: the page y-offset. 10233% 10234*/ 10235WandExport MagickBooleanType MagickSetImagePage(MagickWand *wand, 10236 const size_t width,const size_t height,const ssize_t x, 10237 const ssize_t y) 10238{ 10239 assert(wand != (MagickWand *) NULL); 10240 assert(wand->signature == MagickWandSignature); 10241 if (wand->debug != MagickFalse) 10242 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10243 if (wand->images == (Image *) NULL) 10244 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10245 wand->images->page.width=width; 10246 wand->images->page.height=height; 10247 wand->images->page.x=x; 10248 wand->images->page.y=y; 10249 return(MagickTrue); 10250} 10251 10252/* 10253%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10254% % 10255% % 10256% % 10257% 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 % 10258% % 10259% % 10260% % 10261%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10262% 10263% MagickSetImageProgressMonitor() sets the wand image progress monitor to the 10264% specified method and returns the previous progress monitor if any. The 10265% progress monitor method looks like this: 10266% 10267% MagickBooleanType MagickProgressMonitor(const char *text, 10268% const MagickOffsetType offset,const MagickSizeType span, 10269% void *client_data) 10270% 10271% If the progress monitor returns MagickFalse, the current operation is 10272% interrupted. 10273% 10274% The format of the MagickSetImageProgressMonitor method is: 10275% 10276% MagickProgressMonitor MagickSetImageProgressMonitor(MagickWand *wand 10277% const MagickProgressMonitor progress_monitor,void *client_data) 10278% 10279% A description of each parameter follows: 10280% 10281% o wand: the magick wand. 10282% 10283% o progress_monitor: Specifies a pointer to a method to monitor progress 10284% of an image operation. 10285% 10286% o client_data: Specifies a pointer to any client data. 10287% 10288*/ 10289WandExport MagickProgressMonitor MagickSetImageProgressMonitor(MagickWand *wand, 10290 const MagickProgressMonitor progress_monitor,void *client_data) 10291{ 10292 MagickProgressMonitor 10293 previous_monitor; 10294 10295 assert(wand != (MagickWand *) NULL); 10296 assert(wand->signature == MagickWandSignature); 10297 if (wand->debug != MagickFalse) 10298 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10299 if (wand->images == (Image *) NULL) 10300 { 10301 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 10302 "ContainsNoImages","`%s'",wand->name); 10303 return((MagickProgressMonitor) NULL); 10304 } 10305 previous_monitor=SetImageProgressMonitor(wand->images, 10306 progress_monitor,client_data); 10307 return(previous_monitor); 10308} 10309 10310/* 10311%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10312% % 10313% % 10314% % 10315% M a g i c k S e t I m a g e R e d P r i m a r y % 10316% % 10317% % 10318% % 10319%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10320% 10321% MagickSetImageRedPrimary() sets the image chromaticity red primary point. 10322% 10323% The format of the MagickSetImageRedPrimary method is: 10324% 10325% MagickBooleanType MagickSetImageRedPrimary(MagickWand *wand, 10326% const double x,const double y,const double z) 10327% 10328% A description of each parameter follows: 10329% 10330% o wand: the magick wand. 10331% 10332% o x: the red primary x-point. 10333% 10334% o y: the red primary y-point. 10335% 10336% o z: the red primary z-point. 10337% 10338*/ 10339WandExport MagickBooleanType MagickSetImageRedPrimary(MagickWand *wand, 10340 const double x,const double y,const double z) 10341{ 10342 assert(wand != (MagickWand *) NULL); 10343 assert(wand->signature == MagickWandSignature); 10344 if (wand->debug != MagickFalse) 10345 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10346 if (wand->images == (Image *) NULL) 10347 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10348 wand->images->chromaticity.red_primary.x=x; 10349 wand->images->chromaticity.red_primary.y=y; 10350 wand->images->chromaticity.red_primary.z=z; 10351 return(MagickTrue); 10352} 10353 10354/* 10355%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10356% % 10357% % 10358% % 10359% 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 % 10360% % 10361% % 10362% % 10363%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10364% 10365% MagickSetImageRenderingIntent() sets the image rendering intent. 10366% 10367% The format of the MagickSetImageRenderingIntent method is: 10368% 10369% MagickBooleanType MagickSetImageRenderingIntent(MagickWand *wand, 10370% const RenderingIntent rendering_intent) 10371% 10372% A description of each parameter follows: 10373% 10374% o wand: the magick wand. 10375% 10376% o rendering_intent: the image rendering intent: UndefinedIntent, 10377% SaturationIntent, PerceptualIntent, AbsoluteIntent, or RelativeIntent. 10378% 10379*/ 10380WandExport MagickBooleanType MagickSetImageRenderingIntent(MagickWand *wand, 10381 const RenderingIntent rendering_intent) 10382{ 10383 assert(wand != (MagickWand *) NULL); 10384 assert(wand->signature == MagickWandSignature); 10385 if (wand->debug != MagickFalse) 10386 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10387 if (wand->images == (Image *) NULL) 10388 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10389 wand->images->rendering_intent=rendering_intent; 10390 return(MagickTrue); 10391} 10392 10393/* 10394%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10395% % 10396% % 10397% % 10398% M a g i c k S e t I m a g e R e s o l u t i o n % 10399% % 10400% % 10401% % 10402%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10403% 10404% MagickSetImageResolution() sets the image resolution. 10405% 10406% The format of the MagickSetImageResolution method is: 10407% 10408% MagickBooleanType MagickSetImageResolution(MagickWand *wand, 10409% const double x_resolution,const double y_resolution) 10410% 10411% A description of each parameter follows: 10412% 10413% o wand: the magick wand. 10414% 10415% o x_resolution: the image x resolution. 10416% 10417% o y_resolution: the image y resolution. 10418% 10419*/ 10420WandExport MagickBooleanType MagickSetImageResolution(MagickWand *wand, 10421 const double x_resolution,const double y_resolution) 10422{ 10423 assert(wand != (MagickWand *) NULL); 10424 assert(wand->signature == MagickWandSignature); 10425 if (wand->debug != MagickFalse) 10426 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10427 if (wand->images == (Image *) NULL) 10428 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10429 wand->images->resolution.x=x_resolution; 10430 wand->images->resolution.y=y_resolution; 10431 return(MagickTrue); 10432} 10433 10434/* 10435%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10436% % 10437% % 10438% % 10439% M a g i c k S e t I m a g e S c e n e % 10440% % 10441% % 10442% % 10443%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10444% 10445% MagickSetImageScene() sets the image scene. 10446% 10447% The format of the MagickSetImageScene method is: 10448% 10449% MagickBooleanType MagickSetImageScene(MagickWand *wand, 10450% const size_t scene) 10451% 10452% A description of each parameter follows: 10453% 10454% o wand: the magick wand. 10455% 10456% o delay: the image scene number. 10457% 10458*/ 10459WandExport MagickBooleanType MagickSetImageScene(MagickWand *wand, 10460 const size_t scene) 10461{ 10462 assert(wand != (MagickWand *) NULL); 10463 assert(wand->signature == MagickWandSignature); 10464 if (wand->debug != MagickFalse) 10465 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10466 if (wand->images == (Image *) NULL) 10467 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10468 wand->images->scene=scene; 10469 return(MagickTrue); 10470} 10471 10472/* 10473%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10474% % 10475% % 10476% % 10477% 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 % 10478% % 10479% % 10480% % 10481%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10482% 10483% MagickSetImageTicksPerSecond() sets the image ticks-per-second. 10484% 10485% The format of the MagickSetImageTicksPerSecond method is: 10486% 10487% MagickBooleanType MagickSetImageTicksPerSecond(MagickWand *wand, 10488% const ssize_t ticks_per-second) 10489% 10490% A description of each parameter follows: 10491% 10492% o wand: the magick wand. 10493% 10494% o ticks_per_second: the units to use for the image delay. 10495% 10496*/ 10497WandExport MagickBooleanType MagickSetImageTicksPerSecond(MagickWand *wand, 10498 const ssize_t ticks_per_second) 10499{ 10500 assert(wand != (MagickWand *) NULL); 10501 assert(wand->signature == MagickWandSignature); 10502 if (wand->debug != MagickFalse) 10503 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10504 if (wand->images == (Image *) NULL) 10505 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10506 wand->images->ticks_per_second=ticks_per_second; 10507 return(MagickTrue); 10508} 10509 10510/* 10511%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10512% % 10513% % 10514% % 10515% M a g i c k S e t I m a g e T y p e % 10516% % 10517% % 10518% % 10519%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10520% 10521% MagickSetImageType() sets the image type. 10522% 10523% The format of the MagickSetImageType method is: 10524% 10525% MagickBooleanType MagickSetImageType(MagickWand *wand, 10526% const ImageType image_type) 10527% 10528% A description of each parameter follows: 10529% 10530% o wand: the magick wand. 10531% 10532% o image_type: the image type: UndefinedType, BilevelType, GrayscaleType, 10533% GrayscaleAlphaType, PaletteType, PaletteAlphaType, TrueColorType, 10534% TrueColorAlphaType, ColorSeparationType, ColorSeparationAlphaType, 10535% or OptimizeType. 10536% 10537*/ 10538WandExport MagickBooleanType MagickSetImageType(MagickWand *wand, 10539 const ImageType image_type) 10540{ 10541 assert(wand != (MagickWand *) NULL); 10542 assert(wand->signature == MagickWandSignature); 10543 if (wand->debug != MagickFalse) 10544 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10545 if (wand->images == (Image *) NULL) 10546 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10547 return(SetImageType(wand->images,image_type,wand->exception)); 10548} 10549 10550/* 10551%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10552% % 10553% % 10554% % 10555% M a g i c k S e t I m a g e U n i t s % 10556% % 10557% % 10558% % 10559%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10560% 10561% MagickSetImageUnits() sets the image units of resolution. 10562% 10563% The format of the MagickSetImageUnits method is: 10564% 10565% MagickBooleanType MagickSetImageUnits(MagickWand *wand, 10566% const ResolutionType units) 10567% 10568% A description of each parameter follows: 10569% 10570% o wand: the magick wand. 10571% 10572% o units: the image units of resolution : UndefinedResolution, 10573% PixelsPerInchResolution, or PixelsPerCentimeterResolution. 10574% 10575*/ 10576WandExport MagickBooleanType MagickSetImageUnits(MagickWand *wand, 10577 const ResolutionType units) 10578{ 10579 assert(wand != (MagickWand *) NULL); 10580 assert(wand->signature == MagickWandSignature); 10581 if (wand->debug != MagickFalse) 10582 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10583 if (wand->images == (Image *) NULL) 10584 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10585 wand->images->units=units; 10586 return(MagickTrue); 10587} 10588 10589/* 10590%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10591% % 10592% % 10593% % 10594% 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 % 10595% % 10596% % 10597% % 10598%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10599% 10600% MagickSetImageVirtualPixelMethod() sets the image virtual pixel method. 10601% 10602% The format of the MagickSetImageVirtualPixelMethod method is: 10603% 10604% VirtualPixelMethod MagickSetImageVirtualPixelMethod(MagickWand *wand, 10605% const VirtualPixelMethod method) 10606% 10607% A description of each parameter follows: 10608% 10609% o wand: the magick wand. 10610% 10611% o method: the image virtual pixel method : UndefinedVirtualPixelMethod, 10612% ConstantVirtualPixelMethod, EdgeVirtualPixelMethod, 10613% MirrorVirtualPixelMethod, or TileVirtualPixelMethod. 10614% 10615*/ 10616WandExport VirtualPixelMethod MagickSetImageVirtualPixelMethod(MagickWand *wand, 10617 const VirtualPixelMethod method) 10618{ 10619 assert(wand != (MagickWand *) NULL); 10620 assert(wand->signature == MagickWandSignature); 10621 if (wand->debug != MagickFalse) 10622 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10623 if (wand->images == (Image *) NULL) 10624 return(UndefinedVirtualPixelMethod); 10625 return(SetImageVirtualPixelMethod(wand->images,method,wand->exception)); 10626} 10627 10628/* 10629%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10630% % 10631% % 10632% % 10633% M a g i c k S e t I m a g e W h i t e P o i n t % 10634% % 10635% % 10636% % 10637%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10638% 10639% MagickSetImageWhitePoint() sets the image chromaticity white point. 10640% 10641% The format of the MagickSetImageWhitePoint method is: 10642% 10643% MagickBooleanType MagickSetImageWhitePoint(MagickWand *wand, 10644% const double x,const double y,const double z) 10645% 10646% A description of each parameter follows: 10647% 10648% o wand: the magick wand. 10649% 10650% o x: the white x-point. 10651% 10652% o y: the white y-point. 10653% 10654% o z: the white z-point. 10655% 10656*/ 10657WandExport MagickBooleanType MagickSetImageWhitePoint(MagickWand *wand, 10658 const double x,const double y,const double z) 10659{ 10660 assert(wand != (MagickWand *) NULL); 10661 assert(wand->signature == MagickWandSignature); 10662 if (wand->debug != MagickFalse) 10663 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10664 if (wand->images == (Image *) NULL) 10665 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10666 wand->images->chromaticity.white_point.x=x; 10667 wand->images->chromaticity.white_point.y=y; 10668 wand->images->chromaticity.white_point.z=z; 10669 return(MagickTrue); 10670} 10671 10672/* 10673%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10674% % 10675% % 10676% % 10677% M a g i c k S h a d e I m a g e C h a n n e l % 10678% % 10679% % 10680% % 10681%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10682% 10683% MagickShadeImage() shines a distant light on an image to create a 10684% three-dimensional effect. You control the positioning of the light with 10685% azimuth and elevation; azimuth is measured in degrees off the x axis 10686% and elevation is measured in pixels above the Z axis. 10687% 10688% The format of the MagickShadeImage method is: 10689% 10690% MagickBooleanType MagickShadeImage(MagickWand *wand, 10691% const MagickBooleanType gray,const double azimuth, 10692% const double elevation) 10693% 10694% A description of each parameter follows: 10695% 10696% o wand: the magick wand. 10697% 10698% o gray: A value other than zero shades the intensity of each pixel. 10699% 10700% o azimuth, elevation: Define the light source direction. 10701% 10702*/ 10703WandExport MagickBooleanType MagickShadeImage(MagickWand *wand, 10704 const MagickBooleanType gray,const double asimuth,const double elevation) 10705{ 10706 Image 10707 *shade_image; 10708 10709 assert(wand != (MagickWand *) NULL); 10710 assert(wand->signature == MagickWandSignature); 10711 if (wand->debug != MagickFalse) 10712 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10713 if (wand->images == (Image *) NULL) 10714 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10715 shade_image=ShadeImage(wand->images,gray,asimuth,elevation,wand->exception); 10716 if (shade_image == (Image *) NULL) 10717 return(MagickFalse); 10718 ReplaceImageInList(&wand->images,shade_image); 10719 return(MagickTrue); 10720} 10721 10722/* 10723%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10724% % 10725% % 10726% % 10727% M a g i c k S h a d o w I m a g e % 10728% % 10729% % 10730% % 10731%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10732% 10733% MagickShadowImage() simulates an image shadow. 10734% 10735% The format of the MagickShadowImage method is: 10736% 10737% MagickBooleanType MagickShadowImage(MagickWand *wand,const double alpha, 10738% const double sigma,const ssize_t x,const ssize_t y) 10739% 10740% A description of each parameter follows: 10741% 10742% o wand: the magick wand. 10743% 10744% o alpha: percentage transparency. 10745% 10746% o sigma: the standard deviation of the Gaussian, in pixels. 10747% 10748% o x: the shadow x-offset. 10749% 10750% o y: the shadow y-offset. 10751% 10752*/ 10753WandExport MagickBooleanType MagickShadowImage(MagickWand *wand, 10754 const double alpha,const double sigma,const ssize_t x,const ssize_t y) 10755{ 10756 Image 10757 *shadow_image; 10758 10759 assert(wand != (MagickWand *) NULL); 10760 assert(wand->signature == MagickWandSignature); 10761 if (wand->debug != MagickFalse) 10762 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10763 if (wand->images == (Image *) NULL) 10764 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10765 shadow_image=ShadowImage(wand->images,alpha,sigma,x,y,wand->exception); 10766 if (shadow_image == (Image *) NULL) 10767 return(MagickFalse); 10768 ReplaceImageInList(&wand->images,shadow_image); 10769 return(MagickTrue); 10770} 10771 10772/* 10773%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10774% % 10775% % 10776% % 10777% M a g i c k S h a r p e n I m a g e % 10778% % 10779% % 10780% % 10781%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10782% 10783% MagickSharpenImage() sharpens an image. We convolve the image with a 10784% Gaussian operator of the given radius and standard deviation (sigma). 10785% For reasonable results, the radius should be larger than sigma. Use a 10786% radius of 0 and MagickSharpenImage() selects a suitable radius for you. 10787% 10788% The format of the MagickSharpenImage method is: 10789% 10790% MagickBooleanType MagickSharpenImage(MagickWand *wand, 10791% const double radius,const double sigma) 10792% 10793% A description of each parameter follows: 10794% 10795% o wand: the magick wand. 10796% 10797% o radius: the radius of the Gaussian, in pixels, not counting the center 10798% pixel. 10799% 10800% o sigma: the standard deviation of the Gaussian, in pixels. 10801% 10802*/ 10803WandExport MagickBooleanType MagickSharpenImage(MagickWand *wand, 10804 const double radius,const double sigma) 10805{ 10806 Image 10807 *sharp_image; 10808 10809 assert(wand != (MagickWand *) NULL); 10810 assert(wand->signature == MagickWandSignature); 10811 if (wand->debug != MagickFalse) 10812 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10813 if (wand->images == (Image *) NULL) 10814 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10815 sharp_image=SharpenImage(wand->images,radius,sigma,wand->exception); 10816 if (sharp_image == (Image *) NULL) 10817 return(MagickFalse); 10818 ReplaceImageInList(&wand->images,sharp_image); 10819 return(MagickTrue); 10820} 10821 10822/* 10823%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10824% % 10825% % 10826% % 10827% M a g i c k S h a v e I m a g e % 10828% % 10829% % 10830% % 10831%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10832% 10833% MagickShaveImage() shaves pixels from the image edges. It allocates the 10834% memory necessary for the new Image structure and returns a pointer to the 10835% new image. 10836% 10837% The format of the MagickShaveImage method is: 10838% 10839% MagickBooleanType MagickShaveImage(MagickWand *wand, 10840% const size_t columns,const size_t rows) 10841% 10842% A description of each parameter follows: 10843% 10844% o wand: the magick wand. 10845% 10846% o columns: the number of columns in the scaled image. 10847% 10848% o rows: the number of rows in the scaled image. 10849% 10850% 10851*/ 10852WandExport MagickBooleanType MagickShaveImage(MagickWand *wand, 10853 const size_t columns,const size_t rows) 10854{ 10855 Image 10856 *shave_image; 10857 10858 RectangleInfo 10859 shave_info; 10860 10861 assert(wand != (MagickWand *) NULL); 10862 assert(wand->signature == MagickWandSignature); 10863 if (wand->debug != MagickFalse) 10864 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10865 if (wand->images == (Image *) NULL) 10866 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10867 shave_info.width=columns; 10868 shave_info.height=rows; 10869 shave_info.x=0; 10870 shave_info.y=0; 10871 shave_image=ShaveImage(wand->images,&shave_info,wand->exception); 10872 if (shave_image == (Image *) NULL) 10873 return(MagickFalse); 10874 ReplaceImageInList(&wand->images,shave_image); 10875 return(MagickTrue); 10876} 10877 10878/* 10879%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10880% % 10881% % 10882% % 10883% M a g i c k S h e a r I m a g e % 10884% % 10885% % 10886% % 10887%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10888% 10889% MagickShearImage() slides one edge of an image along the X or Y axis, 10890% creating a parallelogram. An X direction shear slides an edge along the X 10891% axis, while a Y direction shear slides an edge along the Y axis. The amount 10892% of the shear is controlled by a shear angle. For X direction shears, x_shear 10893% is measured relative to the Y axis, and similarly, for Y direction shears 10894% y_shear is measured relative to the X axis. Empty triangles left over from 10895% shearing the image are filled with the background color. 10896% 10897% The format of the MagickShearImage method is: 10898% 10899% MagickBooleanType MagickShearImage(MagickWand *wand, 10900% const PixelWand *background,const double x_shear,const double y_shear) 10901% 10902% A description of each parameter follows: 10903% 10904% o wand: the magick wand. 10905% 10906% o background: the background pixel wand. 10907% 10908% o x_shear: the number of degrees to shear the image. 10909% 10910% o y_shear: the number of degrees to shear the image. 10911% 10912*/ 10913WandExport MagickBooleanType MagickShearImage(MagickWand *wand, 10914 const PixelWand *background,const double x_shear,const double y_shear) 10915{ 10916 Image 10917 *shear_image; 10918 10919 assert(wand != (MagickWand *) NULL); 10920 assert(wand->signature == MagickWandSignature); 10921 if (wand->debug != MagickFalse) 10922 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10923 if (wand->images == (Image *) NULL) 10924 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10925 PixelGetQuantumPacket(background,&wand->images->background_color); 10926 shear_image=ShearImage(wand->images,x_shear,y_shear,wand->exception); 10927 if (shear_image == (Image *) NULL) 10928 return(MagickFalse); 10929 ReplaceImageInList(&wand->images,shear_image); 10930 return(MagickTrue); 10931} 10932 10933/* 10934%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10935% % 10936% % 10937% % 10938% 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 % 10939% % 10940% % 10941% % 10942%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10943% 10944% MagickSigmoidalContrastImage() adjusts the contrast of an image with a 10945% non-linear sigmoidal contrast algorithm. Increase the contrast of the 10946% image using a sigmoidal transfer function without saturating highlights or 10947% shadows. Contrast indicates how much to increase the contrast (0 is none; 10948% 3 is typical; 20 is pushing it); mid-point indicates where midtones fall in 10949% the resultant image (0 is white; 50% is middle-gray; 100% is black). Set 10950% sharpen to MagickTrue to increase the image contrast otherwise the contrast 10951% is reduced. 10952% 10953% The format of the MagickSigmoidalContrastImage method is: 10954% 10955% MagickBooleanType MagickSigmoidalContrastImage(MagickWand *wand, 10956% const MagickBooleanType sharpen,const double alpha,const double beta) 10957% 10958% A description of each parameter follows: 10959% 10960% o wand: the magick wand. 10961% 10962% o sharpen: Increase or decrease image contrast. 10963% 10964% o alpha: strength of the contrast, the larger the number the more 10965% 'threshold-like' it becomes. 10966% 10967% o beta: midpoint of the function as a color value 0 to QuantumRange. 10968% 10969*/ 10970WandExport MagickBooleanType MagickSigmoidalContrastImage( 10971 MagickWand *wand,const MagickBooleanType sharpen,const double alpha, 10972 const double beta) 10973{ 10974 MagickBooleanType 10975 status; 10976 10977 assert(wand != (MagickWand *) NULL); 10978 assert(wand->signature == MagickWandSignature); 10979 if (wand->debug != MagickFalse) 10980 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10981 if (wand->images == (Image *) NULL) 10982 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10983 status=SigmoidalContrastImage(wand->images,sharpen,alpha,beta, 10984 wand->exception); 10985 return(status); 10986} 10987 10988/* 10989%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10990% % 10991% % 10992% % 10993% M a g i c k S i m i l a r i t y I m a g e % 10994% % 10995% % 10996% % 10997%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10998% 10999% MagickSimilarityImage() compares the reference image of the image and 11000% returns the best match offset. In addition, it returns a similarity image 11001% such that an exact match location is completely white and if none of the 11002% pixels match, black, otherwise some gray level in-between. 11003% 11004% The format of the MagickSimilarityImage method is: 11005% 11006% MagickWand *MagickSimilarityImage(MagickWand *wand, 11007% const MagickWand *reference,const MetricType metric, 11008% const double similarity_threshold,RectangeInfo *offset, 11009% double *similarity) 11010% 11011% A description of each parameter follows: 11012% 11013% o wand: the magick wand. 11014% 11015% o reference: the reference wand. 11016% 11017% o metric: the metric. 11018% 11019% o similarity_threshold: minimum distortion for (sub)image match. 11020% 11021% o offset: the best match offset of the reference image within the image. 11022% 11023% o similarity: the computed similarity between the images. 11024% 11025*/ 11026WandExport MagickWand *MagickSimilarityImage(MagickWand *wand, 11027 const MagickWand *reference,const MetricType metric, 11028 const double similarity_threshold,RectangleInfo *offset,double *similarity) 11029{ 11030 Image 11031 *similarity_image; 11032 11033 assert(wand != (MagickWand *) NULL); 11034 assert(wand->signature == MagickWandSignature); 11035 if (wand->debug != MagickFalse) 11036 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11037 if ((wand->images == (Image *) NULL) || (reference->images == (Image *) NULL)) 11038 { 11039 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 11040 "ContainsNoImages","`%s'",wand->name); 11041 return((MagickWand *) NULL); 11042 } 11043 similarity_image=SimilarityImage(wand->images,reference->images,metric, 11044 similarity_threshold,offset,similarity,wand->exception); 11045 if (similarity_image == (Image *) NULL) 11046 return((MagickWand *) NULL); 11047 return(CloneMagickWandFromImages(wand,similarity_image)); 11048} 11049 11050/* 11051%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11052% % 11053% % 11054% % 11055% M a g i c k S k e t c h I m a g e % 11056% % 11057% % 11058% % 11059%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11060% 11061% MagickSketchImage() simulates a pencil sketch. We convolve the image with 11062% a Gaussian operator of the given radius and standard deviation (sigma). 11063% For reasonable results, radius should be larger than sigma. Use a 11064% radius of 0 and SketchImage() selects a suitable radius for you. 11065% Angle gives the angle of the blurring motion. 11066% 11067% The format of the MagickSketchImage method is: 11068% 11069% MagickBooleanType MagickSketchImage(MagickWand *wand, 11070% const double radius,const double sigma,const double angle) 11071% 11072% A description of each parameter follows: 11073% 11074% o wand: the magick wand. 11075% 11076% o radius: the radius of the Gaussian, in pixels, not counting 11077% the center pixel. 11078% 11079% o sigma: the standard deviation of the Gaussian, in pixels. 11080% 11081% o angle: apply the effect along this angle. 11082% 11083*/ 11084WandExport MagickBooleanType MagickSketchImage(MagickWand *wand, 11085 const double radius,const double sigma,const double angle) 11086{ 11087 Image 11088 *sketch_image; 11089 11090 assert(wand != (MagickWand *) NULL); 11091 assert(wand->signature == MagickWandSignature); 11092 if (wand->debug != MagickFalse) 11093 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11094 if (wand->images == (Image *) NULL) 11095 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11096 sketch_image=SketchImage(wand->images,radius,sigma,angle,wand->exception); 11097 if (sketch_image == (Image *) NULL) 11098 return(MagickFalse); 11099 ReplaceImageInList(&wand->images,sketch_image); 11100 return(MagickTrue); 11101} 11102 11103/* 11104%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11105% % 11106% % 11107% % 11108% M a g i c k S m u s h I m a g e s % 11109% % 11110% % 11111% % 11112%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11113% 11114% MagickSmushImages() takes all images from the current image pointer to the 11115% end of the image list and smushs them to each other top-to-bottom if the 11116% stack parameter is true, otherwise left-to-right. 11117% 11118% The format of the MagickSmushImages method is: 11119% 11120% MagickWand *MagickSmushImages(MagickWand *wand, 11121% const MagickBooleanType stack,const ssize_t offset) 11122% 11123% A description of each parameter follows: 11124% 11125% o wand: the magick wand. 11126% 11127% o stack: By default, images are stacked left-to-right. Set stack to 11128% MagickTrue to stack them top-to-bottom. 11129% 11130% o offset: minimum distance in pixels between images. 11131% 11132*/ 11133WandExport MagickWand *MagickSmushImages(MagickWand *wand, 11134 const MagickBooleanType stack,const ssize_t offset) 11135{ 11136 Image 11137 *smush_image; 11138 11139 assert(wand != (MagickWand *) NULL); 11140 assert(wand->signature == MagickWandSignature); 11141 if (wand->debug != MagickFalse) 11142 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11143 if (wand->images == (Image *) NULL) 11144 return((MagickWand *) NULL); 11145 smush_image=SmushImages(wand->images,stack,offset,wand->exception); 11146 if (smush_image == (Image *) NULL) 11147 return((MagickWand *) NULL); 11148 return(CloneMagickWandFromImages(wand,smush_image)); 11149} 11150 11151/* 11152%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11153% % 11154% % 11155% % 11156% M a g i c k S o l a r i z e I m a g e % 11157% % 11158% % 11159% % 11160%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11161% 11162% MagickSolarizeImage() applies a special effect to the image, similar to the 11163% effect achieved in a photo darkroom by selectively exposing areas of photo 11164% sensitive paper to light. Threshold ranges from 0 to QuantumRange and is a 11165% measure of the extent of the solarization. 11166% 11167% The format of the MagickSolarizeImage method is: 11168% 11169% MagickBooleanType MagickSolarizeImage(MagickWand *wand, 11170% const double threshold) 11171% 11172% A description of each parameter follows: 11173% 11174% o wand: the magick wand. 11175% 11176% o threshold: Define the extent of the solarization. 11177% 11178*/ 11179WandExport MagickBooleanType MagickSolarizeImage(MagickWand *wand, 11180 const double threshold) 11181{ 11182 MagickBooleanType 11183 status; 11184 11185 assert(wand != (MagickWand *) NULL); 11186 assert(wand->signature == MagickWandSignature); 11187 if (wand->debug != MagickFalse) 11188 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11189 if (wand->images == (Image *) NULL) 11190 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11191 status=SolarizeImage(wand->images,threshold,wand->exception); 11192 return(status); 11193} 11194 11195/* 11196%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11197% % 11198% % 11199% % 11200% M a g i c k S p a r s e C o l o r I m a g e % 11201% % 11202% % 11203% % 11204%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11205% 11206% MagickSparseColorImage(), given a set of coordinates, interpolates the 11207% colors found at those coordinates, across the whole image, using various 11208% methods. 11209% 11210% The format of the MagickSparseColorImage method is: 11211% 11212% MagickBooleanType MagickSparseColorImage(MagickWand *wand, 11213% const SparseColorMethod method,const size_t number_arguments, 11214% const double *arguments) 11215% 11216% A description of each parameter follows: 11217% 11218% o image: the image to be sparseed. 11219% 11220% o method: the method of image sparseion. 11221% 11222% ArcSparseColorion will always ignore source image offset, and always 11223% 'bestfit' the destination image with the top left corner offset 11224% relative to the polar mapping center. 11225% 11226% Bilinear has no simple inverse mapping so will not allow 'bestfit' 11227% style of image sparseion. 11228% 11229% Affine, Perspective, and Bilinear, will do least squares fitting of 11230% the distrotion when more than the minimum number of control point 11231% pairs are provided. 11232% 11233% Perspective, and Bilinear, will fall back to a Affine sparseion when 11234% less than 4 control point pairs are provided. While Affine sparseions 11235% will let you use any number of control point pairs, that is Zero pairs 11236% is a No-Op (viewport only) distrotion, one pair is a translation and 11237% two pairs of control points will do a scale-rotate-translate, without 11238% any shearing. 11239% 11240% o number_arguments: the number of arguments given for this sparseion 11241% method. 11242% 11243% o arguments: the arguments for this sparseion method. 11244% 11245*/ 11246WandExport MagickBooleanType MagickSparseColorImage(MagickWand *wand, 11247 const SparseColorMethod method,const size_t number_arguments, 11248 const double *arguments) 11249{ 11250 Image 11251 *sparse_image; 11252 11253 assert(wand != (MagickWand *) NULL); 11254 assert(wand->signature == MagickWandSignature); 11255 if (wand->debug != MagickFalse) 11256 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11257 if (wand->images == (Image *) NULL) 11258 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11259 sparse_image=SparseColorImage(wand->images,method,number_arguments,arguments, 11260 wand->exception); 11261 if (sparse_image == (Image *) NULL) 11262 return(MagickFalse); 11263 ReplaceImageInList(&wand->images,sparse_image); 11264 return(MagickTrue); 11265} 11266 11267/* 11268%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11269% % 11270% % 11271% % 11272% M a g i c k S p l i c e I m a g e % 11273% % 11274% % 11275% % 11276%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11277% 11278% MagickSpliceImage() splices a solid color into the image. 11279% 11280% The format of the MagickSpliceImage method is: 11281% 11282% MagickBooleanType MagickSpliceImage(MagickWand *wand, 11283% const size_t width,const size_t height,const ssize_t x, 11284% const ssize_t y) 11285% 11286% A description of each parameter follows: 11287% 11288% o wand: the magick wand. 11289% 11290% o width: the region width. 11291% 11292% o height: the region height. 11293% 11294% o x: the region x offset. 11295% 11296% o y: the region y offset. 11297% 11298*/ 11299WandExport MagickBooleanType MagickSpliceImage(MagickWand *wand, 11300 const size_t width,const size_t height,const ssize_t x, 11301 const ssize_t y) 11302{ 11303 Image 11304 *splice_image; 11305 11306 RectangleInfo 11307 splice; 11308 11309 assert(wand != (MagickWand *) NULL); 11310 assert(wand->signature == MagickWandSignature); 11311 if (wand->debug != MagickFalse) 11312 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11313 if (wand->images == (Image *) NULL) 11314 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11315 splice.width=width; 11316 splice.height=height; 11317 splice.x=x; 11318 splice.y=y; 11319 splice_image=SpliceImage(wand->images,&splice,wand->exception); 11320 if (splice_image == (Image *) NULL) 11321 return(MagickFalse); 11322 ReplaceImageInList(&wand->images,splice_image); 11323 return(MagickTrue); 11324} 11325 11326/* 11327%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11328% % 11329% % 11330% % 11331% M a g i c k S p r e a d I m a g e % 11332% % 11333% % 11334% % 11335%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11336% 11337% MagickSpreadImage() is a special effects method that randomly displaces each 11338% pixel in a block defined by the radius parameter. 11339% 11340% The format of the MagickSpreadImage method is: 11341% 11342% MagickBooleanType MagickSpreadImage(MagickWand *wand, 11343% const PixelInterpolateMethod method,const double radius) 11344% 11345% A description of each parameter follows: 11346% 11347% o wand: the magick wand. 11348% 11349% o method: intepolation method. 11350% 11351% o radius: Choose a random pixel in a neighborhood of this extent. 11352% 11353*/ 11354WandExport MagickBooleanType MagickSpreadImage(MagickWand *wand, 11355 const PixelInterpolateMethod method,const double radius) 11356{ 11357 Image 11358 *spread_image; 11359 11360 assert(wand != (MagickWand *) NULL); 11361 assert(wand->signature == MagickWandSignature); 11362 if (wand->debug != MagickFalse) 11363 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11364 if (wand->images == (Image *) NULL) 11365 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11366 spread_image=SpreadImage(wand->images,method,radius,wand->exception); 11367 if (spread_image == (Image *) NULL) 11368 return(MagickFalse); 11369 ReplaceImageInList(&wand->images,spread_image); 11370 return(MagickTrue); 11371} 11372 11373/* 11374%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11375% % 11376% % 11377% % 11378% M a g i c k S t a t i s t i c I m a g e % 11379% % 11380% % 11381% % 11382%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11383% 11384% MagickStatisticImage() replace each pixel with corresponding statistic from 11385% the neighborhood of the specified width and height. 11386% 11387% The format of the MagickStatisticImage method is: 11388% 11389% MagickBooleanType MagickStatisticImage(MagickWand *wand, 11390% const StatisticType type,const double width,const size_t height) 11391% 11392% A description of each parameter follows: 11393% 11394% o wand: the magick wand. 11395% 11396% o type: the statistic type (e.g. median, mode, etc.). 11397% 11398% o width: the width of the pixel neighborhood. 11399% 11400% o height: the height of the pixel neighborhood. 11401% 11402*/ 11403WandExport MagickBooleanType MagickStatisticImage(MagickWand *wand, 11404 const StatisticType type,const size_t width,const size_t height) 11405{ 11406 Image 11407 *statistic_image; 11408 11409 assert(wand != (MagickWand *) NULL); 11410 assert(wand->signature == MagickWandSignature); 11411 if (wand->debug != MagickFalse) 11412 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11413 if (wand->images == (Image *) NULL) 11414 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11415 statistic_image=StatisticImage(wand->images,type,width,height, 11416 wand->exception); 11417 if (statistic_image == (Image *) NULL) 11418 return(MagickFalse); 11419 ReplaceImageInList(&wand->images,statistic_image); 11420 return(MagickTrue); 11421} 11422 11423/* 11424%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11425% % 11426% % 11427% % 11428% M a g i c k S t e g a n o I m a g e % 11429% % 11430% % 11431% % 11432%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11433% 11434% MagickSteganoImage() hides a digital watermark within the image. 11435% Recover the hidden watermark later to prove that the authenticity of 11436% an image. Offset defines the start position within the image to hide 11437% the watermark. 11438% 11439% The format of the MagickSteganoImage method is: 11440% 11441% MagickWand *MagickSteganoImage(MagickWand *wand, 11442% const MagickWand *watermark_wand,const ssize_t offset) 11443% 11444% A description of each parameter follows: 11445% 11446% o wand: the magick wand. 11447% 11448% o watermark_wand: the watermark wand. 11449% 11450% o offset: Start hiding at this offset into the image. 11451% 11452*/ 11453WandExport MagickWand *MagickSteganoImage(MagickWand *wand, 11454 const MagickWand *watermark_wand,const ssize_t offset) 11455{ 11456 Image 11457 *stegano_image; 11458 11459 assert(wand != (MagickWand *) NULL); 11460 assert(wand->signature == MagickWandSignature); 11461 if (wand->debug != MagickFalse) 11462 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11463 if ((wand->images == (Image *) NULL) || 11464 (watermark_wand->images == (Image *) NULL)) 11465 { 11466 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 11467 "ContainsNoImages","`%s'",wand->name); 11468 return((MagickWand *) NULL); 11469 } 11470 wand->images->offset=offset; 11471 stegano_image=SteganoImage(wand->images,watermark_wand->images, 11472 wand->exception); 11473 if (stegano_image == (Image *) NULL) 11474 return((MagickWand *) NULL); 11475 return(CloneMagickWandFromImages(wand,stegano_image)); 11476} 11477 11478/* 11479%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11480% % 11481% % 11482% % 11483% M a g i c k S t e r e o I m a g e % 11484% % 11485% % 11486% % 11487%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11488% 11489% MagickStereoImage() composites two images and produces a single image that 11490% is the composite of a left and right image of a stereo pair 11491% 11492% The format of the MagickStereoImage method is: 11493% 11494% MagickWand *MagickStereoImage(MagickWand *wand, 11495% const MagickWand *offset_wand) 11496% 11497% A description of each parameter follows: 11498% 11499% o wand: the magick wand. 11500% 11501% o offset_wand: Another image wand. 11502% 11503*/ 11504WandExport MagickWand *MagickStereoImage(MagickWand *wand, 11505 const MagickWand *offset_wand) 11506{ 11507 Image 11508 *stereo_image; 11509 11510 assert(wand != (MagickWand *) NULL); 11511 assert(wand->signature == MagickWandSignature); 11512 if (wand->debug != MagickFalse) 11513 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11514 if ((wand->images == (Image *) NULL) || 11515 (offset_wand->images == (Image *) NULL)) 11516 { 11517 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 11518 "ContainsNoImages","`%s'",wand->name); 11519 return((MagickWand *) NULL); 11520 } 11521 stereo_image=StereoImage(wand->images,offset_wand->images,wand->exception); 11522 if (stereo_image == (Image *) NULL) 11523 return((MagickWand *) NULL); 11524 return(CloneMagickWandFromImages(wand,stereo_image)); 11525} 11526 11527/* 11528%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11529% % 11530% % 11531% % 11532% M a g i c k S t r i p I m a g e % 11533% % 11534% % 11535% % 11536%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11537% 11538% MagickStripImage() strips an image of all profiles and comments. 11539% 11540% The format of the MagickStripImage method is: 11541% 11542% MagickBooleanType MagickStripImage(MagickWand *wand) 11543% 11544% A description of each parameter follows: 11545% 11546% o wand: the magick wand. 11547% 11548*/ 11549WandExport MagickBooleanType MagickStripImage(MagickWand *wand) 11550{ 11551 assert(wand != (MagickWand *) NULL); 11552 assert(wand->signature == MagickWandSignature); 11553 if (wand->debug != MagickFalse) 11554 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11555 if (wand->images == (Image *) NULL) 11556 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11557 return(StripImage(wand->images,wand->exception)); 11558} 11559 11560/* 11561%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11562% % 11563% % 11564% % 11565% M a g i c k S w i r l I m a g e % 11566% % 11567% % 11568% % 11569%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11570% 11571% MagickSwirlImage() swirls the pixels about the center of the image, where 11572% degrees indicates the sweep of the arc through which each pixel is moved. 11573% You get a more dramatic effect as the degrees move from 1 to 360. 11574% 11575% The format of the MagickSwirlImage method is: 11576% 11577% MagickBooleanType MagickSwirlImage(MagickWand *wand,const double degrees, 11578% const PixelInterpolateMethod method) 11579% 11580% A description of each parameter follows: 11581% 11582% o wand: the magick wand. 11583% 11584% o degrees: Define the tightness of the swirling effect. 11585% 11586% o method: the pixel interpolation method. 11587% 11588*/ 11589WandExport MagickBooleanType MagickSwirlImage(MagickWand *wand, 11590 const double degrees,const PixelInterpolateMethod method) 11591{ 11592 Image 11593 *swirl_image; 11594 11595 assert(wand != (MagickWand *) NULL); 11596 assert(wand->signature == MagickWandSignature); 11597 if (wand->debug != MagickFalse) 11598 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11599 if (wand->images == (Image *) NULL) 11600 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11601 swirl_image=SwirlImage(wand->images,degrees,method,wand->exception); 11602 if (swirl_image == (Image *) NULL) 11603 return(MagickFalse); 11604 ReplaceImageInList(&wand->images,swirl_image); 11605 return(MagickTrue); 11606} 11607 11608/* 11609%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11610% % 11611% % 11612% % 11613% M a g i c k T e x t u r e I m a g e % 11614% % 11615% % 11616% % 11617%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11618% 11619% MagickTextureImage() repeatedly tiles the texture image across and down the 11620% image canvas. 11621% 11622% The format of the MagickTextureImage method is: 11623% 11624% MagickWand *MagickTextureImage(MagickWand *wand, 11625% const MagickWand *texture_wand) 11626% 11627% A description of each parameter follows: 11628% 11629% o wand: the magick wand. 11630% 11631% o texture_wand: the texture wand 11632% 11633*/ 11634WandExport MagickWand *MagickTextureImage(MagickWand *wand, 11635 const MagickWand *texture_wand) 11636{ 11637 Image 11638 *texture_image; 11639 11640 MagickBooleanType 11641 status; 11642 11643 assert(wand != (MagickWand *) NULL); 11644 assert(wand->signature == MagickWandSignature); 11645 if (wand->debug != MagickFalse) 11646 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11647 if ((wand->images == (Image *) NULL) || 11648 (texture_wand->images == (Image *) NULL)) 11649 { 11650 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 11651 "ContainsNoImages","`%s'",wand->name); 11652 return((MagickWand *) NULL); 11653 } 11654 texture_image=CloneImage(wand->images,0,0,MagickTrue,wand->exception); 11655 if (texture_image == (Image *) NULL) 11656 return((MagickWand *) NULL); 11657 status=TextureImage(texture_image,texture_wand->images,wand->exception); 11658 if (status == MagickFalse) 11659 { 11660 texture_image=DestroyImage(texture_image); 11661 return((MagickWand *) NULL); 11662 } 11663 return(CloneMagickWandFromImages(wand,texture_image)); 11664} 11665 11666/* 11667%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11668% % 11669% % 11670% % 11671% M a g i c k T h r e s h o l d I m a g e % 11672% % 11673% % 11674% % 11675%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11676% 11677% MagickThresholdImage() changes the value of individual pixels based on 11678% the intensity of each pixel compared to threshold. The result is a 11679% high-contrast, two color image. 11680% 11681% The format of the MagickThresholdImage method is: 11682% 11683% MagickBooleanType MagickThresholdImage(MagickWand *wand, 11684% const double threshold) 11685% MagickBooleanType MagickThresholdImageChannel(MagickWand *wand, 11686% const ChannelType channel,const double threshold) 11687% 11688% A description of each parameter follows: 11689% 11690% o wand: the magick wand. 11691% 11692% o channel: the image channel(s). 11693% 11694% o threshold: Define the threshold value. 11695% 11696*/ 11697WandExport MagickBooleanType MagickThresholdImage(MagickWand *wand, 11698 const double threshold) 11699{ 11700 MagickBooleanType 11701 status; 11702 11703 status=MagickThresholdImageChannel(wand,DefaultChannels,threshold); 11704 return(status); 11705} 11706 11707WandExport MagickBooleanType MagickThresholdImageChannel(MagickWand *wand, 11708 const ChannelType channel,const double threshold) 11709{ 11710 MagickBooleanType 11711 status; 11712 11713 assert(wand != (MagickWand *) NULL); 11714 assert(wand->signature == MagickWandSignature); 11715 if (wand->debug != MagickFalse) 11716 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11717 if (wand->images == (Image *) NULL) 11718 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11719 status=BilevelImage(wand->images,threshold,wand->exception); 11720 return(status); 11721} 11722 11723/* 11724%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11725% % 11726% % 11727% % 11728% M a g i c k T h u m b n a i l I m a g e % 11729% % 11730% % 11731% % 11732%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11733% 11734% MagickThumbnailImage() changes the size of an image to the given dimensions 11735% and removes any associated profiles. The goal is to produce small low cost 11736% thumbnail images suited for display on the Web. 11737% 11738% The format of the MagickThumbnailImage method is: 11739% 11740% MagickBooleanType MagickThumbnailImage(MagickWand *wand, 11741% const size_t columns,const size_t rows) 11742% 11743% A description of each parameter follows: 11744% 11745% o wand: the magick wand. 11746% 11747% o columns: the number of columns in the scaled image. 11748% 11749% o rows: the number of rows in the scaled image. 11750% 11751*/ 11752WandExport MagickBooleanType MagickThumbnailImage(MagickWand *wand, 11753 const size_t columns,const size_t rows) 11754{ 11755 Image 11756 *thumbnail_image; 11757 11758 assert(wand != (MagickWand *) NULL); 11759 assert(wand->signature == MagickWandSignature); 11760 if (wand->debug != MagickFalse) 11761 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11762 if (wand->images == (Image *) NULL) 11763 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11764 thumbnail_image=ThumbnailImage(wand->images,columns,rows,wand->exception); 11765 if (thumbnail_image == (Image *) NULL) 11766 return(MagickFalse); 11767 ReplaceImageInList(&wand->images,thumbnail_image); 11768 return(MagickTrue); 11769} 11770 11771/* 11772%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11773% % 11774% % 11775% % 11776% M a g i c k T i n t I m a g e % 11777% % 11778% % 11779% % 11780%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11781% 11782% MagickTintImage() applies a color vector to each pixel in the image. The 11783% length of the vector is 0 for black and white and at its maximum for the 11784% midtones. The vector weighting function is 11785% f(x)=(1-(4.0*((x-0.5)*(x-0.5)))). 11786% 11787% The format of the MagickTintImage method is: 11788% 11789% MagickBooleanType MagickTintImage(MagickWand *wand, 11790% const PixelWand *tint,const PixelWand *blend) 11791% 11792% A description of each parameter follows: 11793% 11794% o wand: the magick wand. 11795% 11796% o tint: the tint pixel wand. 11797% 11798% o alpha: the alpha pixel wand. 11799% 11800*/ 11801WandExport MagickBooleanType MagickTintImage(MagickWand *wand, 11802 const PixelWand *tint,const PixelWand *blend) 11803{ 11804 char 11805 percent_blend[MagickPathExtent]; 11806 11807 Image 11808 *tint_image; 11809 11810 PixelInfo 11811 target; 11812 11813 assert(wand != (MagickWand *) NULL); 11814 assert(wand->signature == MagickWandSignature); 11815 if (wand->debug != MagickFalse) 11816 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11817 if (wand->images == (Image *) NULL) 11818 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11819 if (wand->images->colorspace != CMYKColorspace) 11820 (void) FormatLocaleString(percent_blend,MagickPathExtent, 11821 "%g,%g,%g,%g",(double) (100.0*QuantumScale* 11822 PixelGetRedQuantum(blend)),(double) (100.0*QuantumScale* 11823 PixelGetGreenQuantum(blend)),(double) (100.0*QuantumScale* 11824 PixelGetBlueQuantum(blend)),(double) (100.0*QuantumScale* 11825 PixelGetAlphaQuantum(blend))); 11826 else 11827 (void) FormatLocaleString(percent_blend,MagickPathExtent, 11828 "%g,%g,%g,%g,%g",(double) (100.0*QuantumScale* 11829 PixelGetCyanQuantum(blend)),(double) (100.0*QuantumScale* 11830 PixelGetMagentaQuantum(blend)),(double) (100.0*QuantumScale* 11831 PixelGetYellowQuantum(blend)),(double) (100.0*QuantumScale* 11832 PixelGetBlackQuantum(blend)),(double) (100.0*QuantumScale* 11833 PixelGetAlphaQuantum(blend))); 11834 target=PixelGetPixel(tint); 11835 tint_image=TintImage(wand->images,percent_blend,&target,wand->exception); 11836 if (tint_image == (Image *) NULL) 11837 return(MagickFalse); 11838 ReplaceImageInList(&wand->images,tint_image); 11839 return(MagickTrue); 11840} 11841 11842/* 11843%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11844% % 11845% % 11846% % 11847% M a g i c k T r a n s f o r m I m a g e % 11848% % 11849% % 11850% % 11851%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11852% 11853% MagickTransformImage() is a convenience method that behaves like 11854% MagickResizeImage() or MagickCropImage() but accepts scaling and/or cropping 11855% information as a region geometry specification. If the operation fails, 11856% a NULL image handle is returned. 11857% 11858% The format of the MagickTransformImage method is: 11859% 11860% MagickWand *MagickTransformImage(MagickWand *wand,const char *crop, 11861% const char *geometry) 11862% 11863% A description of each parameter follows: 11864% 11865% o wand: the magick wand. 11866% 11867% o crop: A crop geometry string. This geometry defines a subregion of the 11868% image to crop. 11869% 11870% o geometry: An image geometry string. This geometry defines the final 11871% size of the image. 11872% 11873*/ 11874WandExport MagickWand *MagickTransformImage(MagickWand *wand, 11875 const char *crop,const char *geometry) 11876{ 11877 Image 11878 *transform_image; 11879 11880 MagickBooleanType 11881 status; 11882 11883 assert(wand != (MagickWand *) NULL); 11884 assert(wand->signature == MagickWandSignature); 11885 if (wand->debug != MagickFalse) 11886 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11887 if (wand->images == (Image *) NULL) 11888 return((MagickWand *) NULL); 11889 transform_image=CloneImage(wand->images,0,0,MagickTrue,wand->exception); 11890 if (transform_image == (Image *) NULL) 11891 return((MagickWand *) NULL); 11892 status=TransformImage(&transform_image,crop,geometry,wand->exception); 11893 if (status == MagickFalse) 11894 { 11895 transform_image=DestroyImage(transform_image); 11896 return((MagickWand *) NULL); 11897 } 11898 return(CloneMagickWandFromImages(wand,transform_image)); 11899} 11900 11901/* 11902%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11903% % 11904% % 11905% % 11906% 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 % 11907% % 11908% % 11909% % 11910%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11911% 11912% MagickTransformImageColorspace() transform the image colorspace, setting 11913% the images colorspace while transforming the images data to that 11914% colorspace. 11915% 11916% The format of the MagickTransformImageColorspace method is: 11917% 11918% MagickBooleanType MagickTransformImageColorspace(MagickWand *wand, 11919% const ColorspaceType colorspace) 11920% 11921% A description of each parameter follows: 11922% 11923% o wand: the magick wand. 11924% 11925% o colorspace: the image colorspace: UndefinedColorspace, 11926% sRGBColorspace, RGBColorspace, GRAYColorspace, 11927% OHTAColorspace, XYZColorspace, YCbCrColorspace, 11928% YCCColorspace, YIQColorspace, YPbPrColorspace, 11929% YPbPrColorspace, YUVColorspace, CMYKColorspace, 11930% HSLColorspace, HWBColorspace. 11931% 11932*/ 11933WandExport MagickBooleanType MagickTransformImageColorspace(MagickWand *wand, 11934 const ColorspaceType colorspace) 11935{ 11936 assert(wand != (MagickWand *) NULL); 11937 assert(wand->signature == MagickWandSignature); 11938 if (wand->debug != MagickFalse) 11939 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11940 if (wand->images == (Image *) NULL) 11941 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11942 return(TransformImageColorspace(wand->images,colorspace,wand->exception)); 11943} 11944 11945/* 11946%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11947% % 11948% % 11949% % 11950% 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 % 11951% % 11952% % 11953% % 11954%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11955% 11956% MagickTransparentPaintImage() changes any pixel that matches color with the 11957% color defined by fill. 11958% 11959% The format of the MagickTransparentPaintImage method is: 11960% 11961% MagickBooleanType MagickTransparentPaintImage(MagickWand *wand, 11962% const PixelWand *target,const double alpha,const double fuzz, 11963% const MagickBooleanType invert) 11964% 11965% A description of each parameter follows: 11966% 11967% o wand: the magick wand. 11968% 11969% o target: Change this target color to specified alpha value within 11970% the image. 11971% 11972% o alpha: the level of transparency: 1.0 is fully opaque and 0.0 is fully 11973% transparent. 11974% 11975% o fuzz: By default target must match a particular pixel color 11976% exactly. However, in many cases two colors may differ by a small amount. 11977% The fuzz member of image defines how much tolerance is acceptable to 11978% consider two colors as the same. For example, set fuzz to 10 and the 11979% color red at intensities of 100 and 102 respectively are now interpreted 11980% as the same color for the purposes of the floodfill. 11981% 11982% o invert: paint any pixel that does not match the target color. 11983% 11984*/ 11985WandExport MagickBooleanType MagickTransparentPaintImage(MagickWand *wand, 11986 const PixelWand *target,const double alpha,const double fuzz, 11987 const MagickBooleanType invert) 11988{ 11989 MagickBooleanType 11990 status; 11991 11992 PixelInfo 11993 target_pixel; 11994 11995 assert(wand != (MagickWand *) NULL); 11996 assert(wand->signature == MagickWandSignature); 11997 if (wand->debug != MagickFalse) 11998 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11999 if (wand->images == (Image *) NULL) 12000 ThrowWandException(WandError,"ContainsNoImages",wand->name); 12001 PixelGetMagickColor(target,&target_pixel); 12002 wand->images->fuzz=fuzz; 12003 status=TransparentPaintImage(wand->images,&target_pixel,ClampToQuantum( 12004 QuantumRange*alpha),invert,wand->exception); 12005 return(status); 12006} 12007 12008/* 12009%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12010% % 12011% % 12012% % 12013% M a g i c k T r a n s p o s e I m a g e % 12014% % 12015% % 12016% % 12017%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12018% 12019% MagickTransposeImage() creates a vertical mirror image by reflecting the 12020% pixels around the central x-axis while rotating them 90-degrees. 12021% 12022% The format of the MagickTransposeImage method is: 12023% 12024% MagickBooleanType MagickTransposeImage(MagickWand *wand) 12025% 12026% A description of each parameter follows: 12027% 12028% o wand: the magick wand. 12029% 12030*/ 12031WandExport MagickBooleanType MagickTransposeImage(MagickWand *wand) 12032{ 12033 Image 12034 *transpose_image; 12035 12036 assert(wand != (MagickWand *) NULL); 12037 assert(wand->signature == MagickWandSignature); 12038 if (wand->debug != MagickFalse) 12039 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 12040 if (wand->images == (Image *) NULL) 12041 ThrowWandException(WandError,"ContainsNoImages",wand->name); 12042 transpose_image=TransposeImage(wand->images,wand->exception); 12043 if (transpose_image == (Image *) NULL) 12044 return(MagickFalse); 12045 ReplaceImageInList(&wand->images,transpose_image); 12046 return(MagickTrue); 12047} 12048 12049/* 12050%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12051% % 12052% % 12053% % 12054% M a g i c k T r a n s v e r s e I m a g e % 12055% % 12056% % 12057% % 12058%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12059% 12060% MagickTransverseImage() creates a horizontal mirror image by reflecting the 12061% pixels around the central y-axis while rotating them 270-degrees. 12062% 12063% The format of the MagickTransverseImage method is: 12064% 12065% MagickBooleanType MagickTransverseImage(MagickWand *wand) 12066% 12067% A description of each parameter follows: 12068% 12069% o wand: the magick wand. 12070% 12071*/ 12072WandExport MagickBooleanType MagickTransverseImage(MagickWand *wand) 12073{ 12074 Image 12075 *transverse_image; 12076 12077 assert(wand != (MagickWand *) NULL); 12078 assert(wand->signature == MagickWandSignature); 12079 if (wand->debug != MagickFalse) 12080 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 12081 if (wand->images == (Image *) NULL) 12082 ThrowWandException(WandError,"ContainsNoImages",wand->name); 12083 transverse_image=TransverseImage(wand->images,wand->exception); 12084 if (transverse_image == (Image *) NULL) 12085 return(MagickFalse); 12086 ReplaceImageInList(&wand->images,transverse_image); 12087 return(MagickTrue); 12088} 12089 12090/* 12091%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12092% % 12093% % 12094% % 12095% M a g i c k T r i m I m a g e % 12096% % 12097% % 12098% % 12099%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12100% 12101% MagickTrimImage() remove edges that are the background color from the image. 12102% 12103% The format of the MagickTrimImage method is: 12104% 12105% MagickBooleanType MagickTrimImage(MagickWand *wand,const double fuzz) 12106% 12107% A description of each parameter follows: 12108% 12109% o wand: the magick wand. 12110% 12111% o fuzz: By default target must match a particular pixel color 12112% exactly. However, in many cases two colors may differ by a small amount. 12113% The fuzz member of image defines how much tolerance is acceptable to 12114% consider two colors as the same. For example, set fuzz to 10 and the 12115% color red at intensities of 100 and 102 respectively are now interpreted 12116% as the same color for the purposes of the floodfill. 12117% 12118*/ 12119WandExport MagickBooleanType MagickTrimImage(MagickWand *wand,const double fuzz) 12120{ 12121 Image 12122 *trim_image; 12123 12124 assert(wand != (MagickWand *) NULL); 12125 assert(wand->signature == MagickWandSignature); 12126 if (wand->debug != MagickFalse) 12127 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 12128 if (wand->images == (Image *) NULL) 12129 ThrowWandException(WandError,"ContainsNoImages",wand->name); 12130 wand->images->fuzz=fuzz; 12131 trim_image=TrimImage(wand->images,wand->exception); 12132 if (trim_image == (Image *) NULL) 12133 return(MagickFalse); 12134 ReplaceImageInList(&wand->images,trim_image); 12135 return(MagickTrue); 12136} 12137 12138/* 12139%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12140% % 12141% % 12142% % 12143% M a g i c k U n i q u e I m a g e C o l o r s % 12144% % 12145% % 12146% % 12147%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12148% 12149% MagickUniqueImageColors() discards all but one of any pixel color. 12150% 12151% The format of the MagickUniqueImageColors method is: 12152% 12153% MagickBooleanType MagickUniqueImageColors(MagickWand *wand) 12154% 12155% A description of each parameter follows: 12156% 12157% o wand: the magick wand. 12158% 12159*/ 12160WandExport MagickBooleanType MagickUniqueImageColors(MagickWand *wand) 12161{ 12162 Image 12163 *unique_image; 12164 12165 assert(wand != (MagickWand *) NULL); 12166 assert(wand->signature == MagickWandSignature); 12167 if (wand->debug != MagickFalse) 12168 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 12169 if (wand->images == (Image *) NULL) 12170 ThrowWandException(WandError,"ContainsNoImages",wand->name); 12171 unique_image=UniqueImageColors(wand->images,wand->exception); 12172 if (unique_image == (Image *) NULL) 12173 return(MagickFalse); 12174 ReplaceImageInList(&wand->images,unique_image); 12175 return(MagickTrue); 12176} 12177 12178/* 12179%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12180% % 12181% % 12182% % 12183% M a g i c k U n s h a r p M a s k I m a g e % 12184% % 12185% % 12186% % 12187%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12188% 12189% MagickUnsharpMaskImage() sharpens an image. We convolve the image with a 12190% Gaussian operator of the given radius and standard deviation (sigma). 12191% For reasonable results, radius should be larger than sigma. Use a radius 12192% of 0 and UnsharpMaskImage() selects a suitable radius for you. 12193% 12194% The format of the MagickUnsharpMaskImage method is: 12195% 12196% MagickBooleanType MagickUnsharpMaskImage(MagickWand *wand, 12197% const double radius,const double sigma,const double gain, 12198% const double threshold) 12199% 12200% A description of each parameter follows: 12201% 12202% o wand: the magick wand. 12203% 12204% o radius: the radius of the Gaussian, in pixels, not counting the center 12205% pixel. 12206% 12207% o sigma: the standard deviation of the Gaussian, in pixels. 12208% 12209% o gain: the percentage of the difference between the original and the 12210% blur image that is added back into the original. 12211% 12212% o threshold: the threshold in pixels needed to apply the diffence gain. 12213% 12214*/ 12215WandExport MagickBooleanType MagickUnsharpMaskImage(MagickWand *wand, 12216 const double radius,const double sigma,const double gain, 12217 const double threshold) 12218{ 12219 Image 12220 *unsharp_image; 12221 12222 assert(wand != (MagickWand *) NULL); 12223 assert(wand->signature == MagickWandSignature); 12224 if (wand->debug != MagickFalse) 12225 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 12226 if (wand->images == (Image *) NULL) 12227 ThrowWandException(WandError,"ContainsNoImages",wand->name); 12228 unsharp_image=UnsharpMaskImage(wand->images,radius,sigma,gain,threshold, 12229 wand->exception); 12230 if (unsharp_image == (Image *) NULL) 12231 return(MagickFalse); 12232 ReplaceImageInList(&wand->images,unsharp_image); 12233 return(MagickTrue); 12234} 12235 12236/* 12237%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12238% % 12239% % 12240% % 12241% M a g i c k V i g n e t t e I m a g e % 12242% % 12243% % 12244% % 12245%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12246% 12247% MagickVignetteImage() softens the edges of the image in vignette style. 12248% 12249% The format of the MagickVignetteImage method is: 12250% 12251% MagickBooleanType MagickVignetteImage(MagickWand *wand, 12252% const double radius,const double sigma,const ssize_t x, 12253% const ssize_t y) 12254% 12255% A description of each parameter follows: 12256% 12257% o wand: the magick wand. 12258% 12259% o radius: the radius. 12260% 12261% o sigma: the sigma. 12262% 12263% o x, y: Define the x and y ellipse offset. 12264% 12265*/ 12266WandExport MagickBooleanType MagickVignetteImage(MagickWand *wand, 12267 const double radius,const double sigma,const ssize_t x,const ssize_t y) 12268{ 12269 Image 12270 *vignette_image; 12271 12272 assert(wand != (MagickWand *) NULL); 12273 assert(wand->signature == MagickWandSignature); 12274 if (wand->debug != MagickFalse) 12275 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 12276 if (wand->images == (Image *) NULL) 12277 ThrowWandException(WandError,"ContainsNoImages",wand->name); 12278 vignette_image=VignetteImage(wand->images,radius,sigma,x,y,wand->exception); 12279 if (vignette_image == (Image *) NULL) 12280 return(MagickFalse); 12281 ReplaceImageInList(&wand->images,vignette_image); 12282 return(MagickTrue); 12283} 12284 12285/* 12286%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12287% % 12288% % 12289% % 12290% M a g i c k W a v e I m a g e % 12291% % 12292% % 12293% % 12294%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12295% 12296% MagickWaveImage() creates a "ripple" effect in the image by shifting 12297% the pixels vertically along a sine wave whose amplitude and wavelength 12298% is specified by the given parameters. 12299% 12300% The format of the MagickWaveImage method is: 12301% 12302% MagickBooleanType MagickWaveImage(MagickWand *wand, 12303% const double amplitude,const double wave_length, 12304% const PixelInterpolateMethod method) 12305% 12306% A description of each parameter follows: 12307% 12308% o wand: the magick wand. 12309% 12310% o amplitude, wave_length: Define the amplitude and wave length of the 12311% sine wave. 12312% 12313% o method: the pixel interpolation method. 12314% 12315*/ 12316WandExport MagickBooleanType MagickWaveImage(MagickWand *wand, 12317 const double amplitude,const double wave_length, 12318 const PixelInterpolateMethod method) 12319{ 12320 Image 12321 *wave_image; 12322 12323 assert(wand != (MagickWand *) NULL); 12324 assert(wand->signature == MagickWandSignature); 12325 if (wand->debug != MagickFalse) 12326 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 12327 if (wand->images == (Image *) NULL) 12328 ThrowWandException(WandError,"ContainsNoImages",wand->name); 12329 wave_image=WaveImage(wand->images,amplitude,wave_length,method, 12330 wand->exception); 12331 if (wave_image == (Image *) NULL) 12332 return(MagickFalse); 12333 ReplaceImageInList(&wand->images,wave_image); 12334 return(MagickTrue); 12335} 12336 12337/* 12338%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12339% % 12340% % 12341% % 12342% 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 % 12343% % 12344% % 12345% % 12346%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12347% 12348% MagickWhiteThresholdImage() is like ThresholdImage() but force all pixels 12349% above the threshold into white while leaving all pixels below the threshold 12350% unchanged. 12351% 12352% The format of the MagickWhiteThresholdImage method is: 12353% 12354% MagickBooleanType MagickWhiteThresholdImage(MagickWand *wand, 12355% const PixelWand *threshold) 12356% 12357% A description of each parameter follows: 12358% 12359% o wand: the magick wand. 12360% 12361% o threshold: the pixel wand. 12362% 12363*/ 12364WandExport MagickBooleanType MagickWhiteThresholdImage(MagickWand *wand, 12365 const PixelWand *threshold) 12366{ 12367 char 12368 thresholds[MagickPathExtent]; 12369 12370 assert(wand != (MagickWand *) NULL); 12371 assert(wand->signature == MagickWandSignature); 12372 if (wand->debug != MagickFalse) 12373 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 12374 if (wand->images == (Image *) NULL) 12375 ThrowWandException(WandError,"ContainsNoImages",wand->name); 12376 (void) FormatLocaleString(thresholds,MagickPathExtent, 12377 QuantumFormat "," QuantumFormat "," QuantumFormat "," QuantumFormat, 12378 PixelGetRedQuantum(threshold),PixelGetGreenQuantum(threshold), 12379 PixelGetBlueQuantum(threshold),PixelGetAlphaQuantum(threshold)); 12380 return(WhiteThresholdImage(wand->images,thresholds,wand->exception)); 12381} 12382 12383/* 12384%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12385% % 12386% % 12387% % 12388% M a g i c k W r i t e I m a g e % 12389% % 12390% % 12391% % 12392%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12393% 12394% MagickWriteImage() writes an image to the specified filename. If the 12395% filename parameter is NULL, the image is written to the filename set 12396% by MagickReadImage() or MagickSetImageFilename(). 12397% 12398% The format of the MagickWriteImage method is: 12399% 12400% MagickBooleanType MagickWriteImage(MagickWand *wand, 12401% const char *filename) 12402% 12403% A description of each parameter follows: 12404% 12405% o wand: the magick wand. 12406% 12407% o filename: the image filename. 12408% 12409% 12410*/ 12411WandExport MagickBooleanType MagickWriteImage(MagickWand *wand, 12412 const char *filename) 12413{ 12414 Image 12415 *image; 12416 12417 ImageInfo 12418 *write_info; 12419 12420 MagickBooleanType 12421 status; 12422 12423 assert(wand != (MagickWand *) NULL); 12424 assert(wand->signature == MagickWandSignature); 12425 if (wand->debug != MagickFalse) 12426 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 12427 if (wand->images == (Image *) NULL) 12428 ThrowWandException(WandError,"ContainsNoImages",wand->name); 12429 if (filename != (const char *) NULL) 12430 (void) CopyMagickString(wand->images->filename,filename,MagickPathExtent); 12431 image=CloneImage(wand->images,0,0,MagickTrue,wand->exception); 12432 if (image == (Image *) NULL) 12433 return(MagickFalse); 12434 write_info=CloneImageInfo(wand->image_info); 12435 write_info->adjoin=MagickTrue; 12436 status=WriteImage(write_info,image,wand->exception); 12437 image=DestroyImage(image); 12438 write_info=DestroyImageInfo(write_info); 12439 return(status); 12440} 12441 12442/* 12443%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12444% % 12445% % 12446% % 12447% M a g i c k W r i t e I m a g e F i l e % 12448% % 12449% % 12450% % 12451%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12452% 12453% MagickWriteImageFile() writes an image to an open file descriptor. 12454% 12455% The format of the MagickWriteImageFile method is: 12456% 12457% MagickBooleanType MagickWriteImageFile(MagickWand *wand,FILE *file) 12458% 12459% A description of each parameter follows: 12460% 12461% o wand: the magick wand. 12462% 12463% o file: the file descriptor. 12464% 12465*/ 12466WandExport MagickBooleanType MagickWriteImageFile(MagickWand *wand,FILE *file) 12467{ 12468 Image 12469 *image; 12470 12471 ImageInfo 12472 *write_info; 12473 12474 MagickBooleanType 12475 status; 12476 12477 assert(wand != (MagickWand *) NULL); 12478 assert(wand->signature == MagickWandSignature); 12479 assert(file != (FILE *) NULL); 12480 if (wand->debug != MagickFalse) 12481 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 12482 if (wand->images == (Image *) NULL) 12483 ThrowWandException(WandError,"ContainsNoImages",wand->name); 12484 image=CloneImage(wand->images,0,0,MagickTrue,wand->exception); 12485 if (image == (Image *) NULL) 12486 return(MagickFalse); 12487 write_info=CloneImageInfo(wand->image_info); 12488 SetImageInfoFile(write_info,file); 12489 write_info->adjoin=MagickTrue; 12490 status=WriteImage(write_info,image,wand->exception); 12491 write_info=DestroyImageInfo(write_info); 12492 image=DestroyImage(image); 12493 return(status); 12494} 12495 12496/* 12497%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12498% % 12499% % 12500% % 12501% M a g i c k W r i t e I m a g e s % 12502% % 12503% % 12504% % 12505%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12506% 12507% MagickWriteImages() writes an image or image sequence. 12508% 12509% The format of the MagickWriteImages method is: 12510% 12511% MagickBooleanType MagickWriteImages(MagickWand *wand, 12512% const char *filename,const MagickBooleanType adjoin) 12513% 12514% A description of each parameter follows: 12515% 12516% o wand: the magick wand. 12517% 12518% o filename: the image filename. 12519% 12520% o adjoin: join images into a single multi-image file. 12521% 12522*/ 12523WandExport MagickBooleanType MagickWriteImages(MagickWand *wand, 12524 const char *filename,const MagickBooleanType adjoin) 12525{ 12526 ImageInfo 12527 *write_info; 12528 12529 MagickBooleanType 12530 status; 12531 12532 assert(wand != (MagickWand *) NULL); 12533 assert(wand->signature == MagickWandSignature); 12534 if (wand->debug != MagickFalse) 12535 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 12536 if (wand->images == (Image *) NULL) 12537 ThrowWandException(WandError,"ContainsNoImages",wand->name); 12538 write_info=CloneImageInfo(wand->image_info); 12539 write_info->adjoin=adjoin; 12540 status=WriteImages(write_info,wand->images,filename,wand->exception); 12541 write_info=DestroyImageInfo(write_info); 12542 return(status); 12543} 12544 12545/* 12546%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12547% % 12548% % 12549% % 12550% M a g i c k W r i t e I m a g e s F i l e % 12551% % 12552% % 12553% % 12554%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12555% 12556% MagickWriteImagesFile() writes an image sequence to an open file descriptor. 12557% 12558% The format of the MagickWriteImagesFile method is: 12559% 12560% MagickBooleanType MagickWriteImagesFile(MagickWand *wand,FILE *file) 12561% 12562% A description of each parameter follows: 12563% 12564% o wand: the magick wand. 12565% 12566% o file: the file descriptor. 12567% 12568*/ 12569WandExport MagickBooleanType MagickWriteImagesFile(MagickWand *wand,FILE *file) 12570{ 12571 ImageInfo 12572 *write_info; 12573 12574 MagickBooleanType 12575 status; 12576 12577 assert(wand != (MagickWand *) NULL); 12578 assert(wand->signature == MagickWandSignature); 12579 if (wand->debug != MagickFalse) 12580 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 12581 if (wand->images == (Image *) NULL) 12582 ThrowWandException(WandError,"ContainsNoImages",wand->name); 12583 write_info=CloneImageInfo(wand->image_info); 12584 SetImageInfoFile(write_info,file); 12585 write_info->adjoin=MagickTrue; 12586 status=WriteImages(write_info,wand->images,(const char *) NULL, 12587 wand->exception); 12588 write_info=DestroyImageInfo(write_info); 12589 return(status); 12590} 12591