magick-image.c revision 633f0c61bb0414b644dccf4f335576a10bca0329
1/* 2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3% % 4% % 5% % 6% M M AAA GGGG IIIII CCCC K K % 7% MM MM A A G I C K K % 8% M M M AAAAA G GGG I C KKK % 9% M M A A G G I C K K % 10% M M A A GGGG IIIII CCCC K K % 11% % 12% IIIII M M AAA GGGG EEEEE % 13% I MM MM A A G E % 14% I M M M AAAAA G GG EEE % 15% I M M A A G G E % 16% IIIII M M A A GGGG EEEEE % 17% % 18% % 19% MagickWand Image Methods % 20% % 21% Software Design % 22% John Cristy % 23% August 2003 % 24% % 25% % 26% Copyright 1999-2011 ImageMagick Studio LLC, a non-profit organization % 27% dedicated to making software imaging solutions freely available. % 28% % 29% You may not use this file except in compliance with the License. You may % 30% obtain a copy of the License at % 31% % 32% http://www.imagemagick.org/script/license.php % 33% % 34% Unless required by applicable law or agreed to in writing, software % 35% distributed under the License is distributed on an "AS IS" BASIS, % 36% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. % 37% See the License for the specific language governing permissions and % 38% limitations under the License. % 39% % 40%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 41% 42% 43% 44*/ 45 46/* 47 Include declarations. 48*/ 49#include "MagickWand/studio.h" 50#include "MagickWand/MagickWand.h" 51#include "MagickWand/magick-wand-private.h" 52#include "MagickWand/wand.h" 53#include "MagickWand/pixel-wand-private.h" 54 55/* 56 Define declarations. 57*/ 58#define ThrowWandException(severity,tag,context) \ 59{ \ 60 (void) ThrowMagickException(wand->exception,GetMagickModule(),severity, \ 61 tag,"`%s'",context); \ 62 return(MagickFalse); \ 63} 64#define MagickWandId "MagickWand" 65 66/* 67%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 68% % 69% % 70% % 71+ C l o n e M a g i c k W a n d F r o m I m a g e s % 72% % 73% % 74% % 75%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 76% 77% CloneMagickWandFromImages() clones the magick wand and inserts a new image 78% list. 79% 80% The format of the CloneMagickWandFromImages method is: 81% 82% MagickWand *CloneMagickWandFromImages(const MagickWand *wand, 83% Image *images) 84% 85% A description of each parameter follows: 86% 87% o wand: the magick wand. 88% 89% o images: replace the image list with these image(s). 90% 91*/ 92static MagickWand *CloneMagickWandFromImages(const MagickWand *wand, 93 Image *images) 94{ 95 MagickWand 96 *clone_wand; 97 98 assert(wand != (MagickWand *) NULL); 99 assert(wand->signature == WandSignature); 100 if (wand->debug != MagickFalse) 101 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 102 clone_wand=(MagickWand *) AcquireMagickMemory(sizeof(*clone_wand)); 103 if (clone_wand == (MagickWand *) NULL) 104 ThrowWandFatalException(ResourceLimitFatalError,"MemoryAllocationFailed", 105 images->filename); 106 (void) ResetMagickMemory(clone_wand,0,sizeof(*clone_wand)); 107 clone_wand->id=AcquireWandId(); 108 (void) FormatLocaleString(clone_wand->name,MaxTextExtent,"%s-%.20g", 109 MagickWandId,(double) clone_wand->id); 110 clone_wand->exception=AcquireExceptionInfo(); 111 InheritException(clone_wand->exception,wand->exception); 112 clone_wand->image_info=CloneImageInfo(wand->image_info); 113 clone_wand->quantize_info=CloneQuantizeInfo(wand->quantize_info); 114 clone_wand->images=images; 115 clone_wand->debug=IsEventLogging(); 116 if (clone_wand->debug != MagickFalse) 117 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",clone_wand->name); 118 clone_wand->signature=WandSignature; 119 return(clone_wand); 120} 121 122/* 123%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 124% % 125% % 126% % 127% G e t I m a g e F r o m M a g i c k W a n d % 128% % 129% % 130% % 131%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 132% 133% GetImageFromMagickWand() returns the current image from the magick wand. 134% 135% The format of the GetImageFromMagickWand method is: 136% 137% Image *GetImageFromMagickWand(const MagickWand *wand) 138% 139% A description of each parameter follows: 140% 141% o wand: the magick wand. 142% 143*/ 144WandExport Image *GetImageFromMagickWand(const MagickWand *wand) 145{ 146 assert(wand != (MagickWand *) NULL); 147 assert(wand->signature == WandSignature); 148 if (wand->debug != MagickFalse) 149 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 150 if (wand->images == (Image *) NULL) 151 { 152 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 153 "ContainsNoImages","`%s'",wand->name); 154 return((Image *) NULL); 155 } 156 return(wand->images); 157} 158 159/* 160%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 161% % 162% % 163% % 164% M a g i c k A d a p t i v e S h a r p e n I m a g e % 165% % 166% % 167% % 168%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 169% 170% MagickAdaptiveBlurImage() adaptively blurs the image by blurring 171% less intensely near image edges and more intensely far from edges. We 172% blur the image with a Gaussian operator of the given radius and standard 173% deviation (sigma). For reasonable results, radius should be larger than 174% sigma. Use a radius of 0 and MagickAdaptiveBlurImage() selects a 175% suitable radius for you. 176% 177% The format of the MagickAdaptiveBlurImage method is: 178% 179% MagickBooleanType MagickAdaptiveBlurImage(MagickWand *wand, 180% const double radius,const double sigma,const double bias) 181% 182% A description of each parameter follows: 183% 184% o wand: the magick wand. 185% 186% o radius: the radius of the Gaussian, in pixels, not counting the center 187% pixel. 188% 189% o sigma: the standard deviation of the Gaussian, in pixels. 190% 191% o bias: the bias. 192% 193*/ 194WandExport MagickBooleanType MagickAdaptiveBlurImage(MagickWand *wand, 195 const double radius,const double sigma,const double bias) 196{ 197 Image 198 *sharp_image; 199 200 assert(wand != (MagickWand *) NULL); 201 assert(wand->signature == WandSignature); 202 if (wand->debug != MagickFalse) 203 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 204 if (wand->images == (Image *) NULL) 205 ThrowWandException(WandError,"ContainsNoImages",wand->name); 206 sharp_image=AdaptiveBlurImage(wand->images,radius,sigma,bias,wand->exception); 207 if (sharp_image == (Image *) NULL) 208 return(MagickFalse); 209 ReplaceImageInList(&wand->images,sharp_image); 210 return(MagickTrue); 211} 212 213/* 214%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 215% % 216% % 217% % 218% M a g i c k A d a p t i v e R e s i z e I m a g e % 219% % 220% % 221% % 222%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 223% 224% MagickAdaptiveResizeImage() adaptively resize image with data dependent 225% triangulation. 226% 227% MagickBooleanType MagickAdaptiveResizeImage(MagickWand *wand, 228% const size_t columns,const size_t rows, 229% const PixelInterpolateMethod method) 230% 231% A description of each parameter follows: 232% 233% o wand: the magick wand. 234% 235% o columns: the number of columns in the scaled image. 236% 237% o rows: the number of rows in the scaled image. 238% 239% o interpolate: the pixel interpolation method. 240% 241*/ 242WandExport MagickBooleanType MagickAdaptiveResizeImage(MagickWand *wand, 243 const size_t columns,const size_t rows,const PixelInterpolateMethod method) 244{ 245 Image 246 *resize_image; 247 248 assert(wand != (MagickWand *) NULL); 249 assert(wand->signature == WandSignature); 250 if (wand->debug != MagickFalse) 251 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 252 if (wand->images == (Image *) NULL) 253 ThrowWandException(WandError,"ContainsNoImages",wand->name); 254 resize_image=AdaptiveResizeImage(wand->images,columns,rows,method, 255 wand->exception); 256 if (resize_image == (Image *) NULL) 257 return(MagickFalse); 258 ReplaceImageInList(&wand->images,resize_image); 259 return(MagickTrue); 260} 261 262/* 263%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 264% % 265% % 266% % 267% M a g i c k A d a p t i v e S h a r p e n I m a g e % 268% % 269% % 270% % 271%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 272% 273% MagickAdaptiveSharpenImage() adaptively sharpens the image by sharpening 274% more intensely near image edges and less intensely far from edges. We 275% sharpen the image with a Gaussian operator of the given radius and standard 276% deviation (sigma). For reasonable results, radius should be larger than 277% sigma. Use a radius of 0 and MagickAdaptiveSharpenImage() selects a 278% suitable radius for you. 279% 280% The format of the MagickAdaptiveSharpenImage method is: 281% 282% MagickBooleanType MagickAdaptiveSharpenImage(MagickWand *wand, 283% const double radius,const double sigma,const double bias) 284% 285% A description of each parameter follows: 286% 287% o wand: the magick wand. 288% 289% o radius: the radius of the Gaussian, in pixels, not counting the center 290% pixel. 291% 292% o sigma: the standard deviation of the Gaussian, in pixels. 293% 294% o bias: the bias. 295% 296*/ 297WandExport MagickBooleanType MagickAdaptiveSharpenImage(MagickWand *wand, 298 const double radius,const double sigma,const double bias) 299{ 300 Image 301 *sharp_image; 302 303 assert(wand != (MagickWand *) NULL); 304 assert(wand->signature == WandSignature); 305 if (wand->debug != MagickFalse) 306 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 307 if (wand->images == (Image *) NULL) 308 ThrowWandException(WandError,"ContainsNoImages",wand->name); 309 sharp_image=AdaptiveSharpenImage(wand->images,radius,sigma,bias, 310 wand->exception); 311 if (sharp_image == (Image *) NULL) 312 return(MagickFalse); 313 ReplaceImageInList(&wand->images,sharp_image); 314 return(MagickTrue); 315} 316 317/* 318%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 319% % 320% % 321% % 322% M a g i c k A d a p t i v e T h r e s h o l d I m a g e % 323% % 324% % 325% % 326%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 327% 328% MagickAdaptiveThresholdImage() selects an individual threshold for each pixel 329% based on the range of intensity values in its local neighborhood. This 330% allows for thresholding of an image whose global intensity histogram 331% doesn't contain distinctive peaks. 332% 333% The format of the AdaptiveThresholdImage method is: 334% 335% MagickBooleanType MagickAdaptiveThresholdImage(MagickWand *wand, 336% const size_t width,const size_t height,const ssize_t offset) 337% 338% A description of each parameter follows: 339% 340% o wand: the magick wand. 341% 342% o width: the width of the local neighborhood. 343% 344% o height: the height of the local neighborhood. 345% 346% o offset: the mean offset. 347% 348*/ 349WandExport MagickBooleanType MagickAdaptiveThresholdImage(MagickWand *wand, 350 const size_t width,const size_t height,const ssize_t offset) 351{ 352 Image 353 *threshold_image; 354 355 assert(wand != (MagickWand *) NULL); 356 assert(wand->signature == WandSignature); 357 if (wand->debug != MagickFalse) 358 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 359 if (wand->images == (Image *) NULL) 360 ThrowWandException(WandError,"ContainsNoImages",wand->name); 361 threshold_image=AdaptiveThresholdImage(wand->images,width,height,offset, 362 wand->exception); 363 if (threshold_image == (Image *) NULL) 364 return(MagickFalse); 365 ReplaceImageInList(&wand->images,threshold_image); 366 return(MagickTrue); 367} 368 369/* 370%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 371% % 372% % 373% % 374% M a g i c k A d d I m a g e % 375% % 376% % 377% % 378%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 379% 380% MagickAddImage() adds the specified images at the current image location. 381% 382% The format of the MagickAddImage method is: 383% 384% MagickBooleanType MagickAddImage(MagickWand *wand, 385% const MagickWand *add_wand) 386% 387% A description of each parameter follows: 388% 389% o wand: the magick wand. 390% 391% o add_wand: A wand that contains images to add at the current image 392% location. 393% 394*/ 395 396static inline MagickBooleanType InsertImageInWand(MagickWand *wand, 397 Image *images) 398{ 399 Image 400 *sentinel; 401 402 sentinel=wand->images; 403 if (sentinel == (Image *) NULL) 404 { 405 wand->images=GetFirstImageInList(images); 406 return(MagickTrue); 407 } 408 if (wand->active == MagickFalse) 409 { 410 if ((wand->pend != MagickFalse) && (sentinel->next == (Image *) NULL)) 411 { 412 AppendImageToList(&sentinel,images); 413 wand->images=GetLastImageInList(images); 414 return(MagickTrue); 415 } 416 if ((wand->pend != MagickFalse) && (sentinel->previous == (Image *) NULL)) 417 { 418 PrependImageToList(&sentinel,images); 419 wand->images=GetFirstImageInList(images); 420 return(MagickTrue); 421 } 422 } 423 if (sentinel->next == (Image *) NULL) 424 { 425 InsertImageInList(&sentinel,images); 426 wand->images=GetLastImageInList(images); 427 return(MagickTrue); 428 } 429 InsertImageInList(&sentinel,images); 430 wand->images=GetFirstImageInList(images); 431 return(MagickTrue); 432} 433 434WandExport MagickBooleanType MagickAddImage(MagickWand *wand, 435 const MagickWand *add_wand) 436{ 437 Image 438 *images; 439 440 assert(wand != (MagickWand *) NULL); 441 assert(wand->signature == WandSignature); 442 if (wand->debug != MagickFalse) 443 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 444 assert(add_wand != (MagickWand *) NULL); 445 assert(add_wand->signature == WandSignature); 446 if (add_wand->images == (Image *) NULL) 447 ThrowWandException(WandError,"ContainsNoImages",add_wand->name); 448 images=CloneImageList(add_wand->images,wand->exception); 449 if (images == (Image *) NULL) 450 return(MagickFalse); 451 return(InsertImageInWand(wand,images)); 452} 453 454/* 455%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 456% % 457% % 458% % 459% M a g i c k A d d N o i s e I m a g e % 460% % 461% % 462% % 463%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 464% 465% MagickAddNoiseImage() adds random noise to the image. 466% 467% The format of the MagickAddNoiseImage method is: 468% 469% MagickBooleanType MagickAddNoiseImage(MagickWand *wand, 470% const NoiseType noise_type) 471% 472% A description of each parameter follows: 473% 474% o wand: the magick wand. 475% 476% o noise_type: The type of noise: Uniform, Gaussian, Multiplicative, 477% Impulse, Laplacian, or Poisson. 478% 479*/ 480WandExport MagickBooleanType MagickAddNoiseImage(MagickWand *wand, 481 const NoiseType noise_type) 482{ 483 Image 484 *noise_image; 485 486 assert(wand != (MagickWand *) NULL); 487 assert(wand->signature == WandSignature); 488 if (wand->debug != MagickFalse) 489 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 490 if (wand->images == (Image *) NULL) 491 ThrowWandException(WandError,"ContainsNoImages",wand->name); 492 noise_image=AddNoiseImage(wand->images,noise_type,wand->exception); 493 if (noise_image == (Image *) NULL) 494 return(MagickFalse); 495 ReplaceImageInList(&wand->images,noise_image); 496 return(MagickTrue); 497} 498 499/* 500%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 501% % 502% % 503% % 504% 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 % 505% % 506% % 507% % 508%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 509% 510% MagickAffineTransformImage() transforms an image as dictated by the affine 511% matrix of the drawing wand. 512% 513% The format of the MagickAffineTransformImage method is: 514% 515% MagickBooleanType MagickAffineTransformImage(MagickWand *wand, 516% const DrawingWand *drawing_wand) 517% 518% A description of each parameter follows: 519% 520% o wand: the magick wand. 521% 522% o drawing_wand: the draw wand. 523% 524*/ 525WandExport MagickBooleanType MagickAffineTransformImage(MagickWand *wand, 526 const DrawingWand *drawing_wand) 527{ 528 DrawInfo 529 *draw_info; 530 531 Image 532 *affine_image; 533 534 assert(wand != (MagickWand *) NULL); 535 assert(wand->signature == WandSignature); 536 if (wand->debug != MagickFalse) 537 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 538 if (wand->images == (Image *) NULL) 539 ThrowWandException(WandError,"ContainsNoImages",wand->name); 540 draw_info=PeekDrawingWand(drawing_wand); 541 if (draw_info == (DrawInfo *) NULL) 542 return(MagickFalse); 543 affine_image=AffineTransformImage(wand->images,&draw_info->affine, 544 wand->exception); 545 draw_info=DestroyDrawInfo(draw_info); 546 if (affine_image == (Image *) NULL) 547 return(MagickFalse); 548 ReplaceImageInList(&wand->images,affine_image); 549 return(MagickTrue); 550} 551 552/* 553%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 554% % 555% % 556% % 557% M a g i c k A n n o t a t e I m a g e % 558% % 559% % 560% % 561%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 562% 563% MagickAnnotateImage() annotates an image with text. 564% 565% The format of the MagickAnnotateImage method is: 566% 567% MagickBooleanType MagickAnnotateImage(MagickWand *wand, 568% const DrawingWand *drawing_wand,const double x,const double y, 569% const double angle,const char *text) 570% 571% A description of each parameter follows: 572% 573% o wand: the magick wand. 574% 575% o drawing_wand: the draw wand. 576% 577% o x: x ordinate to left of text 578% 579% o y: y ordinate to text baseline 580% 581% o angle: rotate text relative to this angle. 582% 583% o text: text to draw 584% 585*/ 586WandExport MagickBooleanType MagickAnnotateImage(MagickWand *wand, 587 const DrawingWand *drawing_wand,const double x,const double y, 588 const double angle,const char *text) 589{ 590 char 591 geometry[MaxTextExtent]; 592 593 DrawInfo 594 *draw_info; 595 596 MagickBooleanType 597 status; 598 599 assert(wand != (MagickWand *) NULL); 600 assert(wand->signature == WandSignature); 601 if (wand->debug != MagickFalse) 602 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 603 if (wand->images == (Image *) NULL) 604 ThrowWandException(WandError,"ContainsNoImages",wand->name); 605 draw_info=PeekDrawingWand(drawing_wand); 606 if (draw_info == (DrawInfo *) NULL) 607 return(MagickFalse); 608 (void) CloneString(&draw_info->text,text); 609 (void) FormatLocaleString(geometry,MaxTextExtent,"%+g%+g",x,y); 610 draw_info->affine.sx=cos(DegreesToRadians(fmod(angle,360.0))); 611 draw_info->affine.rx=sin(DegreesToRadians(fmod(angle,360.0))); 612 draw_info->affine.ry=(-sin(DegreesToRadians(fmod(angle,360.0)))); 613 draw_info->affine.sy=cos(DegreesToRadians(fmod(angle,360.0))); 614 (void) CloneString(&draw_info->geometry,geometry); 615 status=AnnotateImage(wand->images,draw_info,&wand->images->exception); 616 draw_info=DestroyDrawInfo(draw_info); 617 return(status); 618} 619 620/* 621%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 622% % 623% % 624% % 625% M a g i c k A n i m a t e I m a g e s % 626% % 627% % 628% % 629%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 630% 631% MagickAnimateImages() animates an image or image sequence. 632% 633% The format of the MagickAnimateImages method is: 634% 635% MagickBooleanType MagickAnimateImages(MagickWand *wand, 636% const char *server_name) 637% 638% A description of each parameter follows: 639% 640% o wand: the magick wand. 641% 642% o server_name: the X server name. 643% 644*/ 645WandExport MagickBooleanType MagickAnimateImages(MagickWand *wand, 646 const char *server_name) 647{ 648 MagickBooleanType 649 status; 650 651 assert(wand != (MagickWand *) NULL); 652 assert(wand->signature == WandSignature); 653 if (wand->debug != MagickFalse) 654 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 655 (void) CloneString(&wand->image_info->server_name,server_name); 656 status=AnimateImages(wand->image_info,wand->images,&wand->images->exception); 657 return(status); 658} 659 660/* 661%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 662% % 663% % 664% % 665% M a g i c k A p p e n d I m a g e s % 666% % 667% % 668% % 669%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 670% 671% MagickAppendImages() append a set of images. 672% 673% The format of the MagickAppendImages method is: 674% 675% MagickWand *MagickAppendImages(MagickWand *wand, 676% const MagickBooleanType stack) 677% 678% A description of each parameter follows: 679% 680% o wand: the magick wand. 681% 682% o stack: By default, images are stacked left-to-right. Set stack to 683% MagickTrue to stack them top-to-bottom. 684% 685*/ 686WandExport MagickWand *MagickAppendImages(MagickWand *wand, 687 const MagickBooleanType stack) 688{ 689 Image 690 *append_image; 691 692 assert(wand != (MagickWand *) NULL); 693 assert(wand->signature == WandSignature); 694 if (wand->debug != MagickFalse) 695 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 696 if (wand->images == (Image *) NULL) 697 return((MagickWand *) NULL); 698 append_image=AppendImages(wand->images,stack,wand->exception); 699 if (append_image == (Image *) NULL) 700 return((MagickWand *) NULL); 701 return(CloneMagickWandFromImages(wand,append_image)); 702} 703 704/* 705%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 706% % 707% % 708% % 709% M a g i c k A u t o G a m m a I m a g e % 710% % 711% % 712% % 713%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 714% 715% MagickAutoGammaImage() extracts the 'mean' from the image and adjust the 716% image to try make set its gamma appropriatally. 717% 718% The format of the MagickAutoGammaImage method is: 719% 720% MagickBooleanType MagickAutoGammaImage(MagickWand *wand) 721% 722% A description of each parameter follows: 723% 724% o wand: the magick wand. 725% 726*/ 727WandExport MagickBooleanType MagickAutoGammaImage(MagickWand *wand) 728{ 729 MagickBooleanType 730 status; 731 732 assert(wand != (MagickWand *) NULL); 733 assert(wand->signature == WandSignature); 734 if (wand->debug != MagickFalse) 735 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 736 if (wand->images == (Image *) NULL) 737 ThrowWandException(WandError,"ContainsNoImages",wand->name); 738 status=AutoGammaImage(wand->images,&wand->images->exception); 739 return(status); 740} 741 742/* 743%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 744% % 745% % 746% % 747% M a g i c k A u t o L e v e l I m a g e % 748% % 749% % 750% % 751%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 752% 753% MagickAutoLevelImage() adjusts the levels of a particular image channel by 754% scaling the minimum and maximum values to the full quantum range. 755% 756% The format of the MagickAutoLevelImage method is: 757% 758% MagickBooleanType MagickAutoLevelImage(MagickWand *wand) 759% 760% A description of each parameter follows: 761% 762% o wand: the magick wand. 763% 764*/ 765WandExport MagickBooleanType MagickAutoLevelImage(MagickWand *wand) 766{ 767 MagickBooleanType 768 status; 769 770 assert(wand != (MagickWand *) NULL); 771 assert(wand->signature == WandSignature); 772 if (wand->debug != MagickFalse) 773 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 774 if (wand->images == (Image *) NULL) 775 ThrowWandException(WandError,"ContainsNoImages",wand->name); 776 status=AutoLevelImage(wand->images,&wand->images->exception); 777 return(status); 778} 779 780/* 781%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 782% % 783% % 784% % 785% 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 % 786% % 787% % 788% % 789%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 790% 791% MagickBlackThresholdImage() is like MagickThresholdImage() but forces all 792% pixels below the threshold into black while leaving all pixels above the 793% threshold unchanged. 794% 795% The format of the MagickBlackThresholdImage method is: 796% 797% MagickBooleanType MagickBlackThresholdImage(MagickWand *wand, 798% const PixelWand *threshold) 799% 800% A description of each parameter follows: 801% 802% o wand: the magick wand. 803% 804% o threshold: the pixel wand. 805% 806*/ 807WandExport MagickBooleanType MagickBlackThresholdImage(MagickWand *wand, 808 const PixelWand *threshold) 809{ 810 char 811 thresholds[MaxTextExtent]; 812 813 MagickBooleanType 814 status; 815 816 assert(wand != (MagickWand *) NULL); 817 assert(wand->signature == WandSignature); 818 if (wand->debug != MagickFalse) 819 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 820 if (wand->images == (Image *) NULL) 821 ThrowWandException(WandError,"ContainsNoImages",wand->name); 822 (void) FormatLocaleString(thresholds,MaxTextExtent, 823 QuantumFormat "," QuantumFormat "," QuantumFormat "," QuantumFormat, 824 PixelGetRedQuantum(threshold),PixelGetGreenQuantum(threshold), 825 PixelGetBlueQuantum(threshold),PixelGetOpacityQuantum(threshold)); 826 status=BlackThresholdImage(wand->images,thresholds,&wand->images->exception); 827 if (status == MagickFalse) 828 InheritException(wand->exception,&wand->images->exception); 829 return(status); 830} 831 832/* 833%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 834% % 835% % 836% % 837% M a g i c k B l u e S h i f t I m a g e % 838% % 839% % 840% % 841%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 842% 843% MagickBlueShiftImage() mutes the colors of the image to simulate a scene at 844% nighttime in the moonlight. 845% 846% The format of the MagickBlueShiftImage method is: 847% 848% MagickBooleanType MagickBlueShiftImage(MagickWand *wand, 849% const double factor) 850% 851% A description of each parameter follows: 852% 853% o wand: the magick wand. 854% 855% o factor: the blue shift factor (default 1.5) 856% 857*/ 858WandExport MagickBooleanType MagickBlueShiftImage(MagickWand *wand, 859 const double factor) 860{ 861 Image 862 *shift_image; 863 864 assert(wand != (MagickWand *) NULL); 865 assert(wand->signature == WandSignature); 866 if (wand->debug != MagickFalse) 867 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 868 if (wand->images == (Image *) NULL) 869 ThrowWandException(WandError,"ContainsNoImages",wand->name); 870 shift_image=BlueShiftImage(wand->images,factor,wand->exception); 871 if (shift_image == (Image *) NULL) 872 return(MagickFalse); 873 ReplaceImageInList(&wand->images,shift_image); 874 return(MagickTrue); 875} 876 877/* 878%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 879% % 880% % 881% % 882% M a g i c k B l u r I m a g e % 883% % 884% % 885% % 886%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 887% 888% MagickBlurImage() blurs an image. We convolve the image with a 889% gaussian operator of the given radius and standard deviation (sigma). 890% For reasonable results, the radius should be larger than sigma. Use a 891% radius of 0 and BlurImage() selects a suitable radius for you. 892% 893% The format of the MagickBlurImage method is: 894% 895% MagickBooleanType MagickBlurImage(MagickWand *wand,const double radius, 896% const double sigmaconst double bias) 897% 898% A description of each parameter follows: 899% 900% o wand: the magick wand. 901% 902% o radius: the radius of the , in pixels, not counting the center 903% pixel. 904% 905% o sigma: the standard deviation of the , in pixels. 906% 907% o bias: the bias. 908% 909*/ 910WandExport MagickBooleanType MagickBlurImage(MagickWand *wand, 911 const double radius,const double sigma,const double bias) 912{ 913 Image 914 *blur_image; 915 916 assert(wand != (MagickWand *) NULL); 917 assert(wand->signature == WandSignature); 918 if (wand->debug != MagickFalse) 919 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 920 if (wand->images == (Image *) NULL) 921 ThrowWandException(WandError,"ContainsNoImages",wand->name); 922 blur_image=BlurImage(wand->images,radius,sigma,bias,wand->exception); 923 if (blur_image == (Image *) NULL) 924 return(MagickFalse); 925 ReplaceImageInList(&wand->images,blur_image); 926 return(MagickTrue); 927} 928 929/* 930%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 931% % 932% % 933% % 934% M a g i c k B o r d e r I m a g e % 935% % 936% % 937% % 938%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 939% 940% MagickBorderImage() surrounds the image with a border of the color defined 941% by the bordercolor pixel wand. 942% 943% The format of the MagickBorderImage method is: 944% 945% MagickBooleanType MagickBorderImage(MagickWand *wand, 946% const PixelWand *bordercolor,const size_t width, 947% const size_t height,const CompositeOperator compose) 948% 949% A description of each parameter follows: 950% 951% o wand: the magick wand. 952% 953% o bordercolor: the border color pixel wand. 954% 955% o width: the border width. 956% 957% o height: the border height. 958% 959% o compose: the composite operator. 960% 961*/ 962WandExport MagickBooleanType MagickBorderImage(MagickWand *wand, 963 const PixelWand *bordercolor,const size_t width,const size_t height, 964 const CompositeOperator compose) 965{ 966 Image 967 *border_image; 968 969 RectangleInfo 970 border_info; 971 972 assert(wand != (MagickWand *) NULL); 973 assert(wand->signature == WandSignature); 974 if (wand->debug != MagickFalse) 975 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 976 if (wand->images == (Image *) NULL) 977 ThrowWandException(WandError,"ContainsNoImages",wand->name); 978 border_info.width=width; 979 border_info.height=height; 980 border_info.x=0; 981 border_info.y=0; 982 PixelGetQuantumPacket(bordercolor,&wand->images->border_color); 983 border_image=BorderImage(wand->images,&border_info,compose,wand->exception); 984 if (border_image == (Image *) NULL) 985 return(MagickFalse); 986 ReplaceImageInList(&wand->images,border_image); 987 return(MagickTrue); 988} 989 990/* 991%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 992% % 993% % 994% % 995% 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 % 996% % 997% % 998% % 999%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1000% 1001% Use MagickBrightnessContrastImage() to change the brightness and/or contrast 1002% of an image. It converts the brightness and contrast parameters into slope 1003% and intercept and calls a polynomical function to apply to the image. 1004 1005% 1006% The format of the MagickBrightnessContrastImage method is: 1007% 1008% MagickBooleanType MagickBrightnessContrastImage(MagickWand *wand, 1009% const double brightness,const double contrast) 1010% 1011% A description of each parameter follows: 1012% 1013% o wand: the magick wand. 1014% 1015% o brightness: the brightness percent (-100 .. 100). 1016% 1017% o contrast: the contrast percent (-100 .. 100). 1018% 1019*/ 1020WandExport MagickBooleanType MagickBrightnessContrastImage( 1021 MagickWand *wand,const double brightness,const double contrast) 1022{ 1023 MagickBooleanType 1024 status; 1025 1026 assert(wand != (MagickWand *) NULL); 1027 assert(wand->signature == WandSignature); 1028 if (wand->debug != MagickFalse) 1029 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1030 if (wand->images == (Image *) NULL) 1031 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1032 status=BrightnessContrastImage(wand->images,brightness,contrast, 1033 &wand->images->exception); 1034 return(status); 1035} 1036 1037/* 1038%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1039% % 1040% % 1041% % 1042% M a g i c k C h a r c o a l I m a g e % 1043% % 1044% % 1045% % 1046%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1047% 1048% MagickCharcoalImage() simulates a charcoal drawing. 1049% 1050% The format of the MagickCharcoalImage method is: 1051% 1052% MagickBooleanType MagickCharcoalImage(MagickWand *wand, 1053% const double radius,const double sigma,const double bias) 1054% 1055% A description of each parameter follows: 1056% 1057% o wand: the magick wand. 1058% 1059% o radius: the radius of the Gaussian, in pixels, not counting the center 1060% pixel. 1061% 1062% o sigma: the standard deviation of the Gaussian, in pixels. 1063% 1064% o bias: the bias. 1065% 1066*/ 1067WandExport MagickBooleanType MagickCharcoalImage(MagickWand *wand, 1068 const double radius,const double sigma,const double bias) 1069{ 1070 Image 1071 *charcoal_image; 1072 1073 assert(wand != (MagickWand *) NULL); 1074 assert(wand->signature == WandSignature); 1075 if (wand->debug != MagickFalse) 1076 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1077 if (wand->images == (Image *) NULL) 1078 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1079 charcoal_image=CharcoalImage(wand->images,radius,sigma,bias,wand->exception); 1080 if (charcoal_image == (Image *) NULL) 1081 return(MagickFalse); 1082 ReplaceImageInList(&wand->images,charcoal_image); 1083 return(MagickTrue); 1084} 1085 1086/* 1087%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1088% % 1089% % 1090% % 1091% M a g i c k C h o p I m a g e % 1092% % 1093% % 1094% % 1095%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1096% 1097% MagickChopImage() removes a region of an image and collapses the image to 1098% occupy the removed portion 1099% 1100% The format of the MagickChopImage method is: 1101% 1102% MagickBooleanType MagickChopImage(MagickWand *wand, 1103% const size_t width,const size_t height,const ssize_t x, 1104% const ssize_t y) 1105% 1106% A description of each parameter follows: 1107% 1108% o wand: the magick wand. 1109% 1110% o width: the region width. 1111% 1112% o height: the region height. 1113% 1114% o x: the region x offset. 1115% 1116% o y: the region y offset. 1117% 1118% 1119*/ 1120WandExport MagickBooleanType MagickChopImage(MagickWand *wand, 1121 const size_t width,const size_t height,const ssize_t x, 1122 const ssize_t y) 1123{ 1124 Image 1125 *chop_image; 1126 1127 RectangleInfo 1128 chop; 1129 1130 assert(wand != (MagickWand *) NULL); 1131 assert(wand->signature == WandSignature); 1132 if (wand->debug != MagickFalse) 1133 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1134 if (wand->images == (Image *) NULL) 1135 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1136 chop.width=width; 1137 chop.height=height; 1138 chop.x=x; 1139 chop.y=y; 1140 chop_image=ChopImage(wand->images,&chop,wand->exception); 1141 if (chop_image == (Image *) NULL) 1142 return(MagickFalse); 1143 ReplaceImageInList(&wand->images,chop_image); 1144 return(MagickTrue); 1145} 1146 1147/* 1148%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1149% % 1150% % 1151% % 1152% M a g i c k C l a m p I m a g e % 1153% % 1154% % 1155% % 1156%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1157% 1158% MagickClampImage() restricts the color range from 0 to the quantum depth. 1159% 1160% The format of the MagickClampImage method is: 1161% 1162% MagickBooleanType MagickClampImage(MagickWand *wand) 1163% 1164% A description of each parameter follows: 1165% 1166% o wand: the magick wand. 1167% 1168% o channel: the channel. 1169% 1170*/ 1171WandExport MagickBooleanType MagickClampImage(MagickWand *wand) 1172{ 1173 MagickBooleanType 1174 status; 1175 1176 assert(wand != (MagickWand *) NULL); 1177 assert(wand->signature == WandSignature); 1178 if (wand->debug != MagickFalse) 1179 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1180 if (wand->images == (Image *) NULL) 1181 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1182 status=ClampImage(wand->images); 1183 if (status == MagickFalse) 1184 InheritException(wand->exception,&wand->images->exception); 1185 return(status); 1186} 1187 1188/* 1189%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1190% % 1191% % 1192% % 1193% M a g i c k C l i p I m a g e % 1194% % 1195% % 1196% % 1197%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1198% 1199% MagickClipImage() clips along the first path from the 8BIM profile, if 1200% present. 1201% 1202% The format of the MagickClipImage method is: 1203% 1204% MagickBooleanType MagickClipImage(MagickWand *wand) 1205% 1206% A description of each parameter follows: 1207% 1208% o wand: the magick wand. 1209% 1210*/ 1211WandExport MagickBooleanType MagickClipImage(MagickWand *wand) 1212{ 1213 MagickBooleanType 1214 status; 1215 1216 assert(wand != (MagickWand *) NULL); 1217 assert(wand->signature == WandSignature); 1218 if (wand->debug != MagickFalse) 1219 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1220 if (wand->images == (Image *) NULL) 1221 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1222 status=ClipImage(wand->images,wand->exception); 1223 return(status); 1224} 1225 1226/* 1227%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1228% % 1229% % 1230% % 1231% M a g i c k C l i p I m a g e P a t h % 1232% % 1233% % 1234% % 1235%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1236% 1237% MagickClipImagePath() clips along the named paths from the 8BIM profile, if 1238% present. Later operations take effect inside the path. Id may be a number 1239% if preceded with #, to work on a numbered path, e.g., "#1" to use the first 1240% path. 1241% 1242% The format of the MagickClipImagePath method is: 1243% 1244% MagickBooleanType MagickClipImagePath(MagickWand *wand, 1245% const char *pathname,const MagickBooleanType inside) 1246% 1247% A description of each parameter follows: 1248% 1249% o wand: the magick wand. 1250% 1251% o pathname: name of clipping path resource. If name is preceded by #, use 1252% clipping path numbered by name. 1253% 1254% o inside: if non-zero, later operations take effect inside clipping path. 1255% Otherwise later operations take effect outside clipping path. 1256% 1257*/ 1258WandExport MagickBooleanType MagickClipImagePath(MagickWand *wand, 1259 const char *pathname,const MagickBooleanType inside) 1260{ 1261 MagickBooleanType 1262 status; 1263 1264 assert(wand != (MagickWand *) NULL); 1265 assert(wand->signature == WandSignature); 1266 if (wand->debug != MagickFalse) 1267 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1268 if (wand->images == (Image *) NULL) 1269 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1270 status=ClipImagePath(wand->images,pathname,inside,wand->exception); 1271 return(status); 1272} 1273 1274/* 1275%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1276% % 1277% % 1278% % 1279% M a g i c k C l u t I m a g e % 1280% % 1281% % 1282% % 1283%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1284% 1285% MagickClutImage() replaces colors in the image from a color lookup table. 1286% 1287% The format of the MagickClutImage method is: 1288% 1289% MagickBooleanType MagickClutImage(MagickWand *wand, 1290% const MagickWand *clut_wand,const PixelInterpolateMethod method) 1291% 1292% A description of each parameter follows: 1293% 1294% o wand: the magick wand. 1295% 1296% o clut_image: the clut image. 1297% 1298% o method: the pixel interpolation method. 1299% 1300*/ 1301WandExport MagickBooleanType MagickClutImage(MagickWand *wand, 1302 const MagickWand *clut_wand,const PixelInterpolateMethod method) 1303{ 1304 MagickBooleanType 1305 status; 1306 1307 assert(wand != (MagickWand *) NULL); 1308 assert(wand->signature == WandSignature); 1309 if (wand->debug != MagickFalse) 1310 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1311 if ((wand->images == (Image *) NULL) || (clut_wand->images == (Image *) NULL)) 1312 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1313 status=ClutImage(wand->images,clut_wand->images,method,wand->exception); 1314 return(status); 1315} 1316 1317/* 1318%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1319% % 1320% % 1321% % 1322% M a g i c k C o a l e s c e I m a g e s % 1323% % 1324% % 1325% % 1326%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1327% 1328% MagickCoalesceImages() composites a set of images while respecting any page 1329% offsets and disposal methods. GIF, MIFF, and MNG animation sequences 1330% typically start with an image background and each subsequent image 1331% varies in size and offset. MagickCoalesceImages() returns a new sequence 1332% where each image in the sequence is the same size as the first and 1333% composited with the next image in the sequence. 1334% 1335% The format of the MagickCoalesceImages method is: 1336% 1337% MagickWand *MagickCoalesceImages(MagickWand *wand) 1338% 1339% A description of each parameter follows: 1340% 1341% o wand: the magick wand. 1342% 1343*/ 1344WandExport MagickWand *MagickCoalesceImages(MagickWand *wand) 1345{ 1346 Image 1347 *coalesce_image; 1348 1349 assert(wand != (MagickWand *) NULL); 1350 assert(wand->signature == WandSignature); 1351 if (wand->debug != MagickFalse) 1352 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1353 if (wand->images == (Image *) NULL) 1354 return((MagickWand *) NULL); 1355 coalesce_image=CoalesceImages(wand->images,wand->exception); 1356 if (coalesce_image == (Image *) NULL) 1357 return((MagickWand *) NULL); 1358 return(CloneMagickWandFromImages(wand,coalesce_image)); 1359} 1360 1361/* 1362%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1363% % 1364% % 1365% % 1366% M a g i c k C o l o r D e c i s i o n I m a g e % 1367% % 1368% % 1369% % 1370%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1371% 1372% MagickColorDecisionListImage() accepts a lightweight Color Correction 1373% Collection (CCC) file which solely contains one or more color corrections 1374% and applies the color correction to the image. Here is a sample CCC file: 1375% 1376% <ColorCorrectionCollection xmlns="urn:ASC:CDL:v1.2"> 1377% <ColorCorrection id="cc03345"> 1378% <SOPNode> 1379% <Slope> 0.9 1.2 0.5 </Slope> 1380% <Offset> 0.4 -0.5 0.6 </Offset> 1381% <Power> 1.0 0.8 1.5 </Power> 1382% </SOPNode> 1383% <SATNode> 1384% <Saturation> 0.85 </Saturation> 1385% </SATNode> 1386% </ColorCorrection> 1387% </ColorCorrectionCollection> 1388% 1389% which includes the offset, slope, and power for each of the RGB channels 1390% as well as the saturation. 1391% 1392% The format of the MagickColorDecisionListImage method is: 1393% 1394% MagickBooleanType MagickColorDecisionListImage(MagickWand *wand, 1395% const double gamma) 1396% 1397% A description of each parameter follows: 1398% 1399% o wand: the magick wand. 1400% 1401% o color_correction_collection: the color correction collection in XML. 1402% 1403*/ 1404WandExport MagickBooleanType MagickColorDecisionListImage(MagickWand *wand, 1405 const char *color_correction_collection) 1406{ 1407 MagickBooleanType 1408 status; 1409 1410 assert(wand != (MagickWand *) NULL); 1411 assert(wand->signature == WandSignature); 1412 if (wand->debug != MagickFalse) 1413 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1414 if (wand->images == (Image *) NULL) 1415 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1416 status=ColorDecisionListImage(wand->images,color_correction_collection, 1417 &wand->images->exception); 1418 return(status); 1419} 1420 1421/* 1422%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1423% % 1424% % 1425% % 1426% M a g i c k C o l o r i z e I m a g e % 1427% % 1428% % 1429% % 1430%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1431% 1432% MagickColorizeImage() blends the fill color with each pixel in the image. 1433% 1434% The format of the MagickColorizeImage method is: 1435% 1436% MagickBooleanType MagickColorizeImage(MagickWand *wand, 1437% const PixelWand *colorize,const PixelWand *opacity) 1438% 1439% A description of each parameter follows: 1440% 1441% o wand: the magick wand. 1442% 1443% o colorize: the colorize pixel wand. 1444% 1445% o opacity: the opacity pixel wand. 1446% 1447*/ 1448WandExport MagickBooleanType MagickColorizeImage(MagickWand *wand, 1449 const PixelWand *colorize,const PixelWand *opacity) 1450{ 1451 char 1452 percent_opaque[MaxTextExtent]; 1453 1454 Image 1455 *colorize_image; 1456 1457 PixelPacket 1458 target; 1459 1460 assert(wand != (MagickWand *) NULL); 1461 assert(wand->signature == WandSignature); 1462 if (wand->debug != MagickFalse) 1463 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1464 if (wand->images == (Image *) NULL) 1465 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1466 (void) FormatLocaleString(percent_opaque,MaxTextExtent, 1467 "%g,%g,%g,%g",(double) (100.0*QuantumScale* 1468 PixelGetRedQuantum(opacity)),(double) (100.0*QuantumScale* 1469 PixelGetGreenQuantum(opacity)),(double) (100.0*QuantumScale* 1470 PixelGetBlueQuantum(opacity)),(double) (100.0*QuantumScale* 1471 PixelGetOpacityQuantum(opacity))); 1472 PixelGetQuantumPacket(colorize,&target); 1473 colorize_image=ColorizeImage(wand->images,percent_opaque,target, 1474 wand->exception); 1475 if (colorize_image == (Image *) NULL) 1476 return(MagickFalse); 1477 ReplaceImageInList(&wand->images,colorize_image); 1478 return(MagickTrue); 1479} 1480 1481/* 1482%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1483% % 1484% % 1485% % 1486% M a g i c k C o l o r M a t r i x I m a g e % 1487% % 1488% % 1489% % 1490%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1491% 1492% MagickColorMatrixImage() apply color transformation to an image. The method 1493% permits saturation changes, hue rotation, luminance to alpha, and various 1494% other effects. Although variable-sized transformation matrices can be used, 1495% typically one uses a 5x5 matrix for an RGBA image and a 6x6 for CMYKA 1496% (or RGBA with offsets). The matrix is similar to those used by Adobe Flash 1497% except offsets are in column 6 rather than 5 (in support of CMYKA images) 1498% and offsets are normalized (divide Flash offset by 255). 1499% 1500% The format of the MagickColorMatrixImage method is: 1501% 1502% MagickBooleanType MagickColorMatrixImage(MagickWand *wand, 1503% const KernelInfo *color_matrix) 1504% 1505% A description of each parameter follows: 1506% 1507% o wand: the magick wand. 1508% 1509% o color_matrix: the color matrix. 1510% 1511*/ 1512WandExport MagickBooleanType MagickColorMatrixImage(MagickWand *wand, 1513 const KernelInfo *color_matrix) 1514{ 1515 Image 1516 *color_image; 1517 1518 assert(wand != (MagickWand *) NULL); 1519 assert(wand->signature == WandSignature); 1520 if (wand->debug != MagickFalse) 1521 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1522 if (color_matrix == (const KernelInfo *) NULL) 1523 return(MagickFalse); 1524 if (wand->images == (Image *) NULL) 1525 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1526 color_image=ColorMatrixImage(wand->images,color_matrix,wand->exception); 1527 if (color_image == (Image *) NULL) 1528 return(MagickFalse); 1529 ReplaceImageInList(&wand->images,color_image); 1530 return(MagickTrue); 1531} 1532 1533/* 1534%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1535% % 1536% % 1537% % 1538% M a g i c k C o m b i n e I m a g e s % 1539% % 1540% % 1541% % 1542%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1543% 1544% MagickCombineImages() combines one or more images into a single image. The 1545% grayscale value of the pixels of each image in the sequence is assigned in 1546% order to the specified hannels of the combined image. The typical 1547% ordering would be image 1 => Red, 2 => Green, 3 => Blue, etc. 1548% 1549% The format of the MagickCombineImages method is: 1550% 1551% MagickWand *MagickCombineImages(MagickWand *wand) 1552% 1553% A description of each parameter follows: 1554% 1555% o wand: the magick wand. 1556% 1557*/ 1558WandExport MagickWand *MagickCombineImages(MagickWand *wand) 1559{ 1560 Image 1561 *combine_image; 1562 1563 assert(wand != (MagickWand *) NULL); 1564 assert(wand->signature == WandSignature); 1565 if (wand->debug != MagickFalse) 1566 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1567 if (wand->images == (Image *) NULL) 1568 return((MagickWand *) NULL); 1569 combine_image=CombineImages(wand->images,wand->exception); 1570 if (combine_image == (Image *) NULL) 1571 return((MagickWand *) NULL); 1572 return(CloneMagickWandFromImages(wand,combine_image)); 1573} 1574 1575/* 1576%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1577% % 1578% % 1579% % 1580% M a g i c k C o m m e n t I m a g e % 1581% % 1582% % 1583% % 1584%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1585% 1586% MagickCommentImage() adds a comment to your image. 1587% 1588% The format of the MagickCommentImage method is: 1589% 1590% MagickBooleanType MagickCommentImage(MagickWand *wand, 1591% const char *comment) 1592% 1593% A description of each parameter follows: 1594% 1595% o wand: the magick wand. 1596% 1597% o comment: the image comment. 1598% 1599*/ 1600WandExport MagickBooleanType MagickCommentImage(MagickWand *wand, 1601 const char *comment) 1602{ 1603 MagickBooleanType 1604 status; 1605 1606 assert(wand != (MagickWand *) NULL); 1607 assert(wand->signature == WandSignature); 1608 if (wand->debug != MagickFalse) 1609 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1610 if (wand->images == (Image *) NULL) 1611 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1612 status=SetImageProperty(wand->images,"comment",comment); 1613 if (status == MagickFalse) 1614 InheritException(wand->exception,&wand->images->exception); 1615 return(status); 1616} 1617 1618/* 1619%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1620% % 1621% % 1622% % 1623% M a g i c k C o m p a r e I m a g e L a y e r s % 1624% % 1625% % 1626% % 1627%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1628% 1629% MagickCompareImagesLayers() compares each image with the next in a sequence 1630% and returns the maximum bounding region of any pixel differences it 1631% discovers. 1632% 1633% The format of the MagickCompareImagesLayers method is: 1634% 1635% MagickWand *MagickCompareImagesLayers(MagickWand *wand, 1636% const ImageLayerMethod method) 1637% 1638% A description of each parameter follows: 1639% 1640% o wand: the magick wand. 1641% 1642% o method: the compare method. 1643% 1644*/ 1645WandExport MagickWand *MagickCompareImagesLayers(MagickWand *wand, 1646 const ImageLayerMethod method) 1647{ 1648 Image 1649 *layers_image; 1650 1651 assert(wand != (MagickWand *) NULL); 1652 assert(wand->signature == WandSignature); 1653 if (wand->debug != MagickFalse) 1654 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1655 if (wand->images == (Image *) NULL) 1656 return((MagickWand *) NULL); 1657 layers_image=CompareImagesLayers(wand->images,method,wand->exception); 1658 if (layers_image == (Image *) NULL) 1659 return((MagickWand *) NULL); 1660 return(CloneMagickWandFromImages(wand,layers_image)); 1661} 1662 1663/* 1664%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1665% % 1666% % 1667% % 1668% M a g i c k C o m p a r e I m a g e s % 1669% % 1670% % 1671% % 1672%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1673% 1674% MagickCompareImages() compares an image to a reconstructed image and returns 1675% the specified difference image. 1676% 1677% The format of the MagickCompareImages method is: 1678% 1679% MagickWand *MagickCompareImages(MagickWand *wand, 1680% const MagickWand *reference,const MetricType metric, 1681% double *distortion) 1682% 1683% A description of each parameter follows: 1684% 1685% o wand: the magick wand. 1686% 1687% o reference: the reference wand. 1688% 1689% o metric: the metric. 1690% 1691% o distortion: the computed distortion between the images. 1692% 1693*/ 1694WandExport MagickWand *MagickCompareImages(MagickWand *wand, 1695 const MagickWand *reference,const MetricType metric,double *distortion) 1696{ 1697 Image 1698 *compare_image; 1699 1700 1701 assert(wand != (MagickWand *) NULL); 1702 assert(wand->signature == WandSignature); 1703 if (wand->debug != MagickFalse) 1704 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1705 if ((wand->images == (Image *) NULL) || (reference->images == (Image *) NULL)) 1706 { 1707 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 1708 "ContainsNoImages","`%s'",wand->name); 1709 return((MagickWand *) NULL); 1710 } 1711 compare_image=CompareImages(wand->images,reference->images,metric,distortion, 1712 &wand->images->exception); 1713 if (compare_image == (Image *) NULL) 1714 return((MagickWand *) NULL); 1715 return(CloneMagickWandFromImages(wand,compare_image)); 1716} 1717 1718/* 1719%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1720% % 1721% % 1722% % 1723% M a g i c k C o m p o s i t e I m a g e % 1724% % 1725% % 1726% % 1727%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1728% 1729% MagickCompositeImage() composite one image onto another at the specified 1730% offset. 1731% 1732% The format of the MagickCompositeImage method is: 1733% 1734% MagickBooleanType MagickCompositeImage(MagickWand *wand, 1735% const MagickWand *composite_wand,const CompositeOperator compose, 1736% const ssize_t x,const ssize_t y) 1737% 1738% A description of each parameter follows: 1739% 1740% o wand: the magick wand. 1741% 1742% o composite_image: the composite image. 1743% 1744% o compose: This operator affects how the composite is applied to the 1745% image. The default is Over. Choose from these operators: 1746% 1747% OverCompositeOp InCompositeOp OutCompositeOp 1748% AtopCompositeOp XorCompositeOp PlusCompositeOp 1749% MinusCompositeOp AddCompositeOp SubtractCompositeOp 1750% DifferenceCompositeOp BumpmapCompositeOp CopyCompositeOp 1751% DisplaceCompositeOp 1752% 1753% o x: the column offset of the composited image. 1754% 1755% o y: the row offset of the composited image. 1756% 1757*/ 1758WandExport MagickBooleanType MagickCompositeImage(MagickWand *wand, 1759 const MagickWand *composite_wand,const CompositeOperator compose, 1760 const ssize_t x,const ssize_t y) 1761{ 1762 MagickBooleanType 1763 status; 1764 1765 assert(wand != (MagickWand *) NULL); 1766 assert(wand->signature == WandSignature); 1767 if (wand->debug != MagickFalse) 1768 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1769 if ((wand->images == (Image *) NULL) || 1770 (composite_wand->images == (Image *) NULL)) 1771 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1772 status=CompositeImage(wand->images,compose,composite_wand->images,x,y); 1773 if (status == MagickFalse) 1774 InheritException(wand->exception,&wand->images->exception); 1775 return(status); 1776} 1777 1778/* 1779%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1780% % 1781% % 1782% % 1783% M a g i c k C o n t r a s t I m a g e % 1784% % 1785% % 1786% % 1787%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1788% 1789% MagickContrastImage() enhances the intensity differences between the lighter 1790% and darker elements of the image. Set sharpen to a value other than 0 to 1791% increase the image contrast otherwise the contrast is reduced. 1792% 1793% The format of the MagickContrastImage method is: 1794% 1795% MagickBooleanType MagickContrastImage(MagickWand *wand, 1796% const MagickBooleanType sharpen) 1797% 1798% A description of each parameter follows: 1799% 1800% o wand: the magick wand. 1801% 1802% o sharpen: Increase or decrease image contrast. 1803% 1804% 1805*/ 1806WandExport MagickBooleanType MagickContrastImage(MagickWand *wand, 1807 const MagickBooleanType sharpen) 1808{ 1809 MagickBooleanType 1810 status; 1811 1812 assert(wand != (MagickWand *) NULL); 1813 assert(wand->signature == WandSignature); 1814 if (wand->debug != MagickFalse) 1815 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1816 if (wand->images == (Image *) NULL) 1817 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1818 status=ContrastImage(wand->images,sharpen,&wand->images->exception); 1819 return(status); 1820} 1821 1822/* 1823%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1824% % 1825% % 1826% % 1827% 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 % 1828% % 1829% % 1830% % 1831%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1832% 1833% MagickContrastStretchImage() enhances the contrast of a color image by 1834% adjusting the pixels color to span the entire range of colors available. 1835% You can also reduce the influence of a particular channel with a gamma 1836% value of 0. 1837% 1838% The format of the MagickContrastStretchImage method is: 1839% 1840% MagickBooleanType MagickContrastStretchImage(MagickWand *wand, 1841% const double black_point,const double white_point) 1842% 1843% A description of each parameter follows: 1844% 1845% o wand: the magick wand. 1846% 1847% o black_point: the black point. 1848% 1849% o white_point: the white point. 1850% 1851*/ 1852WandExport MagickBooleanType MagickContrastStretchImage(MagickWand *wand, 1853 const double black_point,const double white_point) 1854{ 1855 MagickBooleanType 1856 status; 1857 1858 assert(wand != (MagickWand *) NULL); 1859 assert(wand->signature == WandSignature); 1860 if (wand->debug != MagickFalse) 1861 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1862 if (wand->images == (Image *) NULL) 1863 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1864 status=ContrastStretchImage(wand->images,black_point,white_point, 1865 &wand->images->exception); 1866 return(status); 1867} 1868 1869/* 1870%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1871% % 1872% % 1873% % 1874% M a g i c k C o n v o l v e I m a g e % 1875% % 1876% % 1877% % 1878%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1879% 1880% MagickConvolveImage() applies a custom convolution kernel to the image. 1881% 1882% The format of the MagickConvolveImage method is: 1883% 1884% MagickBooleanType MagickConvolveImage(MagickWand *wand, 1885% const KernelInfo *kernel) 1886% 1887% A description of each parameter follows: 1888% 1889% o wand: the magick wand. 1890% 1891% o kernel: An array of doubles representing the convolution kernel. 1892% 1893*/ 1894WandExport MagickBooleanType MagickConvolveImage(MagickWand *wand, 1895 const KernelInfo *kernel) 1896{ 1897 Image 1898 *filter_image; 1899 1900 assert(wand != (MagickWand *) NULL); 1901 assert(wand->signature == WandSignature); 1902 if (wand->debug != MagickFalse) 1903 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1904 if (kernel == (const KernelInfo *) NULL) 1905 return(MagickFalse); 1906 if (wand->images == (Image *) NULL) 1907 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1908 filter_image=ConvolveImage(wand->images,kernel,wand->exception); 1909 if (filter_image == (Image *) NULL) 1910 return(MagickFalse); 1911 ReplaceImageInList(&wand->images,filter_image); 1912 return(MagickTrue); 1913} 1914 1915/* 1916%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1917% % 1918% % 1919% % 1920% M a g i c k C r o p I m a g e % 1921% % 1922% % 1923% % 1924%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1925% 1926% MagickCropImage() extracts a region of the image. 1927% 1928% The format of the MagickCropImage method is: 1929% 1930% MagickBooleanType MagickCropImage(MagickWand *wand, 1931% const size_t width,const size_t height,const ssize_t x,const ssize_t y) 1932% 1933% A description of each parameter follows: 1934% 1935% o wand: the magick wand. 1936% 1937% o width: the region width. 1938% 1939% o height: the region height. 1940% 1941% o x: the region x-offset. 1942% 1943% o y: the region y-offset. 1944% 1945*/ 1946WandExport MagickBooleanType MagickCropImage(MagickWand *wand, 1947 const size_t width,const size_t height,const ssize_t x,const ssize_t y) 1948{ 1949 Image 1950 *crop_image; 1951 1952 RectangleInfo 1953 crop; 1954 1955 assert(wand != (MagickWand *) NULL); 1956 assert(wand->signature == WandSignature); 1957 if (wand->debug != MagickFalse) 1958 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1959 if (wand->images == (Image *) NULL) 1960 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1961 crop.width=width; 1962 crop.height=height; 1963 crop.x=x; 1964 crop.y=y; 1965 crop_image=CropImage(wand->images,&crop,wand->exception); 1966 if (crop_image == (Image *) NULL) 1967 return(MagickFalse); 1968 ReplaceImageInList(&wand->images,crop_image); 1969 return(MagickTrue); 1970} 1971 1972/* 1973%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1974% % 1975% % 1976% % 1977% M a g i c k C y c l e C o l o r m a p I m a g e % 1978% % 1979% % 1980% % 1981%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1982% 1983% MagickCycleColormapImage() displaces an image's colormap by a given number 1984% of positions. If you cycle the colormap a number of times you can produce 1985% a psychodelic effect. 1986% 1987% The format of the MagickCycleColormapImage method is: 1988% 1989% MagickBooleanType MagickCycleColormapImage(MagickWand *wand, 1990% const ssize_t displace) 1991% 1992% A description of each parameter follows: 1993% 1994% o wand: the magick wand. 1995% 1996% o pixel_wand: the pixel wand. 1997% 1998*/ 1999WandExport MagickBooleanType MagickCycleColormapImage(MagickWand *wand, 2000 const ssize_t displace) 2001{ 2002 MagickBooleanType 2003 status; 2004 2005 assert(wand != (MagickWand *) NULL); 2006 assert(wand->signature == WandSignature); 2007 if (wand->debug != MagickFalse) 2008 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2009 if (wand->images == (Image *) NULL) 2010 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2011 status=CycleColormapImage(wand->images,displace,wand->exception); 2012 return(status); 2013} 2014 2015/* 2016%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2017% % 2018% % 2019% % 2020% M a g i c k C o n s t i t u t e I m a g e % 2021% % 2022% % 2023% % 2024%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2025% 2026% MagickConstituteImage() adds an image to the wand comprised of the pixel 2027% data you supply. The pixel data must be in scanline order top-to-bottom. 2028% The data can be char, short int, int, float, or double. Float and double 2029% require the pixels to be normalized [0..1], otherwise [0..Max], where Max 2030% is the maximum value the type can accomodate (e.g. 255 for char). For 2031% example, to create a 640x480 image from unsigned red-green-blue character 2032% data, use 2033% 2034% MagickConstituteImage(wand,640,640,"RGB",CharPixel,pixels); 2035% 2036% The format of the MagickConstituteImage method is: 2037% 2038% MagickBooleanType MagickConstituteImage(MagickWand *wand, 2039% const size_t columns,const size_t rows,const char *map, 2040% const StorageType storage,void *pixels) 2041% 2042% A description of each parameter follows: 2043% 2044% o wand: the magick wand. 2045% 2046% o columns: width in pixels of the image. 2047% 2048% o rows: height in pixels of the image. 2049% 2050% o map: This string reflects the expected ordering of the pixel array. 2051% It can be any combination or order of R = red, G = green, B = blue, 2052% A = alpha (0 is transparent), O = opacity (0 is opaque), C = cyan, 2053% Y = yellow, M = magenta, K = black, I = intensity (for grayscale), 2054% P = pad. 2055% 2056% o storage: Define the data type of the pixels. Float and double types are 2057% expected to be normalized [0..1] otherwise [0..QuantumRange]. Choose from 2058% these types: CharPixel, DoublePixel, FloatPixel, IntegerPixel, 2059% LongPixel, QuantumPixel, or ShortPixel. 2060% 2061% o pixels: This array of values contain the pixel components as defined by 2062% map and type. You must preallocate this array where the expected 2063% length varies depending on the values of width, height, map, and type. 2064% 2065% 2066*/ 2067WandExport MagickBooleanType MagickConstituteImage(MagickWand *wand, 2068 const size_t columns,const size_t rows,const char *map, 2069 const StorageType storage,const void *pixels) 2070{ 2071 Image 2072 *images; 2073 2074 assert(wand != (MagickWand *) NULL); 2075 assert(wand->signature == WandSignature); 2076 if (wand->debug != MagickFalse) 2077 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2078 images=ConstituteImage(columns,rows,map,storage,pixels,wand->exception); 2079 if (images == (Image *) NULL) 2080 return(MagickFalse); 2081 return(InsertImageInWand(wand,images)); 2082} 2083 2084/* 2085%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2086% % 2087% % 2088% % 2089% M a g i c k D e c i p h e r I m a g e % 2090% % 2091% % 2092% % 2093%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2094% 2095% MagickDecipherImage() converts cipher pixels to plain pixels. 2096% 2097% The format of the MagickDecipherImage method is: 2098% 2099% MagickBooleanType MagickDecipherImage(MagickWand *wand, 2100% const char *passphrase) 2101% 2102% A description of each parameter follows: 2103% 2104% o wand: the magick wand. 2105% 2106% o passphrase: the passphrase. 2107% 2108*/ 2109WandExport MagickBooleanType MagickDecipherImage(MagickWand *wand, 2110 const char *passphrase) 2111{ 2112 assert(wand != (MagickWand *) NULL); 2113 assert(wand->signature == WandSignature); 2114 if (wand->debug != MagickFalse) 2115 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2116 if (wand->images == (Image *) NULL) 2117 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2118 return(DecipherImage(wand->images,passphrase,&wand->images->exception)); 2119} 2120 2121/* 2122%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2123% % 2124% % 2125% % 2126% M a g i c k D e c o n s t r u c t I m a g e s % 2127% % 2128% % 2129% % 2130%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2131% 2132% MagickDeconstructImages() compares each image with the next in a sequence 2133% and returns the maximum bounding region of any pixel differences it 2134% discovers. 2135% 2136% The format of the MagickDeconstructImages method is: 2137% 2138% MagickWand *MagickDeconstructImages(MagickWand *wand) 2139% 2140% A description of each parameter follows: 2141% 2142% o wand: the magick wand. 2143% 2144*/ 2145WandExport MagickWand *MagickDeconstructImages(MagickWand *wand) 2146{ 2147 Image 2148 *deconstruct_image; 2149 2150 assert(wand != (MagickWand *) NULL); 2151 assert(wand->signature == WandSignature); 2152 if (wand->debug != MagickFalse) 2153 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2154 if (wand->images == (Image *) NULL) 2155 return((MagickWand *) NULL); 2156 deconstruct_image=CompareImagesLayers(wand->images,CompareAnyLayer, 2157 wand->exception); 2158 if (deconstruct_image == (Image *) NULL) 2159 return((MagickWand *) NULL); 2160 return(CloneMagickWandFromImages(wand,deconstruct_image)); 2161} 2162 2163/* 2164%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2165% % 2166% % 2167% % 2168% M a g i c k D e s k e w I m a g e % 2169% % 2170% % 2171% % 2172%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2173% 2174% MagickDeskewImage() removes skew from the image. Skew is an artifact that 2175% occurs in scanned images because of the camera being misaligned, 2176% imperfections in the scanning or surface, or simply because the paper was 2177% not placed completely flat when scanned. 2178% 2179% The format of the MagickDeskewImage method is: 2180% 2181% MagickBooleanType MagickDeskewImage(MagickWand *wand, 2182% const double threshold) 2183% 2184% A description of each parameter follows: 2185% 2186% o wand: the magick wand. 2187% 2188% o threshold: separate background from foreground. 2189% 2190*/ 2191WandExport MagickBooleanType MagickDeskewImage(MagickWand *wand, 2192 const double threshold) 2193{ 2194 Image 2195 *sepia_image; 2196 2197 assert(wand != (MagickWand *) NULL); 2198 assert(wand->signature == WandSignature); 2199 if (wand->debug != MagickFalse) 2200 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2201 if (wand->images == (Image *) NULL) 2202 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2203 sepia_image=DeskewImage(wand->images,threshold,wand->exception); 2204 if (sepia_image == (Image *) NULL) 2205 return(MagickFalse); 2206 ReplaceImageInList(&wand->images,sepia_image); 2207 return(MagickTrue); 2208} 2209 2210/* 2211%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2212% % 2213% % 2214% % 2215% M a g i c k D e s p e c k l e I m a g e % 2216% % 2217% % 2218% % 2219%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2220% 2221% MagickDespeckleImage() reduces the speckle noise in an image while 2222% perserving the edges of the original image. 2223% 2224% The format of the MagickDespeckleImage method is: 2225% 2226% MagickBooleanType MagickDespeckleImage(MagickWand *wand) 2227% 2228% A description of each parameter follows: 2229% 2230% o wand: the magick wand. 2231% 2232*/ 2233WandExport MagickBooleanType MagickDespeckleImage(MagickWand *wand) 2234{ 2235 Image 2236 *despeckle_image; 2237 2238 assert(wand != (MagickWand *) NULL); 2239 assert(wand->signature == WandSignature); 2240 if (wand->debug != MagickFalse) 2241 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2242 if (wand->images == (Image *) NULL) 2243 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2244 despeckle_image=DespeckleImage(wand->images,wand->exception); 2245 if (despeckle_image == (Image *) NULL) 2246 return(MagickFalse); 2247 ReplaceImageInList(&wand->images,despeckle_image); 2248 return(MagickTrue); 2249} 2250 2251/* 2252%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2253% % 2254% % 2255% % 2256% M a g i c k D e s t r o y I m a g e % 2257% % 2258% % 2259% % 2260%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2261% 2262% MagickDestroyImage() dereferences an image, deallocating memory associated 2263% with the image if the reference count becomes zero. 2264% 2265% The format of the MagickDestroyImage method is: 2266% 2267% Image *MagickDestroyImage(Image *image) 2268% 2269% A description of each parameter follows: 2270% 2271% o image: the image. 2272% 2273*/ 2274WandExport Image *MagickDestroyImage(Image *image) 2275{ 2276 return(DestroyImage(image)); 2277} 2278 2279/* 2280%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2281% % 2282% % 2283% % 2284% M a g i c k D i s p l a y I m a g e % 2285% % 2286% % 2287% % 2288%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2289% 2290% MagickDisplayImage() displays an image. 2291% 2292% The format of the MagickDisplayImage method is: 2293% 2294% MagickBooleanType MagickDisplayImage(MagickWand *wand, 2295% const char *server_name) 2296% 2297% A description of each parameter follows: 2298% 2299% o wand: the magick wand. 2300% 2301% o server_name: the X server name. 2302% 2303*/ 2304WandExport MagickBooleanType MagickDisplayImage(MagickWand *wand, 2305 const char *server_name) 2306{ 2307 Image 2308 *image; 2309 2310 MagickBooleanType 2311 status; 2312 2313 assert(wand != (MagickWand *) NULL); 2314 assert(wand->signature == WandSignature); 2315 if (wand->debug != MagickFalse) 2316 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2317 if (wand->images == (Image *) NULL) 2318 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2319 image=CloneImage(wand->images,0,0,MagickTrue,wand->exception); 2320 if (image == (Image *) NULL) 2321 return(MagickFalse); 2322 (void) CloneString(&wand->image_info->server_name,server_name); 2323 status=DisplayImages(wand->image_info,image,&image->exception); 2324 image=DestroyImage(image); 2325 return(status); 2326} 2327 2328/* 2329%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2330% % 2331% % 2332% % 2333% M a g i c k D i s p l a y I m a g e s % 2334% % 2335% % 2336% % 2337%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2338% 2339% MagickDisplayImages() displays an image or image sequence. 2340% 2341% The format of the MagickDisplayImages method is: 2342% 2343% MagickBooleanType MagickDisplayImages(MagickWand *wand, 2344% const char *server_name) 2345% 2346% A description of each parameter follows: 2347% 2348% o wand: the magick wand. 2349% 2350% o server_name: the X server name. 2351% 2352*/ 2353WandExport MagickBooleanType MagickDisplayImages(MagickWand *wand, 2354 const char *server_name) 2355{ 2356 MagickBooleanType 2357 status; 2358 2359 assert(wand != (MagickWand *) NULL); 2360 assert(wand->signature == WandSignature); 2361 if (wand->debug != MagickFalse) 2362 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2363 (void) CloneString(&wand->image_info->server_name,server_name); 2364 status=DisplayImages(wand->image_info,wand->images,&wand->images->exception); 2365 return(status); 2366} 2367 2368/* 2369%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2370% % 2371% % 2372% % 2373% M a g i c k D i s t o r t I m a g e % 2374% % 2375% % 2376% % 2377%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2378% 2379% MagickDistortImage() distorts an image using various distortion methods, by 2380% mapping color lookups of the source image to a new destination image 2381% usally of the same size as the source image, unless 'bestfit' is set to 2382% true. 2383% 2384% If 'bestfit' is enabled, and distortion allows it, the destination image is 2385% adjusted to ensure the whole source 'image' will just fit within the final 2386% destination image, which will be sized and offset accordingly. Also in 2387% many cases the virtual offset of the source image will be taken into 2388% account in the mapping. 2389% 2390% The format of the MagickDistortImage method is: 2391% 2392% MagickBooleanType MagickDistortImage(MagickWand *wand, 2393% const DistortImageMethod method,const size_t number_arguments, 2394% const double *arguments,const MagickBooleanType bestfit) 2395% 2396% A description of each parameter follows: 2397% 2398% o image: the image to be distorted. 2399% 2400% o method: the method of image distortion. 2401% 2402% ArcDistortion always ignores the source image offset, and always 2403% 'bestfit' the destination image with the top left corner offset 2404% relative to the polar mapping center. 2405% 2406% Bilinear has no simple inverse mapping so it does not allow 'bestfit' 2407% style of image distortion. 2408% 2409% Affine, Perspective, and Bilinear, do least squares fitting of the 2410% distortion when more than the minimum number of control point pairs 2411% are provided. 2412% 2413% Perspective, and Bilinear, falls back to a Affine distortion when less 2414% that 4 control point pairs are provided. While Affine distortions let 2415% you use any number of control point pairs, that is Zero pairs is a 2416% no-Op (viewport only) distrotion, one pair is a translation and two 2417% pairs of control points do a scale-rotate-translate, without any 2418% shearing. 2419% 2420% o number_arguments: the number of arguments given for this distortion 2421% method. 2422% 2423% o arguments: the arguments for this distortion method. 2424% 2425% o bestfit: Attempt to resize destination to fit distorted source. 2426% 2427*/ 2428WandExport MagickBooleanType MagickDistortImage(MagickWand *wand, 2429 const DistortImageMethod method,const size_t number_arguments, 2430 const double *arguments,const MagickBooleanType bestfit) 2431{ 2432 Image 2433 *distort_image; 2434 2435 assert(wand != (MagickWand *) NULL); 2436 assert(wand->signature == WandSignature); 2437 if (wand->debug != MagickFalse) 2438 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2439 if (wand->images == (Image *) NULL) 2440 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2441 distort_image=DistortImage(wand->images,method,number_arguments,arguments, 2442 bestfit,wand->exception); 2443 if (distort_image == (Image *) NULL) 2444 return(MagickFalse); 2445 ReplaceImageInList(&wand->images,distort_image); 2446 return(MagickTrue); 2447} 2448 2449/* 2450%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2451% % 2452% % 2453% % 2454% M a g i c k D r a w I m a g e % 2455% % 2456% % 2457% % 2458%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2459% 2460% MagickDrawImage() renders the drawing wand on the current image. 2461% 2462% The format of the MagickDrawImage method is: 2463% 2464% MagickBooleanType MagickDrawImage(MagickWand *wand, 2465% const DrawingWand *drawing_wand) 2466% 2467% A description of each parameter follows: 2468% 2469% o wand: the magick wand. 2470% 2471% o drawing_wand: the draw wand. 2472% 2473*/ 2474WandExport MagickBooleanType MagickDrawImage(MagickWand *wand, 2475 const DrawingWand *drawing_wand) 2476{ 2477 char 2478 *primitive; 2479 2480 DrawInfo 2481 *draw_info; 2482 2483 MagickBooleanType 2484 status; 2485 2486 assert(wand != (MagickWand *) NULL); 2487 assert(wand->signature == WandSignature); 2488 if (wand->debug != MagickFalse) 2489 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2490 if (wand->images == (Image *) NULL) 2491 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2492 draw_info=PeekDrawingWand(drawing_wand); 2493 if ((draw_info == (DrawInfo *) NULL) || 2494 (draw_info->primitive == (char *) NULL)) 2495 return(MagickFalse); 2496 primitive=AcquireString(draw_info->primitive); 2497 draw_info=DestroyDrawInfo(draw_info); 2498 draw_info=CloneDrawInfo(wand->image_info,(DrawInfo *) NULL); 2499 draw_info->primitive=primitive; 2500 status=DrawImage(wand->images,draw_info,wand->exception); 2501 draw_info=DestroyDrawInfo(draw_info); 2502 return(status); 2503} 2504 2505/* 2506%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2507% % 2508% % 2509% % 2510% M a g i c k E d g e I m a g e % 2511% % 2512% % 2513% % 2514%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2515% 2516% MagickEdgeImage() enhance edges within the image with a convolution filter 2517% of the given radius. Use a radius of 0 and Edge() selects a suitable 2518% radius for you. 2519% 2520% The format of the MagickEdgeImage method is: 2521% 2522% MagickBooleanType MagickEdgeImage(MagickWand *wand,const double radius, 2523% const double sigma) 2524% 2525% A description of each parameter follows: 2526% 2527% o wand: the magick wand. 2528% 2529% o radius: the radius of the pixel neighborhood. 2530% 2531% o sigma: the standard deviation of the Gaussian, in pixels. 2532% 2533*/ 2534WandExport MagickBooleanType MagickEdgeImage(MagickWand *wand, 2535 const double radius,const double sigma) 2536{ 2537 Image 2538 *edge_image; 2539 2540 assert(wand != (MagickWand *) NULL); 2541 assert(wand->signature == WandSignature); 2542 if (wand->debug != MagickFalse) 2543 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2544 if (wand->images == (Image *) NULL) 2545 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2546 edge_image=EdgeImage(wand->images,radius,sigma,wand->exception); 2547 if (edge_image == (Image *) NULL) 2548 return(MagickFalse); 2549 ReplaceImageInList(&wand->images,edge_image); 2550 return(MagickTrue); 2551} 2552 2553/* 2554%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2555% % 2556% % 2557% % 2558% M a g i c k E m b o s s I m a g e % 2559% % 2560% % 2561% % 2562%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2563% 2564% MagickEmbossImage() returns a grayscale image with a three-dimensional 2565% effect. We convolve the image with a Gaussian operator of the given radius 2566% and standard deviation (sigma). For reasonable results, radius should be 2567% larger than sigma. Use a radius of 0 and Emboss() selects a suitable 2568% radius for you. 2569% 2570% The format of the MagickEmbossImage method is: 2571% 2572% MagickBooleanType MagickEmbossImage(MagickWand *wand,const double radius, 2573% const double sigma) 2574% 2575% A description of each parameter follows: 2576% 2577% o wand: the magick wand. 2578% 2579% o radius: the radius of the Gaussian, in pixels, not counting the center 2580% pixel. 2581% 2582% o sigma: the standard deviation of the Gaussian, in pixels. 2583% 2584*/ 2585WandExport MagickBooleanType MagickEmbossImage(MagickWand *wand, 2586 const double radius,const double sigma) 2587{ 2588 Image 2589 *emboss_image; 2590 2591 assert(wand != (MagickWand *) NULL); 2592 assert(wand->signature == WandSignature); 2593 if (wand->debug != MagickFalse) 2594 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2595 if (wand->images == (Image *) NULL) 2596 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2597 emboss_image=EmbossImage(wand->images,radius,sigma,wand->exception); 2598 if (emboss_image == (Image *) NULL) 2599 return(MagickFalse); 2600 ReplaceImageInList(&wand->images,emboss_image); 2601 return(MagickTrue); 2602} 2603 2604/* 2605%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2606% % 2607% % 2608% % 2609% M a g i c k E n c i p h e r I m a g e % 2610% % 2611% % 2612% % 2613%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2614% 2615% MagickEncipherImage() converts plaint pixels to cipher pixels. 2616% 2617% The format of the MagickEncipherImage method is: 2618% 2619% MagickBooleanType MagickEncipherImage(MagickWand *wand, 2620% const char *passphrase) 2621% 2622% A description of each parameter follows: 2623% 2624% o wand: the magick wand. 2625% 2626% o passphrase: the passphrase. 2627% 2628*/ 2629WandExport MagickBooleanType MagickEncipherImage(MagickWand *wand, 2630 const char *passphrase) 2631{ 2632 assert(wand != (MagickWand *) NULL); 2633 assert(wand->signature == WandSignature); 2634 if (wand->debug != MagickFalse) 2635 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2636 if (wand->images == (Image *) NULL) 2637 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2638 return(EncipherImage(wand->images,passphrase,&wand->images->exception)); 2639} 2640 2641/* 2642%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2643% % 2644% % 2645% % 2646% M a g i c k E n h a n c e I m a g e % 2647% % 2648% % 2649% % 2650%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2651% 2652% MagickEnhanceImage() applies a digital filter that improves the quality of a 2653% noisy image. 2654% 2655% The format of the MagickEnhanceImage method is: 2656% 2657% MagickBooleanType MagickEnhanceImage(MagickWand *wand) 2658% 2659% A description of each parameter follows: 2660% 2661% o wand: the magick wand. 2662% 2663*/ 2664WandExport MagickBooleanType MagickEnhanceImage(MagickWand *wand) 2665{ 2666 Image 2667 *enhance_image; 2668 2669 assert(wand != (MagickWand *) NULL); 2670 assert(wand->signature == WandSignature); 2671 if (wand->debug != MagickFalse) 2672 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2673 if (wand->images == (Image *) NULL) 2674 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2675 enhance_image=EnhanceImage(wand->images,wand->exception); 2676 if (enhance_image == (Image *) NULL) 2677 return(MagickFalse); 2678 ReplaceImageInList(&wand->images,enhance_image); 2679 return(MagickTrue); 2680} 2681 2682/* 2683%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2684% % 2685% % 2686% % 2687% M a g i c k E q u a l i z e I m a g e % 2688% % 2689% % 2690% % 2691%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2692% 2693% MagickEqualizeImage() equalizes the image histogram. 2694% 2695% The format of the MagickEqualizeImage method is: 2696% 2697% MagickBooleanType MagickEqualizeImage(MagickWand *wand) 2698% 2699% A description of each parameter follows: 2700% 2701% o wand: the magick wand. 2702% 2703% o channel: the image channel(s). 2704% 2705*/ 2706WandExport MagickBooleanType MagickEqualizeImage(MagickWand *wand) 2707{ 2708 MagickBooleanType 2709 status; 2710 2711 assert(wand != (MagickWand *) NULL); 2712 assert(wand->signature == WandSignature); 2713 if (wand->debug != MagickFalse) 2714 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2715 if (wand->images == (Image *) NULL) 2716 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2717 status=EqualizeImage(wand->images,&wand->images->exception); 2718 return(status); 2719} 2720 2721/* 2722%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2723% % 2724% % 2725% % 2726% M a g i c k E v a l u a t e I m a g e % 2727% % 2728% % 2729% % 2730%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2731% 2732% MagickEvaluateImage() applys an arithmetic, relational, or logical 2733% expression to an image. Use these operators to lighten or darken an image, 2734% to increase or decrease contrast in an image, or to produce the "negative" 2735% of an image. 2736% 2737% The format of the MagickEvaluateImage method is: 2738% 2739% MagickBooleanType MagickEvaluateImage(MagickWand *wand, 2740% const MagickEvaluateOperator operator,const double value) 2741% MagickBooleanType MagickEvaluateImages(MagickWand *wand, 2742% const MagickEvaluateOperator operator) 2743% 2744% A description of each parameter follows: 2745% 2746% o wand: the magick wand. 2747% 2748% o op: A channel operator. 2749% 2750% o value: A value value. 2751% 2752*/ 2753 2754WandExport MagickWand *MagickEvaluateImages(MagickWand *wand, 2755 const MagickEvaluateOperator op) 2756{ 2757 Image 2758 *evaluate_image; 2759 2760 assert(wand != (MagickWand *) NULL); 2761 assert(wand->signature == WandSignature); 2762 if (wand->debug != MagickFalse) 2763 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2764 if (wand->images == (Image *) NULL) 2765 return((MagickWand *) NULL); 2766 evaluate_image=EvaluateImages(wand->images,op,wand->exception); 2767 if (evaluate_image == (Image *) NULL) 2768 return((MagickWand *) NULL); 2769 return(CloneMagickWandFromImages(wand,evaluate_image)); 2770} 2771 2772WandExport MagickBooleanType MagickEvaluateImage(MagickWand *wand, 2773 const MagickEvaluateOperator op,const double value) 2774{ 2775 MagickBooleanType 2776 status; 2777 2778 assert(wand != (MagickWand *) NULL); 2779 assert(wand->signature == WandSignature); 2780 if (wand->debug != MagickFalse) 2781 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2782 if (wand->images == (Image *) NULL) 2783 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2784 status=EvaluateImage(wand->images,op,value,&wand->images->exception); 2785 return(status); 2786} 2787 2788/* 2789%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2790% % 2791% % 2792% % 2793% M a g i c k E x p o r t I m a g e P i x e l s % 2794% % 2795% % 2796% % 2797%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2798% 2799% MagickExportImagePixels() extracts pixel data from an image and returns it 2800% to you. The method returns MagickTrue on success otherwise MagickFalse if 2801% an error is encountered. The data is returned as char, short int, int, 2802% ssize_t, float, or double in the order specified by map. 2803% 2804% Suppose you want to extract the first scanline of a 640x480 image as 2805% character data in red-green-blue order: 2806% 2807% MagickExportImagePixels(wand,0,0,640,1,"RGB",CharPixel,pixels); 2808% 2809% The format of the MagickExportImagePixels method is: 2810% 2811% MagickBooleanType MagickExportImagePixels(MagickWand *wand, 2812% const ssize_t x,const ssize_t y,const size_t columns, 2813% const size_t rows,const char *map,const StorageType storage, 2814% void *pixels) 2815% 2816% A description of each parameter follows: 2817% 2818% o wand: the magick wand. 2819% 2820% o x, y, columns, rows: These values define the perimeter 2821% of a region of pixels you want to extract. 2822% 2823% o map: This string reflects the expected ordering of the pixel array. 2824% It can be any combination or order of R = red, G = green, B = blue, 2825% A = alpha (0 is transparent), O = opacity (0 is opaque), C = cyan, 2826% Y = yellow, M = magenta, K = black, I = intensity (for grayscale), 2827% P = pad. 2828% 2829% o storage: Define the data type of the pixels. Float and double types are 2830% expected to be normalized [0..1] otherwise [0..QuantumRange]. Choose from 2831% these types: CharPixel, DoublePixel, FloatPixel, IntegerPixel, 2832% LongPixel, QuantumPixel, or ShortPixel. 2833% 2834% o pixels: This array of values contain the pixel components as defined by 2835% map and type. You must preallocate this array where the expected 2836% length varies depending on the values of width, height, map, and type. 2837% 2838*/ 2839WandExport MagickBooleanType MagickExportImagePixels(MagickWand *wand, 2840 const ssize_t x,const ssize_t y,const size_t columns, 2841 const size_t rows,const char *map,const StorageType storage, 2842 void *pixels) 2843{ 2844 MagickBooleanType 2845 status; 2846 2847 assert(wand != (MagickWand *) NULL); 2848 assert(wand->signature == WandSignature); 2849 if (wand->debug != MagickFalse) 2850 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2851 if (wand->images == (Image *) NULL) 2852 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2853 status=ExportImagePixels(wand->images,x,y,columns,rows,map, 2854 storage,pixels,wand->exception); 2855 if (status == MagickFalse) 2856 InheritException(wand->exception,&wand->images->exception); 2857 return(status); 2858} 2859 2860/* 2861%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2862% % 2863% % 2864% % 2865% M a g i c k E x t e n t I m a g e % 2866% % 2867% % 2868% % 2869%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2870% 2871% MagickExtentImage() extends the image as defined by the geometry, gravity, 2872% and wand background color. Set the (x,y) offset of the geometry to move 2873% the original wand relative to the extended wand. 2874% 2875% The format of the MagickExtentImage method is: 2876% 2877% MagickBooleanType MagickExtentImage(MagickWand *wand, 2878% const size_t width,const size_t height,const ssize_t x, 2879% const ssize_t y) 2880% 2881% A description of each parameter follows: 2882% 2883% o wand: the magick wand. 2884% 2885% o width: the region width. 2886% 2887% o height: the region height. 2888% 2889% o x: the region x offset. 2890% 2891% o y: the region y offset. 2892% 2893*/ 2894WandExport MagickBooleanType MagickExtentImage(MagickWand *wand, 2895 const size_t width,const size_t height,const ssize_t x, 2896 const ssize_t y) 2897{ 2898 Image 2899 *extent_image; 2900 2901 RectangleInfo 2902 extent; 2903 2904 assert(wand != (MagickWand *) NULL); 2905 assert(wand->signature == WandSignature); 2906 if (wand->debug != MagickFalse) 2907 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2908 if (wand->images == (Image *) NULL) 2909 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2910 extent.width=width; 2911 extent.height=height; 2912 extent.x=x; 2913 extent.y=y; 2914 extent_image=ExtentImage(wand->images,&extent,wand->exception); 2915 if (extent_image == (Image *) NULL) 2916 return(MagickFalse); 2917 ReplaceImageInList(&wand->images,extent_image); 2918 return(MagickTrue); 2919} 2920 2921/* 2922%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2923% % 2924% % 2925% % 2926% M a g i c k F l i p I m a g e % 2927% % 2928% % 2929% % 2930%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2931% 2932% MagickFlipImage() creates a vertical mirror image by reflecting the pixels 2933% around the central x-axis. 2934% 2935% The format of the MagickFlipImage method is: 2936% 2937% MagickBooleanType MagickFlipImage(MagickWand *wand) 2938% 2939% A description of each parameter follows: 2940% 2941% o wand: the magick wand. 2942% 2943*/ 2944WandExport MagickBooleanType MagickFlipImage(MagickWand *wand) 2945{ 2946 Image 2947 *flip_image; 2948 2949 assert(wand != (MagickWand *) NULL); 2950 assert(wand->signature == WandSignature); 2951 if (wand->debug != MagickFalse) 2952 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2953 if (wand->images == (Image *) NULL) 2954 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2955 flip_image=FlipImage(wand->images,wand->exception); 2956 if (flip_image == (Image *) NULL) 2957 return(MagickFalse); 2958 ReplaceImageInList(&wand->images,flip_image); 2959 return(MagickTrue); 2960} 2961 2962/* 2963%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2964% % 2965% % 2966% % 2967% 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 % 2968% % 2969% % 2970% % 2971%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2972% 2973% MagickFloodfillPaintImage() changes the color value of any pixel that matches 2974% target and is an immediate neighbor. If the method FillToBorderMethod is 2975% specified, the color value is changed for any neighbor pixel that does not 2976% match the bordercolor member of image. 2977% 2978% The format of the MagickFloodfillPaintImage method is: 2979% 2980% MagickBooleanType MagickFloodfillPaintImage(MagickWand *wand, 2981% const PixelWand *fill,const double fuzz,const PixelWand *bordercolor, 2982% const ssize_t x,const ssize_t y,const MagickBooleanType invert) 2983% 2984% A description of each parameter follows: 2985% 2986% o wand: the magick wand. 2987% 2988% o fill: the floodfill color pixel wand. 2989% 2990% o fuzz: By default target must match a particular pixel color 2991% exactly. However, in many cases two colors may differ by a small amount. 2992% The fuzz member of image defines how much tolerance is acceptable to 2993% consider two colors as the same. For example, set fuzz to 10 and the 2994% color red at intensities of 100 and 102 respectively are now interpreted 2995% as the same color for the purposes of the floodfill. 2996% 2997% o bordercolor: the border color pixel wand. 2998% 2999% o x,y: the starting location of the operation. 3000% 3001% o invert: paint any pixel that does not match the target color. 3002% 3003*/ 3004WandExport MagickBooleanType MagickFloodfillPaintImage(MagickWand *wand, 3005 const PixelWand *fill,const double fuzz,const PixelWand *bordercolor, 3006 const ssize_t x,const ssize_t y,const MagickBooleanType invert) 3007{ 3008 DrawInfo 3009 *draw_info; 3010 3011 MagickBooleanType 3012 status; 3013 3014 PixelInfo 3015 target; 3016 3017 assert(wand != (MagickWand *) NULL); 3018 assert(wand->signature == WandSignature); 3019 if (wand->debug != MagickFalse) 3020 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3021 if (wand->images == (Image *) NULL) 3022 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3023 draw_info=CloneDrawInfo(wand->image_info,(DrawInfo *) NULL); 3024 PixelGetQuantumPacket(fill,&draw_info->fill); 3025 (void) GetOneVirtualMagickPixel(wand->images,x % wand->images->columns, 3026 y % wand->images->rows,&target,wand->exception); 3027 if (bordercolor != (PixelWand *) NULL) 3028 PixelGetMagickColor(bordercolor,&target); 3029 wand->images->fuzz=fuzz; 3030 status=FloodfillPaintImage(wand->images,draw_info,&target,x,y,invert, 3031 &wand->images->exception); 3032 draw_info=DestroyDrawInfo(draw_info); 3033 return(status); 3034} 3035 3036/* 3037%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3038% % 3039% % 3040% % 3041% M a g i c k F l o p I m a g e % 3042% % 3043% % 3044% % 3045%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3046% 3047% MagickFlopImage() creates a horizontal mirror image by reflecting the pixels 3048% around the central y-axis. 3049% 3050% The format of the MagickFlopImage method is: 3051% 3052% MagickBooleanType MagickFlopImage(MagickWand *wand) 3053% 3054% A description of each parameter follows: 3055% 3056% o wand: the magick wand. 3057% 3058*/ 3059WandExport MagickBooleanType MagickFlopImage(MagickWand *wand) 3060{ 3061 Image 3062 *flop_image; 3063 3064 assert(wand != (MagickWand *) NULL); 3065 assert(wand->signature == WandSignature); 3066 if (wand->debug != MagickFalse) 3067 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3068 if (wand->images == (Image *) NULL) 3069 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3070 flop_image=FlopImage(wand->images,wand->exception); 3071 if (flop_image == (Image *) NULL) 3072 return(MagickFalse); 3073 ReplaceImageInList(&wand->images,flop_image); 3074 return(MagickTrue); 3075} 3076 3077/* 3078%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3079% % 3080% % 3081% % 3082% 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 % 3083% % 3084% % 3085% % 3086%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3087% 3088% MagickForwardFourierTransformImage() implements the discrete Fourier 3089% transform (DFT) of the image either as a magnitude / phase or real / 3090% imaginary image pair. 3091% 3092% The format of the MagickForwardFourierTransformImage method is: 3093% 3094% MagickBooleanType MagickForwardFourierTransformImage(MagickWand *wand, 3095% const MagickBooleanType magnitude) 3096% 3097% A description of each parameter follows: 3098% 3099% o wand: the magick wand. 3100% 3101% o magnitude: if true, return as magnitude / phase pair otherwise a real / 3102% imaginary image pair. 3103% 3104*/ 3105WandExport MagickBooleanType MagickForwardFourierTransformImage( 3106 MagickWand *wand,const MagickBooleanType magnitude) 3107{ 3108 Image 3109 *forward_image; 3110 3111 assert(wand != (MagickWand *) NULL); 3112 assert(wand->signature == WandSignature); 3113 if (wand->debug != MagickFalse) 3114 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3115 if (wand->images == (Image *) NULL) 3116 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3117 forward_image=ForwardFourierTransformImage(wand->images,magnitude, 3118 wand->exception); 3119 if (forward_image == (Image *) NULL) 3120 return(MagickFalse); 3121 ReplaceImageInList(&wand->images,forward_image); 3122 return(MagickTrue); 3123} 3124 3125/* 3126%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3127% % 3128% % 3129% % 3130% M a g i c k F r a m e I m a g e % 3131% % 3132% % 3133% % 3134%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3135% 3136% MagickFrameImage() adds a simulated three-dimensional border around the 3137% image. The width and height specify the border width of the vertical and 3138% horizontal sides of the frame. The inner and outer bevels indicate the 3139% width of the inner and outer shadows of the frame. 3140% 3141% The format of the MagickFrameImage method is: 3142% 3143% MagickBooleanType MagickFrameImage(MagickWand *wand, 3144% const PixelWand *matte_color,const size_t width, 3145% const size_t height,const ssize_t inner_bevel, 3146% const ssize_t outer_bevel,const CompositeOperator compose) 3147% 3148% A description of each parameter follows: 3149% 3150% o wand: the magick wand. 3151% 3152% o matte_color: the frame color pixel wand. 3153% 3154% o width: the border width. 3155% 3156% o height: the border height. 3157% 3158% o inner_bevel: the inner bevel width. 3159% 3160% o outer_bevel: the outer bevel width. 3161% 3162% o compose: the composite operator. 3163% 3164*/ 3165WandExport MagickBooleanType MagickFrameImage(MagickWand *wand, 3166 const PixelWand *matte_color,const size_t width,const size_t height, 3167 const ssize_t inner_bevel,const ssize_t outer_bevel, 3168 const CompositeOperator compose) 3169{ 3170 Image 3171 *frame_image; 3172 3173 FrameInfo 3174 frame_info; 3175 3176 assert(wand != (MagickWand *) NULL); 3177 assert(wand->signature == WandSignature); 3178 if (wand->debug != MagickFalse) 3179 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3180 if (wand->images == (Image *) NULL) 3181 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3182 (void) ResetMagickMemory(&frame_info,0,sizeof(frame_info)); 3183 frame_info.width=wand->images->columns+2*width; 3184 frame_info.height=wand->images->rows+2*height; 3185 frame_info.x=(ssize_t) width; 3186 frame_info.y=(ssize_t) height; 3187 frame_info.inner_bevel=inner_bevel; 3188 frame_info.outer_bevel=outer_bevel; 3189 PixelGetQuantumPacket(matte_color,&wand->images->matte_color); 3190 frame_image=FrameImage(wand->images,&frame_info,compose,wand->exception); 3191 if (frame_image == (Image *) NULL) 3192 return(MagickFalse); 3193 ReplaceImageInList(&wand->images,frame_image); 3194 return(MagickTrue); 3195} 3196 3197/* 3198%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3199% % 3200% % 3201% % 3202% M a g i c k F u n c t i o n I m a g e % 3203% % 3204% % 3205% % 3206%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3207% 3208% MagickFunctionImage() applys an arithmetic, relational, or logical 3209% expression to an image. Use these operators to lighten or darken an image, 3210% to increase or decrease contrast in an image, or to produce the "negative" 3211% of an image. 3212% 3213% The format of the MagickFunctionImage method is: 3214% 3215% MagickBooleanType MagickFunctionImage(MagickWand *wand, 3216% const MagickFunction function,const size_t number_arguments, 3217% const double *arguments) 3218% 3219% A description of each parameter follows: 3220% 3221% o wand: the magick wand. 3222% 3223% o function: the image function. 3224% 3225% o number_arguments: the number of function arguments. 3226% 3227% o arguments: the function arguments. 3228% 3229*/ 3230WandExport MagickBooleanType MagickFunctionImage(MagickWand *wand, 3231 const MagickFunction function,const size_t number_arguments, 3232 const double *arguments) 3233{ 3234 MagickBooleanType 3235 status; 3236 3237 assert(wand != (MagickWand *) NULL); 3238 assert(wand->signature == WandSignature); 3239 if (wand->debug != MagickFalse) 3240 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3241 if (wand->images == (Image *) NULL) 3242 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3243 status=FunctionImage(wand->images,function,number_arguments,arguments, 3244 &wand->images->exception); 3245 return(status); 3246} 3247 3248/* 3249%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3250% % 3251% % 3252% % 3253% M a g i c k F x I m a g e % 3254% % 3255% % 3256% % 3257%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3258% 3259% MagickFxImage() evaluate expression for each pixel in the image. 3260% 3261% The format of the MagickFxImage method is: 3262% 3263% MagickWand *MagickFxImage(MagickWand *wand,const char *expression) 3264% 3265% A description of each parameter follows: 3266% 3267% o wand: the magick wand. 3268% 3269% o expression: the expression. 3270% 3271*/ 3272WandExport MagickWand *MagickFxImage(MagickWand *wand,const char *expression) 3273{ 3274 Image 3275 *fx_image; 3276 3277 assert(wand != (MagickWand *) NULL); 3278 assert(wand->signature == WandSignature); 3279 if (wand->debug != MagickFalse) 3280 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3281 if (wand->images == (Image *) NULL) 3282 return((MagickWand *) NULL); 3283 fx_image=FxImage(wand->images,expression,wand->exception); 3284 if (fx_image == (Image *) NULL) 3285 return((MagickWand *) NULL); 3286 return(CloneMagickWandFromImages(wand,fx_image)); 3287} 3288 3289/* 3290%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3291% % 3292% % 3293% % 3294% M a g i c k G a m m a I m a g e % 3295% % 3296% % 3297% % 3298%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3299% 3300% MagickGammaImage() gamma-corrects an image. The same image viewed on 3301% different devices will have perceptual differences in the way the image's 3302% intensities are represented on the screen. Specify individual gamma levels 3303% for the red, green, and blue channels, or adjust all three with the gamma 3304% parameter. Values typically range from 0.8 to 2.3. 3305% 3306% You can also reduce the influence of a particular channel with a gamma 3307% value of 0. 3308% 3309% The format of the MagickGammaImage method is: 3310% 3311% MagickBooleanType MagickGammaImage(MagickWand *wand,const double gamma) 3312% 3313% A description of each parameter follows: 3314% 3315% o wand: the magick wand. 3316% 3317% o level: Define the level of gamma correction. 3318% 3319*/ 3320WandExport MagickBooleanType MagickGammaImage(MagickWand *wand, 3321 const double gamma) 3322{ 3323 MagickBooleanType 3324 status; 3325 3326 assert(wand != (MagickWand *) NULL); 3327 assert(wand->signature == WandSignature); 3328 if (wand->debug != MagickFalse) 3329 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3330 if (wand->images == (Image *) NULL) 3331 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3332 status=GammaImage(wand->images,gamma,wand->exception); 3333 return(status); 3334} 3335 3336/* 3337%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3338% % 3339% % 3340% % 3341% M a g i c k G a u s s i a n B l u r I m a g e % 3342% % 3343% % 3344% % 3345%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3346% 3347% MagickGaussianBlurImage() blurs an image. We convolve the image with a 3348% Gaussian operator of the given radius and standard deviation (sigma). 3349% For reasonable results, the radius should be larger than sigma. Use a 3350% radius of 0 and MagickGaussianBlurImage() selects a suitable radius for you. 3351% 3352% The format of the MagickGaussianBlurImage method is: 3353% 3354% MagickBooleanType MagickGaussianBlurImage(MagickWand *wand, 3355% const double radius,const double sigma,const double bias) 3356% 3357% A description of each parameter follows: 3358% 3359% o wand: the magick wand. 3360% 3361% o radius: the radius of the Gaussian, in pixels, not counting the center 3362% pixel. 3363% 3364% o sigma: the standard deviation of the Gaussian, in pixels. 3365% 3366% o bias: the bias. 3367% 3368*/ 3369WandExport MagickBooleanType MagickGaussianBlurImage(MagickWand *wand, 3370 const double radius,const double sigma,const double bias) 3371{ 3372 Image 3373 *blur_image; 3374 3375 assert(wand != (MagickWand *) NULL); 3376 assert(wand->signature == WandSignature); 3377 if (wand->debug != MagickFalse) 3378 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3379 if (wand->images == (Image *) NULL) 3380 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3381 blur_image=GaussianBlurImage(wand->images,radius,sigma,bias,wand->exception); 3382 if (blur_image == (Image *) NULL) 3383 return(MagickFalse); 3384 ReplaceImageInList(&wand->images,blur_image); 3385 return(MagickTrue); 3386} 3387 3388/* 3389%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3390% % 3391% % 3392% % 3393% M a g i c k G e t I m a g e % 3394% % 3395% % 3396% % 3397%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3398% 3399% MagickGetImage() gets the image at the current image index. 3400% 3401% The format of the MagickGetImage method is: 3402% 3403% MagickWand *MagickGetImage(MagickWand *wand) 3404% 3405% A description of each parameter follows: 3406% 3407% o wand: the magick wand. 3408% 3409*/ 3410WandExport MagickWand *MagickGetImage(MagickWand *wand) 3411{ 3412 Image 3413 *image; 3414 3415 assert(wand != (MagickWand *) NULL); 3416 assert(wand->signature == WandSignature); 3417 if (wand->debug != MagickFalse) 3418 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3419 if (wand->images == (Image *) NULL) 3420 { 3421 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 3422 "ContainsNoImages","`%s'",wand->name); 3423 return((MagickWand *) NULL); 3424 } 3425 image=CloneImage(wand->images,0,0,MagickTrue,wand->exception); 3426 if (image == (Image *) NULL) 3427 return((MagickWand *) NULL); 3428 return(CloneMagickWandFromImages(wand,image)); 3429} 3430 3431/* 3432%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3433% % 3434% % 3435% % 3436% 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 % 3437% % 3438% % 3439% % 3440%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3441% 3442% MagickGetImageAlphaChannel() returns MagickFalse if the image alpha channel 3443% is not activated. That is, the image is RGB rather than RGBA or CMYK rather 3444% than CMYKA. 3445% 3446% The format of the MagickGetImageAlphaChannel method is: 3447% 3448% size_t MagickGetImageAlphaChannel(MagickWand *wand) 3449% 3450% A description of each parameter follows: 3451% 3452% o wand: the magick wand. 3453% 3454*/ 3455WandExport MagickBooleanType MagickGetImageAlphaChannel(MagickWand *wand) 3456{ 3457 assert(wand != (MagickWand *) NULL); 3458 assert(wand->signature == WandSignature); 3459 if (wand->debug != MagickFalse) 3460 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3461 if (wand->images == (Image *) NULL) 3462 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3463 return(GetImageAlphaChannel(wand->images)); 3464} 3465 3466/* 3467%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3468% % 3469% % 3470% % 3471% M a g i c k G e t I m a g e C l i p M a s k % 3472% % 3473% % 3474% % 3475%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3476% 3477% MagickGetImageClipMask() gets the image clip mask at the current image index. 3478% 3479% The format of the MagickGetImageClipMask method is: 3480% 3481% MagickWand *MagickGetImageClipMask(MagickWand *wand) 3482% 3483% A description of each parameter follows: 3484% 3485% o wand: the magick wand. 3486% 3487*/ 3488WandExport MagickWand *MagickGetImageClipMask(MagickWand *wand) 3489{ 3490 Image 3491 *image; 3492 3493 assert(wand != (MagickWand *) NULL); 3494 assert(wand->signature == WandSignature); 3495 if (wand->debug != MagickFalse) 3496 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3497 if (wand->images == (Image *) NULL) 3498 { 3499 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 3500 "ContainsNoImages","`%s'",wand->name); 3501 return((MagickWand *) NULL); 3502 } 3503 image=GetImageClipMask(wand->images,wand->exception); 3504 if (image == (Image *) NULL) 3505 return((MagickWand *) NULL); 3506 return(CloneMagickWandFromImages(wand,image)); 3507} 3508 3509/* 3510%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3511% % 3512% % 3513% % 3514% 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 % 3515% % 3516% % 3517% % 3518%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3519% 3520% MagickGetImageBackgroundColor() returns the image background color. 3521% 3522% The format of the MagickGetImageBackgroundColor method is: 3523% 3524% MagickBooleanType MagickGetImageBackgroundColor(MagickWand *wand, 3525% PixelWand *background_color) 3526% 3527% A description of each parameter follows: 3528% 3529% o wand: the magick wand. 3530% 3531% o background_color: Return the background color. 3532% 3533*/ 3534WandExport MagickBooleanType MagickGetImageBackgroundColor(MagickWand *wand, 3535 PixelWand *background_color) 3536{ 3537 assert(wand != (MagickWand *) NULL); 3538 assert(wand->signature == WandSignature); 3539 if (wand->debug != MagickFalse) 3540 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3541 if (wand->images == (Image *) NULL) 3542 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3543 PixelSetQuantumPacket(background_color,&wand->images->background_color); 3544 return(MagickTrue); 3545} 3546 3547/* 3548%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3549% % 3550% % 3551% % 3552% M a g i c k G e t I m a g e B l o b % 3553% % 3554% % 3555% % 3556%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3557% 3558% MagickGetImageBlob() implements direct to memory image formats. It returns 3559% the image as a blob (a formatted "file" in memory) and its length, starting 3560% from the current position in the image sequence. Use MagickSetImageFormat() 3561% to set the format to write to the blob (GIF, JPEG, PNG, etc.). 3562% 3563% Utilize MagickResetIterator() to ensure the write is from the beginning of 3564% the image sequence. 3565% 3566% Use MagickRelinquishMemory() to free the blob when you are done with it. 3567% 3568% The format of the MagickGetImageBlob method is: 3569% 3570% unsigned char *MagickGetImageBlob(MagickWand *wand,size_t *length) 3571% 3572% A description of each parameter follows: 3573% 3574% o wand: the magick wand. 3575% 3576% o length: the length of the blob. 3577% 3578*/ 3579WandExport unsigned char *MagickGetImageBlob(MagickWand *wand,size_t *length) 3580{ 3581 assert(wand != (MagickWand *) NULL); 3582 assert(wand->signature == WandSignature); 3583 if (wand->debug != MagickFalse) 3584 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3585 if (wand->images == (Image *) NULL) 3586 { 3587 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 3588 "ContainsNoImages","`%s'",wand->name); 3589 return((unsigned char *) NULL); 3590 } 3591 return(ImageToBlob(wand->image_info,wand->images,length,wand->exception)); 3592} 3593 3594/* 3595%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3596% % 3597% % 3598% % 3599% M a g i c k G e t I m a g e s B l o b % 3600% % 3601% % 3602% % 3603%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3604% 3605% MagickGetImageBlob() implements direct to memory image formats. It 3606% returns the image sequence as a blob and its length. The format of the image 3607% determines the format of the returned blob (GIF, JPEG, PNG, etc.). To 3608% return a different image format, use MagickSetImageFormat(). 3609% 3610% Note, some image formats do not permit multiple images to the same image 3611% stream (e.g. JPEG). in this instance, just the first image of the 3612% sequence is returned as a blob. 3613% 3614% The format of the MagickGetImagesBlob method is: 3615% 3616% unsigned char *MagickGetImagesBlob(MagickWand *wand,size_t *length) 3617% 3618% A description of each parameter follows: 3619% 3620% o wand: the magick wand. 3621% 3622% o length: the length of the blob. 3623% 3624*/ 3625WandExport unsigned char *MagickGetImagesBlob(MagickWand *wand,size_t *length) 3626{ 3627 unsigned char 3628 *blob; 3629 3630 assert(wand != (MagickWand *) NULL); 3631 assert(wand->signature == WandSignature); 3632 if (wand->debug != MagickFalse) 3633 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3634 if (wand->images == (Image *) NULL) 3635 { 3636 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 3637 "ContainsNoImages","`%s'",wand->name); 3638 return((unsigned char *) NULL); 3639 } 3640 blob=ImagesToBlob(wand->image_info,GetFirstImageInList(wand->images),length, 3641 wand->exception); 3642 return(blob); 3643} 3644 3645/* 3646%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3647% % 3648% % 3649% % 3650% 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 % 3651% % 3652% % 3653% % 3654%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3655% 3656% MagickGetImageBluePrimary() returns the chromaticy blue primary point for the 3657% image. 3658% 3659% The format of the MagickGetImageBluePrimary method is: 3660% 3661% MagickBooleanType MagickGetImageBluePrimary(MagickWand *wand,double *x, 3662% double *y) 3663% 3664% A description of each parameter follows: 3665% 3666% o wand: the magick wand. 3667% 3668% o x: the chromaticity blue primary x-point. 3669% 3670% o y: the chromaticity blue primary y-point. 3671% 3672*/ 3673WandExport MagickBooleanType MagickGetImageBluePrimary(MagickWand *wand, 3674 double *x,double *y) 3675{ 3676 assert(wand != (MagickWand *) NULL); 3677 assert(wand->signature == WandSignature); 3678 if (wand->debug != MagickFalse) 3679 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3680 if (wand->images == (Image *) NULL) 3681 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3682 *x=wand->images->chromaticity.blue_primary.x; 3683 *y=wand->images->chromaticity.blue_primary.y; 3684 return(MagickTrue); 3685} 3686 3687/* 3688%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3689% % 3690% % 3691% % 3692% 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 % 3693% % 3694% % 3695% % 3696%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3697% 3698% MagickGetImageBorderColor() returns the image border color. 3699% 3700% The format of the MagickGetImageBorderColor method is: 3701% 3702% MagickBooleanType MagickGetImageBorderColor(MagickWand *wand, 3703% PixelWand *border_color) 3704% 3705% A description of each parameter follows: 3706% 3707% o wand: the magick wand. 3708% 3709% o border_color: Return the border color. 3710% 3711*/ 3712WandExport MagickBooleanType MagickGetImageBorderColor(MagickWand *wand, 3713 PixelWand *border_color) 3714{ 3715 assert(wand != (MagickWand *) NULL); 3716 assert(wand->signature == WandSignature); 3717 if (wand->debug != MagickFalse) 3718 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3719 if (wand->images == (Image *) NULL) 3720 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3721 PixelSetQuantumPacket(border_color,&wand->images->border_color); 3722 return(MagickTrue); 3723} 3724 3725/* 3726%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3727% % 3728% % 3729% % 3730% M a g i c k G e t I m a g e F e a t u r e s % 3731% % 3732% % 3733% % 3734%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3735% 3736% MagickGetImageFeatures() returns features for each channel in the 3737% image in each of four directions (horizontal, vertical, left and right 3738% diagonals) for the specified distance. The features include the angular 3739% second moment, contrast, correlation, sum of squares: variance, inverse 3740% difference moment, sum average, sum varience, sum entropy, entropy, 3741% difference variance, difference entropy, information measures of 3742% correlation 1, information measures of correlation 2, and maximum 3743% correlation coefficient. You can access the red channel contrast, for 3744% example, like this: 3745% 3746% channel_features=MagickGetImageFeatures(wand,1); 3747% contrast=channel_features[RedChannel].contrast[0]; 3748% 3749% Use MagickRelinquishMemory() to free the statistics buffer. 3750% 3751% The format of the MagickGetImageFeatures method is: 3752% 3753% ChannelFeatures *MagickGetImageFeatures(MagickWand *wand, 3754% const size_t distance) 3755% 3756% A description of each parameter follows: 3757% 3758% o wand: the magick wand. 3759% 3760% o distance: the distance. 3761% 3762*/ 3763WandExport ChannelFeatures *MagickGetImageFeatures(MagickWand *wand, 3764 const size_t distance) 3765{ 3766 assert(wand != (MagickWand *) NULL); 3767 assert(wand->signature == WandSignature); 3768 if (wand->debug != MagickFalse) 3769 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3770 if (wand->images == (Image *) NULL) 3771 { 3772 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 3773 "ContainsNoImages","`%s'",wand->name); 3774 return((ChannelFeatures *) NULL); 3775 } 3776 return(GetImageFeatures(wand->images,distance,wand->exception)); 3777} 3778 3779/* 3780%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3781% % 3782% % 3783% % 3784% M a g i c k G e t I m a g e K u r t o s i s % 3785% % 3786% % 3787% % 3788%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3789% 3790% MagickGetImageKurtosis() gets the kurtosis and skewness of one or 3791% more image channels. 3792% 3793% The format of the MagickGetImageKurtosis method is: 3794% 3795% MagickBooleanType MagickGetImageKurtosis(MagickWand *wand, 3796% double *kurtosis,double *skewness) 3797% 3798% A description of each parameter follows: 3799% 3800% o wand: the magick wand. 3801% 3802% o kurtosis: The kurtosis for the specified channel(s). 3803% 3804% o skewness: The skewness for the specified channel(s). 3805% 3806*/ 3807WandExport MagickBooleanType MagickGetImageKurtosis(MagickWand *wand, 3808 double *kurtosis,double *skewness) 3809{ 3810 MagickBooleanType 3811 status; 3812 3813 assert(wand != (MagickWand *) NULL); 3814 assert(wand->signature == WandSignature); 3815 if (wand->debug != MagickFalse) 3816 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3817 if (wand->images == (Image *) NULL) 3818 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3819 status=GetImageKurtosis(wand->images,kurtosis,skewness,wand->exception); 3820 return(status); 3821} 3822 3823/* 3824%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3825% % 3826% % 3827% % 3828% M a g i c k G e t I m a g e M e a n % 3829% % 3830% % 3831% % 3832%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3833% 3834% MagickGetImageMean() gets the mean and standard deviation of one or more 3835% image channels. 3836% 3837% The format of the MagickGetImageMean method is: 3838% 3839% MagickBooleanType MagickGetImageMean(MagickWand *wand,double *mean, 3840% double *standard_deviation) 3841% 3842% A description of each parameter follows: 3843% 3844% o wand: the magick wand. 3845% 3846% o channel: the image channel(s). 3847% 3848% o mean: The mean pixel value for the specified channel(s). 3849% 3850% o standard_deviation: The standard deviation for the specified channel(s). 3851% 3852*/ 3853WandExport MagickBooleanType MagickGetImageMean(MagickWand *wand,double *mean, 3854 double *standard_deviation) 3855{ 3856 MagickBooleanType 3857 status; 3858 3859 assert(wand != (MagickWand *) NULL); 3860 assert(wand->signature == WandSignature); 3861 if (wand->debug != MagickFalse) 3862 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3863 if (wand->images == (Image *) NULL) 3864 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3865 status=GetImageMean(wand->images,mean,standard_deviation,wand->exception); 3866 return(status); 3867} 3868 3869/* 3870%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3871% % 3872% % 3873% % 3874% M a g i c k G e t I m a g e R a n g e % 3875% % 3876% % 3877% % 3878%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3879% 3880% MagickGetImageRange() gets the range for one or more image channels. 3881% 3882% The format of the MagickGetImageRange method is: 3883% 3884% MagickBooleanType MagickGetImageRange(MagickWand *wand,double *minima, 3885% double *maxima) 3886% 3887% A description of each parameter follows: 3888% 3889% o wand: the magick wand. 3890% 3891% o minima: The minimum pixel value for the specified channel(s). 3892% 3893% o maxima: The maximum pixel value for the specified channel(s). 3894% 3895*/ 3896WandExport MagickBooleanType MagickGetImageRange(MagickWand *wand, 3897 double *minima,double *maxima) 3898{ 3899 MagickBooleanType 3900 status; 3901 3902 assert(wand != (MagickWand *) NULL); 3903 assert(wand->signature == WandSignature); 3904 if (wand->debug != MagickFalse) 3905 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3906 if (wand->images == (Image *) NULL) 3907 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3908 status=GetImageRange(wand->images,minima,maxima,wand->exception); 3909 return(status); 3910} 3911 3912/* 3913%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3914% % 3915% % 3916% % 3917% M a g i c k G e t I m a g e S t a t i s t i c s % 3918% % 3919% % 3920% % 3921%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3922% 3923% MagickGetImageStatistics() returns statistics for each channel in the 3924% image. The statistics include the channel depth, its minima and 3925% maxima, the mean, the standard deviation, the kurtosis and the skewness. 3926% You can access the red channel mean, for example, like this: 3927% 3928% channel_statistics=MagickGetImageStatistics(wand); 3929% red_mean=channel_statistics[RedChannel].mean; 3930% 3931% Use MagickRelinquishMemory() to free the statistics buffer. 3932% 3933% The format of the MagickGetImageStatistics method is: 3934% 3935% ChannelStatistics *MagickGetImageStatistics(MagickWand *wand) 3936% 3937% A description of each parameter follows: 3938% 3939% o wand: the magick wand. 3940% 3941*/ 3942WandExport ChannelStatistics *MagickGetImageStatistics(MagickWand *wand) 3943{ 3944 assert(wand != (MagickWand *) NULL); 3945 assert(wand->signature == WandSignature); 3946 if (wand->debug != MagickFalse) 3947 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3948 if (wand->images == (Image *) NULL) 3949 { 3950 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 3951 "ContainsNoImages","`%s'",wand->name); 3952 return((ChannelStatistics *) NULL); 3953 } 3954 return(GetImageStatistics(wand->images,wand->exception)); 3955} 3956 3957/* 3958%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3959% % 3960% % 3961% % 3962% 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 % 3963% % 3964% % 3965% % 3966%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3967% 3968% MagickGetImageColormapColor() returns the color of the specified colormap 3969% index. 3970% 3971% The format of the MagickGetImageColormapColor method is: 3972% 3973% MagickBooleanType MagickGetImageColormapColor(MagickWand *wand, 3974% const size_t index,PixelWand *color) 3975% 3976% A description of each parameter follows: 3977% 3978% o wand: the magick wand. 3979% 3980% o index: the offset into the image colormap. 3981% 3982% o color: Return the colormap color in this wand. 3983% 3984*/ 3985WandExport MagickBooleanType MagickGetImageColormapColor(MagickWand *wand, 3986 const size_t index,PixelWand *color) 3987{ 3988 assert(wand != (MagickWand *) NULL); 3989 assert(wand->signature == WandSignature); 3990 if (wand->debug != MagickFalse) 3991 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3992 if (wand->images == (Image *) NULL) 3993 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3994 if ((wand->images->colormap == (PixelPacket *) NULL) || 3995 (index >= wand->images->colors)) 3996 { 3997 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 3998 "InvalidColormapIndex","`%s'",wand->name); 3999 return(MagickFalse); 4000 } 4001 PixelSetQuantumPacket(color,wand->images->colormap+index); 4002 return(MagickTrue); 4003} 4004 4005/* 4006%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4007% % 4008% % 4009% % 4010% M a g i c k G e t I m a g e C o l o r s % 4011% % 4012% % 4013% % 4014%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4015% 4016% MagickGetImageColors() gets the number of unique colors in the image. 4017% 4018% The format of the MagickGetImageColors method is: 4019% 4020% size_t MagickGetImageColors(MagickWand *wand) 4021% 4022% A description of each parameter follows: 4023% 4024% o wand: the magick wand. 4025% 4026*/ 4027WandExport size_t MagickGetImageColors(MagickWand *wand) 4028{ 4029 assert(wand != (MagickWand *) NULL); 4030 assert(wand->signature == WandSignature); 4031 if (wand->debug != MagickFalse) 4032 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4033 if (wand->images == (Image *) NULL) 4034 { 4035 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4036 "ContainsNoImages","`%s'",wand->name); 4037 return(0); 4038 } 4039 return(GetNumberColors(wand->images,(FILE *) NULL,wand->exception)); 4040} 4041 4042/* 4043%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4044% % 4045% % 4046% % 4047% M a g i c k G e t I m a g e C o l o r s p a c e % 4048% % 4049% % 4050% % 4051%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4052% 4053% MagickGetImageColorspace() gets the image colorspace. 4054% 4055% The format of the MagickGetImageColorspace method is: 4056% 4057% ColorspaceType MagickGetImageColorspace(MagickWand *wand) 4058% 4059% A description of each parameter follows: 4060% 4061% o wand: the magick wand. 4062% 4063*/ 4064WandExport ColorspaceType MagickGetImageColorspace(MagickWand *wand) 4065{ 4066 assert(wand != (MagickWand *) NULL); 4067 assert(wand->signature == WandSignature); 4068 if (wand->debug != MagickFalse) 4069 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4070 if (wand->images == (Image *) NULL) 4071 { 4072 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4073 "ContainsNoImages","`%s'",wand->name); 4074 return(UndefinedColorspace); 4075 } 4076 return(wand->images->colorspace); 4077} 4078 4079/* 4080%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4081% % 4082% % 4083% % 4084% M a g i c k G e t I m a g e C o m p o s e % 4085% % 4086% % 4087% % 4088%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4089% 4090% MagickGetImageCompose() returns the composite operator associated with the 4091% image. 4092% 4093% The format of the MagickGetImageCompose method is: 4094% 4095% CompositeOperator MagickGetImageCompose(MagickWand *wand) 4096% 4097% A description of each parameter follows: 4098% 4099% o wand: the magick wand. 4100% 4101*/ 4102WandExport CompositeOperator MagickGetImageCompose(MagickWand *wand) 4103{ 4104 assert(wand != (MagickWand *) NULL); 4105 assert(wand->signature == WandSignature); 4106 if (wand->debug != MagickFalse) 4107 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4108 if (wand->images == (Image *) NULL) 4109 { 4110 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4111 "ContainsNoImages","`%s'",wand->name); 4112 return(UndefinedCompositeOp); 4113 } 4114 return(wand->images->compose); 4115} 4116 4117/* 4118%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4119% % 4120% % 4121% % 4122% 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 % 4123% % 4124% % 4125% % 4126%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4127% 4128% MagickGetImageCompression() gets the image compression. 4129% 4130% The format of the MagickGetImageCompression method is: 4131% 4132% CompressionType MagickGetImageCompression(MagickWand *wand) 4133% 4134% A description of each parameter follows: 4135% 4136% o wand: the magick wand. 4137% 4138*/ 4139WandExport CompressionType MagickGetImageCompression(MagickWand *wand) 4140{ 4141 assert(wand != (MagickWand *) NULL); 4142 assert(wand->signature == WandSignature); 4143 if (wand->debug != MagickFalse) 4144 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4145 if (wand->images == (Image *) NULL) 4146 { 4147 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4148 "ContainsNoImages","`%s'",wand->name); 4149 return(UndefinedCompression); 4150 } 4151 return(wand->images->compression); 4152} 4153 4154/* 4155%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4156% % 4157% % 4158% % 4159% 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 % 4160% % 4161% % 4162% % 4163%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4164% 4165% MagickGetImageCompression() gets the image compression quality. 4166% 4167% The format of the MagickGetImageCompression method is: 4168% 4169% size_t MagickGetImageCompression(MagickWand *wand) 4170% 4171% A description of each parameter follows: 4172% 4173% o wand: the magick wand. 4174% 4175*/ 4176WandExport size_t MagickGetImageCompressionQuality(MagickWand *wand) 4177{ 4178 assert(wand != (MagickWand *) NULL); 4179 assert(wand->signature == WandSignature); 4180 if (wand->debug != MagickFalse) 4181 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4182 if (wand->images == (Image *) NULL) 4183 { 4184 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4185 "ContainsNoImages","`%s'",wand->name); 4186 return(0UL); 4187 } 4188 return(wand->images->quality); 4189} 4190 4191/* 4192%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4193% % 4194% % 4195% % 4196% M a g i c k G e t I m a g e D e l a y % 4197% % 4198% % 4199% % 4200%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4201% 4202% MagickGetImageDelay() gets the image delay. 4203% 4204% The format of the MagickGetImageDelay method is: 4205% 4206% size_t MagickGetImageDelay(MagickWand *wand) 4207% 4208% A description of each parameter follows: 4209% 4210% o wand: the magick wand. 4211% 4212*/ 4213WandExport size_t MagickGetImageDelay(MagickWand *wand) 4214{ 4215 assert(wand != (MagickWand *) NULL); 4216 assert(wand->signature == WandSignature); 4217 if (wand->debug != MagickFalse) 4218 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4219 if (wand->images == (Image *) NULL) 4220 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4221 return(wand->images->delay); 4222} 4223 4224/* 4225%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4226% % 4227% % 4228% % 4229% M a g i c k G e t I m a g e D e p t h % 4230% % 4231% % 4232% % 4233%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4234% 4235% MagickGetImageDepth() gets the image depth. 4236% 4237% The format of the MagickGetImageDepth method is: 4238% 4239% size_t MagickGetImageDepth(MagickWand *wand) 4240% 4241% A description of each parameter follows: 4242% 4243% o wand: the magick wand. 4244% 4245*/ 4246WandExport size_t MagickGetImageDepth(MagickWand *wand) 4247{ 4248 assert(wand != (MagickWand *) NULL); 4249 assert(wand->signature == WandSignature); 4250 if (wand->debug != MagickFalse) 4251 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4252 if (wand->images == (Image *) NULL) 4253 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4254 return(GetImageDepth(wand->images,wand->exception)); 4255} 4256 4257/* 4258%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4259% % 4260% % 4261% % 4262% M a g i c k G e t I m a g e D i s p o s e % 4263% % 4264% % 4265% % 4266%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4267% 4268% MagickGetImageDispose() gets the image disposal method. 4269% 4270% The format of the MagickGetImageDispose method is: 4271% 4272% DisposeType MagickGetImageDispose(MagickWand *wand) 4273% 4274% A description of each parameter follows: 4275% 4276% o wand: the magick wand. 4277% 4278*/ 4279WandExport DisposeType MagickGetImageDispose(MagickWand *wand) 4280{ 4281 assert(wand != (MagickWand *) NULL); 4282 assert(wand->signature == WandSignature); 4283 if (wand->debug != MagickFalse) 4284 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4285 if (wand->images == (Image *) NULL) 4286 { 4287 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4288 "ContainsNoImages","`%s'",wand->name); 4289 return(UndefinedDispose); 4290 } 4291 return((DisposeType) wand->images->dispose); 4292} 4293 4294/* 4295%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4296% % 4297% % 4298% % 4299% M a g i c k G e t I m a g e D i s t o r t i o n % 4300% % 4301% % 4302% % 4303%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4304% 4305% MagickGetImageDistortion() compares an image to a reconstructed image and 4306% returns the specified distortion metric. 4307% 4308% The format of the MagickGetImageDistortion method is: 4309% 4310% MagickBooleanType MagickGetImageDistortion(MagickWand *wand, 4311% const MagickWand *reference,const MetricType metric, 4312% double *distortion) 4313% 4314% A description of each parameter follows: 4315% 4316% o wand: the magick wand. 4317% 4318% o reference: the reference wand. 4319% 4320% o metric: the metric. 4321% 4322% o distortion: the computed distortion between the images. 4323% 4324*/ 4325WandExport MagickBooleanType MagickGetImageDistortion(MagickWand *wand, 4326 const MagickWand *reference,const MetricType metric,double *distortion) 4327{ 4328 MagickBooleanType 4329 status; 4330 4331 assert(wand != (MagickWand *) NULL); 4332 assert(wand->signature == WandSignature); 4333 if (wand->debug != MagickFalse) 4334 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4335 if ((wand->images == (Image *) NULL) || (reference->images == (Image *) NULL)) 4336 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4337 status=GetImageDistortion(wand->images,reference->images,metric,distortion, 4338 &wand->images->exception); 4339 return(status); 4340} 4341 4342/* 4343%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4344% % 4345% % 4346% % 4347% 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 % 4348% % 4349% % 4350% % 4351%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4352% 4353% MagickGetImageDistortions() compares one or more pixel channels of an 4354% image to a reconstructed image and returns the specified distortion metrics. 4355% 4356% Use MagickRelinquishMemory() to free the metrics when you are done with them. 4357% 4358% The format of the MagickGetImageDistortion method is: 4359% 4360% double *MagickGetImageDistortion(MagickWand *wand, 4361% const MagickWand *reference,const MetricType metric) 4362% 4363% A description of each parameter follows: 4364% 4365% o wand: the magick wand. 4366% 4367% o reference: the reference wand. 4368% 4369% o metric: the metric. 4370% 4371*/ 4372WandExport double *MagickGetImageDistortions(MagickWand *wand, 4373 const MagickWand *reference,const MetricType metric) 4374{ 4375 double 4376 *channel_distortion; 4377 4378 assert(wand != (MagickWand *) NULL); 4379 assert(wand->signature == WandSignature); 4380 if (wand->debug != MagickFalse) 4381 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4382 assert(reference != (MagickWand *) NULL); 4383 assert(reference->signature == WandSignature); 4384 if ((wand->images == (Image *) NULL) || (reference->images == (Image *) NULL)) 4385 { 4386 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4387 "ContainsNoImages","`%s'",wand->name); 4388 return((double *) NULL); 4389 } 4390 channel_distortion=GetImageDistortions(wand->images,reference->images, 4391 metric,&wand->images->exception); 4392 return(channel_distortion); 4393} 4394 4395/* 4396%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4397% % 4398% % 4399% % 4400% M a g i c k G e t I m a g e F i l e n a m e % 4401% % 4402% % 4403% % 4404%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4405% 4406% MagickGetImageFilename() returns the filename of a particular image in a 4407% sequence. 4408% 4409% The format of the MagickGetImageFilename method is: 4410% 4411% char *MagickGetImageFilename(MagickWand *wand) 4412% 4413% A description of each parameter follows: 4414% 4415% o wand: the magick wand. 4416% 4417*/ 4418WandExport char *MagickGetImageFilename(MagickWand *wand) 4419{ 4420 assert(wand != (MagickWand *) NULL); 4421 assert(wand->signature == WandSignature); 4422 if (wand->debug != MagickFalse) 4423 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4424 if (wand->images == (Image *) NULL) 4425 { 4426 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4427 "ContainsNoImages","`%s'",wand->name); 4428 return((char *) NULL); 4429 } 4430 return(AcquireString(wand->images->filename)); 4431} 4432 4433/* 4434%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4435% % 4436% % 4437% % 4438% M a g i c k G e t I m a g e F o r m a t % 4439% % 4440% % 4441% % 4442%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4443% 4444% MagickGetImageFormat() returns the format of a particular image in a 4445% sequence. 4446% 4447% The format of the MagickGetImageFormat method is: 4448% 4449% const char *MagickGetImageFormat(MagickWand *wand) 4450% 4451% A description of each parameter follows: 4452% 4453% o wand: the magick wand. 4454% 4455*/ 4456WandExport char *MagickGetImageFormat(MagickWand *wand) 4457{ 4458 assert(wand != (MagickWand *) NULL); 4459 assert(wand->signature == WandSignature); 4460 if (wand->debug != MagickFalse) 4461 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4462 if (wand->images == (Image *) NULL) 4463 { 4464 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4465 "ContainsNoImages","`%s'",wand->name); 4466 return((char *) NULL); 4467 } 4468 return(AcquireString(wand->images->magick)); 4469} 4470 4471/* 4472%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4473% % 4474% % 4475% % 4476% M a g i c k G e t I m a g e F u z z % 4477% % 4478% % 4479% % 4480%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4481% 4482% MagickGetImageFuzz() gets the image fuzz. 4483% 4484% The format of the MagickGetImageFuzz method is: 4485% 4486% double MagickGetImageFuzz(MagickWand *wand) 4487% 4488% A description of each parameter follows: 4489% 4490% o wand: the magick wand. 4491% 4492*/ 4493WandExport double MagickGetImageFuzz(MagickWand *wand) 4494{ 4495 assert(wand != (MagickWand *) NULL); 4496 assert(wand->signature == WandSignature); 4497 if (wand->debug != MagickFalse) 4498 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4499 if (wand->images == (Image *) NULL) 4500 { 4501 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4502 "ContainsNoImages","`%s'",wand->name); 4503 return(0.0); 4504 } 4505 return(wand->images->fuzz); 4506} 4507 4508/* 4509%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4510% % 4511% % 4512% % 4513% M a g i c k G e t I m a g e G a m m a % 4514% % 4515% % 4516% % 4517%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4518% 4519% MagickGetImageGamma() gets the image gamma. 4520% 4521% The format of the MagickGetImageGamma method is: 4522% 4523% double MagickGetImageGamma(MagickWand *wand) 4524% 4525% A description of each parameter follows: 4526% 4527% o wand: the magick wand. 4528% 4529*/ 4530WandExport double MagickGetImageGamma(MagickWand *wand) 4531{ 4532 assert(wand != (MagickWand *) NULL); 4533 assert(wand->signature == WandSignature); 4534 if (wand->debug != MagickFalse) 4535 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4536 if (wand->images == (Image *) NULL) 4537 { 4538 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4539 "ContainsNoImages","`%s'",wand->name); 4540 return(0.0); 4541 } 4542 return(wand->images->gamma); 4543} 4544 4545/* 4546%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4547% % 4548% % 4549% % 4550% 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 % 4551% % 4552% % 4553% % 4554%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4555% 4556% MagickGetImageGravity() gets the image gravity. 4557% 4558% The format of the MagickGetImageGravity method is: 4559% 4560% GravityType MagickGetImageGravity(MagickWand *wand) 4561% 4562% A description of each parameter follows: 4563% 4564% o wand: the magick wand. 4565% 4566*/ 4567WandExport GravityType MagickGetImageGravity(MagickWand *wand) 4568{ 4569 assert(wand != (MagickWand *) NULL); 4570 assert(wand->signature == WandSignature); 4571 if (wand->debug != MagickFalse) 4572 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4573 if (wand->images == (Image *) NULL) 4574 { 4575 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4576 "ContainsNoImages","`%s'",wand->name); 4577 return(UndefinedGravity); 4578 } 4579 return(wand->images->gravity); 4580} 4581 4582/* 4583%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4584% % 4585% % 4586% % 4587% 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 % 4588% % 4589% % 4590% % 4591%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4592% 4593% MagickGetImageGreenPrimary() returns the chromaticy green primary point. 4594% 4595% The format of the MagickGetImageGreenPrimary method is: 4596% 4597% MagickBooleanType MagickGetImageGreenPrimary(MagickWand *wand,double *x, 4598% double *y) 4599% 4600% A description of each parameter follows: 4601% 4602% o wand: the magick wand. 4603% 4604% o x: the chromaticity green primary x-point. 4605% 4606% o y: the chromaticity green primary y-point. 4607% 4608*/ 4609WandExport MagickBooleanType MagickGetImageGreenPrimary(MagickWand *wand, 4610 double *x,double *y) 4611{ 4612 assert(wand != (MagickWand *) NULL); 4613 assert(wand->signature == WandSignature); 4614 if (wand->debug != MagickFalse) 4615 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4616 if (wand->images == (Image *) NULL) 4617 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4618 *x=wand->images->chromaticity.green_primary.x; 4619 *y=wand->images->chromaticity.green_primary.y; 4620 return(MagickTrue); 4621} 4622 4623/* 4624%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4625% % 4626% % 4627% % 4628% M a g i c k G e t I m a g e H e i g h t % 4629% % 4630% % 4631% % 4632%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4633% 4634% MagickGetImageHeight() returns the image height. 4635% 4636% The format of the MagickGetImageHeight method is: 4637% 4638% size_t MagickGetImageHeight(MagickWand *wand) 4639% 4640% A description of each parameter follows: 4641% 4642% o wand: the magick wand. 4643% 4644*/ 4645WandExport size_t MagickGetImageHeight(MagickWand *wand) 4646{ 4647 assert(wand != (MagickWand *) NULL); 4648 assert(wand->signature == WandSignature); 4649 if (wand->debug != MagickFalse) 4650 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4651 if (wand->images == (Image *) NULL) 4652 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4653 return(wand->images->rows); 4654} 4655 4656/* 4657%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4658% % 4659% % 4660% % 4661% M a g i c k G e t I m a g e H i s t o g r a m % 4662% % 4663% % 4664% % 4665%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4666% 4667% MagickGetImageHistogram() returns the image histogram as an array of 4668% PixelWand wands. 4669% 4670% The format of the MagickGetImageHistogram method is: 4671% 4672% PixelWand **MagickGetImageHistogram(MagickWand *wand, 4673% size_t *number_colors) 4674% 4675% A description of each parameter follows: 4676% 4677% o wand: the magick wand. 4678% 4679% o number_colors: the number of unique colors in the image and the number 4680% of pixel wands returned. 4681% 4682*/ 4683WandExport PixelWand **MagickGetImageHistogram(MagickWand *wand, 4684 size_t *number_colors) 4685{ 4686 PixelPacket 4687 *histogram; 4688 4689 PixelWand 4690 **pixel_wands; 4691 4692 register ssize_t 4693 i; 4694 4695 assert(wand != (MagickWand *) NULL); 4696 assert(wand->signature == WandSignature); 4697 if (wand->debug != MagickFalse) 4698 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4699 if (wand->images == (Image *) NULL) 4700 { 4701 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4702 "ContainsNoImages","`%s'",wand->name); 4703 return((PixelWand **) NULL); 4704 } 4705 histogram=GetImageHistogram(wand->images,number_colors,wand->exception); 4706 if (histogram == (PixelPacket *) NULL) 4707 return((PixelWand **) NULL); 4708 pixel_wands=NewPixelWands(*number_colors); 4709 for (i=0; i < (ssize_t) *number_colors; i++) 4710 { 4711 PixelSetQuantumPacket(pixel_wands[i],&histogram[i]); 4712 PixelSetColorCount(pixel_wands[i],(size_t) histogram[i].count); 4713 } 4714 histogram=(PixelPacket *) RelinquishMagickMemory(histogram); 4715 return(pixel_wands); 4716} 4717 4718/* 4719%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4720% % 4721% % 4722% % 4723% 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 % 4724% % 4725% % 4726% % 4727%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4728% 4729% MagickGetImageInterlaceScheme() gets the image interlace scheme. 4730% 4731% The format of the MagickGetImageInterlaceScheme method is: 4732% 4733% InterlaceType MagickGetImageInterlaceScheme(MagickWand *wand) 4734% 4735% A description of each parameter follows: 4736% 4737% o wand: the magick wand. 4738% 4739*/ 4740WandExport InterlaceType MagickGetImageInterlaceScheme(MagickWand *wand) 4741{ 4742 assert(wand != (MagickWand *) NULL); 4743 assert(wand->signature == WandSignature); 4744 if (wand->debug != MagickFalse) 4745 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4746 if (wand->images == (Image *) NULL) 4747 { 4748 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4749 "ContainsNoImages","`%s'",wand->name); 4750 return(UndefinedInterlace); 4751 } 4752 return(wand->images->interlace); 4753} 4754 4755/* 4756%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4757% % 4758% % 4759% % 4760% 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 % 4761% % 4762% % 4763% % 4764%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4765% 4766% MagickGetImageInterpolateMethod() returns the interpolation method for the 4767% sepcified image. 4768% 4769% The format of the MagickGetImageInterpolateMethod method is: 4770% 4771% PixelInterpolateMethod MagickGetImagePixelInterpolateMethod( 4772% MagickWand *wand) 4773% 4774% A description of each parameter follows: 4775% 4776% o wand: the magick wand. 4777% 4778*/ 4779WandExport PixelInterpolateMethod MagickGetImageInterpolateMethod( 4780 MagickWand *wand) 4781{ 4782 assert(wand != (MagickWand *) NULL); 4783 assert(wand->signature == WandSignature); 4784 if (wand->debug != MagickFalse) 4785 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4786 if (wand->images == (Image *) NULL) 4787 { 4788 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4789 "ContainsNoImages","`%s'",wand->name); 4790 return(UndefinedInterpolatePixel); 4791 } 4792 return(wand->images->interpolate); 4793} 4794 4795/* 4796%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4797% % 4798% % 4799% % 4800% M a g i c k G e t I m a g e I t e r a t i o n s % 4801% % 4802% % 4803% % 4804%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4805% 4806% MagickGetImageIterations() gets the image iterations. 4807% 4808% The format of the MagickGetImageIterations method is: 4809% 4810% size_t MagickGetImageIterations(MagickWand *wand) 4811% 4812% A description of each parameter follows: 4813% 4814% o wand: the magick wand. 4815% 4816*/ 4817WandExport size_t MagickGetImageIterations(MagickWand *wand) 4818{ 4819 assert(wand != (MagickWand *) NULL); 4820 assert(wand->signature == WandSignature); 4821 if (wand->debug != MagickFalse) 4822 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4823 if (wand->images == (Image *) NULL) 4824 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4825 return(wand->images->iterations); 4826} 4827 4828/* 4829%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4830% % 4831% % 4832% % 4833% M a g i c k G e t I m a g e L e n g t h % 4834% % 4835% % 4836% % 4837%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4838% 4839% MagickGetImageLength() returns the image length in bytes. 4840% 4841% The format of the MagickGetImageLength method is: 4842% 4843% MagickBooleanType MagickGetImageLength(MagickWand *wand, 4844% MagickSizeType *length) 4845% 4846% A description of each parameter follows: 4847% 4848% o wand: the magick wand. 4849% 4850% o length: the image length in bytes. 4851% 4852*/ 4853WandExport MagickBooleanType MagickGetImageLength(MagickWand *wand, 4854 MagickSizeType *length) 4855{ 4856 assert(wand != (MagickWand *) NULL); 4857 assert(wand->signature == WandSignature); 4858 if (wand->debug != MagickFalse) 4859 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4860 if (wand->images == (Image *) NULL) 4861 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4862 *length=GetBlobSize(wand->images); 4863 return(MagickTrue); 4864} 4865 4866/* 4867%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4868% % 4869% % 4870% % 4871% M a g i c k G e t I m a g e M a t t e C o l o r % 4872% % 4873% % 4874% % 4875%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4876% 4877% MagickGetImageMatteColor() returns the image matte color. 4878% 4879% The format of the MagickGetImageMatteColor method is: 4880% 4881% MagickBooleanType MagickGetImagematteColor(MagickWand *wand, 4882% PixelWand *matte_color) 4883% 4884% A description of each parameter follows: 4885% 4886% o wand: the magick wand. 4887% 4888% o matte_color: Return the matte color. 4889% 4890*/ 4891WandExport MagickBooleanType MagickGetImageMatteColor(MagickWand *wand, 4892 PixelWand *matte_color) 4893{ 4894 assert(wand != (MagickWand *) NULL); 4895 assert(wand->signature == WandSignature); 4896 if (wand->debug != MagickFalse) 4897 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4898 if (wand->images == (Image *) NULL) 4899 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4900 PixelSetQuantumPacket(matte_color,&wand->images->matte_color); 4901 return(MagickTrue); 4902} 4903 4904/* 4905%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4906% % 4907% % 4908% % 4909% 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 % 4910% % 4911% % 4912% % 4913%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4914% 4915% MagickGetImageOrientation() returns the image orientation. 4916% 4917% The format of the MagickGetImageOrientation method is: 4918% 4919% OrientationType MagickGetImageOrientation(MagickWand *wand) 4920% 4921% A description of each parameter follows: 4922% 4923% o wand: the magick wand. 4924% 4925*/ 4926WandExport OrientationType MagickGetImageOrientation(MagickWand *wand) 4927{ 4928 assert(wand != (MagickWand *) NULL); 4929 assert(wand->signature == WandSignature); 4930 if (wand->debug != MagickFalse) 4931 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4932 if (wand->images == (Image *) NULL) 4933 { 4934 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4935 "ContainsNoImages","`%s'",wand->name); 4936 return(UndefinedOrientation); 4937 } 4938 return(wand->images->orientation); 4939} 4940 4941/* 4942%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4943% % 4944% % 4945% % 4946% M a g i c k G e t I m a g e P a g e % 4947% % 4948% % 4949% % 4950%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4951% 4952% MagickGetImagePage() returns the page geometry associated with the image. 4953% 4954% The format of the MagickGetImagePage method is: 4955% 4956% MagickBooleanType MagickGetImagePage(MagickWand *wand, 4957% size_t *width,size_t *height,ssize_t *x,ssize_t *y) 4958% 4959% A description of each parameter follows: 4960% 4961% o wand: the magick wand. 4962% 4963% o width: the page width. 4964% 4965% o height: the page height. 4966% 4967% o x: the page x-offset. 4968% 4969% o y: the page y-offset. 4970% 4971*/ 4972WandExport MagickBooleanType MagickGetImagePage(MagickWand *wand, 4973 size_t *width,size_t *height,ssize_t *x,ssize_t *y) 4974{ 4975 assert(wand != (const MagickWand *) NULL); 4976 assert(wand->signature == WandSignature); 4977 if (wand->debug != MagickFalse) 4978 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4979 if (wand->images == (Image *) NULL) 4980 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4981 *width=wand->images->page.width; 4982 *height=wand->images->page.height; 4983 *x=wand->images->page.x; 4984 *y=wand->images->page.y; 4985 return(MagickTrue); 4986} 4987 4988/* 4989%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4990% % 4991% % 4992% % 4993% M a g i c k G e t I m a g e P i x e l C o l o r % 4994% % 4995% % 4996% % 4997%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4998% 4999% MagickGetImagePixelColor() returns the color of the specified pixel. 5000% 5001% The format of the MagickGetImagePixelColor method is: 5002% 5003% MagickBooleanType MagickGetImagePixelColor(MagickWand *wand, 5004% const ssize_t x,const ssize_t y,PixelWand *color) 5005% 5006% A description of each parameter follows: 5007% 5008% o wand: the magick wand. 5009% 5010% o x,y: the pixel offset into the image. 5011% 5012% o color: Return the colormap color in this wand. 5013% 5014*/ 5015WandExport MagickBooleanType MagickGetImagePixelColor(MagickWand *wand, 5016 const ssize_t x,const ssize_t y,PixelWand *color) 5017{ 5018 register const Quantum 5019 *p; 5020 5021 CacheView 5022 *image_view; 5023 5024 assert(wand != (MagickWand *) NULL); 5025 assert(wand->signature == WandSignature); 5026 if (wand->debug != MagickFalse) 5027 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5028 if (wand->images == (Image *) NULL) 5029 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5030 image_view=AcquireCacheView(wand->images); 5031 p=GetCacheViewVirtualPixels(image_view,x,y,1,1,wand->exception); 5032 if (p == (const Quantum *) NULL) 5033 { 5034 image_view=DestroyCacheView(image_view); 5035 return(MagickFalse); 5036 } 5037 PixelSetQuantumPixel(wand->images,p,color); 5038 image_view=DestroyCacheView(image_view); 5039 return(MagickTrue); 5040} 5041 5042/* 5043%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5044% % 5045% % 5046% % 5047% M a g i c k G e t I m a g e R e d P r i m a r y % 5048% % 5049% % 5050% % 5051%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5052% 5053% MagickGetImageRedPrimary() returns the chromaticy red primary point. 5054% 5055% The format of the MagickGetImageRedPrimary method is: 5056% 5057% MagickBooleanType MagickGetImageRedPrimary(MagickWand *wand,double *x, 5058% double *y) 5059% 5060% A description of each parameter follows: 5061% 5062% o wand: the magick wand. 5063% 5064% o x: the chromaticity red primary x-point. 5065% 5066% o y: the chromaticity red primary y-point. 5067% 5068*/ 5069WandExport MagickBooleanType MagickGetImageRedPrimary(MagickWand *wand, 5070 double *x,double *y) 5071{ 5072 assert(wand != (MagickWand *) NULL); 5073 assert(wand->signature == WandSignature); 5074 if (wand->debug != MagickFalse) 5075 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5076 if (wand->images == (Image *) NULL) 5077 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5078 *x=wand->images->chromaticity.red_primary.x; 5079 *y=wand->images->chromaticity.red_primary.y; 5080 return(MagickTrue); 5081} 5082 5083/* 5084%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5085% % 5086% % 5087% % 5088% M a g i c k G e t I m a g e R e g i o n % 5089% % 5090% % 5091% % 5092%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5093% 5094% MagickGetImageRegion() extracts a region of the image and returns it as a 5095% a new wand. 5096% 5097% The format of the MagickGetImageRegion method is: 5098% 5099% MagickWand *MagickGetImageRegion(MagickWand *wand, 5100% const size_t width,const size_t height,const ssize_t x, 5101% const ssize_t y) 5102% 5103% A description of each parameter follows: 5104% 5105% o wand: the magick wand. 5106% 5107% o width: the region width. 5108% 5109% o height: the region height. 5110% 5111% o x: the region x offset. 5112% 5113% o y: the region y offset. 5114% 5115*/ 5116WandExport MagickWand *MagickGetImageRegion(MagickWand *wand, 5117 const size_t width,const size_t height,const ssize_t x, 5118 const ssize_t y) 5119{ 5120 Image 5121 *region_image; 5122 5123 RectangleInfo 5124 region; 5125 5126 assert(wand != (MagickWand *) NULL); 5127 assert(wand->signature == WandSignature); 5128 if (wand->debug != MagickFalse) 5129 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5130 if (wand->images == (Image *) NULL) 5131 return((MagickWand *) NULL); 5132 region.width=width; 5133 region.height=height; 5134 region.x=x; 5135 region.y=y; 5136 region_image=CropImage(wand->images,®ion,wand->exception); 5137 if (region_image == (Image *) NULL) 5138 return((MagickWand *) NULL); 5139 return(CloneMagickWandFromImages(wand,region_image)); 5140} 5141 5142/* 5143%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5144% % 5145% % 5146% % 5147% 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 % 5148% % 5149% % 5150% % 5151%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5152% 5153% MagickGetImageRenderingIntent() gets the image rendering intent. 5154% 5155% The format of the MagickGetImageRenderingIntent method is: 5156% 5157% RenderingIntent MagickGetImageRenderingIntent(MagickWand *wand) 5158% 5159% A description of each parameter follows: 5160% 5161% o wand: the magick wand. 5162% 5163*/ 5164WandExport RenderingIntent MagickGetImageRenderingIntent(MagickWand *wand) 5165{ 5166 assert(wand != (MagickWand *) NULL); 5167 assert(wand->signature == WandSignature); 5168 if (wand->debug != MagickFalse) 5169 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5170 if (wand->images == (Image *) NULL) 5171 { 5172 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 5173 "ContainsNoImages","`%s'",wand->name); 5174 return(UndefinedIntent); 5175 } 5176 return((RenderingIntent) wand->images->rendering_intent); 5177} 5178 5179/* 5180%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5181% % 5182% % 5183% % 5184% M a g i c k G e t I m a g e R e s o l u t i o n % 5185% % 5186% % 5187% % 5188%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5189% 5190% MagickGetImageResolution() gets the image X and Y resolution. 5191% 5192% The format of the MagickGetImageResolution method is: 5193% 5194% MagickBooleanType MagickGetImageResolution(MagickWand *wand,double *x, 5195% double *y) 5196% 5197% A description of each parameter follows: 5198% 5199% o wand: the magick wand. 5200% 5201% o x: the image x-resolution. 5202% 5203% o y: the image y-resolution. 5204% 5205*/ 5206WandExport MagickBooleanType MagickGetImageResolution(MagickWand *wand, 5207 double *x,double *y) 5208{ 5209 assert(wand != (MagickWand *) NULL); 5210 assert(wand->signature == WandSignature); 5211 if (wand->debug != MagickFalse) 5212 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5213 if (wand->images == (Image *) NULL) 5214 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5215 *x=wand->images->x_resolution; 5216 *y=wand->images->y_resolution; 5217 return(MagickTrue); 5218} 5219 5220/* 5221%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5222% % 5223% % 5224% % 5225% M a g i c k G e t I m a g e S c e n e % 5226% % 5227% % 5228% % 5229%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5230% 5231% MagickGetImageScene() gets the image scene. 5232% 5233% The format of the MagickGetImageScene method is: 5234% 5235% size_t MagickGetImageScene(MagickWand *wand) 5236% 5237% A description of each parameter follows: 5238% 5239% o wand: the magick wand. 5240% 5241*/ 5242WandExport size_t MagickGetImageScene(MagickWand *wand) 5243{ 5244 assert(wand != (MagickWand *) NULL); 5245 assert(wand->signature == WandSignature); 5246 if (wand->debug != MagickFalse) 5247 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5248 if (wand->images == (Image *) NULL) 5249 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5250 return(wand->images->scene); 5251} 5252 5253/* 5254%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5255% % 5256% % 5257% % 5258% M a g i c k G e t I m a g e S i g n a t u r e % 5259% % 5260% % 5261% % 5262%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5263% 5264% MagickGetImageSignature() generates an SHA-256 message digest for the image 5265% pixel stream. 5266% 5267% The format of the MagickGetImageSignature method is: 5268% 5269% const char MagickGetImageSignature(MagickWand *wand) 5270% 5271% A description of each parameter follows: 5272% 5273% o wand: the magick wand. 5274% 5275*/ 5276WandExport char *MagickGetImageSignature(MagickWand *wand) 5277{ 5278 const char 5279 *value; 5280 5281 MagickBooleanType 5282 status; 5283 5284 assert(wand != (MagickWand *) NULL); 5285 assert(wand->signature == WandSignature); 5286 if (wand->debug != MagickFalse) 5287 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5288 if (wand->images == (Image *) NULL) 5289 { 5290 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 5291 "ContainsNoImages","`%s'",wand->name); 5292 return((char *) NULL); 5293 } 5294 status=SignatureImage(wand->images,wand->exception); 5295 if (status == MagickFalse) 5296 return((char *) NULL); 5297 value=GetImageProperty(wand->images,"signature"); 5298 if (value == (const char *) NULL) 5299 return((char *) NULL); 5300 return(AcquireString(value)); 5301} 5302 5303/* 5304%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5305% % 5306% % 5307% % 5308% 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 % 5309% % 5310% % 5311% % 5312%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5313% 5314% MagickGetImageTicksPerSecond() gets the image ticks-per-second. 5315% 5316% The format of the MagickGetImageTicksPerSecond method is: 5317% 5318% size_t MagickGetImageTicksPerSecond(MagickWand *wand) 5319% 5320% A description of each parameter follows: 5321% 5322% o wand: the magick wand. 5323% 5324*/ 5325WandExport size_t MagickGetImageTicksPerSecond(MagickWand *wand) 5326{ 5327 assert(wand != (MagickWand *) NULL); 5328 assert(wand->signature == WandSignature); 5329 if (wand->debug != MagickFalse) 5330 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5331 if (wand->images == (Image *) NULL) 5332 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5333 return((size_t) wand->images->ticks_per_second); 5334} 5335 5336/* 5337%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5338% % 5339% % 5340% % 5341% M a g i c k G e t I m a g e T y p e % 5342% % 5343% % 5344% % 5345%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5346% 5347% MagickGetImageType() gets the potential image type: 5348% 5349% Bilevel Grayscale GrayscaleMatte 5350% Palette PaletteMatte TrueColor 5351% TrueColorMatte ColorSeparation ColorSeparationMatte 5352% 5353% To ensure the image type matches its potential, use MagickSetImageType(): 5354% 5355% (void) MagickSetImageType(wand,MagickGetImageType(wand)); 5356% 5357% The format of the MagickGetImageType method is: 5358% 5359% ImageType MagickGetImageType(MagickWand *wand) 5360% 5361% A description of each parameter follows: 5362% 5363% o wand: the magick wand. 5364% 5365*/ 5366WandExport ImageType MagickGetImageType(MagickWand *wand) 5367{ 5368 assert(wand != (MagickWand *) NULL); 5369 assert(wand->signature == WandSignature); 5370 if (wand->debug != MagickFalse) 5371 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5372 if (wand->images == (Image *) NULL) 5373 { 5374 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 5375 "ContainsNoImages","`%s'",wand->name); 5376 return(UndefinedType); 5377 } 5378 return(GetImageType(wand->images,wand->exception)); 5379} 5380 5381/* 5382%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5383% % 5384% % 5385% % 5386% M a g i c k G e t I m a g e U n i t s % 5387% % 5388% % 5389% % 5390%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5391% 5392% MagickGetImageUnits() gets the image units of resolution. 5393% 5394% The format of the MagickGetImageUnits method is: 5395% 5396% ResolutionType MagickGetImageUnits(MagickWand *wand) 5397% 5398% A description of each parameter follows: 5399% 5400% o wand: the magick wand. 5401% 5402*/ 5403WandExport ResolutionType MagickGetImageUnits(MagickWand *wand) 5404{ 5405 assert(wand != (MagickWand *) NULL); 5406 assert(wand->signature == WandSignature); 5407 if (wand->debug != MagickFalse) 5408 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5409 if (wand->images == (Image *) NULL) 5410 { 5411 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 5412 "ContainsNoImages","`%s'",wand->name); 5413 return(UndefinedResolution); 5414 } 5415 return(wand->images->units); 5416} 5417 5418/* 5419%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5420% % 5421% % 5422% % 5423% 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 % 5424% % 5425% % 5426% % 5427%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5428% 5429% MagickGetImageVirtualPixelMethod() returns the virtual pixel method for the 5430% sepcified image. 5431% 5432% The format of the MagickGetImageVirtualPixelMethod method is: 5433% 5434% VirtualPixelMethod MagickGetImageVirtualPixelMethod(MagickWand *wand) 5435% 5436% A description of each parameter follows: 5437% 5438% o wand: the magick wand. 5439% 5440*/ 5441WandExport VirtualPixelMethod MagickGetImageVirtualPixelMethod(MagickWand *wand) 5442{ 5443 assert(wand != (MagickWand *) NULL); 5444 assert(wand->signature == WandSignature); 5445 if (wand->debug != MagickFalse) 5446 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5447 if (wand->images == (Image *) NULL) 5448 { 5449 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 5450 "ContainsNoImages","`%s'",wand->name); 5451 return(UndefinedVirtualPixelMethod); 5452 } 5453 return(GetImageVirtualPixelMethod(wand->images)); 5454} 5455 5456/* 5457%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5458% % 5459% % 5460% % 5461% M a g i c k G e t I m a g e W h i t e P o i n t % 5462% % 5463% % 5464% % 5465%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5466% 5467% MagickGetImageWhitePoint() returns the chromaticy white point. 5468% 5469% The format of the MagickGetImageWhitePoint method is: 5470% 5471% MagickBooleanType MagickGetImageWhitePoint(MagickWand *wand,double *x, 5472% double *y) 5473% 5474% A description of each parameter follows: 5475% 5476% o wand: the magick wand. 5477% 5478% o x: the chromaticity white x-point. 5479% 5480% o y: the chromaticity white y-point. 5481% 5482*/ 5483WandExport MagickBooleanType MagickGetImageWhitePoint(MagickWand *wand, 5484 double *x,double *y) 5485{ 5486 assert(wand != (MagickWand *) NULL); 5487 assert(wand->signature == WandSignature); 5488 if (wand->debug != MagickFalse) 5489 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5490 if (wand->images == (Image *) NULL) 5491 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5492 *x=wand->images->chromaticity.white_point.x; 5493 *y=wand->images->chromaticity.white_point.y; 5494 return(MagickTrue); 5495} 5496 5497/* 5498%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5499% % 5500% % 5501% % 5502% M a g i c k G e t I m a g e W i d t h % 5503% % 5504% % 5505% % 5506%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5507% 5508% MagickGetImageWidth() returns the image width. 5509% 5510% The format of the MagickGetImageWidth method is: 5511% 5512% size_t MagickGetImageWidth(MagickWand *wand) 5513% 5514% A description of each parameter follows: 5515% 5516% o wand: the magick wand. 5517% 5518*/ 5519WandExport size_t MagickGetImageWidth(MagickWand *wand) 5520{ 5521 assert(wand != (MagickWand *) NULL); 5522 assert(wand->signature == WandSignature); 5523 if (wand->debug != MagickFalse) 5524 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5525 if (wand->images == (Image *) NULL) 5526 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5527 return(wand->images->columns); 5528} 5529 5530/* 5531%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5532% % 5533% % 5534% % 5535% M a g i c k G e t N u m b e r I m a g e s % 5536% % 5537% % 5538% % 5539%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5540% 5541% MagickGetNumberImages() returns the number of images associated with a 5542% magick wand. 5543% 5544% The format of the MagickGetNumberImages method is: 5545% 5546% size_t MagickGetNumberImages(MagickWand *wand) 5547% 5548% A description of each parameter follows: 5549% 5550% o wand: the magick wand. 5551% 5552*/ 5553WandExport size_t MagickGetNumberImages(MagickWand *wand) 5554{ 5555 assert(wand != (MagickWand *) NULL); 5556 assert(wand->signature == WandSignature); 5557 if (wand->debug != MagickFalse) 5558 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5559 return(GetImageListLength(wand->images)); 5560} 5561 5562/* 5563%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5564% % 5565% % 5566% % 5567% 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 % 5568% % 5569% % 5570% % 5571%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5572% 5573% MagickGetImageTotalInkDensity() gets the image total ink density. 5574% 5575% The format of the MagickGetImageTotalInkDensity method is: 5576% 5577% double MagickGetImageTotalInkDensity(MagickWand *wand) 5578% 5579% A description of each parameter follows: 5580% 5581% o wand: the magick wand. 5582% 5583*/ 5584WandExport double MagickGetImageTotalInkDensity(MagickWand *wand) 5585{ 5586 assert(wand != (MagickWand *) NULL); 5587 assert(wand->signature == WandSignature); 5588 if (wand->debug != MagickFalse) 5589 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5590 if (wand->images == (Image *) NULL) 5591 { 5592 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 5593 "ContainsNoImages","`%s'",wand->name); 5594 return(0.0); 5595 } 5596 return(GetImageTotalInkDensity(wand->images)); 5597} 5598 5599/* 5600%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5601% % 5602% % 5603% % 5604% M a g i c k H a l d C l u t I m a g e % 5605% % 5606% % 5607% % 5608%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5609% 5610% MagickHaldClutImage() replaces colors in the image from a Hald color lookup 5611% table. A Hald color lookup table is a 3-dimensional color cube mapped to 2 5612% dimensions. Create it with the HALD coder. You can apply any color 5613% transformation to the Hald image and then use this method to apply the 5614% transform to the image. 5615% 5616% The format of the MagickHaldClutImage method is: 5617% 5618% MagickBooleanType MagickHaldClutImage(MagickWand *wand, 5619% const MagickWand *hald_wand) 5620% 5621% A description of each parameter follows: 5622% 5623% o wand: the magick wand. 5624% 5625% o hald_image: the hald CLUT image. 5626% 5627*/ 5628WandExport MagickBooleanType MagickHaldClutImage(MagickWand *wand, 5629 const MagickWand *hald_wand) 5630{ 5631 MagickBooleanType 5632 status; 5633 5634 assert(wand != (MagickWand *) NULL); 5635 assert(wand->signature == WandSignature); 5636 if (wand->debug != MagickFalse) 5637 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5638 if ((wand->images == (Image *) NULL) || (hald_wand->images == (Image *) NULL)) 5639 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5640 status=HaldClutImage(wand->images,hald_wand->images,&wand->images->exception); 5641 return(status); 5642} 5643 5644/* 5645%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5646% % 5647% % 5648% % 5649% M a g i c k H a s N e x t I m a g e % 5650% % 5651% % 5652% % 5653%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5654% 5655% MagickHasNextImage() returns MagickTrue if the wand has more images when 5656% traversing the list in the forward direction 5657% 5658% The format of the MagickHasNextImage method is: 5659% 5660% MagickBooleanType MagickHasNextImage(MagickWand *wand) 5661% 5662% A description of each parameter follows: 5663% 5664% o wand: the magick wand. 5665% 5666*/ 5667WandExport MagickBooleanType MagickHasNextImage(MagickWand *wand) 5668{ 5669 assert(wand != (MagickWand *) NULL); 5670 assert(wand->signature == WandSignature); 5671 if (wand->debug != MagickFalse) 5672 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5673 if (wand->images == (Image *) NULL) 5674 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5675 if (GetNextImageInList(wand->images) == (Image *) NULL) 5676 return(MagickFalse); 5677 return(MagickTrue); 5678} 5679 5680/* 5681%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5682% % 5683% % 5684% % 5685% M a g i c k H a s P r e v i o u s I m a g e % 5686% % 5687% % 5688% % 5689%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5690% 5691% MagickHasPreviousImage() returns MagickTrue if the wand has more images when 5692% traversing the list in the reverse direction 5693% 5694% The format of the MagickHasPreviousImage method is: 5695% 5696% MagickBooleanType MagickHasPreviousImage(MagickWand *wand) 5697% 5698% A description of each parameter follows: 5699% 5700% o wand: the magick wand. 5701% 5702*/ 5703WandExport MagickBooleanType MagickHasPreviousImage(MagickWand *wand) 5704{ 5705 assert(wand != (MagickWand *) NULL); 5706 assert(wand->signature == WandSignature); 5707 if (wand->debug != MagickFalse) 5708 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5709 if (wand->images == (Image *) NULL) 5710 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5711 if (GetPreviousImageInList(wand->images) == (Image *) NULL) 5712 return(MagickFalse); 5713 return(MagickTrue); 5714} 5715 5716/* 5717%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5718% % 5719% % 5720% % 5721% M a g i c k I d e n t i f y I m a g e % 5722% % 5723% % 5724% % 5725%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5726% 5727% MagickIdentifyImage() identifies an image by printing its attributes to the 5728% file. Attributes include the image width, height, size, and others. 5729% 5730% The format of the MagickIdentifyImage method is: 5731% 5732% const char *MagickIdentifyImage(MagickWand *wand) 5733% 5734% A description of each parameter follows: 5735% 5736% o wand: the magick wand. 5737% 5738*/ 5739WandExport char *MagickIdentifyImage(MagickWand *wand) 5740{ 5741 char 5742 *description, 5743 filename[MaxTextExtent]; 5744 5745 FILE 5746 *file; 5747 5748 int 5749 unique_file; 5750 5751 assert(wand != (MagickWand *) NULL); 5752 assert(wand->signature == WandSignature); 5753 if (wand->debug != MagickFalse) 5754 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5755 if (wand->images == (Image *) NULL) 5756 { 5757 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 5758 "ContainsNoImages","`%s'",wand->name); 5759 return((char *) NULL); 5760 } 5761 description=(char *) NULL; 5762 unique_file=AcquireUniqueFileResource(filename); 5763 file=(FILE *) NULL; 5764 if (unique_file != -1) 5765 file=fdopen(unique_file,"wb"); 5766 if ((unique_file == -1) || (file == (FILE *) NULL)) 5767 { 5768 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 5769 "UnableToCreateTemporaryFile","`%s'",wand->name); 5770 return((char *) NULL); 5771 } 5772 (void) IdentifyImage(wand->images,file,MagickTrue,wand->exception); 5773 (void) fclose(file); 5774 description=FileToString(filename,~0,wand->exception); 5775 (void) RelinquishUniqueFileResource(filename); 5776 return(description); 5777} 5778 5779/* 5780%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5781% % 5782% % 5783% % 5784% M a g i c k I m p l o d e I m a g e % 5785% % 5786% % 5787% % 5788%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5789% 5790% MagickImplodeImage() creates a new image that is a copy of an existing 5791% one with the image pixels "implode" by the specified percentage. It 5792% allocates the memory necessary for the new Image structure and returns a 5793% pointer to the new image. 5794% 5795% The format of the MagickImplodeImage method is: 5796% 5797% MagickBooleanType MagickImplodeImage(MagickWand *wand, 5798% const double radius,const PixelInterpolateMethod method) 5799% 5800% A description of each parameter follows: 5801% 5802% o wand: the magick wand. 5803% 5804% o amount: Define the extent of the implosion. 5805% 5806% o method: the pixel interpolation method. 5807% 5808*/ 5809WandExport MagickBooleanType MagickImplodeImage(MagickWand *wand, 5810 const double amount,const PixelInterpolateMethod method) 5811{ 5812 Image 5813 *implode_image; 5814 5815 assert(wand != (MagickWand *) NULL); 5816 assert(wand->signature == WandSignature); 5817 if (wand->debug != MagickFalse) 5818 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5819 if (wand->images == (Image *) NULL) 5820 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5821 implode_image=ImplodeImage(wand->images,amount,method,wand->exception); 5822 if (implode_image == (Image *) NULL) 5823 return(MagickFalse); 5824 ReplaceImageInList(&wand->images,implode_image); 5825 return(MagickTrue); 5826} 5827 5828/* 5829%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5830% % 5831% % 5832% % 5833% M a g i c k I m p o r t I m a g e P i x e l s % 5834% % 5835% % 5836% % 5837%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5838% 5839% MagickImportImagePixels() accepts pixel datand stores it in the image at the 5840% location you specify. The method returns MagickFalse on success otherwise 5841% MagickTrue if an error is encountered. The pixel data can be either char, 5842% short int, int, ssize_t, float, or double in the order specified by map. 5843% 5844% Suppose your want to upload the first scanline of a 640x480 image from 5845% character data in red-green-blue order: 5846% 5847% MagickImportImagePixels(wand,0,0,640,1,"RGB",CharPixel,pixels); 5848% 5849% The format of the MagickImportImagePixels method is: 5850% 5851% MagickBooleanType MagickImportImagePixels(MagickWand *wand, 5852% const ssize_t x,const ssize_t y,const size_t columns, 5853% const size_t rows,const char *map,const StorageType storage, 5854% const void *pixels) 5855% 5856% A description of each parameter follows: 5857% 5858% o wand: the magick wand. 5859% 5860% o x, y, columns, rows: These values define the perimeter of a region 5861% of pixels you want to define. 5862% 5863% o map: This string reflects the expected ordering of the pixel array. 5864% It can be any combination or order of R = red, G = green, B = blue, 5865% A = alpha (0 is transparent), O = opacity (0 is opaque), C = cyan, 5866% Y = yellow, M = magenta, K = black, I = intensity (for grayscale), 5867% P = pad. 5868% 5869% o storage: Define the data type of the pixels. Float and double types are 5870% expected to be normalized [0..1] otherwise [0..QuantumRange]. Choose from 5871% these types: CharPixel, ShortPixel, IntegerPixel, LongPixel, FloatPixel, 5872% or DoublePixel. 5873% 5874% o pixels: This array of values contain the pixel components as defined by 5875% map and type. You must preallocate this array where the expected 5876% length varies depending on the values of width, height, map, and type. 5877% 5878*/ 5879WandExport MagickBooleanType MagickImportImagePixels(MagickWand *wand, 5880 const ssize_t x,const ssize_t y,const size_t columns,const size_t rows, 5881 const char *map,const StorageType storage,const void *pixels) 5882{ 5883 MagickBooleanType 5884 status; 5885 5886 assert(wand != (MagickWand *) NULL); 5887 assert(wand->signature == WandSignature); 5888 if (wand->debug != MagickFalse) 5889 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5890 if (wand->images == (Image *) NULL) 5891 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5892 status=ImportImagePixels(wand->images,x,y,columns,rows,map,storage,pixels, 5893 wand->exception); 5894 return(status); 5895} 5896 5897/* 5898%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5899% % 5900% % 5901% % 5902% 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 % 5903% % 5904% % 5905% % 5906%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5907% 5908% MagickInverseFourierTransformImage() implements the inverse discrete 5909% Fourier transform (DFT) of the image either as a magnitude / phase or real / 5910% imaginary image pair. 5911% 5912% The format of the MagickInverseFourierTransformImage method is: 5913% 5914% MagickBooleanType MagickInverseFourierTransformImage( 5915% MagickWand *magnitude_wand,MagickWand *phase_wand, 5916% const MagickBooleanType magnitude) 5917% 5918% A description of each parameter follows: 5919% 5920% o magnitude_wand: the magnitude or real wand. 5921% 5922% o phase_wand: the phase or imaginary wand. 5923% 5924% o magnitude: if true, return as magnitude / phase pair otherwise a real / 5925% imaginary image pair. 5926% 5927*/ 5928WandExport MagickBooleanType MagickInverseFourierTransformImage( 5929 MagickWand *magnitude_wand,MagickWand *phase_wand, 5930 const MagickBooleanType magnitude) 5931{ 5932 Image 5933 *inverse_image; 5934 5935 MagickWand 5936 *wand; 5937 5938 assert(magnitude_wand != (MagickWand *) NULL); 5939 assert(magnitude_wand->signature == WandSignature); 5940 if (magnitude_wand->debug != MagickFalse) 5941 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s", 5942 magnitude_wand->name); 5943 wand=magnitude_wand; 5944 if (magnitude_wand->images == (Image *) NULL) 5945 ThrowWandException(WandError,"ContainsNoImages", 5946 magnitude_wand->name); 5947 assert(phase_wand != (MagickWand *) NULL); 5948 assert(phase_wand->signature == WandSignature); 5949 inverse_image=InverseFourierTransformImage(magnitude_wand->images, 5950 phase_wand->images,magnitude,wand->exception); 5951 if (inverse_image == (Image *) NULL) 5952 return(MagickFalse); 5953 ReplaceImageInList(&wand->images,inverse_image); 5954 return(MagickTrue); 5955} 5956 5957/* 5958%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5959% % 5960% % 5961% % 5962% M a g i c k L a b e l I m a g e % 5963% % 5964% % 5965% % 5966%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5967% 5968% MagickLabelImage() adds a label to your image. 5969% 5970% The format of the MagickLabelImage method is: 5971% 5972% MagickBooleanType MagickLabelImage(MagickWand *wand,const char *label) 5973% 5974% A description of each parameter follows: 5975% 5976% o wand: the magick wand. 5977% 5978% o label: the image label. 5979% 5980*/ 5981WandExport MagickBooleanType MagickLabelImage(MagickWand *wand, 5982 const char *label) 5983{ 5984 MagickBooleanType 5985 status; 5986 5987 assert(wand != (MagickWand *) NULL); 5988 assert(wand->signature == WandSignature); 5989 if (wand->debug != MagickFalse) 5990 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5991 if (wand->images == (Image *) NULL) 5992 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5993 status=SetImageProperty(wand->images,"label",label); 5994 if (status == MagickFalse) 5995 InheritException(wand->exception,&wand->images->exception); 5996 return(status); 5997} 5998 5999/* 6000%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6001% % 6002% % 6003% % 6004% M a g i c k L e v e l I m a g e % 6005% % 6006% % 6007% % 6008%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6009% 6010% MagickLevelImage() adjusts the levels of an image by scaling the colors 6011% falling between specified white and black points to the full available 6012% quantum range. The parameters provided represent the black, mid, and white 6013% points. The black point specifies the darkest color in the image. Colors 6014% darker than the black point are set to zero. Mid point specifies a gamma 6015% correction to apply to the image. White point specifies the lightest color 6016% in the image. Colors brighter than the white point are set to the maximum 6017% quantum value. 6018% 6019% The format of the MagickLevelImage method is: 6020% 6021% MagickBooleanType MagickLevelImage(MagickWand *wand, 6022% const double black_point,const double gamma,const double white_point) 6023% MagickBooleanType MagickLevelImage(MagickWand *wand, 6024% const ChannelType channel,const double black_point,const double gamma, 6025% const double white_point) 6026% 6027% A description of each parameter follows: 6028% 6029% o wand: the magick wand. 6030% 6031% o channel: Identify which channel to level: RedChannel, GreenChannel, 6032% 6033% o black_point: the black point. 6034% 6035% o gamma: the gamma. 6036% 6037% o white_point: the white point. 6038% 6039*/ 6040WandExport MagickBooleanType MagickLevelImage(MagickWand *wand, 6041 const double black_point,const double gamma,const double white_point) 6042{ 6043 MagickBooleanType 6044 status; 6045 6046 assert(wand != (MagickWand *) NULL); 6047 assert(wand->signature == WandSignature); 6048 if (wand->debug != MagickFalse) 6049 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6050 if (wand->images == (Image *) NULL) 6051 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6052 status=LevelImage(wand->images,black_point,white_point,gamma, 6053 &wand->images->exception); 6054 return(status); 6055} 6056 6057/* 6058%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6059% % 6060% % 6061% % 6062% M a g i c k L i n e a r S t r e t c h I m a g e % 6063% % 6064% % 6065% % 6066%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6067% 6068% MagickLinearStretchImage() stretches with saturation the image intensity. 6069% 6070% You can also reduce the influence of a particular channel with a gamma 6071% value of 0. 6072% 6073% The format of the MagickLinearStretchImage method is: 6074% 6075% MagickBooleanType MagickLinearStretchImage(MagickWand *wand, 6076% const double black_point,const double white_point) 6077% 6078% A description of each parameter follows: 6079% 6080% o wand: the magick wand. 6081% 6082% o black_point: the black point. 6083% 6084% o white_point: the white point. 6085% 6086*/ 6087WandExport MagickBooleanType MagickLinearStretchImage(MagickWand *wand, 6088 const double black_point,const double white_point) 6089{ 6090 MagickBooleanType 6091 status; 6092 6093 assert(wand != (MagickWand *) NULL); 6094 assert(wand->signature == WandSignature); 6095 if (wand->debug != MagickFalse) 6096 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6097 if (wand->images == (Image *) NULL) 6098 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6099 status=LinearStretchImage(wand->images,black_point,white_point, 6100 &wand->images->exception); 6101 return(status); 6102} 6103 6104/* 6105%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6106% % 6107% % 6108% % 6109% M a g i c k L i q u i d R e s c a l e I m a g e % 6110% % 6111% % 6112% % 6113%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6114% 6115% MagickLiquidRescaleImage() rescales image with seam carving. 6116% 6117% MagickBooleanType MagickLiquidRescaleImage(MagickWand *wand, 6118% const size_t columns,const size_t rows, 6119% const double delta_x,const double rigidity) 6120% 6121% A description of each parameter follows: 6122% 6123% o wand: the magick wand. 6124% 6125% o columns: the number of columns in the scaled image. 6126% 6127% o rows: the number of rows in the scaled image. 6128% 6129% o delta_x: maximum seam transversal step (0 means straight seams). 6130% 6131% o rigidity: introduce a bias for non-straight seams (typically 0). 6132% 6133*/ 6134WandExport MagickBooleanType MagickLiquidRescaleImage(MagickWand *wand, 6135 const size_t columns,const size_t rows,const double delta_x, 6136 const double rigidity) 6137{ 6138 Image 6139 *rescale_image; 6140 6141 assert(wand != (MagickWand *) NULL); 6142 assert(wand->signature == WandSignature); 6143 if (wand->debug != MagickFalse) 6144 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6145 if (wand->images == (Image *) NULL) 6146 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6147 rescale_image=LiquidRescaleImage(wand->images,columns,rows,delta_x, 6148 rigidity,wand->exception); 6149 if (rescale_image == (Image *) NULL) 6150 return(MagickFalse); 6151 ReplaceImageInList(&wand->images,rescale_image); 6152 return(MagickTrue); 6153} 6154 6155/* 6156%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6157% % 6158% % 6159% % 6160% M a g i c k M a g n i f y I m a g e % 6161% % 6162% % 6163% % 6164%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6165% 6166% MagickMagnifyImage() is a convenience method that scales an image 6167% proportionally to twice its original size. 6168% 6169% The format of the MagickMagnifyImage method is: 6170% 6171% MagickBooleanType MagickMagnifyImage(MagickWand *wand) 6172% 6173% A description of each parameter follows: 6174% 6175% o wand: the magick wand. 6176% 6177*/ 6178WandExport MagickBooleanType MagickMagnifyImage(MagickWand *wand) 6179{ 6180 Image 6181 *magnify_image; 6182 6183 assert(wand != (MagickWand *) NULL); 6184 assert(wand->signature == WandSignature); 6185 if (wand->debug != MagickFalse) 6186 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6187 if (wand->images == (Image *) NULL) 6188 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6189 magnify_image=MagnifyImage(wand->images,wand->exception); 6190 if (magnify_image == (Image *) NULL) 6191 return(MagickFalse); 6192 ReplaceImageInList(&wand->images,magnify_image); 6193 return(MagickTrue); 6194} 6195 6196/* 6197%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6198% % 6199% % 6200% % 6201% M a g i c k M e r g e I m a g e L a y e r s % 6202% % 6203% % 6204% % 6205%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6206% 6207% MagickMergeImageLayers() composes all the image layers from the current 6208% given image onward to produce a single image of the merged layers. 6209% 6210% The inital canvas's size depends on the given ImageLayerMethod, and is 6211% initialized using the first images background color. The images 6212% are then compositied onto that image in sequence using the given 6213% composition that has been assigned to each individual image. 6214% 6215% The format of the MagickMergeImageLayers method is: 6216% 6217% MagickWand *MagickMergeImageLayers(MagickWand *wand, 6218% const ImageLayerMethod method) 6219% 6220% A description of each parameter follows: 6221% 6222% o wand: the magick wand. 6223% 6224% o method: the method of selecting the size of the initial canvas. 6225% 6226% MergeLayer: Merge all layers onto a canvas just large enough 6227% to hold all the actual images. The virtual canvas of the 6228% first image is preserved but otherwise ignored. 6229% 6230% FlattenLayer: Use the virtual canvas size of first image. 6231% Images which fall outside this canvas is clipped. 6232% This can be used to 'fill out' a given virtual canvas. 6233% 6234% MosaicLayer: Start with the virtual canvas of the first image, 6235% enlarging left and right edges to contain all images. 6236% Images with negative offsets will be clipped. 6237% 6238*/ 6239WandExport MagickWand *MagickMergeImageLayers(MagickWand *wand, 6240 const ImageLayerMethod method) 6241{ 6242 Image 6243 *mosaic_image; 6244 6245 assert(wand != (MagickWand *) NULL); 6246 assert(wand->signature == WandSignature); 6247 if (wand->debug != MagickFalse) 6248 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6249 if (wand->images == (Image *) NULL) 6250 return((MagickWand *) NULL); 6251 mosaic_image=MergeImageLayers(wand->images,method,wand->exception); 6252 if (mosaic_image == (Image *) NULL) 6253 return((MagickWand *) NULL); 6254 return(CloneMagickWandFromImages(wand,mosaic_image)); 6255} 6256 6257/* 6258%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6259% % 6260% % 6261% % 6262% M a g i c k M i n i f y I m a g e % 6263% % 6264% % 6265% % 6266%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6267% 6268% MagickMinifyImage() is a convenience method that scales an image 6269% proportionally to one-half its original size 6270% 6271% The format of the MagickMinifyImage method is: 6272% 6273% MagickBooleanType MagickMinifyImage(MagickWand *wand) 6274% 6275% A description of each parameter follows: 6276% 6277% o wand: the magick wand. 6278% 6279*/ 6280WandExport MagickBooleanType MagickMinifyImage(MagickWand *wand) 6281{ 6282 Image 6283 *minify_image; 6284 6285 assert(wand != (MagickWand *) NULL); 6286 assert(wand->signature == WandSignature); 6287 if (wand->debug != MagickFalse) 6288 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6289 if (wand->images == (Image *) NULL) 6290 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6291 minify_image=MinifyImage(wand->images,wand->exception); 6292 if (minify_image == (Image *) NULL) 6293 return(MagickFalse); 6294 ReplaceImageInList(&wand->images,minify_image); 6295 return(MagickTrue); 6296} 6297 6298/* 6299%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6300% % 6301% % 6302% % 6303% M a g i c k M o d u l a t e I m a g e % 6304% % 6305% % 6306% % 6307%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6308% 6309% MagickModulateImage() lets you control the brightness, saturation, and hue 6310% of an image. Hue is the percentage of absolute rotation from the current 6311% position. For example 50 results in a counter-clockwise rotation of 90 6312% degrees, 150 results in a clockwise rotation of 90 degrees, with 0 and 200 6313% both resulting in a rotation of 180 degrees. 6314% 6315% To increase the color brightness by 20% and decrease the color saturation by 6316% 10% and leave the hue unchanged, use: 120,90,100. 6317% 6318% The format of the MagickModulateImage method is: 6319% 6320% MagickBooleanType MagickModulateImage(MagickWand *wand, 6321% const double brightness,const double saturation,const double hue) 6322% 6323% A description of each parameter follows: 6324% 6325% o wand: the magick wand. 6326% 6327% o brightness: the percent change in brighness. 6328% 6329% o saturation: the percent change in saturation. 6330% 6331% o hue: the percent change in hue. 6332% 6333*/ 6334WandExport MagickBooleanType MagickModulateImage(MagickWand *wand, 6335 const double brightness,const double saturation,const double hue) 6336{ 6337 char 6338 modulate[MaxTextExtent]; 6339 6340 MagickBooleanType 6341 status; 6342 6343 assert(wand != (MagickWand *) NULL); 6344 assert(wand->signature == WandSignature); 6345 if (wand->debug != MagickFalse) 6346 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6347 if (wand->images == (Image *) NULL) 6348 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6349 (void) FormatLocaleString(modulate,MaxTextExtent,"%g,%g,%g", 6350 brightness,saturation,hue); 6351 status=ModulateImage(wand->images,modulate,&wand->images->exception); 6352 return(status); 6353} 6354 6355/* 6356%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6357% % 6358% % 6359% % 6360% M a g i c k M o n t a g e I m a g e % 6361% % 6362% % 6363% % 6364%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6365% 6366% MagickMontageImage() creates a composite image by combining several 6367% separate images. The images are tiled on the composite image with the name 6368% of the image optionally appearing just below the individual tile. 6369% 6370% The format of the MagickMontageImage method is: 6371% 6372% MagickWand *MagickMontageImage(MagickWand *wand, 6373% const DrawingWand drawing_wand,const char *tile_geometry, 6374% const char *thumbnail_geometry,const MontageMode mode, 6375% const char *frame) 6376% 6377% A description of each parameter follows: 6378% 6379% o wand: the magick wand. 6380% 6381% o drawing_wand: the drawing wand. The font name, size, and color are 6382% obtained from this wand. 6383% 6384% o tile_geometry: the number of tiles per row and page (e.g. 6x4+0+0). 6385% 6386% o thumbnail_geometry: Preferred image size and border size of each 6387% thumbnail (e.g. 120x120+4+3>). 6388% 6389% o mode: Thumbnail framing mode: Frame, Unframe, or Concatenate. 6390% 6391% o frame: Surround the image with an ornamental border (e.g. 15x15+3+3). 6392% The frame color is that of the thumbnail's matte color. 6393% 6394*/ 6395WandExport MagickWand *MagickMontageImage(MagickWand *wand, 6396 const DrawingWand *drawing_wand,const char *tile_geometry, 6397 const char *thumbnail_geometry,const MontageMode mode,const char *frame) 6398{ 6399 char 6400 *font; 6401 6402 Image 6403 *montage_image; 6404 6405 MontageInfo 6406 *montage_info; 6407 6408 PixelWand 6409 *pixel_wand; 6410 6411 assert(wand != (MagickWand *) NULL); 6412 assert(wand->signature == WandSignature); 6413 if (wand->debug != MagickFalse) 6414 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6415 if (wand->images == (Image *) NULL) 6416 return((MagickWand *) NULL); 6417 montage_info=CloneMontageInfo(wand->image_info,(MontageInfo *) NULL); 6418 switch (mode) 6419 { 6420 case FrameMode: 6421 { 6422 (void) CloneString(&montage_info->frame,"15x15+3+3"); 6423 montage_info->shadow=MagickTrue; 6424 break; 6425 } 6426 case UnframeMode: 6427 { 6428 montage_info->frame=(char *) NULL; 6429 montage_info->shadow=MagickFalse; 6430 montage_info->border_width=0; 6431 break; 6432 } 6433 case ConcatenateMode: 6434 { 6435 montage_info->frame=(char *) NULL; 6436 montage_info->shadow=MagickFalse; 6437 (void) CloneString(&montage_info->geometry,"+0+0"); 6438 montage_info->border_width=0; 6439 break; 6440 } 6441 default: 6442 break; 6443 } 6444 font=DrawGetFont(drawing_wand); 6445 if (font != (char *) NULL) 6446 (void) CloneString(&montage_info->font,font); 6447 if (frame != (char *) NULL) 6448 (void) CloneString(&montage_info->frame,frame); 6449 montage_info->pointsize=DrawGetFontSize(drawing_wand); 6450 pixel_wand=NewPixelWand(); 6451 DrawGetFillColor(drawing_wand,pixel_wand); 6452 PixelGetQuantumPacket(pixel_wand,&montage_info->fill); 6453 DrawGetStrokeColor(drawing_wand,pixel_wand); 6454 PixelGetQuantumPacket(pixel_wand,&montage_info->stroke); 6455 pixel_wand=DestroyPixelWand(pixel_wand); 6456 if (thumbnail_geometry != (char *) NULL) 6457 (void) CloneString(&montage_info->geometry,thumbnail_geometry); 6458 if (tile_geometry != (char *) NULL) 6459 (void) CloneString(&montage_info->tile,tile_geometry); 6460 montage_image=MontageImageList(wand->image_info,montage_info,wand->images, 6461 wand->exception); 6462 montage_info=DestroyMontageInfo(montage_info); 6463 if (montage_image == (Image *) NULL) 6464 return((MagickWand *) NULL); 6465 return(CloneMagickWandFromImages(wand,montage_image)); 6466} 6467 6468/* 6469%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6470% % 6471% % 6472% % 6473% M a g i c k M o r p h I m a g e s % 6474% % 6475% % 6476% % 6477%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6478% 6479% MagickMorphImages() method morphs a set of images. Both the image pixels 6480% and size are linearly interpolated to give the appearance of a 6481% meta-morphosis from one image to the next. 6482% 6483% The format of the MagickMorphImages method is: 6484% 6485% MagickWand *MagickMorphImages(MagickWand *wand, 6486% const size_t number_frames) 6487% 6488% A description of each parameter follows: 6489% 6490% o wand: the magick wand. 6491% 6492% o number_frames: the number of in-between images to generate. 6493% 6494*/ 6495WandExport MagickWand *MagickMorphImages(MagickWand *wand, 6496 const size_t number_frames) 6497{ 6498 Image 6499 *morph_image; 6500 6501 assert(wand != (MagickWand *) NULL); 6502 assert(wand->signature == WandSignature); 6503 if (wand->debug != MagickFalse) 6504 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6505 if (wand->images == (Image *) NULL) 6506 return((MagickWand *) NULL); 6507 morph_image=MorphImages(wand->images,number_frames,wand->exception); 6508 if (morph_image == (Image *) NULL) 6509 return((MagickWand *) NULL); 6510 return(CloneMagickWandFromImages(wand,morph_image)); 6511} 6512 6513/* 6514%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6515% % 6516% % 6517% % 6518% M a g i c k M o r p h o l o g y I m a g e % 6519% % 6520% % 6521% % 6522%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6523% 6524% MagickMorphologyImage() applies a user supplied kernel to the image 6525% according to the given mophology method. 6526% 6527% The format of the MagickMorphologyImage method is: 6528% 6529% MagickBooleanType MagickMorphologyImage(MagickWand *wand, 6530% MorphologyMethod method,const ssize_t iterations,KernelInfo *kernel) 6531% 6532% A description of each parameter follows: 6533% 6534% o wand: the magick wand. 6535% 6536% o method: the morphology method to be applied. 6537% 6538% o iterations: apply the operation this many times (or no change). 6539% A value of -1 means loop until no change found. How this is applied 6540% may depend on the morphology method. Typically this is a value of 1. 6541% 6542% o kernel: An array of doubles representing the morphology kernel. 6543% 6544*/ 6545WandExport MagickBooleanType MagickMorphologyImage(MagickWand *wand, 6546 MorphologyMethod method,const ssize_t iterations,KernelInfo *kernel) 6547{ 6548 Image 6549 *morphology_image; 6550 6551 assert(wand != (MagickWand *) NULL); 6552 assert(wand->signature == WandSignature); 6553 if (wand->debug != MagickFalse) 6554 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6555 if (kernel == (const KernelInfo *) NULL) 6556 return(MagickFalse); 6557 if (wand->images == (Image *) NULL) 6558 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6559 morphology_image=MorphologyImage(wand->images,method,iterations,kernel, 6560 wand->exception); 6561 if (morphology_image == (Image *) NULL) 6562 return(MagickFalse); 6563 ReplaceImageInList(&wand->images,morphology_image); 6564 return(MagickTrue); 6565} 6566 6567/* 6568%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6569% % 6570% % 6571% % 6572% M a g i c k M o t i o n B l u r I m a g e % 6573% % 6574% % 6575% % 6576%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6577% 6578% MagickMotionBlurImage() simulates motion blur. We convolve the image with a 6579% Gaussian operator of the given radius and standard deviation (sigma). 6580% For reasonable results, radius should be larger than sigma. Use a 6581% radius of 0 and MotionBlurImage() selects a suitable radius for you. 6582% Angle gives the angle of the blurring motion. 6583% 6584% The format of the MagickMotionBlurImage method is: 6585% 6586% MagickBooleanType MagickMotionBlurImage(MagickWand *wand, 6587% const double radius,const double sigma,const double angle, 6588% const double bias) 6589% 6590% A description of each parameter follows: 6591% 6592% o wand: the magick wand. 6593% 6594% o radius: the radius of the Gaussian, in pixels, not counting 6595% the center pixel. 6596% 6597% o sigma: the standard deviation of the Gaussian, in pixels. 6598% 6599% o angle: Apply the effect along this angle. 6600% 6601*/ 6602WandExport MagickBooleanType MagickMotionBlurImage(MagickWand *wand, 6603 const double radius,const double sigma,const double angle,const double bias) 6604{ 6605 Image 6606 *blur_image; 6607 6608 assert(wand != (MagickWand *) NULL); 6609 assert(wand->signature == WandSignature); 6610 if (wand->debug != MagickFalse) 6611 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6612 if (wand->images == (Image *) NULL) 6613 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6614 blur_image=MotionBlurImage(wand->images,radius,sigma,angle,bias, 6615 wand->exception); 6616 if (blur_image == (Image *) NULL) 6617 return(MagickFalse); 6618 ReplaceImageInList(&wand->images,blur_image); 6619 return(MagickTrue); 6620} 6621 6622/* 6623%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6624% % 6625% % 6626% % 6627% M a g i c k N e g a t e I m a g e % 6628% % 6629% % 6630% % 6631%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6632% 6633% MagickNegateImage() negates the colors in the reference image. The 6634% Grayscale option means that only grayscale values within the image are 6635% negated. 6636% 6637% You can also reduce the influence of a particular channel with a gamma 6638% value of 0. 6639% 6640% The format of the MagickNegateImage method is: 6641% 6642% MagickBooleanType MagickNegateImage(MagickWand *wand, 6643% const MagickBooleanType gray) 6644% 6645% A description of each parameter follows: 6646% 6647% o wand: the magick wand. 6648% 6649% o gray: If MagickTrue, only negate grayscale pixels within the image. 6650% 6651*/ 6652WandExport MagickBooleanType MagickNegateImage(MagickWand *wand, 6653 const MagickBooleanType gray) 6654{ 6655 MagickBooleanType 6656 status; 6657 6658 assert(wand != (MagickWand *) NULL); 6659 assert(wand->signature == WandSignature); 6660 if (wand->debug != MagickFalse) 6661 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6662 if (wand->images == (Image *) NULL) 6663 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6664 status=NegateImage(wand->images,gray,wand->exception); 6665 return(status); 6666} 6667 6668/* 6669%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6670% % 6671% % 6672% % 6673% M a g i c k N e w I m a g e % 6674% % 6675% % 6676% % 6677%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6678% 6679% MagickNewImage() adds a blank image canvas of the specified size and 6680% background color to the wand. 6681% 6682% The format of the MagickNewImage method is: 6683% 6684% MagickBooleanType MagickNewImage(MagickWand *wand, 6685% const size_t columns,const size_t rows, 6686% const PixelWand *background) 6687% 6688% A description of each parameter follows: 6689% 6690% o wand: the magick wand. 6691% 6692% o width: the image width. 6693% 6694% o height: the image height. 6695% 6696% o background: the image color. 6697% 6698*/ 6699WandExport MagickBooleanType MagickNewImage(MagickWand *wand, 6700 const size_t width,const size_t height, 6701 const PixelWand *background) 6702{ 6703 Image 6704 *images; 6705 6706 PixelInfo 6707 pixel; 6708 6709 assert(wand != (MagickWand *) NULL); 6710 assert(wand->signature == WandSignature); 6711 if (wand->debug != MagickFalse) 6712 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6713 PixelGetMagickColor(background,&pixel); 6714 images=NewMagickImage(wand->image_info,width,height,&pixel); 6715 if (images == (Image *) NULL) 6716 return(MagickFalse); 6717 if (images->exception.severity != UndefinedException) 6718 InheritException(wand->exception,&images->exception); 6719 return(InsertImageInWand(wand,images)); 6720} 6721 6722/* 6723%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6724% % 6725% % 6726% % 6727% M a g i c k N e x t I m a g e % 6728% % 6729% % 6730% % 6731%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6732% 6733% MagickNextImage() associates the next image in the image list with a magick 6734% wand. 6735% 6736% The format of the MagickNextImage method is: 6737% 6738% MagickBooleanType MagickNextImage(MagickWand *wand) 6739% 6740% A description of each parameter follows: 6741% 6742% o wand: the magick wand. 6743% 6744*/ 6745WandExport MagickBooleanType MagickNextImage(MagickWand *wand) 6746{ 6747 assert(wand != (MagickWand *) NULL); 6748 assert(wand->signature == WandSignature); 6749 if (wand->debug != MagickFalse) 6750 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6751 if (wand->images == (Image *) NULL) 6752 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6753 if (wand->pend != MagickFalse) 6754 { 6755 wand->pend=MagickFalse; 6756 return(MagickTrue); 6757 } 6758 if (GetNextImageInList(wand->images) == (Image *) NULL) 6759 { 6760 wand->pend=MagickTrue; 6761 return(MagickFalse); 6762 } 6763 wand->images=GetNextImageInList(wand->images); 6764 return(MagickTrue); 6765} 6766 6767/* 6768%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6769% % 6770% % 6771% % 6772% M a g i c k N o r m a l i z e I m a g e % 6773% % 6774% % 6775% % 6776%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6777% 6778% MagickNormalizeImage() enhances the contrast of a color image by adjusting 6779% the pixels color to span the entire range of colors available 6780% 6781% You can also reduce the influence of a particular channel with a gamma 6782% value of 0. 6783% 6784% The format of the MagickNormalizeImage method is: 6785% 6786% MagickBooleanType MagickNormalizeImage(MagickWand *wand) 6787% 6788% A description of each parameter follows: 6789% 6790% o wand: the magick wand. 6791% 6792*/ 6793WandExport MagickBooleanType MagickNormalizeImage(MagickWand *wand) 6794{ 6795 MagickBooleanType 6796 status; 6797 6798 assert(wand != (MagickWand *) NULL); 6799 assert(wand->signature == WandSignature); 6800 if (wand->debug != MagickFalse) 6801 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6802 if (wand->images == (Image *) NULL) 6803 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6804 status=NormalizeImage(wand->images,&wand->images->exception); 6805 return(status); 6806} 6807 6808/* 6809%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6810% % 6811% % 6812% % 6813% M a g i c k O i l P a i n t I m a g e % 6814% % 6815% % 6816% % 6817%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6818% 6819% MagickOilPaintImage() applies a special effect filter that simulates an oil 6820% painting. Each pixel is replaced by the most frequent color occurring 6821% in a circular region defined by radius. 6822% 6823% The format of the MagickOilPaintImage method is: 6824% 6825% MagickBooleanType MagickOilPaintImage(MagickWand *wand, 6826% const double radius,const double sigma) 6827% 6828% A description of each parameter follows: 6829% 6830% o wand: the magick wand. 6831% 6832% o radius: the radius of the circular neighborhood. 6833% 6834% o sigma: the standard deviation of the Gaussian, in pixels. 6835% 6836*/ 6837WandExport MagickBooleanType MagickOilPaintImage(MagickWand *wand, 6838 const double radius,const double sigma) 6839{ 6840 Image 6841 *paint_image; 6842 6843 assert(wand != (MagickWand *) NULL); 6844 assert(wand->signature == WandSignature); 6845 if (wand->debug != MagickFalse) 6846 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6847 if (wand->images == (Image *) NULL) 6848 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6849 paint_image=OilPaintImage(wand->images,radius,sigma,wand->exception); 6850 if (paint_image == (Image *) NULL) 6851 return(MagickFalse); 6852 ReplaceImageInList(&wand->images,paint_image); 6853 return(MagickTrue); 6854} 6855 6856/* 6857%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6858% % 6859% % 6860% % 6861% M a g i c k O p a q u e P a i n t I m a g e % 6862% % 6863% % 6864% % 6865%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6866% 6867% MagickOpaquePaintImage() changes any pixel that matches color with the color 6868% defined by fill. 6869% 6870% The format of the MagickOpaquePaintImage method is: 6871% 6872% MagickBooleanType MagickOpaquePaintImage(MagickWand *wand, 6873% const PixelWand *target,const PixelWand *fill,const double fuzz, 6874% const MagickBooleanType invert) 6875% 6876% A description of each parameter follows: 6877% 6878% o wand: the magick wand. 6879% 6880% o target: Change this target color to the fill color within the image. 6881% 6882% o fill: the fill pixel wand. 6883% 6884% o fuzz: By default target must match a particular pixel color 6885% exactly. However, in many cases two colors may differ by a small amount. 6886% The fuzz member of image defines how much tolerance is acceptable to 6887% consider two colors as the same. For example, set fuzz to 10 and the 6888% color red at intensities of 100 and 102 respectively are now interpreted 6889% as the same color for the purposes of the floodfill. 6890% 6891% o invert: paint any pixel that does not match the target color. 6892% 6893*/ 6894WandExport MagickBooleanType MagickOpaquePaintImage(MagickWand *wand, 6895 const PixelWand *target,const PixelWand *fill,const double fuzz, 6896 const MagickBooleanType invert) 6897{ 6898 MagickBooleanType 6899 status; 6900 6901 PixelInfo 6902 fill_pixel, 6903 target_pixel; 6904 6905 assert(wand != (MagickWand *) NULL); 6906 assert(wand->signature == WandSignature); 6907 if (wand->debug != MagickFalse) 6908 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6909 if (wand->images == (Image *) NULL) 6910 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6911 PixelGetMagickColor(target,&target_pixel); 6912 PixelGetMagickColor(fill,&fill_pixel); 6913 wand->images->fuzz=fuzz; 6914 status=OpaquePaintImage(wand->images,&target_pixel,&fill_pixel,invert, 6915 &wand->images->exception); 6916 return(status); 6917} 6918 6919/* 6920%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6921% % 6922% % 6923% % 6924% 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 % 6925% % 6926% % 6927% % 6928%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6929% 6930% MagickOptimizeImageLayers() compares each image the GIF disposed forms of the 6931% previous image in the sequence. From this it attempts to select the 6932% smallest cropped image to replace each frame, while preserving the results 6933% of the animation. 6934% 6935% The format of the MagickOptimizeImageLayers method is: 6936% 6937% MagickWand *MagickOptimizeImageLayers(MagickWand *wand) 6938% 6939% A description of each parameter follows: 6940% 6941% o wand: the magick wand. 6942% 6943*/ 6944WandExport MagickWand *MagickOptimizeImageLayers(MagickWand *wand) 6945{ 6946 Image 6947 *optimize_image; 6948 6949 assert(wand != (MagickWand *) NULL); 6950 assert(wand->signature == WandSignature); 6951 if (wand->debug != MagickFalse) 6952 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6953 if (wand->images == (Image *) NULL) 6954 return((MagickWand *) NULL); 6955 optimize_image=OptimizeImageLayers(wand->images,wand->exception); 6956 if (optimize_image == (Image *) NULL) 6957 return((MagickWand *) NULL); 6958 return(CloneMagickWandFromImages(wand,optimize_image)); 6959} 6960 6961/* 6962%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6963% % 6964% % 6965% % 6966% 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 % 6967% % 6968% % 6969% % 6970%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6971% 6972% MagickOrderedPosterizeImage() performs an ordered dither based on a number 6973% of pre-defined dithering threshold maps, but over multiple intensity levels, 6974% which can be different for different channels, according to the input 6975% arguments. 6976% 6977% The format of the MagickOrderedPosterizeImage method is: 6978% 6979% MagickBooleanType MagickOrderedPosterizeImage(MagickWand *wand, 6980% const char *threshold_map) 6981% 6982% A description of each parameter follows: 6983% 6984% o image: the image. 6985% 6986% o threshold_map: A string containing the name of the threshold dither 6987% map to use, followed by zero or more numbers representing the number of 6988% color levels tho dither between. 6989% 6990% Any level number less than 2 is equivalent to 2, and means only binary 6991% dithering will be applied to each color channel. 6992% 6993% No numbers also means a 2 level (bitmap) dither will be applied to all 6994% channels, while a single number is the number of levels applied to each 6995% channel in sequence. More numbers will be applied in turn to each of 6996% the color channels. 6997% 6998% For example: "o3x3,6" generates a 6 level posterization of the image 6999% with a ordered 3x3 diffused pixel dither being applied between each 7000% level. While checker,8,8,4 will produce a 332 colormaped image with 7001% only a single checkerboard hash pattern (50% grey) between each color 7002% level, to basically double the number of color levels with a bare 7003% minimim of dithering. 7004% 7005*/ 7006WandExport MagickBooleanType MagickOrderedPosterizeImage(MagickWand *wand, 7007 const char *threshold_map) 7008{ 7009 MagickBooleanType 7010 status; 7011 7012 assert(wand != (MagickWand *) NULL); 7013 assert(wand->signature == WandSignature); 7014 if (wand->debug != MagickFalse) 7015 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7016 if (wand->images == (Image *) NULL) 7017 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7018 status=OrderedPosterizeImage(wand->images,threshold_map,wand->exception); 7019 return(status); 7020} 7021 7022/* 7023%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7024% % 7025% % 7026% % 7027% M a g i c k P i n g I m a g e % 7028% % 7029% % 7030% % 7031%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7032% 7033% MagickPingImage() is like MagickReadImage() except the only valid 7034% information returned is the image width, height, size, and format. It 7035% is designed to efficiently obtain this information from a file without 7036% reading the entire image sequence into memory. 7037% 7038% The format of the MagickPingImage method is: 7039% 7040% MagickBooleanType MagickPingImage(MagickWand *wand,const char *filename) 7041% 7042% A description of each parameter follows: 7043% 7044% o wand: the magick wand. 7045% 7046% o filename: the image filename. 7047% 7048*/ 7049WandExport MagickBooleanType MagickPingImage(MagickWand *wand, 7050 const char *filename) 7051{ 7052 Image 7053 *images; 7054 7055 ImageInfo 7056 *ping_info; 7057 7058 assert(wand != (MagickWand *) NULL); 7059 assert(wand->signature == WandSignature); 7060 if (wand->debug != MagickFalse) 7061 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7062 ping_info=CloneImageInfo(wand->image_info); 7063 if (filename != (const char *) NULL) 7064 (void) CopyMagickString(ping_info->filename,filename,MaxTextExtent); 7065 images=PingImage(ping_info,wand->exception); 7066 ping_info=DestroyImageInfo(ping_info); 7067 if (images == (Image *) NULL) 7068 return(MagickFalse); 7069 return(InsertImageInWand(wand,images)); 7070} 7071 7072/* 7073%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7074% % 7075% % 7076% % 7077% M a g i c k P i n g I m a g e B l o b % 7078% % 7079% % 7080% % 7081%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7082% 7083% MagickPingImageBlob() pings an image or image sequence from a blob. 7084% 7085% The format of the MagickPingImageBlob method is: 7086% 7087% MagickBooleanType MagickPingImageBlob(MagickWand *wand, 7088% const void *blob,const size_t length) 7089% 7090% A description of each parameter follows: 7091% 7092% o wand: the magick wand. 7093% 7094% o blob: the blob. 7095% 7096% o length: the blob length. 7097% 7098*/ 7099WandExport MagickBooleanType MagickPingImageBlob(MagickWand *wand, 7100 const void *blob,const size_t length) 7101{ 7102 Image 7103 *images; 7104 7105 ImageInfo 7106 *read_info; 7107 7108 assert(wand != (MagickWand *) NULL); 7109 assert(wand->signature == WandSignature); 7110 if (wand->debug != MagickFalse) 7111 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7112 read_info=CloneImageInfo(wand->image_info); 7113 SetImageInfoBlob(read_info,blob,length); 7114 images=PingImage(read_info,wand->exception); 7115 read_info=DestroyImageInfo(read_info); 7116 if (images == (Image *) NULL) 7117 return(MagickFalse); 7118 return(InsertImageInWand(wand,images)); 7119} 7120 7121/* 7122%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7123% % 7124% % 7125% % 7126% M a g i c k P i n g I m a g e F i l e % 7127% % 7128% % 7129% % 7130%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7131% 7132% MagickPingImageFile() pings an image or image sequence from an open file 7133% descriptor. 7134% 7135% The format of the MagickPingImageFile method is: 7136% 7137% MagickBooleanType MagickPingImageFile(MagickWand *wand,FILE *file) 7138% 7139% A description of each parameter follows: 7140% 7141% o wand: the magick wand. 7142% 7143% o file: the file descriptor. 7144% 7145*/ 7146WandExport MagickBooleanType MagickPingImageFile(MagickWand *wand,FILE *file) 7147{ 7148 Image 7149 *images; 7150 7151 ImageInfo 7152 *read_info; 7153 7154 assert(wand != (MagickWand *) NULL); 7155 assert(wand->signature == WandSignature); 7156 assert(file != (FILE *) NULL); 7157 if (wand->debug != MagickFalse) 7158 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7159 read_info=CloneImageInfo(wand->image_info); 7160 SetImageInfoFile(read_info,file); 7161 images=PingImage(read_info,wand->exception); 7162 read_info=DestroyImageInfo(read_info); 7163 if (images == (Image *) NULL) 7164 return(MagickFalse); 7165 return(InsertImageInWand(wand,images)); 7166} 7167 7168/* 7169%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7170% % 7171% % 7172% % 7173% M a g i c k P o l a r o i d I m a g e % 7174% % 7175% % 7176% % 7177%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7178% 7179% MagickPolaroidImage() simulates a Polaroid picture. 7180% 7181% The format of the MagickPolaroidImage method is: 7182% 7183% MagickBooleanType MagickPolaroidImage(MagickWand *wand, 7184% const DrawingWand *drawing_wand,const double angle, 7185% const PixelInterpolateMethod method) 7186% 7187% A description of each parameter follows: 7188% 7189% o wand: the magick wand. 7190% 7191% o drawing_wand: the draw wand. 7192% 7193% o angle: Apply the effect along this angle. 7194% 7195% o method: the pixel interpolation method. 7196% 7197*/ 7198WandExport MagickBooleanType MagickPolaroidImage(MagickWand *wand, 7199 const DrawingWand *drawing_wand,const double angle, 7200 const PixelInterpolateMethod method) 7201{ 7202 DrawInfo 7203 *draw_info; 7204 7205 Image 7206 *polaroid_image; 7207 7208 assert(wand != (MagickWand *) NULL); 7209 assert(wand->signature == WandSignature); 7210 if (wand->debug != MagickFalse) 7211 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7212 if (wand->images == (Image *) NULL) 7213 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7214 draw_info=PeekDrawingWand(drawing_wand); 7215 if (draw_info == (DrawInfo *) NULL) 7216 return(MagickFalse); 7217 polaroid_image=PolaroidImage(wand->images,draw_info,angle,method, 7218 wand->exception); 7219 if (polaroid_image == (Image *) NULL) 7220 return(MagickFalse); 7221 ReplaceImageInList(&wand->images,polaroid_image); 7222 return(MagickTrue); 7223} 7224 7225/* 7226%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7227% % 7228% % 7229% % 7230% M a g i c k P o s t e r i z e I m a g e % 7231% % 7232% % 7233% % 7234%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7235% 7236% MagickPosterizeImage() reduces the image to a limited number of color level. 7237% 7238% The format of the MagickPosterizeImage method is: 7239% 7240% MagickBooleanType MagickPosterizeImage(MagickWand *wand, 7241% const unsigned levels,const MagickBooleanType dither) 7242% 7243% A description of each parameter follows: 7244% 7245% o wand: the magick wand. 7246% 7247% o levels: Number of color levels allowed in each channel. Very low values 7248% (2, 3, or 4) have the most visible effect. 7249% 7250% o dither: Set this integer value to something other than zero to dither 7251% the mapped image. 7252% 7253*/ 7254WandExport MagickBooleanType MagickPosterizeImage(MagickWand *wand, 7255 const size_t levels,const MagickBooleanType dither) 7256{ 7257 MagickBooleanType 7258 status; 7259 7260 assert(wand != (MagickWand *) NULL); 7261 assert(wand->signature == WandSignature); 7262 if (wand->debug != MagickFalse) 7263 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7264 if (wand->images == (Image *) NULL) 7265 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7266 status=PosterizeImage(wand->images,levels,dither,wand->exception); 7267 return(status); 7268} 7269 7270/* 7271%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7272% % 7273% % 7274% % 7275% M a g i c k P r e v i e w I m a g e s % 7276% % 7277% % 7278% % 7279%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7280% 7281% MagickPreviewImages() tiles 9 thumbnails of the specified image with an 7282% image processing operation applied at varying strengths. This helpful 7283% to quickly pin-point an appropriate parameter for an image processing 7284% operation. 7285% 7286% The format of the MagickPreviewImages method is: 7287% 7288% MagickWand *MagickPreviewImages(MagickWand *wand, 7289% const PreviewType preview) 7290% 7291% A description of each parameter follows: 7292% 7293% o wand: the magick wand. 7294% 7295% o preview: the preview type. 7296% 7297*/ 7298WandExport MagickWand *MagickPreviewImages(MagickWand *wand, 7299 const PreviewType preview) 7300{ 7301 Image 7302 *preview_image; 7303 7304 assert(wand != (MagickWand *) NULL); 7305 assert(wand->signature == WandSignature); 7306 if (wand->debug != MagickFalse) 7307 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7308 if (wand->images == (Image *) NULL) 7309 return((MagickWand *) NULL); 7310 preview_image=PreviewImage(wand->images,preview,wand->exception); 7311 if (preview_image == (Image *) NULL) 7312 return((MagickWand *) NULL); 7313 return(CloneMagickWandFromImages(wand,preview_image)); 7314} 7315 7316/* 7317%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7318% % 7319% % 7320% % 7321% M a g i c k P r e v i o u s I m a g e % 7322% % 7323% % 7324% % 7325%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7326% 7327% MagickPreviousImage() assocates the previous image in an image list with 7328% the magick wand. 7329% 7330% The format of the MagickPreviousImage method is: 7331% 7332% MagickBooleanType MagickPreviousImage(MagickWand *wand) 7333% 7334% A description of each parameter follows: 7335% 7336% o wand: the magick wand. 7337% 7338*/ 7339WandExport MagickBooleanType MagickPreviousImage(MagickWand *wand) 7340{ 7341 assert(wand != (MagickWand *) NULL); 7342 assert(wand->signature == WandSignature); 7343 if (wand->debug != MagickFalse) 7344 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7345 if (wand->images == (Image *) NULL) 7346 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7347 if (wand->pend != MagickFalse) 7348 { 7349 wand->pend=MagickFalse; 7350 return(MagickTrue); 7351 } 7352 if (GetPreviousImageInList(wand->images) == (Image *) NULL) 7353 { 7354 wand->pend=MagickTrue; 7355 return(MagickFalse); 7356 } 7357 wand->images=GetPreviousImageInList(wand->images); 7358 return(MagickTrue); 7359} 7360 7361/* 7362%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7363% % 7364% % 7365% % 7366% M a g i c k Q u a n t i z e I m a g e % 7367% % 7368% % 7369% % 7370%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7371% 7372% MagickQuantizeImage() analyzes the colors within a reference image and 7373% chooses a fixed number of colors to represent the image. The goal of the 7374% algorithm is to minimize the color difference between the input and output 7375% image while minimizing the processing time. 7376% 7377% The format of the MagickQuantizeImage method is: 7378% 7379% MagickBooleanType MagickQuantizeImage(MagickWand *wand, 7380% const size_t number_colors,const ColorspaceType colorspace, 7381% const size_t treedepth,const MagickBooleanType dither, 7382% const MagickBooleanType measure_error) 7383% 7384% A description of each parameter follows: 7385% 7386% o wand: the magick wand. 7387% 7388% o number_colors: the number of colors. 7389% 7390% o colorspace: Perform color reduction in this colorspace, typically 7391% RGBColorspace. 7392% 7393% o treedepth: Normally, this integer value is zero or one. A zero or 7394% 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 7395% reference image with the least amount of memory and the fastest 7396% computational speed. In some cases, such as an image with low color 7397% dispersion (a few number of colors), a value other than 7398% Log4(number_colors) is required. To expand the color tree completely, 7399% use a value of 8. 7400% 7401% o dither: A value other than zero distributes the difference between an 7402% original image and the corresponding color reduced image to 7403% neighboring pixels along a Hilbert curve. 7404% 7405% o measure_error: A value other than zero measures the difference between 7406% the original and quantized images. This difference is the total 7407% quantization error. The error is computed by summing over all pixels 7408% in an image the distance squared in RGB space between each reference 7409% pixel value and its quantized value. 7410% 7411*/ 7412WandExport MagickBooleanType MagickQuantizeImage(MagickWand *wand, 7413 const size_t number_colors,const ColorspaceType colorspace, 7414 const size_t treedepth,const MagickBooleanType dither, 7415 const MagickBooleanType measure_error) 7416{ 7417 MagickBooleanType 7418 status; 7419 7420 QuantizeInfo 7421 *quantize_info; 7422 7423 assert(wand != (MagickWand *) NULL); 7424 assert(wand->signature == WandSignature); 7425 if (wand->debug != MagickFalse) 7426 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7427 if (wand->images == (Image *) NULL) 7428 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7429 quantize_info=CloneQuantizeInfo((QuantizeInfo *) NULL); 7430 quantize_info->number_colors=number_colors; 7431 quantize_info->dither=dither; 7432 quantize_info->tree_depth=treedepth; 7433 quantize_info->colorspace=colorspace; 7434 quantize_info->measure_error=measure_error; 7435 status=QuantizeImage(quantize_info,wand->images,wand->exception); 7436 quantize_info=DestroyQuantizeInfo(quantize_info); 7437 return(status); 7438} 7439 7440/* 7441%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7442% % 7443% % 7444% % 7445% M a g i c k Q u a n t i z e I m a g e s % 7446% % 7447% % 7448% % 7449%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7450% 7451% MagickQuantizeImages() analyzes the colors within a sequence of images and 7452% chooses a fixed number of colors to represent the image. The goal of the 7453% algorithm is to minimize the color difference between the input and output 7454% image while minimizing the processing time. 7455% 7456% The format of the MagickQuantizeImages method is: 7457% 7458% MagickBooleanType MagickQuantizeImages(MagickWand *wand, 7459% const size_t number_colors,const ColorspaceType colorspace, 7460% const size_t treedepth,const MagickBooleanType dither, 7461% const MagickBooleanType measure_error) 7462% 7463% A description of each parameter follows: 7464% 7465% o wand: the magick wand. 7466% 7467% o number_colors: the number of colors. 7468% 7469% o colorspace: Perform color reduction in this colorspace, typically 7470% RGBColorspace. 7471% 7472% o treedepth: Normally, this integer value is zero or one. A zero or 7473% 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 7474% reference image with the least amount of memory and the fastest 7475% computational speed. In some cases, such as an image with low color 7476% dispersion (a few number of colors), a value other than 7477% Log4(number_colors) is required. To expand the color tree completely, 7478% use a value of 8. 7479% 7480% o dither: A value other than zero distributes the difference between an 7481% original image and the corresponding color reduced algorithm to 7482% neighboring pixels along a Hilbert curve. 7483% 7484% o measure_error: A value other than zero measures the difference between 7485% the original and quantized images. This difference is the total 7486% quantization error. The error is computed by summing over all pixels 7487% in an image the distance squared in RGB space between each reference 7488% pixel value and its quantized value. 7489% 7490*/ 7491WandExport MagickBooleanType MagickQuantizeImages(MagickWand *wand, 7492 const size_t number_colors,const ColorspaceType colorspace, 7493 const size_t treedepth,const MagickBooleanType dither, 7494 const MagickBooleanType measure_error) 7495{ 7496 MagickBooleanType 7497 status; 7498 7499 QuantizeInfo 7500 *quantize_info; 7501 7502 assert(wand != (MagickWand *) NULL); 7503 assert(wand->signature == WandSignature); 7504 if (wand->debug != MagickFalse) 7505 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7506 if (wand->images == (Image *) NULL) 7507 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7508 quantize_info=CloneQuantizeInfo((QuantizeInfo *) NULL); 7509 quantize_info->number_colors=number_colors; 7510 quantize_info->dither=dither; 7511 quantize_info->tree_depth=treedepth; 7512 quantize_info->colorspace=colorspace; 7513 quantize_info->measure_error=measure_error; 7514 status=QuantizeImages(quantize_info,wand->images,wand->exception); 7515 quantize_info=DestroyQuantizeInfo(quantize_info); 7516 return(status); 7517} 7518 7519/* 7520%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7521% % 7522% % 7523% % 7524% M a g i c k R a d i a l B l u r I m a g e % 7525% % 7526% % 7527% % 7528%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7529% 7530% MagickRadialBlurImage() radial blurs an image. 7531% 7532% The format of the MagickRadialBlurImage method is: 7533% 7534% MagickBooleanType MagickRadialBlurImage(MagickWand *wand, 7535% const double angle,const double bias) 7536% 7537% A description of each parameter follows: 7538% 7539% o wand: the magick wand. 7540% 7541% o angle: the angle of the blur in degrees. 7542% 7543% o bias: the bias. 7544% 7545*/ 7546WandExport MagickBooleanType MagickRadialBlurImage(MagickWand *wand, 7547 const double angle,const double bias) 7548{ 7549 Image 7550 *blur_image; 7551 7552 assert(wand != (MagickWand *) NULL); 7553 assert(wand->signature == WandSignature); 7554 if (wand->debug != MagickFalse) 7555 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7556 if (wand->images == (Image *) NULL) 7557 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7558 blur_image=RadialBlurImage(wand->images,angle,bias,wand->exception); 7559 if (blur_image == (Image *) NULL) 7560 return(MagickFalse); 7561 ReplaceImageInList(&wand->images,blur_image); 7562 return(MagickTrue); 7563} 7564 7565/* 7566%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7567% % 7568% % 7569% % 7570% M a g i c k R a i s e I m a g e % 7571% % 7572% % 7573% % 7574%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7575% 7576% MagickRaiseImage() creates a simulated three-dimensional button-like effect 7577% by lightening and darkening the edges of the image. Members width and 7578% height of raise_info define the width of the vertical and horizontal 7579% edge of the effect. 7580% 7581% The format of the MagickRaiseImage method is: 7582% 7583% MagickBooleanType MagickRaiseImage(MagickWand *wand, 7584% const size_t width,const size_t height,const ssize_t x, 7585% const ssize_t y,const MagickBooleanType raise) 7586% 7587% A description of each parameter follows: 7588% 7589% o wand: the magick wand. 7590% 7591% o width,height,x,y: Define the dimensions of the area to raise. 7592% 7593% o raise: A value other than zero creates a 3-D raise effect, 7594% otherwise it has a lowered effect. 7595% 7596*/ 7597WandExport MagickBooleanType MagickRaiseImage(MagickWand *wand, 7598 const size_t width,const size_t height,const ssize_t x, 7599 const ssize_t y,const MagickBooleanType raise) 7600{ 7601 MagickBooleanType 7602 status; 7603 7604 RectangleInfo 7605 raise_info; 7606 7607 assert(wand != (MagickWand *) NULL); 7608 assert(wand->signature == WandSignature); 7609 if (wand->debug != MagickFalse) 7610 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7611 if (wand->images == (Image *) NULL) 7612 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7613 raise_info.width=width; 7614 raise_info.height=height; 7615 raise_info.x=x; 7616 raise_info.y=y; 7617 status=RaiseImage(wand->images,&raise_info,raise,&wand->images->exception); 7618 return(status); 7619} 7620 7621/* 7622%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7623% % 7624% % 7625% % 7626% 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 % 7627% % 7628% % 7629% % 7630%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7631% 7632% MagickRandomThresholdImage() changes the value of individual pixels based on 7633% the intensity of each pixel compared to threshold. The result is a 7634% high-contrast, two color image. 7635% 7636% The format of the MagickRandomThresholdImage method is: 7637% 7638% MagickBooleanType MagickRandomThresholdImage(MagickWand *wand, 7639% const double low,const double high) 7640% 7641% A description of each parameter follows: 7642% 7643% o wand: the magick wand. 7644% 7645% o low,high: Specify the high and low thresholds. These values range from 7646% 0 to QuantumRange. 7647% 7648*/ 7649WandExport MagickBooleanType MagickRandomThresholdImage(MagickWand *wand, 7650 const double low,const double high) 7651{ 7652 char 7653 threshold[MaxTextExtent]; 7654 7655 MagickBooleanType 7656 status; 7657 7658 assert(wand != (MagickWand *) NULL); 7659 assert(wand->signature == WandSignature); 7660 if (wand->debug != MagickFalse) 7661 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7662 if (wand->images == (Image *) NULL) 7663 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7664 (void) FormatLocaleString(threshold,MaxTextExtent,"%gx%g",low,high); 7665 status=RandomThresholdImage(wand->images,threshold,wand->exception); 7666 if (status == MagickFalse) 7667 InheritException(wand->exception,&wand->images->exception); 7668 return(status); 7669} 7670 7671/* 7672%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7673% % 7674% % 7675% % 7676% M a g i c k R e a d I m a g e % 7677% % 7678% % 7679% % 7680%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7681% 7682% MagickReadImage() reads an image or image sequence. The images are inserted 7683% at the current image pointer position. Use MagickSetFirstIterator(), 7684% MagickSetLastIterator, or MagickSetImageIndex() to specify the current 7685% image pointer position at the beginning of the image list, the end, or 7686% anywhere in-between respectively. 7687% 7688% The format of the MagickReadImage method is: 7689% 7690% MagickBooleanType MagickReadImage(MagickWand *wand,const char *filename) 7691% 7692% A description of each parameter follows: 7693% 7694% o wand: the magick wand. 7695% 7696% o filename: the image filename. 7697% 7698*/ 7699WandExport MagickBooleanType MagickReadImage(MagickWand *wand, 7700 const char *filename) 7701{ 7702 Image 7703 *images; 7704 7705 ImageInfo 7706 *read_info; 7707 7708 assert(wand != (MagickWand *) NULL); 7709 assert(wand->signature == WandSignature); 7710 if (wand->debug != MagickFalse) 7711 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7712 read_info=CloneImageInfo(wand->image_info); 7713 if (filename != (const char *) NULL) 7714 (void) CopyMagickString(read_info->filename,filename,MaxTextExtent); 7715 images=ReadImage(read_info,wand->exception); 7716 read_info=DestroyImageInfo(read_info); 7717 if (images == (Image *) NULL) 7718 return(MagickFalse); 7719 return(InsertImageInWand(wand,images)); 7720} 7721 7722/* 7723%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7724% % 7725% % 7726% % 7727% M a g i c k R e a d I m a g e B l o b % 7728% % 7729% % 7730% % 7731%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7732% 7733% MagickReadImageBlob() reads an image or image sequence from a blob. 7734% 7735% The format of the MagickReadImageBlob method is: 7736% 7737% MagickBooleanType MagickReadImageBlob(MagickWand *wand, 7738% const void *blob,const size_t length) 7739% 7740% A description of each parameter follows: 7741% 7742% o wand: the magick wand. 7743% 7744% o blob: the blob. 7745% 7746% o length: the blob length. 7747% 7748*/ 7749WandExport MagickBooleanType MagickReadImageBlob(MagickWand *wand, 7750 const void *blob,const size_t length) 7751{ 7752 Image 7753 *images; 7754 7755 assert(wand != (MagickWand *) NULL); 7756 assert(wand->signature == WandSignature); 7757 if (wand->debug != MagickFalse) 7758 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7759 images=BlobToImage(wand->image_info,blob,length,wand->exception); 7760 if (images == (Image *) NULL) 7761 return(MagickFalse); 7762 return(InsertImageInWand(wand,images)); 7763} 7764 7765/* 7766%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7767% % 7768% % 7769% % 7770% M a g i c k R e a d I m a g e F i l e % 7771% % 7772% % 7773% % 7774%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7775% 7776% MagickReadImageFile() reads an image or image sequence from an open file 7777% descriptor. 7778% 7779% The format of the MagickReadImageFile method is: 7780% 7781% MagickBooleanType MagickReadImageFile(MagickWand *wand,FILE *file) 7782% 7783% A description of each parameter follows: 7784% 7785% o wand: the magick wand. 7786% 7787% o file: the file descriptor. 7788% 7789*/ 7790WandExport MagickBooleanType MagickReadImageFile(MagickWand *wand,FILE *file) 7791{ 7792 Image 7793 *images; 7794 7795 ImageInfo 7796 *read_info; 7797 7798 assert(wand != (MagickWand *) NULL); 7799 assert(wand->signature == WandSignature); 7800 assert(file != (FILE *) NULL); 7801 if (wand->debug != MagickFalse) 7802 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7803 read_info=CloneImageInfo(wand->image_info); 7804 SetImageInfoFile(read_info,file); 7805 images=ReadImage(read_info,wand->exception); 7806 read_info=DestroyImageInfo(read_info); 7807 if (images == (Image *) NULL) 7808 return(MagickFalse); 7809 return(InsertImageInWand(wand,images)); 7810} 7811 7812/* 7813%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7814% % 7815% % 7816% % 7817% M a g i c k R e m a p I m a g e % 7818% % 7819% % 7820% % 7821%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7822% 7823% MagickRemapImage() replaces the colors of an image with the closest color 7824% from a reference image. 7825% 7826% The format of the MagickRemapImage method is: 7827% 7828% MagickBooleanType MagickRemapImage(MagickWand *wand, 7829% const MagickWand *remap_wand,const DitherMethod method) 7830% 7831% A description of each parameter follows: 7832% 7833% o wand: the magick wand. 7834% 7835% o affinity: the affinity wand. 7836% 7837% o method: choose from these dither methods: NoDitherMethod, 7838% RiemersmaDitherMethod, or FloydSteinbergDitherMethod. 7839% 7840*/ 7841WandExport MagickBooleanType MagickRemapImage(MagickWand *wand, 7842 const MagickWand *remap_wand,const DitherMethod method) 7843{ 7844 MagickBooleanType 7845 status; 7846 7847 QuantizeInfo 7848 *quantize_info; 7849 7850 assert(wand != (MagickWand *) NULL); 7851 assert(wand->signature == WandSignature); 7852 if (wand->debug != MagickFalse) 7853 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7854 if ((wand->images == (Image *) NULL) || 7855 (remap_wand->images == (Image *) NULL)) 7856 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7857 quantize_info=AcquireQuantizeInfo(wand->image_info); 7858 quantize_info->dither_method=method; 7859 if (method == NoDitherMethod) 7860 quantize_info->dither=MagickFalse; 7861 status=RemapImage(quantize_info,wand->images,remap_wand->images, 7862 wand->exception); 7863 quantize_info=DestroyQuantizeInfo(quantize_info); 7864 return(status); 7865} 7866 7867/* 7868%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7869% % 7870% % 7871% % 7872% M a g i c k R e m o v e I m a g e % 7873% % 7874% % 7875% % 7876%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7877% 7878% MagickRemoveImage() removes an image from the image list. 7879% 7880% The format of the MagickRemoveImage method is: 7881% 7882% MagickBooleanType MagickRemoveImage(MagickWand *wand) 7883% 7884% A description of each parameter follows: 7885% 7886% o wand: the magick wand. 7887% 7888% o insert: the splice wand. 7889% 7890*/ 7891WandExport MagickBooleanType MagickRemoveImage(MagickWand *wand) 7892{ 7893 assert(wand != (MagickWand *) NULL); 7894 assert(wand->signature == WandSignature); 7895 if (wand->debug != MagickFalse) 7896 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7897 if (wand->images == (Image *) NULL) 7898 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7899 DeleteImageFromList(&wand->images); 7900 return(MagickTrue); 7901} 7902 7903/* 7904%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7905% % 7906% % 7907% % 7908% M a g i c k R e s a m p l e I m a g e % 7909% % 7910% % 7911% % 7912%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7913% 7914% MagickResampleImage() resample image to desired resolution. 7915% 7916% Bessel Blackman Box 7917% Catrom Cubic Gaussian 7918% Hanning Hermite Lanczos 7919% Mitchell Point Quandratic 7920% Sinc Triangle 7921% 7922% Most of the filters are FIR (finite impulse response), however, Bessel, 7923% Gaussian, and Sinc are IIR (infinite impulse response). Bessel and Sinc 7924% are windowed (brought down to zero) with the Blackman filter. 7925% 7926% The format of the MagickResampleImage method is: 7927% 7928% MagickBooleanType MagickResampleImage(MagickWand *wand, 7929% const double x_resolution,const double y_resolution, 7930% const FilterTypes filter,const double blur) 7931% 7932% A description of each parameter follows: 7933% 7934% o wand: the magick wand. 7935% 7936% o x_resolution: the new image x resolution. 7937% 7938% o y_resolution: the new image y resolution. 7939% 7940% o filter: Image filter to use. 7941% 7942% o blur: the blur factor where > 1 is blurry, < 1 is sharp. 7943% 7944*/ 7945WandExport MagickBooleanType MagickResampleImage(MagickWand *wand, 7946 const double x_resolution,const double y_resolution,const FilterTypes filter, 7947 const double blur) 7948{ 7949 Image 7950 *resample_image; 7951 7952 assert(wand != (MagickWand *) NULL); 7953 assert(wand->signature == WandSignature); 7954 if (wand->debug != MagickFalse) 7955 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7956 if (wand->images == (Image *) NULL) 7957 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7958 resample_image=ResampleImage(wand->images,x_resolution,y_resolution,filter, 7959 blur,wand->exception); 7960 if (resample_image == (Image *) NULL) 7961 return(MagickFalse); 7962 ReplaceImageInList(&wand->images,resample_image); 7963 return(MagickTrue); 7964} 7965 7966/* 7967%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7968% % 7969% % 7970% % 7971% M a g i c k R e s e t I m a g e P a g e % 7972% % 7973% % 7974% % 7975%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7976% 7977% MagickResetImagePage() resets the Wand page canvas and position. 7978% 7979% The format of the MagickResetImagePage method is: 7980% 7981% MagickBooleanType MagickResetImagePage(MagickWand *wand, 7982% const char *page) 7983% 7984% A description of each parameter follows: 7985% 7986% o wand: the magick wand. 7987% 7988% o page: the relative page specification. 7989% 7990*/ 7991WandExport MagickBooleanType MagickResetImagePage(MagickWand *wand, 7992 const char *page) 7993{ 7994 assert(wand != (MagickWand *) NULL); 7995 assert(wand->signature == WandSignature); 7996 if (wand->debug != MagickFalse) 7997 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7998 if (wand->images == (Image *) NULL) 7999 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8000 if ((page == (char *) NULL) || (*page == '\0')) 8001 { 8002 (void) ParseAbsoluteGeometry("0x0+0+0",&wand->images->page); 8003 return(MagickTrue); 8004 } 8005 return(ResetImagePage(wand->images,page)); 8006} 8007 8008/* 8009%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8010% % 8011% % 8012% % 8013% M a g i c k R e s i z e I m a g e % 8014% % 8015% % 8016% % 8017%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8018% 8019% MagickResizeImage() scales an image to the desired dimensions with one of 8020% these filters: 8021% 8022% Bessel Blackman Box 8023% Catrom Cubic Gaussian 8024% Hanning Hermite Lanczos 8025% Mitchell Point Quandratic 8026% Sinc Triangle 8027% 8028% Most of the filters are FIR (finite impulse response), however, Bessel, 8029% Gaussian, and Sinc are IIR (infinite impulse response). Bessel and Sinc 8030% are windowed (brought down to zero) with the Blackman filter. 8031% 8032% The format of the MagickResizeImage method is: 8033% 8034% MagickBooleanType MagickResizeImage(MagickWand *wand, 8035% const size_t columns,const size_t rows, 8036% const FilterTypes filter,const double blur) 8037% 8038% A description of each parameter follows: 8039% 8040% o wand: the magick wand. 8041% 8042% o columns: the number of columns in the scaled image. 8043% 8044% o rows: the number of rows in the scaled image. 8045% 8046% o filter: Image filter to use. 8047% 8048% o blur: the blur factor where > 1 is blurry, < 1 is sharp. 8049% 8050*/ 8051WandExport MagickBooleanType MagickResizeImage(MagickWand *wand, 8052 const size_t columns,const size_t rows,const FilterTypes filter, 8053 const double blur) 8054{ 8055 Image 8056 *resize_image; 8057 8058 assert(wand != (MagickWand *) NULL); 8059 assert(wand->signature == WandSignature); 8060 if (wand->debug != MagickFalse) 8061 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8062 if (wand->images == (Image *) NULL) 8063 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8064 resize_image=ResizeImage(wand->images,columns,rows,filter,blur, 8065 wand->exception); 8066 if (resize_image == (Image *) NULL) 8067 return(MagickFalse); 8068 ReplaceImageInList(&wand->images,resize_image); 8069 return(MagickTrue); 8070} 8071 8072/* 8073%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8074% % 8075% % 8076% % 8077% M a g i c k R o l l I m a g e % 8078% % 8079% % 8080% % 8081%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8082% 8083% MagickRollImage() offsets an image as defined by x and y. 8084% 8085% The format of the MagickRollImage method is: 8086% 8087% MagickBooleanType MagickRollImage(MagickWand *wand,const ssize_t x, 8088% const size_t y) 8089% 8090% A description of each parameter follows: 8091% 8092% o wand: the magick wand. 8093% 8094% o x: the x offset. 8095% 8096% o y: the y offset. 8097% 8098% 8099*/ 8100WandExport MagickBooleanType MagickRollImage(MagickWand *wand, 8101 const ssize_t x,const ssize_t y) 8102{ 8103 Image 8104 *roll_image; 8105 8106 assert(wand != (MagickWand *) NULL); 8107 assert(wand->signature == WandSignature); 8108 if (wand->debug != MagickFalse) 8109 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8110 if (wand->images == (Image *) NULL) 8111 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8112 roll_image=RollImage(wand->images,x,y,wand->exception); 8113 if (roll_image == (Image *) NULL) 8114 return(MagickFalse); 8115 ReplaceImageInList(&wand->images,roll_image); 8116 return(MagickTrue); 8117} 8118 8119/* 8120%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8121% % 8122% % 8123% % 8124% M a g i c k R o t a t e I m a g e % 8125% % 8126% % 8127% % 8128%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8129% 8130% MagickRotateImage() rotates an image the specified number of degrees. Empty 8131% triangles left over from rotating the image are filled with the 8132% background color. 8133% 8134% The format of the MagickRotateImage method is: 8135% 8136% MagickBooleanType MagickRotateImage(MagickWand *wand, 8137% const PixelWand *background,const double degrees) 8138% 8139% A description of each parameter follows: 8140% 8141% o wand: the magick wand. 8142% 8143% o background: the background pixel wand. 8144% 8145% o degrees: the number of degrees to rotate the image. 8146% 8147% 8148*/ 8149WandExport MagickBooleanType MagickRotateImage(MagickWand *wand, 8150 const PixelWand *background,const double degrees) 8151{ 8152 Image 8153 *rotate_image; 8154 8155 assert(wand != (MagickWand *) NULL); 8156 assert(wand->signature == WandSignature); 8157 if (wand->debug != MagickFalse) 8158 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8159 if (wand->images == (Image *) NULL) 8160 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8161 PixelGetQuantumPacket(background,&wand->images->background_color); 8162 rotate_image=RotateImage(wand->images,degrees,wand->exception); 8163 if (rotate_image == (Image *) NULL) 8164 return(MagickFalse); 8165 ReplaceImageInList(&wand->images,rotate_image); 8166 return(MagickTrue); 8167} 8168 8169/* 8170%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8171% % 8172% % 8173% % 8174% M a g i c k S a m p l e I m a g e % 8175% % 8176% % 8177% % 8178%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8179% 8180% MagickSampleImage() scales an image to the desired dimensions with pixel 8181% sampling. Unlike other scaling methods, this method does not introduce 8182% any additional color into the scaled image. 8183% 8184% The format of the MagickSampleImage method is: 8185% 8186% MagickBooleanType MagickSampleImage(MagickWand *wand, 8187% const size_t columns,const size_t rows) 8188% 8189% A description of each parameter follows: 8190% 8191% o wand: the magick wand. 8192% 8193% o columns: the number of columns in the scaled image. 8194% 8195% o rows: the number of rows in the scaled image. 8196% 8197% 8198*/ 8199WandExport MagickBooleanType MagickSampleImage(MagickWand *wand, 8200 const size_t columns,const size_t rows) 8201{ 8202 Image 8203 *sample_image; 8204 8205 assert(wand != (MagickWand *) NULL); 8206 assert(wand->signature == WandSignature); 8207 if (wand->debug != MagickFalse) 8208 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8209 if (wand->images == (Image *) NULL) 8210 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8211 sample_image=SampleImage(wand->images,columns,rows,wand->exception); 8212 if (sample_image == (Image *) NULL) 8213 return(MagickFalse); 8214 ReplaceImageInList(&wand->images,sample_image); 8215 return(MagickTrue); 8216} 8217 8218/* 8219%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8220% % 8221% % 8222% % 8223% M a g i c k S c a l e I m a g e % 8224% % 8225% % 8226% % 8227%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8228% 8229% MagickScaleImage() scales the size of an image to the given dimensions. 8230% 8231% The format of the MagickScaleImage method is: 8232% 8233% MagickBooleanType MagickScaleImage(MagickWand *wand, 8234% const size_t columns,const size_t rows) 8235% 8236% A description of each parameter follows: 8237% 8238% o wand: the magick wand. 8239% 8240% o columns: the number of columns in the scaled image. 8241% 8242% o rows: the number of rows in the scaled image. 8243% 8244% 8245*/ 8246WandExport MagickBooleanType MagickScaleImage(MagickWand *wand, 8247 const size_t columns,const size_t rows) 8248{ 8249 Image 8250 *scale_image; 8251 8252 assert(wand != (MagickWand *) NULL); 8253 assert(wand->signature == WandSignature); 8254 if (wand->debug != MagickFalse) 8255 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8256 if (wand->images == (Image *) NULL) 8257 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8258 scale_image=ScaleImage(wand->images,columns,rows,wand->exception); 8259 if (scale_image == (Image *) NULL) 8260 return(MagickFalse); 8261 ReplaceImageInList(&wand->images,scale_image); 8262 return(MagickTrue); 8263} 8264 8265/* 8266%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8267% % 8268% % 8269% % 8270% M a g i c k S e g m e n t I m a g e % 8271% % 8272% % 8273% % 8274%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8275% 8276% MagickSegmentImage() segments an image by analyzing the histograms of the 8277% color components and identifying units that are homogeneous with the fuzzy 8278% C-means technique. 8279% 8280% The format of the SegmentImage method is: 8281% 8282% MagickBooleanType MagickSegmentImage(MagickWand *wand, 8283% const ColorspaceType colorspace,const MagickBooleanType verbose, 8284% const double cluster_threshold,const double smooth_threshold) 8285% 8286% A description of each parameter follows. 8287% 8288% o wand: the wand. 8289% 8290% o colorspace: the image colorspace. 8291% 8292% o verbose: Set to MagickTrue to print detailed information about the 8293% identified classes. 8294% 8295% o cluster_threshold: This represents the minimum number of pixels 8296% contained in a hexahedra before it can be considered valid (expressed as 8297% a percentage). 8298% 8299% o smooth_threshold: the smoothing threshold eliminates noise in the second 8300% derivative of the histogram. As the value is increased, you can expect a 8301% smoother second derivative. 8302% 8303*/ 8304MagickExport MagickBooleanType MagickSegmentImage(MagickWand *wand, 8305 const ColorspaceType colorspace,const MagickBooleanType verbose, 8306 const double cluster_threshold,const double smooth_threshold) 8307{ 8308 MagickBooleanType 8309 status; 8310 8311 assert(wand != (MagickWand *) NULL); 8312 assert(wand->signature == WandSignature); 8313 if (wand->debug != MagickFalse) 8314 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8315 if (wand->images == (Image *) NULL) 8316 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8317 status=SegmentImage(wand->images,colorspace,verbose,cluster_threshold, 8318 smooth_threshold,wand->exception); 8319 return(status); 8320} 8321 8322/* 8323%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8324% % 8325% % 8326% % 8327% M a g i c k S e l e c t i v e B l u r I m a g e % 8328% % 8329% % 8330% % 8331%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8332% 8333% MagickSelectiveBlurImage() selectively blur an image within a contrast 8334% threshold. It is similar to the unsharpen mask that sharpens everything with 8335% contrast above a certain threshold. 8336% 8337% The format of the MagickSelectiveBlurImage method is: 8338% 8339% MagickBooleanType MagickSelectiveBlurImage(MagickWand *wand, 8340% const double radius,const double sigma,const double threshold, 8341% const double bias) 8342% 8343% A description of each parameter follows: 8344% 8345% o wand: the magick wand. 8346% 8347% o radius: the radius of the gaussian, in pixels, not counting the center 8348% pixel. 8349% 8350% o sigma: the standard deviation of the gaussian, in pixels. 8351% 8352% o threshold: only pixels within this contrast threshold are included 8353% in the blur operation. 8354% 8355% o bias: the bias. 8356% 8357*/ 8358WandExport MagickBooleanType MagickSelectiveBlurImage(MagickWand *wand, 8359 const double radius,const double sigma,const double threshold, 8360 const double bias) 8361{ 8362 Image 8363 *blur_image; 8364 8365 assert(wand != (MagickWand *) NULL); 8366 assert(wand->signature == WandSignature); 8367 if (wand->debug != MagickFalse) 8368 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8369 if (wand->images == (Image *) NULL) 8370 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8371 blur_image=SelectiveBlurImage(wand->images,radius,sigma,threshold,bias, 8372 wand->exception); 8373 if (blur_image == (Image *) NULL) 8374 return(MagickFalse); 8375 ReplaceImageInList(&wand->images,blur_image); 8376 return(MagickTrue); 8377} 8378 8379/* 8380%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8381% % 8382% % 8383% % 8384% 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 % 8385% % 8386% % 8387% % 8388%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8389% 8390% MagickSeparateImage() separates a channel from the image and returns a 8391% grayscale image. A channel is a particular color component of each pixel 8392% in the image. 8393% 8394% The format of the MagickSeparateImage method is: 8395% 8396% MagickBooleanType MagickSeparateImage(MagickWand *wand) 8397% 8398% A description of each parameter follows: 8399% 8400% o wand: the magick wand. 8401% 8402*/ 8403WandExport MagickBooleanType MagickSeparateImage(MagickWand *wand) 8404{ 8405 MagickBooleanType 8406 status; 8407 8408 assert(wand != (MagickWand *) NULL); 8409 assert(wand->signature == WandSignature); 8410 if (wand->debug != MagickFalse) 8411 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8412 if (wand->images == (Image *) NULL) 8413 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8414 status=SeparateImage(wand->images); 8415 if (status == MagickFalse) 8416 InheritException(wand->exception,&wand->images->exception); 8417 return(status); 8418} 8419 8420/* 8421%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8422% % 8423% % 8424% % 8425% M a g i c k S e p i a T o n e I m a g e % 8426% % 8427% % 8428% % 8429%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8430% 8431% MagickSepiaToneImage() applies a special effect to the image, similar to the 8432% effect achieved in a photo darkroom by sepia toning. Threshold ranges from 8433% 0 to QuantumRange and is a measure of the extent of the sepia toning. A 8434% threshold of 80% is a good starting point for a reasonable tone. 8435% 8436% The format of the MagickSepiaToneImage method is: 8437% 8438% MagickBooleanType MagickSepiaToneImage(MagickWand *wand, 8439% const double threshold) 8440% 8441% A description of each parameter follows: 8442% 8443% o wand: the magick wand. 8444% 8445% o threshold: Define the extent of the sepia toning. 8446% 8447*/ 8448WandExport MagickBooleanType MagickSepiaToneImage(MagickWand *wand, 8449 const double threshold) 8450{ 8451 Image 8452 *sepia_image; 8453 8454 assert(wand != (MagickWand *) NULL); 8455 assert(wand->signature == WandSignature); 8456 if (wand->debug != MagickFalse) 8457 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8458 if (wand->images == (Image *) NULL) 8459 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8460 sepia_image=SepiaToneImage(wand->images,threshold,wand->exception); 8461 if (sepia_image == (Image *) NULL) 8462 return(MagickFalse); 8463 ReplaceImageInList(&wand->images,sepia_image); 8464 return(MagickTrue); 8465} 8466 8467/* 8468%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8469% % 8470% % 8471% % 8472% M a g i c k S e t I m a g e % 8473% % 8474% % 8475% % 8476%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8477% 8478% MagickSetImage() replaces the last image returned by MagickSetImageIndex(), 8479% MagickNextImage(), MagickPreviousImage() with the images from the specified 8480% wand. 8481% 8482% The format of the MagickSetImage method is: 8483% 8484% MagickBooleanType MagickSetImage(MagickWand *wand, 8485% const MagickWand *set_wand) 8486% 8487% A description of each parameter follows: 8488% 8489% o wand: the magick wand. 8490% 8491% o set_wand: the set_wand wand. 8492% 8493*/ 8494WandExport MagickBooleanType MagickSetImage(MagickWand *wand, 8495 const MagickWand *set_wand) 8496{ 8497 Image 8498 *images; 8499 8500 assert(wand != (MagickWand *) NULL); 8501 assert(wand->signature == WandSignature); 8502 if (wand->debug != MagickFalse) 8503 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8504 assert(set_wand != (MagickWand *) NULL); 8505 assert(set_wand->signature == WandSignature); 8506 if (wand->debug != MagickFalse) 8507 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",set_wand->name); 8508 if (set_wand->images == (Image *) NULL) 8509 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8510 images=CloneImageList(set_wand->images,wand->exception); 8511 if (images == (Image *) NULL) 8512 return(MagickFalse); 8513 ReplaceImageInList(&wand->images,images); 8514 return(MagickTrue); 8515} 8516 8517/* 8518%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8519% % 8520% % 8521% % 8522% 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 % 8523% % 8524% % 8525% % 8526%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8527% 8528% MagickSetImageAlphaChannel() activates, deactivates, resets, or sets the 8529% alpha channel. 8530% 8531% The format of the MagickSetImageAlphaChannel method is: 8532% 8533% MagickBooleanType MagickSetImageAlphaChannel(MagickWand *wand, 8534% const AlphaChannelType alpha_type) 8535% 8536% A description of each parameter follows: 8537% 8538% o wand: the magick wand. 8539% 8540% o alpha_type: the alpha channel type: ActivateAlphaChannel, 8541% DeactivateAlphaChannel, OpaqueAlphaChannel, or SetAlphaChannel. 8542% 8543*/ 8544WandExport MagickBooleanType MagickSetImageAlphaChannel(MagickWand *wand, 8545 const AlphaChannelType alpha_type) 8546{ 8547 assert(wand != (MagickWand *) NULL); 8548 assert(wand->signature == WandSignature); 8549 if (wand->debug != MagickFalse) 8550 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8551 if (wand->images == (Image *) NULL) 8552 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8553 return(SetImageAlphaChannel(wand->images,alpha_type,&wand->images->exception)); 8554} 8555 8556/* 8557%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8558% % 8559% % 8560% % 8561% 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 % 8562% % 8563% % 8564% % 8565%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8566% 8567% MagickSetImageBackgroundColor() sets the image background color. 8568% 8569% The format of the MagickSetImageBackgroundColor method is: 8570% 8571% MagickBooleanType MagickSetImageBackgroundColor(MagickWand *wand, 8572% const PixelWand *background) 8573% 8574% A description of each parameter follows: 8575% 8576% o wand: the magick wand. 8577% 8578% o background: the background pixel wand. 8579% 8580*/ 8581WandExport MagickBooleanType MagickSetImageBackgroundColor(MagickWand *wand, 8582 const PixelWand *background) 8583{ 8584 assert(wand != (MagickWand *) NULL); 8585 assert(wand->signature == WandSignature); 8586 if (wand->debug != MagickFalse) 8587 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8588 if (wand->images == (Image *) NULL) 8589 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8590 PixelGetQuantumPacket(background,&wand->images->background_color); 8591 return(MagickTrue); 8592} 8593 8594/* 8595%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8596% % 8597% % 8598% % 8599% M a g i c k S e t I m a g e B i a s % 8600% % 8601% % 8602% % 8603%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8604% 8605% MagickSetImageBias() sets the image bias for any method that convolves an 8606% image (e.g. MagickConvolveImage()). 8607% 8608% The format of the MagickSetImageBias method is: 8609% 8610% MagickBooleanType MagickSetImageBias(MagickWand *wand, 8611% const double bias) 8612% 8613% A description of each parameter follows: 8614% 8615% o wand: the magick wand. 8616% 8617% o bias: the image bias. 8618% 8619*/ 8620WandExport MagickBooleanType MagickSetImageBias(MagickWand *wand, 8621 const double bias) 8622{ 8623 assert(wand != (MagickWand *) NULL); 8624 assert(wand->signature == WandSignature); 8625 if (wand->debug != MagickFalse) 8626 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8627 if (wand->images == (Image *) NULL) 8628 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8629 wand->images->bias=bias; 8630 return(MagickTrue); 8631} 8632 8633/* 8634%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8635% % 8636% % 8637% % 8638% 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 % 8639% % 8640% % 8641% % 8642%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8643% 8644% MagickSetImageBluePrimary() sets the image chromaticity blue primary point. 8645% 8646% The format of the MagickSetImageBluePrimary method is: 8647% 8648% MagickBooleanType MagickSetImageBluePrimary(MagickWand *wand, 8649% const double x,const double y) 8650% 8651% A description of each parameter follows: 8652% 8653% o wand: the magick wand. 8654% 8655% o x: the blue primary x-point. 8656% 8657% o y: the blue primary y-point. 8658% 8659*/ 8660WandExport MagickBooleanType MagickSetImageBluePrimary(MagickWand *wand, 8661 const double x,const double y) 8662{ 8663 assert(wand != (MagickWand *) NULL); 8664 assert(wand->signature == WandSignature); 8665 if (wand->debug != MagickFalse) 8666 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8667 if (wand->images == (Image *) NULL) 8668 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8669 wand->images->chromaticity.blue_primary.x=x; 8670 wand->images->chromaticity.blue_primary.y=y; 8671 return(MagickTrue); 8672} 8673 8674/* 8675%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8676% % 8677% % 8678% % 8679% 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 % 8680% % 8681% % 8682% % 8683%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8684% 8685% MagickSetImageBorderColor() sets the image border color. 8686% 8687% The format of the MagickSetImageBorderColor method is: 8688% 8689% MagickBooleanType MagickSetImageBorderColor(MagickWand *wand, 8690% const PixelWand *border) 8691% 8692% A description of each parameter follows: 8693% 8694% o wand: the magick wand. 8695% 8696% o border: the border pixel wand. 8697% 8698*/ 8699WandExport MagickBooleanType MagickSetImageBorderColor(MagickWand *wand, 8700 const PixelWand *border) 8701{ 8702 assert(wand != (MagickWand *) NULL); 8703 assert(wand->signature == WandSignature); 8704 if (wand->debug != MagickFalse) 8705 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8706 if (wand->images == (Image *) NULL) 8707 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8708 PixelGetQuantumPacket(border,&wand->images->border_color); 8709 return(MagickTrue); 8710} 8711 8712/* 8713%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8714% % 8715% % 8716% % 8717% M a g i c k S e t I m a g e C l i p M a s k % 8718% % 8719% % 8720% % 8721%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8722% 8723% MagickSetImageClipMask() sets image clip mask. 8724% 8725% The format of the MagickSetImageClipMask method is: 8726% 8727% MagickBooleanType MagickSetImageClipMask(MagickWand *wand, 8728% const MagickWand *clip_mask) 8729% 8730% A description of each parameter follows: 8731% 8732% o wand: the magick wand. 8733% 8734% o clip_mask: the clip_mask wand. 8735% 8736*/ 8737WandExport MagickBooleanType MagickSetImageClipMask(MagickWand *wand, 8738 const MagickWand *clip_mask) 8739{ 8740 assert(wand != (MagickWand *) NULL); 8741 assert(wand->signature == WandSignature); 8742 if (wand->debug != MagickFalse) 8743 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8744 assert(clip_mask != (MagickWand *) NULL); 8745 assert(clip_mask->signature == WandSignature); 8746 if (wand->debug != MagickFalse) 8747 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",clip_mask->name); 8748 if (clip_mask->images == (Image *) NULL) 8749 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8750 return(SetImageClipMask(wand->images,clip_mask->images,wand->exception)); 8751} 8752 8753/* 8754%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8755% % 8756% % 8757% % 8758% M a g i c k S e t I m a g e C o l o r % 8759% % 8760% % 8761% % 8762%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8763% 8764% MagickSetImageColor() set the entire wand canvas to the specified color. 8765% 8766% The format of the MagickSetImageColor method is: 8767% 8768% MagickBooleanType MagickSetImageColor(MagickWand *wand, 8769% const PixelWand *color) 8770% 8771% A description of each parameter follows: 8772% 8773% o wand: the magick wand. 8774% 8775% o background: the image color. 8776% 8777*/ 8778WandExport MagickBooleanType MagickSetImageColor(MagickWand *wand, 8779 const PixelWand *color) 8780{ 8781 MagickBooleanType 8782 status; 8783 8784 PixelInfo 8785 pixel; 8786 8787 assert(wand != (MagickWand *) NULL); 8788 assert(wand->signature == WandSignature); 8789 if (wand->debug != MagickFalse) 8790 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8791 PixelGetMagickColor(color,&pixel); 8792 status=SetImageColor(wand->images,&pixel); 8793 if (status == MagickFalse) 8794 InheritException(wand->exception,&wand->images->exception); 8795 return(status); 8796} 8797 8798/* 8799%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8800% % 8801% % 8802% % 8803% 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 % 8804% % 8805% % 8806% % 8807%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8808% 8809% MagickSetImageColormapColor() sets the color of the specified colormap 8810% index. 8811% 8812% The format of the MagickSetImageColormapColor method is: 8813% 8814% MagickBooleanType MagickSetImageColormapColor(MagickWand *wand, 8815% const size_t index,const PixelWand *color) 8816% 8817% A description of each parameter follows: 8818% 8819% o wand: the magick wand. 8820% 8821% o index: the offset into the image colormap. 8822% 8823% o color: Return the colormap color in this wand. 8824% 8825*/ 8826WandExport MagickBooleanType MagickSetImageColormapColor(MagickWand *wand, 8827 const size_t index,const PixelWand *color) 8828{ 8829 assert(wand != (MagickWand *) NULL); 8830 assert(wand->signature == WandSignature); 8831 if (wand->debug != MagickFalse) 8832 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8833 if (wand->images == (Image *) NULL) 8834 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8835 if ((wand->images->colormap == (PixelPacket *) NULL) || 8836 (index >= wand->images->colors)) 8837 ThrowWandException(WandError,"InvalidColormapIndex",wand->name); 8838 PixelGetQuantumPacket(color,wand->images->colormap+index); 8839 return(SyncImage(wand->images)); 8840} 8841 8842/* 8843%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8844% % 8845% % 8846% % 8847% M a g i c k S e t I m a g e C o l o r s p a c e % 8848% % 8849% % 8850% % 8851%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8852% 8853% MagickSetImageColorspace() sets the image colorspace. 8854% 8855% The format of the MagickSetImageColorspace method is: 8856% 8857% MagickBooleanType MagickSetImageColorspace(MagickWand *wand, 8858% const ColorspaceType colorspace) 8859% 8860% A description of each parameter follows: 8861% 8862% o wand: the magick wand. 8863% 8864% o colorspace: the image colorspace: UndefinedColorspace, RGBColorspace, 8865% GRAYColorspace, TransparentColorspace, OHTAColorspace, XYZColorspace, 8866% YCbCrColorspace, YCCColorspace, YIQColorspace, YPbPrColorspace, 8867% YPbPrColorspace, YUVColorspace, CMYKColorspace, sRGBColorspace, 8868% HSLColorspace, or HWBColorspace. 8869% 8870*/ 8871WandExport MagickBooleanType MagickSetImageColorspace(MagickWand *wand, 8872 const ColorspaceType colorspace) 8873{ 8874 assert(wand != (MagickWand *) NULL); 8875 assert(wand->signature == WandSignature); 8876 if (wand->debug != MagickFalse) 8877 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8878 if (wand->images == (Image *) NULL) 8879 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8880 return(SetImageColorspace(wand->images,colorspace,&wand->images->exception)); 8881} 8882 8883/* 8884%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8885% % 8886% % 8887% % 8888% M a g i c k S e t I m a g e C o m p o s e % 8889% % 8890% % 8891% % 8892%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8893% 8894% MagickSetImageCompose() sets the image composite operator, useful for 8895% specifying how to composite the image thumbnail when using the 8896% MagickMontageImage() method. 8897% 8898% The format of the MagickSetImageCompose method is: 8899% 8900% MagickBooleanType MagickSetImageCompose(MagickWand *wand, 8901% const CompositeOperator compose) 8902% 8903% A description of each parameter follows: 8904% 8905% o wand: the magick wand. 8906% 8907% o compose: the image composite operator. 8908% 8909*/ 8910WandExport MagickBooleanType MagickSetImageCompose(MagickWand *wand, 8911 const CompositeOperator compose) 8912{ 8913 assert(wand != (MagickWand *) NULL); 8914 assert(wand->signature == WandSignature); 8915 if (wand->debug != MagickFalse) 8916 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8917 if (wand->images == (Image *) NULL) 8918 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8919 wand->images->compose=compose; 8920 return(MagickTrue); 8921} 8922 8923/* 8924%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8925% % 8926% % 8927% % 8928% 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 % 8929% % 8930% % 8931% % 8932%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8933% 8934% MagickSetImageCompression() sets the image compression. 8935% 8936% The format of the MagickSetImageCompression method is: 8937% 8938% MagickBooleanType MagickSetImageCompression(MagickWand *wand, 8939% const CompressionType compression) 8940% 8941% A description of each parameter follows: 8942% 8943% o wand: the magick wand. 8944% 8945% o compression: the image compression type. 8946% 8947*/ 8948WandExport MagickBooleanType MagickSetImageCompression(MagickWand *wand, 8949 const CompressionType compression) 8950{ 8951 assert(wand != (MagickWand *) NULL); 8952 assert(wand->signature == WandSignature); 8953 if (wand->debug != MagickFalse) 8954 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8955 if (wand->images == (Image *) NULL) 8956 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8957 wand->images->compression=compression; 8958 return(MagickTrue); 8959} 8960 8961/* 8962%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8963% % 8964% % 8965% % 8966% 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 % 8967% % 8968% % 8969% % 8970%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8971% 8972% MagickSetImageCompressionQuality() sets the image compression quality. 8973% 8974% The format of the MagickSetImageCompressionQuality method is: 8975% 8976% MagickBooleanType MagickSetImageCompressionQuality(MagickWand *wand, 8977% const size_t quality) 8978% 8979% A description of each parameter follows: 8980% 8981% o wand: the magick wand. 8982% 8983% o quality: the image compression tlityype. 8984% 8985*/ 8986WandExport MagickBooleanType MagickSetImageCompressionQuality(MagickWand *wand, 8987 const size_t quality) 8988{ 8989 assert(wand != (MagickWand *) NULL); 8990 assert(wand->signature == WandSignature); 8991 if (wand->debug != MagickFalse) 8992 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8993 if (wand->images == (Image *) NULL) 8994 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8995 wand->images->quality=quality; 8996 return(MagickTrue); 8997} 8998 8999/* 9000%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9001% % 9002% % 9003% % 9004% M a g i c k S e t I m a g e D e l a y % 9005% % 9006% % 9007% % 9008%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9009% 9010% MagickSetImageDelay() sets the image delay. 9011% 9012% The format of the MagickSetImageDelay method is: 9013% 9014% MagickBooleanType MagickSetImageDelay(MagickWand *wand, 9015% const size_t delay) 9016% 9017% A description of each parameter follows: 9018% 9019% o wand: the magick wand. 9020% 9021% o delay: the image delay in ticks-per-second units. 9022% 9023*/ 9024WandExport MagickBooleanType MagickSetImageDelay(MagickWand *wand, 9025 const size_t delay) 9026{ 9027 assert(wand != (MagickWand *) NULL); 9028 assert(wand->signature == WandSignature); 9029 if (wand->debug != MagickFalse) 9030 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9031 if (wand->images == (Image *) NULL) 9032 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9033 wand->images->delay=delay; 9034 return(MagickTrue); 9035} 9036 9037/* 9038%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9039% % 9040% % 9041% % 9042% M a g i c k S e t I m a g e D e p t h % 9043% % 9044% % 9045% % 9046%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9047% 9048% MagickSetImageDepth() sets the image depth. 9049% 9050% The format of the MagickSetImageDepth method is: 9051% 9052% MagickBooleanType MagickSetImageDepth(MagickWand *wand, 9053% const size_t depth) 9054% 9055% A description of each parameter follows: 9056% 9057% o wand: the magick wand. 9058% 9059% o depth: the image depth in bits: 8, 16, or 32. 9060% 9061*/ 9062WandExport MagickBooleanType MagickSetImageDepth(MagickWand *wand, 9063 const size_t depth) 9064{ 9065 assert(wand != (MagickWand *) NULL); 9066 assert(wand->signature == WandSignature); 9067 if (wand->debug != MagickFalse) 9068 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9069 if (wand->images == (Image *) NULL) 9070 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9071 return(SetImageDepth(wand->images,depth)); 9072} 9073 9074/* 9075%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9076% % 9077% % 9078% % 9079% M a g i c k S e t I m a g e D i s p o s e % 9080% % 9081% % 9082% % 9083%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9084% 9085% MagickSetImageDispose() sets the image disposal method. 9086% 9087% The format of the MagickSetImageDispose method is: 9088% 9089% MagickBooleanType MagickSetImageDispose(MagickWand *wand, 9090% const DisposeType dispose) 9091% 9092% A description of each parameter follows: 9093% 9094% o wand: the magick wand. 9095% 9096% o dispose: the image disposeal type. 9097% 9098*/ 9099WandExport MagickBooleanType MagickSetImageDispose(MagickWand *wand, 9100 const DisposeType dispose) 9101{ 9102 assert(wand != (MagickWand *) NULL); 9103 assert(wand->signature == WandSignature); 9104 if (wand->debug != MagickFalse) 9105 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9106 if (wand->images == (Image *) NULL) 9107 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9108 wand->images->dispose=dispose; 9109 return(MagickTrue); 9110} 9111 9112/* 9113%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9114% % 9115% % 9116% % 9117% M a g i c k S e t I m a g e E x t e n t % 9118% % 9119% % 9120% % 9121%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9122% 9123% MagickSetImageExtent() sets the image size (i.e. columns & rows). 9124% 9125% The format of the MagickSetImageExtent method is: 9126% 9127% MagickBooleanType MagickSetImageExtent(MagickWand *wand, 9128% const size_t columns,const unsigned rows) 9129% 9130% A description of each parameter follows: 9131% 9132% o wand: the magick wand. 9133% 9134% o columns: The image width in pixels. 9135% 9136% o rows: The image height in pixels. 9137% 9138*/ 9139WandExport MagickBooleanType MagickSetImageExtent(MagickWand *wand, 9140 const size_t columns,const size_t rows) 9141{ 9142 assert(wand != (MagickWand *) NULL); 9143 assert(wand->signature == WandSignature); 9144 if (wand->debug != MagickFalse) 9145 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9146 if (wand->images == (Image *) NULL) 9147 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9148 return(SetImageExtent(wand->images,columns,rows,&wand->images->exception)); 9149} 9150 9151/* 9152%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9153% % 9154% % 9155% % 9156% M a g i c k S e t I m a g e F i l e n a m e % 9157% % 9158% % 9159% % 9160%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9161% 9162% MagickSetImageFilename() sets the filename of a particular image in a 9163% sequence. 9164% 9165% The format of the MagickSetImageFilename method is: 9166% 9167% MagickBooleanType MagickSetImageFilename(MagickWand *wand, 9168% const char *filename) 9169% 9170% A description of each parameter follows: 9171% 9172% o wand: the magick wand. 9173% 9174% o filename: the image filename. 9175% 9176*/ 9177WandExport MagickBooleanType MagickSetImageFilename(MagickWand *wand, 9178 const char *filename) 9179{ 9180 assert(wand != (MagickWand *) NULL); 9181 assert(wand->signature == WandSignature); 9182 if (wand->debug != MagickFalse) 9183 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9184 if (wand->images == (Image *) NULL) 9185 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9186 if (filename != (const char *) NULL) 9187 (void) CopyMagickString(wand->images->filename,filename,MaxTextExtent); 9188 return(MagickTrue); 9189} 9190 9191/* 9192%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9193% % 9194% % 9195% % 9196% M a g i c k S e t I m a g e F o r m a t % 9197% % 9198% % 9199% % 9200%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9201% 9202% MagickSetImageFormat() sets the format of a particular image in a 9203% sequence. 9204% 9205% The format of the MagickSetImageFormat method is: 9206% 9207% MagickBooleanType MagickSetImageFormat(MagickWand *wand, 9208% const char *format) 9209% 9210% A description of each parameter follows: 9211% 9212% o wand: the magick wand. 9213% 9214% o format: the image format. 9215% 9216*/ 9217WandExport MagickBooleanType MagickSetImageFormat(MagickWand *wand, 9218 const char *format) 9219{ 9220 const MagickInfo 9221 *magick_info; 9222 9223 assert(wand != (MagickWand *) NULL); 9224 assert(wand->signature == WandSignature); 9225 if (wand->debug != MagickFalse) 9226 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9227 if (wand->images == (Image *) NULL) 9228 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9229 if ((format == (char *) NULL) || (*format == '\0')) 9230 { 9231 *wand->images->magick='\0'; 9232 return(MagickTrue); 9233 } 9234 magick_info=GetMagickInfo(format,wand->exception); 9235 if (magick_info == (const MagickInfo *) NULL) 9236 return(MagickFalse); 9237 ClearMagickException(wand->exception); 9238 (void) CopyMagickString(wand->images->magick,format,MaxTextExtent); 9239 return(MagickTrue); 9240} 9241 9242/* 9243%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9244% % 9245% % 9246% % 9247% M a g i c k S e t I m a g e F u z z % 9248% % 9249% % 9250% % 9251%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9252% 9253% MagickSetImageFuzz() sets the image fuzz. 9254% 9255% The format of the MagickSetImageFuzz method is: 9256% 9257% MagickBooleanType MagickSetImageFuzz(MagickWand *wand, 9258% const double fuzz) 9259% 9260% A description of each parameter follows: 9261% 9262% o wand: the magick wand. 9263% 9264% o fuzz: the image fuzz. 9265% 9266*/ 9267WandExport MagickBooleanType MagickSetImageFuzz(MagickWand *wand, 9268 const double fuzz) 9269{ 9270 assert(wand != (MagickWand *) NULL); 9271 assert(wand->signature == WandSignature); 9272 if (wand->debug != MagickFalse) 9273 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9274 if (wand->images == (Image *) NULL) 9275 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9276 wand->images->fuzz=fuzz; 9277 return(MagickTrue); 9278} 9279 9280/* 9281%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9282% % 9283% % 9284% % 9285% M a g i c k S e t I m a g e G a m m a % 9286% % 9287% % 9288% % 9289%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9290% 9291% MagickSetImageGamma() sets the image gamma. 9292% 9293% The format of the MagickSetImageGamma method is: 9294% 9295% MagickBooleanType MagickSetImageGamma(MagickWand *wand, 9296% const double gamma) 9297% 9298% A description of each parameter follows: 9299% 9300% o wand: the magick wand. 9301% 9302% o gamma: the image gamma. 9303% 9304*/ 9305WandExport MagickBooleanType MagickSetImageGamma(MagickWand *wand, 9306 const double gamma) 9307{ 9308 assert(wand != (MagickWand *) NULL); 9309 assert(wand->signature == WandSignature); 9310 if (wand->debug != MagickFalse) 9311 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9312 if (wand->images == (Image *) NULL) 9313 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9314 wand->images->gamma=gamma; 9315 return(MagickTrue); 9316} 9317 9318/* 9319%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9320% % 9321% % 9322% % 9323% M a g i c k S e t I m a g e G r a v i t y % 9324% % 9325% % 9326% % 9327%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9328% 9329% MagickSetImageGravity() sets the image gravity type. 9330% 9331% The format of the MagickSetImageGravity method is: 9332% 9333% MagickBooleanType MagickSetImageGravity(MagickWand *wand, 9334% const GravityType gravity) 9335% 9336% A description of each parameter follows: 9337% 9338% o wand: the magick wand. 9339% 9340% o gravity: the image interlace scheme: NoInterlace, LineInterlace, 9341% PlaneInterlace, PartitionInterlace. 9342% 9343*/ 9344WandExport MagickBooleanType MagickSetImageGravity(MagickWand *wand, 9345 const GravityType gravity) 9346{ 9347 assert(wand != (MagickWand *) NULL); 9348 assert(wand->signature == WandSignature); 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 wand->images->gravity=gravity; 9354 return(MagickTrue); 9355} 9356 9357/* 9358%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9359% % 9360% % 9361% % 9362% 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 % 9363% % 9364% % 9365% % 9366%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9367% 9368% MagickSetImageGreenPrimary() sets the image chromaticity green primary 9369% point. 9370% 9371% The format of the MagickSetImageGreenPrimary method is: 9372% 9373% MagickBooleanType MagickSetImageGreenPrimary(MagickWand *wand, 9374% const double x,const double y) 9375% 9376% A description of each parameter follows: 9377% 9378% o wand: the magick wand. 9379% 9380% o x: the green primary x-point. 9381% 9382% o y: the green primary y-point. 9383% 9384% 9385*/ 9386WandExport MagickBooleanType MagickSetImageGreenPrimary(MagickWand *wand, 9387 const double x,const double y) 9388{ 9389 assert(wand != (MagickWand *) NULL); 9390 assert(wand->signature == WandSignature); 9391 if (wand->debug != MagickFalse) 9392 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9393 if (wand->images == (Image *) NULL) 9394 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9395 wand->images->chromaticity.green_primary.x=x; 9396 wand->images->chromaticity.green_primary.y=y; 9397 return(MagickTrue); 9398} 9399 9400/* 9401%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9402% % 9403% % 9404% % 9405% 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 % 9406% % 9407% % 9408% % 9409%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9410% 9411% MagickSetImageInterlaceScheme() sets the image interlace scheme. 9412% 9413% The format of the MagickSetImageInterlaceScheme method is: 9414% 9415% MagickBooleanType MagickSetImageInterlaceScheme(MagickWand *wand, 9416% const InterlaceType interlace) 9417% 9418% A description of each parameter follows: 9419% 9420% o wand: the magick wand. 9421% 9422% o interlace: the image interlace scheme: NoInterlace, LineInterlace, 9423% PlaneInterlace, PartitionInterlace. 9424% 9425*/ 9426WandExport MagickBooleanType MagickSetImageInterlaceScheme(MagickWand *wand, 9427 const InterlaceType interlace) 9428{ 9429 assert(wand != (MagickWand *) NULL); 9430 assert(wand->signature == WandSignature); 9431 if (wand->debug != MagickFalse) 9432 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9433 if (wand->images == (Image *) NULL) 9434 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9435 wand->images->interlace=interlace; 9436 return(MagickTrue); 9437} 9438 9439/* 9440%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9441% % 9442% % 9443% % 9444% 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 % 9445% % 9446% % 9447% % 9448%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9449% 9450% MagickSetImagePixelInterpolateMethod() sets the image interpolate pixel method. 9451% 9452% The format of the MagickSetImagePixelInterpolateMethod method is: 9453% 9454% MagickBooleanType MagickSetImagePixelInterpolateMethod(MagickWand *wand, 9455% const PixelInterpolateMethod method) 9456% 9457% A description of each parameter follows: 9458% 9459% o wand: the magick wand. 9460% 9461% o method: the image interpole pixel methods: choose from Undefined, 9462% Average, Bicubic, Bilinear, Filter, Integer, Mesh, NearestNeighbor. 9463% 9464*/ 9465WandExport MagickBooleanType MagickSetImagePixelInterpolateMethod(MagickWand *wand, 9466 const PixelInterpolateMethod method) 9467{ 9468 assert(wand != (MagickWand *) NULL); 9469 assert(wand->signature == WandSignature); 9470 if (wand->debug != MagickFalse) 9471 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9472 if (wand->images == (Image *) NULL) 9473 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9474 wand->images->interpolate=method; 9475 return(MagickTrue); 9476} 9477 9478/* 9479%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9480% % 9481% % 9482% % 9483% M a g i c k S e t I m a g e I t e r a t i o n s % 9484% % 9485% % 9486% % 9487%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9488% 9489% MagickSetImageIterations() sets the image iterations. 9490% 9491% The format of the MagickSetImageIterations method is: 9492% 9493% MagickBooleanType MagickSetImageIterations(MagickWand *wand, 9494% const size_t iterations) 9495% 9496% A description of each parameter follows: 9497% 9498% o wand: the magick wand. 9499% 9500% o delay: the image delay in 1/100th of a second. 9501% 9502*/ 9503WandExport MagickBooleanType MagickSetImageIterations(MagickWand *wand, 9504 const size_t iterations) 9505{ 9506 assert(wand != (MagickWand *) NULL); 9507 assert(wand->signature == WandSignature); 9508 if (wand->debug != MagickFalse) 9509 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9510 if (wand->images == (Image *) NULL) 9511 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9512 wand->images->iterations=iterations; 9513 return(MagickTrue); 9514} 9515 9516/* 9517%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9518% % 9519% % 9520% % 9521% M a g i c k S e t I m a g e M a t t e % 9522% % 9523% % 9524% % 9525%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9526% 9527% MagickSetImageMatte() sets the image matte channel. 9528% 9529% The format of the MagickSetImageMatteColor method is: 9530% 9531% MagickBooleanType MagickSetImageMatteColor(MagickWand *wand, 9532% const MagickBooleanType *matte) 9533% 9534% A description of each parameter follows: 9535% 9536% o wand: the magick wand. 9537% 9538% o matte: Set to MagickTrue to enable the image matte channel otherwise 9539% MagickFalse. 9540% 9541*/ 9542WandExport MagickBooleanType MagickSetImageMatte(MagickWand *wand, 9543 const MagickBooleanType matte) 9544{ 9545 assert(wand != (MagickWand *) NULL); 9546 assert(wand->signature == WandSignature); 9547 if (wand->debug != MagickFalse) 9548 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9549 if (wand->images == (Image *) NULL) 9550 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9551 if ((wand->images->matte == MagickFalse) && (matte != MagickFalse)) 9552 (void) SetImageOpacity(wand->images,OpaqueAlpha); 9553 wand->images->matte=matte; 9554 return(MagickTrue); 9555} 9556 9557/* 9558%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9559% % 9560% % 9561% % 9562% M a g i c k S e t I m a g e M a t t e C o l o r % 9563% % 9564% % 9565% % 9566%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9567% 9568% MagickSetImageMatteColor() sets the image matte color. 9569% 9570% The format of the MagickSetImageMatteColor method is: 9571% 9572% MagickBooleanType MagickSetImageMatteColor(MagickWand *wand, 9573% const PixelWand *matte) 9574% 9575% A description of each parameter follows: 9576% 9577% o wand: the magick wand. 9578% 9579% o matte: the matte pixel wand. 9580% 9581*/ 9582WandExport MagickBooleanType MagickSetImageMatteColor(MagickWand *wand, 9583 const PixelWand *matte) 9584{ 9585 assert(wand != (MagickWand *) NULL); 9586 assert(wand->signature == WandSignature); 9587 if (wand->debug != MagickFalse) 9588 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9589 if (wand->images == (Image *) NULL) 9590 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9591 PixelGetQuantumPacket(matte,&wand->images->matte_color); 9592 return(MagickTrue); 9593} 9594 9595/* 9596%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9597% % 9598% % 9599% % 9600% M a g i c k S e t I m a g e O p a c i t y % 9601% % 9602% % 9603% % 9604%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9605% 9606% MagickSetImageOpacity() sets the image to the specified opacity level. 9607% 9608% The format of the MagickSetImageOpacity method is: 9609% 9610% MagickBooleanType MagickSetImageOpacity(MagickWand *wand, 9611% const double alpha) 9612% 9613% A description of each parameter follows: 9614% 9615% o wand: the magick wand. 9616% 9617% o alpha: the level of transparency: 1.0 is fully opaque and 0.0 is fully 9618% transparent. 9619% 9620*/ 9621WandExport MagickBooleanType MagickSetImageOpacity(MagickWand *wand, 9622 const double alpha) 9623{ 9624 MagickBooleanType 9625 status; 9626 9627 assert(wand != (MagickWand *) NULL); 9628 assert(wand->signature == WandSignature); 9629 if (wand->debug != MagickFalse) 9630 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9631 if (wand->images == (Image *) NULL) 9632 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9633 status=SetImageOpacity(wand->images,ClampToQuantum(QuantumRange*alpha)); 9634 if (status == MagickFalse) 9635 InheritException(wand->exception,&wand->images->exception); 9636 return(status); 9637} 9638 9639/* 9640%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9641% % 9642% % 9643% % 9644% M a g i c k S e t I m a g e O r i e n t a t i o n % 9645% % 9646% % 9647% % 9648%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9649% 9650% MagickSetImageOrientation() sets the image orientation. 9651% 9652% The format of the MagickSetImageOrientation method is: 9653% 9654% MagickBooleanType MagickSetImageOrientation(MagickWand *wand, 9655% const OrientationType orientation) 9656% 9657% A description of each parameter follows: 9658% 9659% o wand: the magick wand. 9660% 9661% o orientation: the image orientation type. 9662% 9663*/ 9664WandExport MagickBooleanType MagickSetImageOrientation(MagickWand *wand, 9665 const OrientationType orientation) 9666{ 9667 assert(wand != (MagickWand *) NULL); 9668 assert(wand->signature == WandSignature); 9669 if (wand->debug != MagickFalse) 9670 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9671 if (wand->images == (Image *) NULL) 9672 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9673 wand->images->orientation=orientation; 9674 return(MagickTrue); 9675} 9676 9677/* 9678%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9679% % 9680% % 9681% % 9682% M a g i c k S e t I m a g e P a g e % 9683% % 9684% % 9685% % 9686%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9687% 9688% MagickSetImagePage() sets the page geometry of the image. 9689% 9690% The format of the MagickSetImagePage method is: 9691% 9692% MagickBooleanType MagickSetImagePage(MagickWand *wand, 9693% const size_t width,const size_t height,const ssize_t x, 9694% const ssize_t y) 9695% 9696% A description of each parameter follows: 9697% 9698% o wand: the magick wand. 9699% 9700% o width: the page width. 9701% 9702% o height: the page height. 9703% 9704% o x: the page x-offset. 9705% 9706% o y: the page y-offset. 9707% 9708*/ 9709WandExport MagickBooleanType MagickSetImagePage(MagickWand *wand, 9710 const size_t width,const size_t height,const ssize_t x, 9711 const ssize_t y) 9712{ 9713 assert(wand != (MagickWand *) NULL); 9714 assert(wand->signature == WandSignature); 9715 if (wand->debug != MagickFalse) 9716 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9717 if (wand->images == (Image *) NULL) 9718 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9719 wand->images->page.width=width; 9720 wand->images->page.height=height; 9721 wand->images->page.x=x; 9722 wand->images->page.y=y; 9723 return(MagickTrue); 9724} 9725 9726/* 9727%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9728% % 9729% % 9730% % 9731% M a g i c k S e t I m a g e P r o g r e s s M o n i t o r % 9732% % 9733% % 9734% % 9735%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9736% 9737% MagickSetImageProgressMonitor() sets the wand image progress monitor to the 9738% specified method and returns the previous progress monitor if any. The 9739% progress monitor method looks like this: 9740% 9741% MagickBooleanType MagickProgressMonitor(const char *text, 9742% const MagickOffsetType offset,const MagickSizeType span, 9743% void *client_data) 9744% 9745% If the progress monitor returns MagickFalse, the current operation is 9746% interrupted. 9747% 9748% The format of the MagickSetImageProgressMonitor method is: 9749% 9750% MagickProgressMonitor MagickSetImageProgressMonitor(MagickWand *wand 9751% const MagickProgressMonitor progress_monitor,void *client_data) 9752% 9753% A description of each parameter follows: 9754% 9755% o wand: the magick wand. 9756% 9757% o progress_monitor: Specifies a pointer to a method to monitor progress 9758% of an image operation. 9759% 9760% o client_data: Specifies a pointer to any client data. 9761% 9762*/ 9763WandExport MagickProgressMonitor MagickSetImageProgressMonitor(MagickWand *wand, 9764 const MagickProgressMonitor progress_monitor,void *client_data) 9765{ 9766 MagickProgressMonitor 9767 previous_monitor; 9768 9769 assert(wand != (MagickWand *) NULL); 9770 assert(wand->signature == WandSignature); 9771 if (wand->debug != MagickFalse) 9772 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9773 if (wand->images == (Image *) NULL) 9774 { 9775 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 9776 "ContainsNoImages","`%s'",wand->name); 9777 return((MagickProgressMonitor) NULL); 9778 } 9779 previous_monitor=SetImageProgressMonitor(wand->images, 9780 progress_monitor,client_data); 9781 return(previous_monitor); 9782} 9783 9784/* 9785%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9786% % 9787% % 9788% % 9789% M a g i c k S e t I m a g e R e d P r i m a r y % 9790% % 9791% % 9792% % 9793%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9794% 9795% MagickSetImageRedPrimary() sets the image chromaticity red primary point. 9796% 9797% The format of the MagickSetImageRedPrimary method is: 9798% 9799% MagickBooleanType MagickSetImageRedPrimary(MagickWand *wand, 9800% const double x,const double y) 9801% 9802% A description of each parameter follows: 9803% 9804% o wand: the magick wand. 9805% 9806% o x: the red primary x-point. 9807% 9808% o y: the red primary y-point. 9809% 9810*/ 9811WandExport MagickBooleanType MagickSetImageRedPrimary(MagickWand *wand, 9812 const double x,const double y) 9813{ 9814 assert(wand != (MagickWand *) NULL); 9815 assert(wand->signature == WandSignature); 9816 if (wand->debug != MagickFalse) 9817 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9818 if (wand->images == (Image *) NULL) 9819 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9820 wand->images->chromaticity.red_primary.x=x; 9821 wand->images->chromaticity.red_primary.y=y; 9822 return(MagickTrue); 9823} 9824 9825/* 9826%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9827% % 9828% % 9829% % 9830% M a g i c k S e t I m a g e R e n d e r i n g I n t e n t % 9831% % 9832% % 9833% % 9834%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9835% 9836% MagickSetImageRenderingIntent() sets the image rendering intent. 9837% 9838% The format of the MagickSetImageRenderingIntent method is: 9839% 9840% MagickBooleanType MagickSetImageRenderingIntent(MagickWand *wand, 9841% const RenderingIntent rendering_intent) 9842% 9843% A description of each parameter follows: 9844% 9845% o wand: the magick wand. 9846% 9847% o rendering_intent: the image rendering intent: UndefinedIntent, 9848% SaturationIntent, PerceptualIntent, AbsoluteIntent, or RelativeIntent. 9849% 9850*/ 9851WandExport MagickBooleanType MagickSetImageRenderingIntent(MagickWand *wand, 9852 const RenderingIntent rendering_intent) 9853{ 9854 assert(wand != (MagickWand *) NULL); 9855 assert(wand->signature == WandSignature); 9856 if (wand->debug != MagickFalse) 9857 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9858 if (wand->images == (Image *) NULL) 9859 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9860 wand->images->rendering_intent=rendering_intent; 9861 return(MagickTrue); 9862} 9863 9864/* 9865%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9866% % 9867% % 9868% % 9869% M a g i c k S e t I m a g e R e s o l u t i o n % 9870% % 9871% % 9872% % 9873%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9874% 9875% MagickSetImageResolution() sets the image resolution. 9876% 9877% The format of the MagickSetImageResolution method is: 9878% 9879% MagickBooleanType MagickSetImageResolution(MagickWand *wand, 9880% const double x_resolution,const doubtl y_resolution) 9881% 9882% A description of each parameter follows: 9883% 9884% o wand: the magick wand. 9885% 9886% o x_resolution: the image x resolution. 9887% 9888% o y_resolution: the image y resolution. 9889% 9890*/ 9891WandExport MagickBooleanType MagickSetImageResolution(MagickWand *wand, 9892 const double x_resolution,const double y_resolution) 9893{ 9894 assert(wand != (MagickWand *) NULL); 9895 assert(wand->signature == WandSignature); 9896 if (wand->debug != MagickFalse) 9897 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9898 if (wand->images == (Image *) NULL) 9899 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9900 wand->images->x_resolution=x_resolution; 9901 wand->images->y_resolution=y_resolution; 9902 return(MagickTrue); 9903} 9904 9905/* 9906%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9907% % 9908% % 9909% % 9910% M a g i c k S e t I m a g e S c e n e % 9911% % 9912% % 9913% % 9914%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9915% 9916% MagickSetImageScene() sets the image scene. 9917% 9918% The format of the MagickSetImageScene method is: 9919% 9920% MagickBooleanType MagickSetImageScene(MagickWand *wand, 9921% const size_t scene) 9922% 9923% A description of each parameter follows: 9924% 9925% o wand: the magick wand. 9926% 9927% o delay: the image scene number. 9928% 9929*/ 9930WandExport MagickBooleanType MagickSetImageScene(MagickWand *wand, 9931 const size_t scene) 9932{ 9933 assert(wand != (MagickWand *) NULL); 9934 assert(wand->signature == WandSignature); 9935 if (wand->debug != MagickFalse) 9936 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9937 if (wand->images == (Image *) NULL) 9938 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9939 wand->images->scene=scene; 9940 return(MagickTrue); 9941} 9942 9943/* 9944%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9945% % 9946% % 9947% % 9948% M a g i c k S e t I m a g e T i c k s P e r S e c o n d % 9949% % 9950% % 9951% % 9952%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9953% 9954% MagickSetImageTicksPerSecond() sets the image ticks-per-second. 9955% 9956% The format of the MagickSetImageTicksPerSecond method is: 9957% 9958% MagickBooleanType MagickSetImageTicksPerSecond(MagickWand *wand, 9959% const ssize_t ticks_per-second) 9960% 9961% A description of each parameter follows: 9962% 9963% o wand: the magick wand. 9964% 9965% o ticks_per_second: the units to use for the image delay. 9966% 9967*/ 9968WandExport MagickBooleanType MagickSetImageTicksPerSecond(MagickWand *wand, 9969 const ssize_t ticks_per_second) 9970{ 9971 assert(wand != (MagickWand *) NULL); 9972 assert(wand->signature == WandSignature); 9973 if (wand->debug != MagickFalse) 9974 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9975 if (wand->images == (Image *) NULL) 9976 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9977 wand->images->ticks_per_second=ticks_per_second; 9978 return(MagickTrue); 9979} 9980 9981/* 9982%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9983% % 9984% % 9985% % 9986% M a g i c k S e t I m a g e T y p e % 9987% % 9988% % 9989% % 9990%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9991% 9992% MagickSetImageType() sets the image type. 9993% 9994% The format of the MagickSetImageType method is: 9995% 9996% MagickBooleanType MagickSetImageType(MagickWand *wand, 9997% const ImageType image_type) 9998% 9999% A description of each parameter follows: 10000% 10001% o wand: the magick wand. 10002% 10003% o image_type: the image type: UndefinedType, BilevelType, GrayscaleType, 10004% GrayscaleMatteType, PaletteType, PaletteMatteType, TrueColorType, 10005% TrueColorMatteType, ColorSeparationType, ColorSeparationMatteType, 10006% or OptimizeType. 10007% 10008*/ 10009WandExport MagickBooleanType MagickSetImageType(MagickWand *wand, 10010 const ImageType image_type) 10011{ 10012 assert(wand != (MagickWand *) NULL); 10013 assert(wand->signature == WandSignature); 10014 if (wand->debug != MagickFalse) 10015 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10016 if (wand->images == (Image *) NULL) 10017 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10018 return(SetImageType(wand->images,image_type,wand->exception)); 10019} 10020 10021/* 10022%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10023% % 10024% % 10025% % 10026% M a g i c k S e t I m a g e U n i t s % 10027% % 10028% % 10029% % 10030%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10031% 10032% MagickSetImageUnits() sets the image units of resolution. 10033% 10034% The format of the MagickSetImageUnits method is: 10035% 10036% MagickBooleanType MagickSetImageUnits(MagickWand *wand, 10037% const ResolutionType units) 10038% 10039% A description of each parameter follows: 10040% 10041% o wand: the magick wand. 10042% 10043% o units: the image units of resolution : UndefinedResolution, 10044% PixelsPerInchResolution, or PixelsPerCentimeterResolution. 10045% 10046*/ 10047WandExport MagickBooleanType MagickSetImageUnits(MagickWand *wand, 10048 const ResolutionType units) 10049{ 10050 assert(wand != (MagickWand *) NULL); 10051 assert(wand->signature == WandSignature); 10052 if (wand->debug != MagickFalse) 10053 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10054 if (wand->images == (Image *) NULL) 10055 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10056 wand->images->units=units; 10057 return(MagickTrue); 10058} 10059 10060/* 10061%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10062% % 10063% % 10064% % 10065% M a g i c k S e t I m a g e V i r t u a l P i x e l M e t h o d % 10066% % 10067% % 10068% % 10069%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10070% 10071% MagickSetImageVirtualPixelMethod() sets the image virtual pixel method. 10072% 10073% The format of the MagickSetImageVirtualPixelMethod method is: 10074% 10075% VirtualPixelMethod MagickSetImageVirtualPixelMethod(MagickWand *wand, 10076% const VirtualPixelMethod method) 10077% 10078% A description of each parameter follows: 10079% 10080% o wand: the magick wand. 10081% 10082% o method: the image virtual pixel method : UndefinedVirtualPixelMethod, 10083% ConstantVirtualPixelMethod, EdgeVirtualPixelMethod, 10084% MirrorVirtualPixelMethod, or TileVirtualPixelMethod. 10085% 10086*/ 10087WandExport VirtualPixelMethod MagickSetImageVirtualPixelMethod(MagickWand *wand, 10088 const VirtualPixelMethod method) 10089{ 10090 assert(wand != (MagickWand *) NULL); 10091 assert(wand->signature == WandSignature); 10092 if (wand->debug != MagickFalse) 10093 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10094 if (wand->images == (Image *) NULL) 10095 return(UndefinedVirtualPixelMethod); 10096 return(SetImageVirtualPixelMethod(wand->images,method)); 10097} 10098 10099/* 10100%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10101% % 10102% % 10103% % 10104% M a g i c k S e t I m a g e W h i t e P o i n t % 10105% % 10106% % 10107% % 10108%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10109% 10110% MagickSetImageWhitePoint() sets the image chromaticity white point. 10111% 10112% The format of the MagickSetImageWhitePoint method is: 10113% 10114% MagickBooleanType MagickSetImageWhitePoint(MagickWand *wand, 10115% const double x,const double y) 10116% 10117% A description of each parameter follows: 10118% 10119% o wand: the magick wand. 10120% 10121% o x: the white x-point. 10122% 10123% o y: the white y-point. 10124% 10125*/ 10126WandExport MagickBooleanType MagickSetImageWhitePoint(MagickWand *wand, 10127 const double x,const double y) 10128{ 10129 assert(wand != (MagickWand *) NULL); 10130 assert(wand->signature == WandSignature); 10131 if (wand->debug != MagickFalse) 10132 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10133 if (wand->images == (Image *) NULL) 10134 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10135 wand->images->chromaticity.white_point.x=x; 10136 wand->images->chromaticity.white_point.y=y; 10137 return(MagickTrue); 10138} 10139 10140/* 10141%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10142% % 10143% % 10144% % 10145% M a g i c k S h a d e I m a g e C h a n n e l % 10146% % 10147% % 10148% % 10149%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10150% 10151% MagickShadeImage() shines a distant light on an image to create a 10152% three-dimensional effect. You control the positioning of the light with 10153% azimuth and elevation; azimuth is measured in degrees off the x axis 10154% and elevation is measured in pixels above the Z axis. 10155% 10156% The format of the MagickShadeImage method is: 10157% 10158% MagickBooleanType MagickShadeImage(MagickWand *wand, 10159% const MagickBooleanType gray,const double azimuth, 10160% const double elevation) 10161% 10162% A description of each parameter follows: 10163% 10164% o wand: the magick wand. 10165% 10166% o gray: A value other than zero shades the intensity of each pixel. 10167% 10168% o azimuth, elevation: Define the light source direction. 10169% 10170*/ 10171WandExport MagickBooleanType MagickShadeImage(MagickWand *wand, 10172 const MagickBooleanType gray,const double asimuth,const double elevation) 10173{ 10174 Image 10175 *shade_image; 10176 10177 assert(wand != (MagickWand *) NULL); 10178 assert(wand->signature == WandSignature); 10179 if (wand->debug != MagickFalse) 10180 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10181 if (wand->images == (Image *) NULL) 10182 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10183 shade_image=ShadeImage(wand->images,gray,asimuth,elevation,wand->exception); 10184 if (shade_image == (Image *) NULL) 10185 return(MagickFalse); 10186 ReplaceImageInList(&wand->images,shade_image); 10187 return(MagickTrue); 10188} 10189 10190/* 10191%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10192% % 10193% % 10194% % 10195% M a g i c k S h a d o w I m a g e % 10196% % 10197% % 10198% % 10199%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10200% 10201% MagickShadowImage() simulates an image shadow. 10202% 10203% The format of the MagickShadowImage method is: 10204% 10205% MagickBooleanType MagickShadowImage(MagickWand *wand, 10206% const double opacity,const double sigma,const ssize_t x,const ssize_t y) 10207% 10208% A description of each parameter follows: 10209% 10210% o wand: the magick wand. 10211% 10212% o opacity: percentage transparency. 10213% 10214% o sigma: the standard deviation of the Gaussian, in pixels. 10215% 10216% o x: the shadow x-offset. 10217% 10218% o y: the shadow y-offset. 10219% 10220*/ 10221WandExport MagickBooleanType MagickShadowImage(MagickWand *wand, 10222 const double opacity,const double sigma,const ssize_t x,const ssize_t y) 10223{ 10224 Image 10225 *shadow_image; 10226 10227 assert(wand != (MagickWand *) NULL); 10228 assert(wand->signature == WandSignature); 10229 if (wand->debug != MagickFalse) 10230 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10231 if (wand->images == (Image *) NULL) 10232 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10233 shadow_image=ShadowImage(wand->images,opacity,sigma,x,y,wand->exception); 10234 if (shadow_image == (Image *) NULL) 10235 return(MagickFalse); 10236 ReplaceImageInList(&wand->images,shadow_image); 10237 return(MagickTrue); 10238} 10239 10240/* 10241%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10242% % 10243% % 10244% % 10245% M a g i c k S h a r p e n I m a g e % 10246% % 10247% % 10248% % 10249%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10250% 10251% MagickSharpenImage() sharpens an image. We convolve the image with a 10252% Gaussian operator of the given radius and standard deviation (sigma). 10253% For reasonable results, the radius should be larger than sigma. Use a 10254% radius of 0 and MagickSharpenImage() selects a suitable radius for you. 10255% 10256% The format of the MagickSharpenImage method is: 10257% 10258% MagickBooleanType MagickSharpenImage(MagickWand *wand, 10259% const double radius,const double sigma,const double bias) 10260% 10261% A description of each parameter follows: 10262% 10263% o wand: the magick wand. 10264% 10265% o radius: the radius of the Gaussian, in pixels, not counting the center 10266% pixel. 10267% 10268% o sigma: the standard deviation of the Gaussian, in pixels. 10269% 10270% o bias: the bias. 10271% 10272*/ 10273WandExport MagickBooleanType MagickSharpenImage(MagickWand *wand, 10274 const double radius,const double sigma,const double bias) 10275{ 10276 Image 10277 *sharp_image; 10278 10279 assert(wand != (MagickWand *) NULL); 10280 assert(wand->signature == WandSignature); 10281 if (wand->debug != MagickFalse) 10282 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10283 if (wand->images == (Image *) NULL) 10284 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10285 sharp_image=SharpenImage(wand->images,radius,sigma,bias,wand->exception); 10286 if (sharp_image == (Image *) NULL) 10287 return(MagickFalse); 10288 ReplaceImageInList(&wand->images,sharp_image); 10289 return(MagickTrue); 10290} 10291 10292/* 10293%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10294% % 10295% % 10296% % 10297% M a g i c k S h a v e I m a g e % 10298% % 10299% % 10300% % 10301%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10302% 10303% MagickShaveImage() shaves pixels from the image edges. It allocates the 10304% memory necessary for the new Image structure and returns a pointer to the 10305% new image. 10306% 10307% The format of the MagickShaveImage method is: 10308% 10309% MagickBooleanType MagickShaveImage(MagickWand *wand, 10310% const size_t columns,const size_t rows) 10311% 10312% A description of each parameter follows: 10313% 10314% o wand: the magick wand. 10315% 10316% o columns: the number of columns in the scaled image. 10317% 10318% o rows: the number of rows in the scaled image. 10319% 10320% 10321*/ 10322WandExport MagickBooleanType MagickShaveImage(MagickWand *wand, 10323 const size_t columns,const size_t rows) 10324{ 10325 Image 10326 *shave_image; 10327 10328 RectangleInfo 10329 shave_info; 10330 10331 assert(wand != (MagickWand *) NULL); 10332 assert(wand->signature == WandSignature); 10333 if (wand->debug != MagickFalse) 10334 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10335 if (wand->images == (Image *) NULL) 10336 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10337 shave_info.width=columns; 10338 shave_info.height=rows; 10339 shave_info.x=0; 10340 shave_info.y=0; 10341 shave_image=ShaveImage(wand->images,&shave_info,wand->exception); 10342 if (shave_image == (Image *) NULL) 10343 return(MagickFalse); 10344 ReplaceImageInList(&wand->images,shave_image); 10345 return(MagickTrue); 10346} 10347 10348/* 10349%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10350% % 10351% % 10352% % 10353% M a g i c k S h e a r I m a g e % 10354% % 10355% % 10356% % 10357%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10358% 10359% MagickShearImage() slides one edge of an image along the X or Y axis, 10360% creating a parallelogram. An X direction shear slides an edge along the X 10361% axis, while a Y direction shear slides an edge along the Y axis. The amount 10362% of the shear is controlled by a shear angle. For X direction shears, x_shear 10363% is measured relative to the Y axis, and similarly, for Y direction shears 10364% y_shear is measured relative to the X axis. Empty triangles left over from 10365% shearing the image are filled with the background color. 10366% 10367% The format of the MagickShearImage method is: 10368% 10369% MagickBooleanType MagickShearImage(MagickWand *wand, 10370% const PixelWand *background,const double x_shear,onst double y_shear) 10371% 10372% A description of each parameter follows: 10373% 10374% o wand: the magick wand. 10375% 10376% o background: the background pixel wand. 10377% 10378% o x_shear: the number of degrees to shear the image. 10379% 10380% o y_shear: the number of degrees to shear the image. 10381% 10382*/ 10383WandExport MagickBooleanType MagickShearImage(MagickWand *wand, 10384 const PixelWand *background,const double x_shear,const double y_shear) 10385{ 10386 Image 10387 *shear_image; 10388 10389 assert(wand != (MagickWand *) NULL); 10390 assert(wand->signature == WandSignature); 10391 if (wand->debug != MagickFalse) 10392 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10393 if (wand->images == (Image *) NULL) 10394 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10395 PixelGetQuantumPacket(background,&wand->images->background_color); 10396 shear_image=ShearImage(wand->images,x_shear,y_shear,wand->exception); 10397 if (shear_image == (Image *) NULL) 10398 return(MagickFalse); 10399 ReplaceImageInList(&wand->images,shear_image); 10400 return(MagickTrue); 10401} 10402 10403/* 10404%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10405% % 10406% % 10407% % 10408% M a g i c k S i g m o i d a l C o n t r a s t I m a g e % 10409% % 10410% % 10411% % 10412%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10413% 10414% MagickSigmoidalContrastImage() adjusts the contrast of an image with a 10415% non-linear sigmoidal contrast algorithm. Increase the contrast of the 10416% image using a sigmoidal transfer function without saturating highlights or 10417% shadows. Contrast indicates how much to increase the contrast (0 is none; 10418% 3 is typical; 20 is pushing it); mid-point indicates where midtones fall in 10419% the resultant image (0 is white; 50% is middle-gray; 100% is black). Set 10420% sharpen to MagickTrue to increase the image contrast otherwise the contrast 10421% is reduced. 10422% 10423% The format of the MagickSigmoidalContrastImage method is: 10424% 10425% MagickBooleanType MagickSigmoidalContrastImage(MagickWand *wand, 10426% const MagickBooleanType sharpen,const double alpha,const double beta) 10427% 10428% A description of each parameter follows: 10429% 10430% o wand: the magick wand. 10431% 10432% o sharpen: Increase or decrease image contrast. 10433% 10434% o alpha: strength of the contrast, the larger the number the more 10435% 'threshold-like' it becomes. 10436% 10437% o beta: midpoint of the function as a color value 0 to QuantumRange. 10438% 10439*/ 10440WandExport MagickBooleanType MagickSigmoidalContrastImage( 10441 MagickWand *wand,const MagickBooleanType sharpen,const double alpha, 10442 const double beta) 10443{ 10444 MagickBooleanType 10445 status; 10446 10447 assert(wand != (MagickWand *) NULL); 10448 assert(wand->signature == WandSignature); 10449 if (wand->debug != MagickFalse) 10450 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10451 if (wand->images == (Image *) NULL) 10452 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10453 status=SigmoidalContrastImage(wand->images,sharpen,alpha,beta, 10454 &wand->images->exception); 10455 return(status); 10456} 10457 10458/* 10459%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10460% % 10461% % 10462% % 10463% M a g i c k S i m i l a r i t y I m a g e % 10464% % 10465% % 10466% % 10467%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10468% 10469% MagickSimilarityImage() compares the reference image of the image and 10470% returns the best match offset. In addition, it returns a similarity image 10471% such that an exact match location is completely white and if none of the 10472% pixels match, black, otherwise some gray level in-between. 10473% 10474% The format of the MagickSimilarityImage method is: 10475% 10476% MagickWand *MagickSimilarityImage(MagickWand *wand, 10477% const MagickWand *reference,RectangeInfo *offset,double *similarity) 10478% 10479% A description of each parameter follows: 10480% 10481% o wand: the magick wand. 10482% 10483% o reference: the reference wand. 10484% 10485% o offset: the best match offset of the reference image within the image. 10486% 10487% o similarity: the computed similarity between the images. 10488% 10489*/ 10490WandExport MagickWand *MagickSimilarityImage(MagickWand *wand, 10491 const MagickWand *reference,RectangleInfo *offset,double *similarity) 10492{ 10493 Image 10494 *similarity_image; 10495 10496 assert(wand != (MagickWand *) NULL); 10497 assert(wand->signature == WandSignature); 10498 if (wand->debug != MagickFalse) 10499 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10500 if ((wand->images == (Image *) NULL) || (reference->images == (Image *) NULL)) 10501 { 10502 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 10503 "ContainsNoImages","`%s'",wand->name); 10504 return((MagickWand *) NULL); 10505 } 10506 similarity_image=SimilarityImage(wand->images,reference->images,offset, 10507 similarity,&wand->images->exception); 10508 if (similarity_image == (Image *) NULL) 10509 return((MagickWand *) NULL); 10510 return(CloneMagickWandFromImages(wand,similarity_image)); 10511} 10512 10513/* 10514%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10515% % 10516% % 10517% % 10518% M a g i c k S k e t c h I m a g e % 10519% % 10520% % 10521% % 10522%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10523% 10524% MagickSketchImage() simulates a pencil sketch. We convolve the image with 10525% a Gaussian operator of the given radius and standard deviation (sigma). 10526% For reasonable results, radius should be larger than sigma. Use a 10527% radius of 0 and SketchImage() selects a suitable radius for you. 10528% Angle gives the angle of the blurring motion. 10529% 10530% The format of the MagickSketchImage method is: 10531% 10532% MagickBooleanType MagickSketchImage(MagickWand *wand, 10533% const double radius,const double sigma,const double angle, 10534% const double bias) 10535% 10536% A description of each parameter follows: 10537% 10538% o wand: the magick wand. 10539% 10540% o radius: the radius of the Gaussian, in pixels, not counting 10541% the center pixel. 10542% 10543% o sigma: the standard deviation of the Gaussian, in pixels. 10544% 10545% o angle: apply the effect along this angle. 10546% 10547% o bias: the bias. 10548% 10549*/ 10550WandExport MagickBooleanType MagickSketchImage(MagickWand *wand, 10551 const double radius,const double sigma,const double angle,const double bias) 10552{ 10553 Image 10554 *sketch_image; 10555 10556 assert(wand != (MagickWand *) NULL); 10557 assert(wand->signature == WandSignature); 10558 if (wand->debug != MagickFalse) 10559 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10560 if (wand->images == (Image *) NULL) 10561 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10562 sketch_image=SketchImage(wand->images,radius,sigma,angle,bias, 10563 wand->exception); 10564 if (sketch_image == (Image *) NULL) 10565 return(MagickFalse); 10566 ReplaceImageInList(&wand->images,sketch_image); 10567 return(MagickTrue); 10568} 10569 10570/* 10571%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10572% % 10573% % 10574% % 10575% M a g i c k S m u s h I m a g e s % 10576% % 10577% % 10578% % 10579%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10580% 10581% MagickSmushImages() takes all images from the current image pointer to the 10582% end of the image list and smushs them to each other top-to-bottom if the 10583% stack parameter is true, otherwise left-to-right. 10584% 10585% The format of the MagickSmushImages method is: 10586% 10587% MagickWand *MagickSmushImages(MagickWand *wand, 10588% const MagickBooleanType stack,const ssize_t offset) 10589% 10590% A description of each parameter follows: 10591% 10592% o wand: the magick wand. 10593% 10594% o stack: By default, images are stacked left-to-right. Set stack to 10595% MagickTrue to stack them top-to-bottom. 10596% 10597% o offset: minimum distance in pixels between images. 10598% 10599*/ 10600WandExport MagickWand *MagickSmushImages(MagickWand *wand, 10601 const MagickBooleanType stack,const ssize_t offset) 10602{ 10603 Image 10604 *smush_image; 10605 10606 assert(wand != (MagickWand *) NULL); 10607 assert(wand->signature == WandSignature); 10608 if (wand->debug != MagickFalse) 10609 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10610 if (wand->images == (Image *) NULL) 10611 return((MagickWand *) NULL); 10612 smush_image=SmushImages(wand->images,stack,offset,wand->exception); 10613 if (smush_image == (Image *) NULL) 10614 return((MagickWand *) NULL); 10615 return(CloneMagickWandFromImages(wand,smush_image)); 10616} 10617 10618/* 10619%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10620% % 10621% % 10622% % 10623% M a g i c k S o l a r i z e I m a g e % 10624% % 10625% % 10626% % 10627%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10628% 10629% MagickSolarizeImage() applies a special effect to the image, similar to the 10630% effect achieved in a photo darkroom by selectively exposing areas of photo 10631% sensitive paper to light. Threshold ranges from 0 to QuantumRange and is a 10632% measure of the extent of the solarization. 10633% 10634% The format of the MagickSolarizeImage method is: 10635% 10636% MagickBooleanType MagickSolarizeImage(MagickWand *wand, 10637% const double threshold) 10638% 10639% A description of each parameter follows: 10640% 10641% o wand: the magick wand. 10642% 10643% o threshold: Define the extent of the solarization. 10644% 10645*/ 10646WandExport MagickBooleanType MagickSolarizeImage(MagickWand *wand, 10647 const double threshold) 10648{ 10649 MagickBooleanType 10650 status; 10651 10652 assert(wand != (MagickWand *) NULL); 10653 assert(wand->signature == WandSignature); 10654 if (wand->debug != MagickFalse) 10655 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10656 if (wand->images == (Image *) NULL) 10657 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10658 status=SolarizeImage(wand->images,threshold,&wand->images->exception); 10659 return(status); 10660} 10661 10662/* 10663%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10664% % 10665% % 10666% % 10667% M a g i c k S p a r s e C o l o r I m a g e % 10668% % 10669% % 10670% % 10671%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10672% 10673% MagickSparseColorImage(), given a set of coordinates, interpolates the 10674% colors found at those coordinates, across the whole image, using various 10675% methods. 10676% 10677% The format of the MagickSparseColorImage method is: 10678% 10679% MagickBooleanType MagickSparseColorImage(MagickWand *wand, 10680% const SparseColorMethod method,const size_t number_arguments, 10681% const double *arguments) 10682% 10683% A description of each parameter follows: 10684% 10685% o image: the image to be sparseed. 10686% 10687% o method: the method of image sparseion. 10688% 10689% ArcSparseColorion will always ignore source image offset, and always 10690% 'bestfit' the destination image with the top left corner offset 10691% relative to the polar mapping center. 10692% 10693% Bilinear has no simple inverse mapping so will not allow 'bestfit' 10694% style of image sparseion. 10695% 10696% Affine, Perspective, and Bilinear, will do least squares fitting of 10697% the distrotion when more than the minimum number of control point 10698% pairs are provided. 10699% 10700% Perspective, and Bilinear, will fall back to a Affine sparseion when 10701% less than 4 control point pairs are provided. While Affine sparseions 10702% will let you use any number of control point pairs, that is Zero pairs 10703% is a No-Op (viewport only) distrotion, one pair is a translation and 10704% two pairs of control points will do a scale-rotate-translate, without 10705% any shearing. 10706% 10707% o number_arguments: the number of arguments given for this sparseion 10708% method. 10709% 10710% o arguments: the arguments for this sparseion method. 10711% 10712*/ 10713WandExport MagickBooleanType MagickSparseColorImage(MagickWand *wand, 10714 const SparseColorMethod method,const size_t number_arguments, 10715 const double *arguments) 10716{ 10717 Image 10718 *sparse_image; 10719 10720 assert(wand != (MagickWand *) NULL); 10721 assert(wand->signature == WandSignature); 10722 if (wand->debug != MagickFalse) 10723 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10724 if (wand->images == (Image *) NULL) 10725 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10726 sparse_image=SparseColorImage(wand->images,method,number_arguments,arguments, 10727 wand->exception); 10728 if (sparse_image == (Image *) NULL) 10729 return(MagickFalse); 10730 ReplaceImageInList(&wand->images,sparse_image); 10731 return(MagickTrue); 10732} 10733 10734/* 10735%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10736% % 10737% % 10738% % 10739% M a g i c k S p l i c e I m a g e % 10740% % 10741% % 10742% % 10743%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10744% 10745% MagickSpliceImage() splices a solid color into the image. 10746% 10747% The format of the MagickSpliceImage method is: 10748% 10749% MagickBooleanType MagickSpliceImage(MagickWand *wand, 10750% const size_t width,const size_t height,const ssize_t x, 10751% const ssize_t y) 10752% 10753% A description of each parameter follows: 10754% 10755% o wand: the magick wand. 10756% 10757% o width: the region width. 10758% 10759% o height: the region height. 10760% 10761% o x: the region x offset. 10762% 10763% o y: the region y offset. 10764% 10765*/ 10766WandExport MagickBooleanType MagickSpliceImage(MagickWand *wand, 10767 const size_t width,const size_t height,const ssize_t x, 10768 const ssize_t y) 10769{ 10770 Image 10771 *splice_image; 10772 10773 RectangleInfo 10774 splice; 10775 10776 assert(wand != (MagickWand *) NULL); 10777 assert(wand->signature == WandSignature); 10778 if (wand->debug != MagickFalse) 10779 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10780 if (wand->images == (Image *) NULL) 10781 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10782 splice.width=width; 10783 splice.height=height; 10784 splice.x=x; 10785 splice.y=y; 10786 splice_image=SpliceImage(wand->images,&splice,wand->exception); 10787 if (splice_image == (Image *) NULL) 10788 return(MagickFalse); 10789 ReplaceImageInList(&wand->images,splice_image); 10790 return(MagickTrue); 10791} 10792 10793/* 10794%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10795% % 10796% % 10797% % 10798% M a g i c k S p r e a d I m a g e % 10799% % 10800% % 10801% % 10802%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10803% 10804% MagickSpreadImage() is a special effects method that randomly displaces each 10805% pixel in a block defined by the radius parameter. 10806% 10807% The format of the MagickSpreadImage method is: 10808% 10809% MagickBooleanType MagickSpreadImage(MagickWand *wand,const double radius, 10810% const PixelInterpolateMethod method) 10811% 10812% A description of each parameter follows: 10813% 10814% o wand: the magick wand. 10815% 10816% o radius: Choose a random pixel in a neighborhood of this extent. 10817% 10818% o method: the pixel interpolation method. 10819% 10820*/ 10821WandExport MagickBooleanType MagickSpreadImage(MagickWand *wand, 10822 const double radius,const PixelInterpolateMethod method) 10823{ 10824 Image 10825 *spread_image; 10826 10827 assert(wand != (MagickWand *) NULL); 10828 assert(wand->signature == WandSignature); 10829 if (wand->debug != MagickFalse) 10830 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10831 if (wand->images == (Image *) NULL) 10832 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10833 spread_image=SpreadImage(wand->images,radius,method,wand->exception); 10834 if (spread_image == (Image *) NULL) 10835 return(MagickFalse); 10836 ReplaceImageInList(&wand->images,spread_image); 10837 return(MagickTrue); 10838} 10839 10840/* 10841%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10842% % 10843% % 10844% % 10845% M a g i c k S t a t i s t i c I m a g e % 10846% % 10847% % 10848% % 10849%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10850% 10851% MagickStatisticImage() replace each pixel with corresponding statistic from 10852% the neighborhood of the specified width and height. 10853% 10854% The format of the MagickStatisticImage method is: 10855% 10856% MagickBooleanType MagickStatisticImage(MagickWand *wand, 10857% const StatisticType type,const double width,const size_t height) 10858% 10859% A description of each parameter follows: 10860% 10861% o wand: the magick wand. 10862% 10863% o type: the statistic type (e.g. median, mode, etc.). 10864% 10865% o width: the width of the pixel neighborhood. 10866% 10867% o height: the height of the pixel neighborhood. 10868% 10869*/ 10870WandExport MagickBooleanType MagickStatisticImage(MagickWand *wand, 10871 const StatisticType type,const size_t width,const size_t height) 10872{ 10873 Image 10874 *statistic_image; 10875 10876 assert(wand != (MagickWand *) NULL); 10877 assert(wand->signature == WandSignature); 10878 if (wand->debug != MagickFalse) 10879 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10880 if (wand->images == (Image *) NULL) 10881 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10882 statistic_image=StatisticImage(wand->images,type,width,height, 10883 wand->exception); 10884 if (statistic_image == (Image *) NULL) 10885 return(MagickFalse); 10886 ReplaceImageInList(&wand->images,statistic_image); 10887 return(MagickTrue); 10888} 10889 10890/* 10891%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10892% % 10893% % 10894% % 10895% M a g i c k S t e g a n o I m a g e % 10896% % 10897% % 10898% % 10899%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10900% 10901% MagickSteganoImage() hides a digital watermark within the image. 10902% Recover the hidden watermark later to prove that the authenticity of 10903% an image. Offset defines the start position within the image to hide 10904% the watermark. 10905% 10906% The format of the MagickSteganoImage method is: 10907% 10908% MagickWand *MagickSteganoImage(MagickWand *wand, 10909% const MagickWand *watermark_wand,const ssize_t offset) 10910% 10911% A description of each parameter follows: 10912% 10913% o wand: the magick wand. 10914% 10915% o watermark_wand: the watermark wand. 10916% 10917% o offset: Start hiding at this offset into the image. 10918% 10919*/ 10920WandExport MagickWand *MagickSteganoImage(MagickWand *wand, 10921 const MagickWand *watermark_wand,const ssize_t offset) 10922{ 10923 Image 10924 *stegano_image; 10925 10926 assert(wand != (MagickWand *) NULL); 10927 assert(wand->signature == WandSignature); 10928 if (wand->debug != MagickFalse) 10929 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10930 if ((wand->images == (Image *) NULL) || 10931 (watermark_wand->images == (Image *) NULL)) 10932 { 10933 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 10934 "ContainsNoImages","`%s'",wand->name); 10935 return((MagickWand *) NULL); 10936 } 10937 wand->images->offset=offset; 10938 stegano_image=SteganoImage(wand->images,watermark_wand->images, 10939 wand->exception); 10940 if (stegano_image == (Image *) NULL) 10941 return((MagickWand *) NULL); 10942 return(CloneMagickWandFromImages(wand,stegano_image)); 10943} 10944 10945/* 10946%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10947% % 10948% % 10949% % 10950% M a g i c k S t e r e o I m a g e % 10951% % 10952% % 10953% % 10954%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10955% 10956% MagickStereoImage() composites two images and produces a single image that 10957% is the composite of a left and right image of a stereo pair 10958% 10959% The format of the MagickStereoImage method is: 10960% 10961% MagickWand *MagickStereoImage(MagickWand *wand, 10962% const MagickWand *offset_wand) 10963% 10964% A description of each parameter follows: 10965% 10966% o wand: the magick wand. 10967% 10968% o offset_wand: Another image wand. 10969% 10970*/ 10971WandExport MagickWand *MagickStereoImage(MagickWand *wand, 10972 const MagickWand *offset_wand) 10973{ 10974 Image 10975 *stereo_image; 10976 10977 assert(wand != (MagickWand *) NULL); 10978 assert(wand->signature == WandSignature); 10979 if (wand->debug != MagickFalse) 10980 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10981 if ((wand->images == (Image *) NULL) || 10982 (offset_wand->images == (Image *) NULL)) 10983 { 10984 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 10985 "ContainsNoImages","`%s'",wand->name); 10986 return((MagickWand *) NULL); 10987 } 10988 stereo_image=StereoImage(wand->images,offset_wand->images,wand->exception); 10989 if (stereo_image == (Image *) NULL) 10990 return((MagickWand *) NULL); 10991 return(CloneMagickWandFromImages(wand,stereo_image)); 10992} 10993 10994/* 10995%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10996% % 10997% % 10998% % 10999% M a g i c k S t r i p I m a g e % 11000% % 11001% % 11002% % 11003%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11004% 11005% MagickStripImage() strips an image of all profiles and comments. 11006% 11007% The format of the MagickStripImage method is: 11008% 11009% MagickBooleanType MagickStripImage(MagickWand *wand) 11010% 11011% A description of each parameter follows: 11012% 11013% o wand: the magick wand. 11014% 11015*/ 11016WandExport MagickBooleanType MagickStripImage(MagickWand *wand) 11017{ 11018 MagickBooleanType 11019 status; 11020 11021 assert(wand != (MagickWand *) NULL); 11022 assert(wand->signature == WandSignature); 11023 if (wand->debug != MagickFalse) 11024 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11025 if (wand->images == (Image *) NULL) 11026 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11027 status=StripImage(wand->images); 11028 if (status == MagickFalse) 11029 InheritException(wand->exception,&wand->images->exception); 11030 return(status); 11031} 11032 11033/* 11034%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11035% % 11036% % 11037% % 11038% M a g i c k S w i r l I m a g e % 11039% % 11040% % 11041% % 11042%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11043% 11044% MagickSwirlImage() swirls the pixels about the center of the image, where 11045% degrees indicates the sweep of the arc through which each pixel is moved. 11046% You get a more dramatic effect as the degrees move from 1 to 360. 11047% 11048% The format of the MagickSwirlImage method is: 11049% 11050% MagickBooleanType MagickSwirlImage(MagickWand *wand,const double degrees, 11051% const PixelInterpolateMethod method) 11052% 11053% A description of each parameter follows: 11054% 11055% o wand: the magick wand. 11056% 11057% o degrees: Define the tightness of the swirling effect. 11058% 11059% o method: the pixel interpolation method. 11060% 11061*/ 11062WandExport MagickBooleanType MagickSwirlImage(MagickWand *wand, 11063 const double degrees,const PixelInterpolateMethod method) 11064{ 11065 Image 11066 *swirl_image; 11067 11068 assert(wand != (MagickWand *) NULL); 11069 assert(wand->signature == WandSignature); 11070 if (wand->debug != MagickFalse) 11071 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11072 if (wand->images == (Image *) NULL) 11073 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11074 swirl_image=SwirlImage(wand->images,degrees,method,wand->exception); 11075 if (swirl_image == (Image *) NULL) 11076 return(MagickFalse); 11077 ReplaceImageInList(&wand->images,swirl_image); 11078 return(MagickTrue); 11079} 11080 11081/* 11082%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11083% % 11084% % 11085% % 11086% M a g i c k T e x t u r e I m a g e % 11087% % 11088% % 11089% % 11090%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11091% 11092% MagickTextureImage() repeatedly tiles the texture image across and down the 11093% image canvas. 11094% 11095% The format of the MagickTextureImage method is: 11096% 11097% MagickWand *MagickTextureImage(MagickWand *wand, 11098% const MagickWand *texture_wand) 11099% 11100% A description of each parameter follows: 11101% 11102% o wand: the magick wand. 11103% 11104% o texture_wand: the texture wand 11105% 11106*/ 11107WandExport MagickWand *MagickTextureImage(MagickWand *wand, 11108 const MagickWand *texture_wand) 11109{ 11110 Image 11111 *texture_image; 11112 11113 MagickBooleanType 11114 status; 11115 11116 assert(wand != (MagickWand *) NULL); 11117 assert(wand->signature == WandSignature); 11118 if (wand->debug != MagickFalse) 11119 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11120 if ((wand->images == (Image *) NULL) || 11121 (texture_wand->images == (Image *) NULL)) 11122 { 11123 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 11124 "ContainsNoImages","`%s'",wand->name); 11125 return((MagickWand *) NULL); 11126 } 11127 texture_image=CloneImage(wand->images,0,0,MagickTrue,wand->exception); 11128 if (texture_image == (Image *) NULL) 11129 return((MagickWand *) NULL); 11130 status=TextureImage(texture_image,texture_wand->images); 11131 if (status == MagickFalse) 11132 { 11133 InheritException(wand->exception,&texture_image->exception); 11134 texture_image=DestroyImage(texture_image); 11135 return((MagickWand *) NULL); 11136 } 11137 return(CloneMagickWandFromImages(wand,texture_image)); 11138} 11139 11140/* 11141%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11142% % 11143% % 11144% % 11145% M a g i c k T h r e s h o l d I m a g e % 11146% % 11147% % 11148% % 11149%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11150% 11151% MagickThresholdImage() changes the value of individual pixels based on 11152% the intensity of each pixel compared to threshold. The result is a 11153% high-contrast, two color image. 11154% 11155% The format of the MagickThresholdImage method is: 11156% 11157% MagickBooleanType MagickThresholdImage(MagickWand *wand, 11158% const double threshold) 11159% MagickBooleanType MagickThresholdImageChannel(MagickWand *wand, 11160% const ChannelType channel,const double threshold) 11161% 11162% A description of each parameter follows: 11163% 11164% o wand: the magick wand. 11165% 11166% o channel: the image channel(s). 11167% 11168% o threshold: Define the threshold value. 11169% 11170*/ 11171WandExport MagickBooleanType MagickThresholdImage(MagickWand *wand, 11172 const double threshold) 11173{ 11174 MagickBooleanType 11175 status; 11176 11177 status=MagickThresholdImageChannel(wand,DefaultChannels,threshold); 11178 return(status); 11179} 11180 11181WandExport MagickBooleanType MagickThresholdImageChannel(MagickWand *wand, 11182 const ChannelType channel,const double threshold) 11183{ 11184 MagickBooleanType 11185 status; 11186 11187 assert(wand != (MagickWand *) NULL); 11188 assert(wand->signature == WandSignature); 11189 if (wand->debug != MagickFalse) 11190 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11191 if (wand->images == (Image *) NULL) 11192 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11193 status=BilevelImage(wand->images,threshold); 11194 if (status == MagickFalse) 11195 InheritException(wand->exception,&wand->images->exception); 11196 return(status); 11197} 11198 11199/* 11200%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11201% % 11202% % 11203% % 11204% M a g i c k T h u m b n a i l I m a g e % 11205% % 11206% % 11207% % 11208%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11209% 11210% MagickThumbnailImage() changes the size of an image to the given dimensions 11211% and removes any associated profiles. The goal is to produce small low cost 11212% thumbnail images suited for display on the Web. 11213% 11214% The format of the MagickThumbnailImage method is: 11215% 11216% MagickBooleanType MagickThumbnailImage(MagickWand *wand, 11217% const size_t columns,const size_t rows) 11218% 11219% A description of each parameter follows: 11220% 11221% o wand: the magick wand. 11222% 11223% o columns: the number of columns in the scaled image. 11224% 11225% o rows: the number of rows in the scaled image. 11226% 11227*/ 11228WandExport MagickBooleanType MagickThumbnailImage(MagickWand *wand, 11229 const size_t columns,const size_t rows) 11230{ 11231 Image 11232 *thumbnail_image; 11233 11234 assert(wand != (MagickWand *) NULL); 11235 assert(wand->signature == WandSignature); 11236 if (wand->debug != MagickFalse) 11237 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11238 if (wand->images == (Image *) NULL) 11239 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11240 thumbnail_image=ThumbnailImage(wand->images,columns,rows,wand->exception); 11241 if (thumbnail_image == (Image *) NULL) 11242 return(MagickFalse); 11243 ReplaceImageInList(&wand->images,thumbnail_image); 11244 return(MagickTrue); 11245} 11246 11247/* 11248%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11249% % 11250% % 11251% % 11252% M a g i c k T i n t I m a g e % 11253% % 11254% % 11255% % 11256%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11257% 11258% MagickTintImage() applies a color vector to each pixel in the image. The 11259% length of the vector is 0 for black and white and at its maximum for the 11260% midtones. The vector weighting function is 11261% f(x)=(1-(4.0*((x-0.5)*(x-0.5)))). 11262% 11263% The format of the MagickTintImage method is: 11264% 11265% MagickBooleanType MagickTintImage(MagickWand *wand, 11266% const PixelWand *tint,const PixelWand *opacity) 11267% 11268% A description of each parameter follows: 11269% 11270% o wand: the magick wand. 11271% 11272% o tint: the tint pixel wand. 11273% 11274% o opacity: the opacity pixel wand. 11275% 11276*/ 11277WandExport MagickBooleanType MagickTintImage(MagickWand *wand, 11278 const PixelWand *tint,const PixelWand *opacity) 11279{ 11280 char 11281 percent_opaque[MaxTextExtent]; 11282 11283 Image 11284 *tint_image; 11285 11286 PixelInfo 11287 target; 11288 11289 assert(wand != (MagickWand *) NULL); 11290 assert(wand->signature == WandSignature); 11291 if (wand->debug != MagickFalse) 11292 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11293 if (wand->images == (Image *) NULL) 11294 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11295 if (wand->images->colorspace != CMYKColorspace) 11296 (void) FormatLocaleString(percent_opaque,MaxTextExtent, 11297 "%g,%g,%g,%g",(double) (100.0*QuantumScale* 11298 PixelGetRedQuantum(opacity)),(double) (100.0*QuantumScale* 11299 PixelGetGreenQuantum(opacity)),(double) (100.0*QuantumScale* 11300 PixelGetBlueQuantum(opacity)),(double) (100.0*QuantumScale* 11301 PixelGetOpacityQuantum(opacity))); 11302 else 11303 (void) FormatLocaleString(percent_opaque,MaxTextExtent, 11304 "%g,%g,%g,%g,%g",(double) (100.0*QuantumScale* 11305 PixelGetCyanQuantum(opacity)),(double) (100.0*QuantumScale* 11306 PixelGetMagentaQuantum(opacity)),(double) (100.0*QuantumScale* 11307 PixelGetYellowQuantum(opacity)),(double) (100.0*QuantumScale* 11308 PixelGetBlackQuantum(opacity)),(double) (100.0*QuantumScale* 11309 PixelGetOpacityQuantum(opacity))); 11310 target=PixelGetPixel(tint); 11311 tint_image=TintImage(wand->images,percent_opaque,&target,wand->exception); 11312 if (tint_image == (Image *) NULL) 11313 return(MagickFalse); 11314 ReplaceImageInList(&wand->images,tint_image); 11315 return(MagickTrue); 11316} 11317 11318/* 11319%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11320% % 11321% % 11322% % 11323% M a g i c k T r a n s f o r m I m a g e % 11324% % 11325% % 11326% % 11327%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11328% 11329% MagickTransformImage() is a convenience method that behaves like 11330% MagickResizeImage() or MagickCropImage() but accepts scaling and/or cropping 11331% information as a region geometry specification. If the operation fails, 11332% a NULL image handle is returned. 11333% 11334% The format of the MagickTransformImage method is: 11335% 11336% MagickWand *MagickTransformImage(MagickWand *wand,const char *crop, 11337% const char *geometry) 11338% 11339% A description of each parameter follows: 11340% 11341% o wand: the magick wand. 11342% 11343% o crop: A crop geometry string. This geometry defines a subregion of the 11344% image to crop. 11345% 11346% o geometry: An image geometry string. This geometry defines the final 11347% size of the image. 11348% 11349*/ 11350WandExport MagickWand *MagickTransformImage(MagickWand *wand, 11351 const char *crop,const char *geometry) 11352{ 11353 Image 11354 *transform_image; 11355 11356 MagickBooleanType 11357 status; 11358 11359 assert(wand != (MagickWand *) NULL); 11360 assert(wand->signature == WandSignature); 11361 if (wand->debug != MagickFalse) 11362 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11363 if (wand->images == (Image *) NULL) 11364 return((MagickWand *) NULL); 11365 transform_image=CloneImage(wand->images,0,0,MagickTrue,wand->exception); 11366 if (transform_image == (Image *) NULL) 11367 return((MagickWand *) NULL); 11368 status=TransformImage(&transform_image,crop,geometry); 11369 if (status == MagickFalse) 11370 { 11371 InheritException(wand->exception,&transform_image->exception); 11372 transform_image=DestroyImage(transform_image); 11373 return((MagickWand *) NULL); 11374 } 11375 return(CloneMagickWandFromImages(wand,transform_image)); 11376} 11377 11378/* 11379%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11380% % 11381% % 11382% % 11383% 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 % 11384% % 11385% % 11386% % 11387%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11388% 11389% MagickTransformImageColorspace() transform the image colorspace. 11390% 11391% The format of the MagickTransformImageColorspace method is: 11392% 11393% MagickBooleanType MagickTransformImageColorspace(MagickWand *wand, 11394% const ColorspaceType colorspace) 11395% 11396% A description of each parameter follows: 11397% 11398% o wand: the magick wand. 11399% 11400% o colorspace: the image colorspace: UndefinedColorspace, RGBColorspace, 11401% GRAYColorspace, TransparentColorspace, OHTAColorspace, XYZColorspace, 11402% YCbCrColorspace, YCCColorspace, YIQColorspace, YPbPrColorspace, 11403% YPbPrColorspace, YUVColorspace, CMYKColorspace, sRGBColorspace, 11404% HSLColorspace, or HWBColorspace. 11405% 11406*/ 11407WandExport MagickBooleanType MagickTransformImageColorspace(MagickWand *wand, 11408 const ColorspaceType colorspace) 11409{ 11410 assert(wand != (MagickWand *) NULL); 11411 assert(wand->signature == WandSignature); 11412 if (wand->debug != MagickFalse) 11413 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11414 if (wand->images == (Image *) NULL) 11415 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11416 return(TransformImageColorspace(wand->images,colorspace)); 11417} 11418 11419/* 11420%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11421% % 11422% % 11423% % 11424% 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 % 11425% % 11426% % 11427% % 11428%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11429% 11430% MagickTransparentPaintImage() changes any pixel that matches color with the 11431% color defined by fill. 11432% 11433% The format of the MagickTransparentPaintImage method is: 11434% 11435% MagickBooleanType MagickTransparentPaintImage(MagickWand *wand, 11436% const PixelWand *target,const double alpha,const double fuzz, 11437% const MagickBooleanType invert) 11438% 11439% A description of each parameter follows: 11440% 11441% o wand: the magick wand. 11442% 11443% o target: Change this target color to specified opacity value within 11444% the image. 11445% 11446% o alpha: the level of transparency: 1.0 is fully opaque and 0.0 is fully 11447% transparent. 11448% 11449% o fuzz: By default target must match a particular pixel color 11450% exactly. However, in many cases two colors may differ by a small amount. 11451% The fuzz member of image defines how much tolerance is acceptable to 11452% consider two colors as the same. For example, set fuzz to 10 and the 11453% color red at intensities of 100 and 102 respectively are now interpreted 11454% as the same color for the purposes of the floodfill. 11455% 11456% o invert: paint any pixel that does not match the target color. 11457% 11458*/ 11459WandExport MagickBooleanType MagickTransparentPaintImage(MagickWand *wand, 11460 const PixelWand *target,const double alpha,const double fuzz, 11461 const MagickBooleanType invert) 11462{ 11463 MagickBooleanType 11464 status; 11465 11466 PixelInfo 11467 target_pixel; 11468 11469 assert(wand != (MagickWand *) NULL); 11470 assert(wand->signature == WandSignature); 11471 if (wand->debug != MagickFalse) 11472 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11473 if (wand->images == (Image *) NULL) 11474 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11475 PixelGetMagickColor(target,&target_pixel); 11476 wand->images->fuzz=fuzz; 11477 status=TransparentPaintImage(wand->images,&target_pixel,ClampToQuantum( 11478 QuantumRange*alpha),invert,&wand->images->exception); 11479 return(status); 11480} 11481 11482/* 11483%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11484% % 11485% % 11486% % 11487% M a g i c k T r a n s p o s e I m a g e % 11488% % 11489% % 11490% % 11491%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11492% 11493% MagickTransposeImage() creates a vertical mirror image by reflecting the 11494% pixels around the central x-axis while rotating them 90-degrees. 11495% 11496% The format of the MagickTransposeImage method is: 11497% 11498% MagickBooleanType MagickTransposeImage(MagickWand *wand) 11499% 11500% A description of each parameter follows: 11501% 11502% o wand: the magick wand. 11503% 11504*/ 11505WandExport MagickBooleanType MagickTransposeImage(MagickWand *wand) 11506{ 11507 Image 11508 *transpose_image; 11509 11510 assert(wand != (MagickWand *) NULL); 11511 assert(wand->signature == WandSignature); 11512 if (wand->debug != MagickFalse) 11513 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11514 if (wand->images == (Image *) NULL) 11515 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11516 transpose_image=TransposeImage(wand->images,wand->exception); 11517 if (transpose_image == (Image *) NULL) 11518 return(MagickFalse); 11519 ReplaceImageInList(&wand->images,transpose_image); 11520 return(MagickTrue); 11521} 11522 11523/* 11524%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11525% % 11526% % 11527% % 11528% M a g i c k T r a n s v e r s e I m a g e % 11529% % 11530% % 11531% % 11532%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11533% 11534% MagickTransverseImage() creates a horizontal mirror image by reflecting the 11535% pixels around the central y-axis while rotating them 270-degrees. 11536% 11537% The format of the MagickTransverseImage method is: 11538% 11539% MagickBooleanType MagickTransverseImage(MagickWand *wand) 11540% 11541% A description of each parameter follows: 11542% 11543% o wand: the magick wand. 11544% 11545*/ 11546WandExport MagickBooleanType MagickTransverseImage(MagickWand *wand) 11547{ 11548 Image 11549 *transverse_image; 11550 11551 assert(wand != (MagickWand *) NULL); 11552 assert(wand->signature == WandSignature); 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 transverse_image=TransverseImage(wand->images,wand->exception); 11558 if (transverse_image == (Image *) NULL) 11559 return(MagickFalse); 11560 ReplaceImageInList(&wand->images,transverse_image); 11561 return(MagickTrue); 11562} 11563 11564/* 11565%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11566% % 11567% % 11568% % 11569% M a g i c k T r i m I m a g e % 11570% % 11571% % 11572% % 11573%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11574% 11575% MagickTrimImage() remove edges that are the background color from the image. 11576% 11577% The format of the MagickTrimImage method is: 11578% 11579% MagickBooleanType MagickTrimImage(MagickWand *wand,const double fuzz) 11580% 11581% A description of each parameter follows: 11582% 11583% o wand: the magick wand. 11584% 11585% o fuzz: By default target must match a particular pixel color 11586% exactly. However, in many cases two colors may differ by a small amount. 11587% The fuzz member of image defines how much tolerance is acceptable to 11588% consider two colors as the same. For example, set fuzz to 10 and the 11589% color red at intensities of 100 and 102 respectively are now interpreted 11590% as the same color for the purposes of the floodfill. 11591% 11592*/ 11593WandExport MagickBooleanType MagickTrimImage(MagickWand *wand,const double fuzz) 11594{ 11595 Image 11596 *trim_image; 11597 11598 assert(wand != (MagickWand *) NULL); 11599 assert(wand->signature == WandSignature); 11600 if (wand->debug != MagickFalse) 11601 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11602 if (wand->images == (Image *) NULL) 11603 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11604 wand->images->fuzz=fuzz; 11605 trim_image=TrimImage(wand->images,wand->exception); 11606 if (trim_image == (Image *) NULL) 11607 return(MagickFalse); 11608 ReplaceImageInList(&wand->images,trim_image); 11609 return(MagickTrue); 11610} 11611 11612/* 11613%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11614% % 11615% % 11616% % 11617% M a g i c k U n i q u e I m a g e C o l o r s % 11618% % 11619% % 11620% % 11621%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11622% 11623% MagickUniqueImageColors() discards all but one of any pixel color. 11624% 11625% The format of the MagickUniqueImageColors method is: 11626% 11627% MagickBooleanType MagickUniqueImageColors(MagickWand *wand) 11628% 11629% A description of each parameter follows: 11630% 11631% o wand: the magick wand. 11632% 11633*/ 11634WandExport MagickBooleanType MagickUniqueImageColors(MagickWand *wand) 11635{ 11636 Image 11637 *unique_image; 11638 11639 assert(wand != (MagickWand *) NULL); 11640 assert(wand->signature == WandSignature); 11641 if (wand->debug != MagickFalse) 11642 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11643 if (wand->images == (Image *) NULL) 11644 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11645 unique_image=UniqueImageColors(wand->images,wand->exception); 11646 if (unique_image == (Image *) NULL) 11647 return(MagickFalse); 11648 ReplaceImageInList(&wand->images,unique_image); 11649 return(MagickTrue); 11650} 11651 11652/* 11653%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11654% % 11655% % 11656% % 11657% M a g i c k U n s h a r p M a s k I m a g e % 11658% % 11659% % 11660% % 11661%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11662% 11663% MagickUnsharpMaskImage() sharpens an image. We convolve the image with a 11664% Gaussian operator of the given radius and standard deviation (sigma). 11665% For reasonable results, radius should be larger than sigma. Use a radius 11666% of 0 and UnsharpMaskImage() selects a suitable radius for you. 11667% 11668% The format of the MagickUnsharpMaskImage method is: 11669% 11670% MagickBooleanType MagickUnsharpMaskImage(MagickWand *wand, 11671% const double radius,const double sigma,const double amount, 11672% const double threshold) 11673% 11674% A description of each parameter follows: 11675% 11676% o wand: the magick wand. 11677% 11678% o radius: the radius of the Gaussian, in pixels, not counting the center 11679% pixel. 11680% 11681% o sigma: the standard deviation of the Gaussian, in pixels. 11682% 11683% o amount: the percentage of the difference between the original and the 11684% blur image that is added back into the original. 11685% 11686% o threshold: the threshold in pixels needed to apply the diffence amount. 11687% 11688*/ 11689WandExport MagickBooleanType MagickUnsharpMaskImage(MagickWand *wand, 11690 const double radius,const double sigma,const double amount, 11691 const double threshold) 11692{ 11693 Image 11694 *unsharp_image; 11695 11696 assert(wand != (MagickWand *) NULL); 11697 assert(wand->signature == WandSignature); 11698 if (wand->debug != MagickFalse) 11699 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11700 if (wand->images == (Image *) NULL) 11701 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11702 unsharp_image=UnsharpMaskImage(wand->images,radius,sigma,amount,threshold, 11703 wand->exception); 11704 if (unsharp_image == (Image *) NULL) 11705 return(MagickFalse); 11706 ReplaceImageInList(&wand->images,unsharp_image); 11707 return(MagickTrue); 11708} 11709 11710/* 11711%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11712% % 11713% % 11714% % 11715% M a g i c k V i g n e t t e I m a g e % 11716% % 11717% % 11718% % 11719%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11720% 11721% MagickVignetteImage() softens the edges of the image in vignette style. 11722% 11723% The format of the MagickVignetteImage method is: 11724% 11725% MagickBooleanType MagickVignetteImage(MagickWand *wand, 11726% const double black_point,const double white_point,const ssize_t x, 11727% const ssize_t y) 11728% 11729% A description of each parameter follows: 11730% 11731% o wand: the magick wand. 11732% 11733% o black_point: the black point. 11734% 11735% o white_point: the white point. 11736% 11737% o x, y: Define the x and y ellipse offset. 11738% 11739*/ 11740WandExport MagickBooleanType MagickVignetteImage(MagickWand *wand, 11741 const double black_point,const double white_point,const ssize_t x,const ssize_t y) 11742{ 11743 Image 11744 *vignette_image; 11745 11746 assert(wand != (MagickWand *) NULL); 11747 assert(wand->signature == WandSignature); 11748 if (wand->debug != MagickFalse) 11749 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11750 if (wand->images == (Image *) NULL) 11751 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11752 vignette_image=VignetteImage(wand->images,black_point,white_point,x,y, 11753 wand->exception); 11754 if (vignette_image == (Image *) NULL) 11755 return(MagickFalse); 11756 ReplaceImageInList(&wand->images,vignette_image); 11757 return(MagickTrue); 11758} 11759 11760/* 11761%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11762% % 11763% % 11764% % 11765% M a g i c k W a v e I m a g e % 11766% % 11767% % 11768% % 11769%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11770% 11771% MagickWaveImage() creates a "ripple" effect in the image by shifting 11772% the pixels vertically along a sine wave whose amplitude and wavelength 11773% is specified by the given parameters. 11774% 11775% The format of the MagickWaveImage method is: 11776% 11777% MagickBooleanType MagickWaveImage(MagickWand *wand, 11778% const double amplitude,const double wave_length, 11779% const PixelInterpolateMethod method) 11780% 11781% A description of each parameter follows: 11782% 11783% o wand: the magick wand. 11784% 11785% o amplitude, wave_length: Define the amplitude and wave length of the 11786% sine wave. 11787% 11788% o method: the pixel interpolation method. 11789% 11790*/ 11791WandExport MagickBooleanType MagickWaveImage(MagickWand *wand, 11792 const double amplitude,const double wave_length, 11793 const PixelInterpolateMethod method) 11794{ 11795 Image 11796 *wave_image; 11797 11798 assert(wand != (MagickWand *) NULL); 11799 assert(wand->signature == WandSignature); 11800 if (wand->debug != MagickFalse) 11801 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11802 if (wand->images == (Image *) NULL) 11803 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11804 wave_image=WaveImage(wand->images,amplitude,wave_length,method, 11805 wand->exception); 11806 if (wave_image == (Image *) NULL) 11807 return(MagickFalse); 11808 ReplaceImageInList(&wand->images,wave_image); 11809 return(MagickTrue); 11810} 11811 11812/* 11813%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11814% % 11815% % 11816% % 11817% 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 % 11818% % 11819% % 11820% % 11821%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11822% 11823% MagickWhiteThresholdImage() is like ThresholdImage() but force all pixels 11824% above the threshold into white while leaving all pixels below the threshold 11825% unchanged. 11826% 11827% The format of the MagickWhiteThresholdImage method is: 11828% 11829% MagickBooleanType MagickWhiteThresholdImage(MagickWand *wand, 11830% const PixelWand *threshold) 11831% 11832% A description of each parameter follows: 11833% 11834% o wand: the magick wand. 11835% 11836% o threshold: the pixel wand. 11837% 11838*/ 11839WandExport MagickBooleanType MagickWhiteThresholdImage(MagickWand *wand, 11840 const PixelWand *threshold) 11841{ 11842 char 11843 thresholds[MaxTextExtent]; 11844 11845 MagickBooleanType 11846 status; 11847 11848 assert(wand != (MagickWand *) NULL); 11849 assert(wand->signature == WandSignature); 11850 if (wand->debug != MagickFalse) 11851 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11852 if (wand->images == (Image *) NULL) 11853 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11854 (void) FormatLocaleString(thresholds,MaxTextExtent, 11855 QuantumFormat "," QuantumFormat "," QuantumFormat "," QuantumFormat, 11856 PixelGetRedQuantum(threshold),PixelGetGreenQuantum(threshold), 11857 PixelGetBlueQuantum(threshold),PixelGetOpacityQuantum(threshold)); 11858 status=WhiteThresholdImage(wand->images,thresholds,&wand->images->exception); 11859 if (status == MagickFalse) 11860 InheritException(wand->exception,&wand->images->exception); 11861 return(status); 11862} 11863 11864/* 11865%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11866% % 11867% % 11868% % 11869% M a g i c k W r i t e I m a g e % 11870% % 11871% % 11872% % 11873%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11874% 11875% MagickWriteImage() writes an image to the specified filename. If the 11876% filename parameter is NULL, the image is written to the filename set 11877% by MagickReadImage() or MagickSetImageFilename(). 11878% 11879% The format of the MagickWriteImage method is: 11880% 11881% MagickBooleanType MagickWriteImage(MagickWand *wand, 11882% const char *filename) 11883% 11884% A description of each parameter follows: 11885% 11886% o wand: the magick wand. 11887% 11888% o filename: the image filename. 11889% 11890% 11891*/ 11892WandExport MagickBooleanType MagickWriteImage(MagickWand *wand, 11893 const char *filename) 11894{ 11895 Image 11896 *image; 11897 11898 ImageInfo 11899 *write_info; 11900 11901 MagickBooleanType 11902 status; 11903 11904 assert(wand != (MagickWand *) NULL); 11905 assert(wand->signature == WandSignature); 11906 if (wand->debug != MagickFalse) 11907 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11908 if (wand->images == (Image *) NULL) 11909 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11910 if (filename != (const char *) NULL) 11911 (void) CopyMagickString(wand->images->filename,filename,MaxTextExtent); 11912 image=CloneImage(wand->images,0,0,MagickTrue,wand->exception); 11913 if (image == (Image *) NULL) 11914 return(MagickFalse); 11915 write_info=CloneImageInfo(wand->image_info); 11916 write_info->adjoin=MagickTrue; 11917 status=WriteImage(write_info,image,&image->exception); 11918 image=DestroyImage(image); 11919 write_info=DestroyImageInfo(write_info); 11920 return(status); 11921} 11922 11923/* 11924%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11925% % 11926% % 11927% % 11928% M a g i c k W r i t e I m a g e F i l e % 11929% % 11930% % 11931% % 11932%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11933% 11934% MagickWriteImageFile() writes an image to an open file descriptor. 11935% 11936% The format of the MagickWriteImageFile method is: 11937% 11938% MagickBooleanType MagickWriteImageFile(MagickWand *wand,FILE *file) 11939% 11940% A description of each parameter follows: 11941% 11942% o wand: the magick wand. 11943% 11944% o file: the file descriptor. 11945% 11946*/ 11947WandExport MagickBooleanType MagickWriteImageFile(MagickWand *wand,FILE *file) 11948{ 11949 Image 11950 *image; 11951 11952 ImageInfo 11953 *write_info; 11954 11955 MagickBooleanType 11956 status; 11957 11958 assert(wand != (MagickWand *) NULL); 11959 assert(wand->signature == WandSignature); 11960 assert(file != (FILE *) NULL); 11961 if (wand->debug != MagickFalse) 11962 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11963 if (wand->images == (Image *) NULL) 11964 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11965 image=CloneImage(wand->images,0,0,MagickTrue,wand->exception); 11966 if (image == (Image *) NULL) 11967 return(MagickFalse); 11968 write_info=CloneImageInfo(wand->image_info); 11969 SetImageInfoFile(write_info,file); 11970 write_info->adjoin=MagickTrue; 11971 status=WriteImage(write_info,image,&image->exception); 11972 write_info=DestroyImageInfo(write_info); 11973 image=DestroyImage(image); 11974 return(status); 11975} 11976 11977/* 11978%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11979% % 11980% % 11981% % 11982% M a g i c k W r i t e I m a g e s % 11983% % 11984% % 11985% % 11986%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11987% 11988% MagickWriteImages() writes an image or image sequence. 11989% 11990% The format of the MagickWriteImages method is: 11991% 11992% MagickBooleanType MagickWriteImages(MagickWand *wand, 11993% const char *filename,const MagickBooleanType adjoin) 11994% 11995% A description of each parameter follows: 11996% 11997% o wand: the magick wand. 11998% 11999% o filename: the image filename. 12000% 12001% o adjoin: join images into a single multi-image file. 12002% 12003*/ 12004WandExport MagickBooleanType MagickWriteImages(MagickWand *wand, 12005 const char *filename,const MagickBooleanType adjoin) 12006{ 12007 ImageInfo 12008 *write_info; 12009 12010 MagickBooleanType 12011 status; 12012 12013 assert(wand != (MagickWand *) NULL); 12014 assert(wand->signature == WandSignature); 12015 if (wand->debug != MagickFalse) 12016 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 12017 if (wand->images == (Image *) NULL) 12018 ThrowWandException(WandError,"ContainsNoImages",wand->name); 12019 write_info=CloneImageInfo(wand->image_info); 12020 write_info->adjoin=adjoin; 12021 status=WriteImages(write_info,wand->images,filename,wand->exception); 12022 if (status == MagickFalse) 12023 InheritException(wand->exception,&wand->images->exception); 12024 write_info=DestroyImageInfo(write_info); 12025 return(status); 12026} 12027 12028/* 12029%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12030% % 12031% % 12032% % 12033% M a g i c k W r i t e I m a g e s F i l e % 12034% % 12035% % 12036% % 12037%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12038% 12039% MagickWriteImagesFile() writes an image sequence to an open file descriptor. 12040% 12041% The format of the MagickWriteImagesFile method is: 12042% 12043% MagickBooleanType MagickWriteImagesFile(MagickWand *wand,FILE *file) 12044% 12045% A description of each parameter follows: 12046% 12047% o wand: the magick wand. 12048% 12049% o file: the file descriptor. 12050% 12051*/ 12052WandExport MagickBooleanType MagickWriteImagesFile(MagickWand *wand,FILE *file) 12053{ 12054 ImageInfo 12055 *write_info; 12056 12057 MagickBooleanType 12058 status; 12059 12060 assert(wand != (MagickWand *) NULL); 12061 assert(wand->signature == WandSignature); 12062 if (wand->debug != MagickFalse) 12063 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 12064 if (wand->images == (Image *) NULL) 12065 ThrowWandException(WandError,"ContainsNoImages",wand->name); 12066 write_info=CloneImageInfo(wand->image_info); 12067 SetImageInfoFile(write_info,file); 12068 write_info->adjoin=MagickTrue; 12069 status=WriteImages(write_info,wand->images,(const char *) NULL, 12070 wand->exception); 12071 write_info=DestroyImageInfo(write_info); 12072 if (status == MagickFalse) 12073 InheritException(wand->exception,&wand->images->exception); 12074 return(status); 12075} 12076