magick-image.c revision 9dc4c51125c7242f63ea032e209ea65fe855f82f
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-2013 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 (IfMagickTrue(wand->debug)) 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->images=images; 114 clone_wand->debug=IsEventLogging(); 115 clone_wand->signature=WandSignature; 116 if (IfMagickTrue(clone_wand->debug)) 117 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",clone_wand->name); 118 return(clone_wand); 119} 120 121/* 122%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 123% % 124% % 125% % 126% G e t I m a g e F r o m M a g i c k W a n d % 127% % 128% % 129% % 130%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 131% 132% GetImageFromMagickWand() returns the current image from the magick wand. 133% 134% The format of the GetImageFromMagickWand method is: 135% 136% Image *GetImageFromMagickWand(const MagickWand *wand) 137% 138% A description of each parameter follows: 139% 140% o wand: the magick wand. 141% 142*/ 143WandExport Image *GetImageFromMagickWand(const MagickWand *wand) 144{ 145 assert(wand != (MagickWand *) NULL); 146 assert(wand->signature == WandSignature); 147 if (IfMagickTrue(wand->debug)) 148 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 149 if (wand->images == (Image *) NULL) 150 { 151 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 152 "ContainsNoImages","`%s'",wand->name); 153 return((Image *) NULL); 154 } 155 return(wand->images); 156} 157 158/* 159%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 160% % 161% % 162% % 163% 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 % 164% % 165% % 166% % 167%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 168% 169% MagickAdaptiveBlurImage() adaptively blurs the image by blurring 170% less intensely near image edges and more intensely far from edges. We 171% blur the image with a Gaussian operator of the given radius and standard 172% deviation (sigma). For reasonable results, radius should be larger than 173% sigma. Use a radius of 0 and MagickAdaptiveBlurImage() selects a 174% suitable radius for you. 175% 176% The format of the MagickAdaptiveBlurImage method is: 177% 178% MagickBooleanType MagickAdaptiveBlurImage(MagickWand *wand, 179% const double radius,const double sigma) 180% 181% A description of each parameter follows: 182% 183% o wand: the magick wand. 184% 185% o radius: the radius of the Gaussian, in pixels, not counting the center 186% pixel. 187% 188% o sigma: the standard deviation of the Gaussian, in pixels. 189% 190*/ 191WandExport MagickBooleanType MagickAdaptiveBlurImage(MagickWand *wand, 192 const double radius,const double sigma) 193{ 194 Image 195 *sharp_image; 196 197 assert(wand != (MagickWand *) NULL); 198 assert(wand->signature == WandSignature); 199 if (IfMagickTrue(wand->debug)) 200 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 201 if (wand->images == (Image *) NULL) 202 ThrowWandException(WandError,"ContainsNoImages",wand->name); 203 sharp_image=AdaptiveBlurImage(wand->images,radius,sigma,wand->exception); 204 if (sharp_image == (Image *) NULL) 205 return(MagickFalse); 206 ReplaceImageInList(&wand->images,sharp_image); 207 return(MagickTrue); 208} 209 210/* 211%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 212% % 213% % 214% % 215% 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 % 216% % 217% % 218% % 219%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 220% 221% MagickAdaptiveResizeImage() adaptively resize image with data dependent 222% triangulation. 223% 224% MagickBooleanType MagickAdaptiveResizeImage(MagickWand *wand, 225% const size_t columns,const size_t rows) 226% 227% A description of each parameter follows: 228% 229% o wand: the magick wand. 230% 231% o columns: the number of columns in the scaled image. 232% 233% o rows: the number of rows in the scaled image. 234% 235*/ 236WandExport MagickBooleanType MagickAdaptiveResizeImage(MagickWand *wand, 237 const size_t columns,const size_t rows) 238{ 239 Image 240 *resize_image; 241 242 assert(wand != (MagickWand *) NULL); 243 assert(wand->signature == WandSignature); 244 if (IfMagickTrue(wand->debug)) 245 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 246 if (wand->images == (Image *) NULL) 247 ThrowWandException(WandError,"ContainsNoImages",wand->name); 248 resize_image=AdaptiveResizeImage(wand->images,columns,rows,wand->exception); 249 if (resize_image == (Image *) NULL) 250 return(MagickFalse); 251 ReplaceImageInList(&wand->images,resize_image); 252 return(MagickTrue); 253} 254 255/* 256%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 257% % 258% % 259% % 260% 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 % 261% % 262% % 263% % 264%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 265% 266% MagickAdaptiveSharpenImage() adaptively sharpens the image by sharpening 267% more intensely near image edges and less intensely far from edges. We 268% sharpen the image with a Gaussian operator of the given radius and standard 269% deviation (sigma). For reasonable results, radius should be larger than 270% sigma. Use a radius of 0 and MagickAdaptiveSharpenImage() selects a 271% suitable radius for you. 272% 273% The format of the MagickAdaptiveSharpenImage method is: 274% 275% MagickBooleanType MagickAdaptiveSharpenImage(MagickWand *wand, 276% const double radius,const double sigma) 277% 278% A description of each parameter follows: 279% 280% o wand: the magick wand. 281% 282% o radius: the radius of the Gaussian, in pixels, not counting the center 283% pixel. 284% 285% o sigma: the standard deviation of the Gaussian, in pixels. 286% 287*/ 288WandExport MagickBooleanType MagickAdaptiveSharpenImage(MagickWand *wand, 289 const double radius,const double sigma) 290{ 291 Image 292 *sharp_image; 293 294 assert(wand != (MagickWand *) NULL); 295 assert(wand->signature == WandSignature); 296 if (IfMagickTrue(wand->debug)) 297 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 298 if (wand->images == (Image *) NULL) 299 ThrowWandException(WandError,"ContainsNoImages",wand->name); 300 sharp_image=AdaptiveSharpenImage(wand->images,radius,sigma,wand->exception); 301 if (sharp_image == (Image *) NULL) 302 return(MagickFalse); 303 ReplaceImageInList(&wand->images,sharp_image); 304 return(MagickTrue); 305} 306 307/* 308%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 309% % 310% % 311% % 312% 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 % 313% % 314% % 315% % 316%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 317% 318% MagickAdaptiveThresholdImage() selects an individual threshold for each pixel 319% based on the range of intensity values in its local neighborhood. This 320% allows for thresholding of an image whose global intensity histogram 321% doesn't contain distinctive peaks. 322% 323% The format of the AdaptiveThresholdImage method is: 324% 325% MagickBooleanType MagickAdaptiveThresholdImage(MagickWand *wand, 326% const size_t width,const size_t height,const double bias) 327% 328% A description of each parameter follows: 329% 330% o wand: the magick wand. 331% 332% o width: the width of the local neighborhood. 333% 334% o height: the height of the local neighborhood. 335% 336% o offset: the mean bias. 337% 338*/ 339WandExport MagickBooleanType MagickAdaptiveThresholdImage(MagickWand *wand, 340 const size_t width,const size_t height,const double bias) 341{ 342 Image 343 *threshold_image; 344 345 assert(wand != (MagickWand *) NULL); 346 assert(wand->signature == WandSignature); 347 if (IfMagickTrue(wand->debug)) 348 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 349 if (wand->images == (Image *) NULL) 350 ThrowWandException(WandError,"ContainsNoImages",wand->name); 351 threshold_image=AdaptiveThresholdImage(wand->images,width,height,bias, 352 wand->exception); 353 if (threshold_image == (Image *) NULL) 354 return(MagickFalse); 355 ReplaceImageInList(&wand->images,threshold_image); 356 return(MagickTrue); 357} 358 359/* 360%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 361% % 362% % 363% % 364% M a g i c k A d d I m a g e % 365% % 366% % 367% % 368%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 369% 370% MagickAddImage() adds a clone of the images from the second wand and 371% inserts them into the first wand. 372% 373% Use MagickSetLastIterator(), to append new images into an existing wand, 374% current image will be set to last image so later adds with also be 375% appened to end of wand. 376% 377% Use MagickSetFirstIterator() to prepend new images into wand, any more 378% images added will also be prepended before other images in the wand. 379% However the order of a list of new images will not change. 380% 381% Otherwise the new images will be inserted just after the current image, 382% and any later image will also be added after this current image but 383% before the previously added images. Caution is advised when multiple 384% image adds are inserted into the middle of the wand image list. 385% 386% The format of the MagickAddImage method is: 387% 388% MagickBooleanType MagickAddImage(MagickWand *wand, 389% const MagickWand *add_wand) 390% 391% A description of each parameter follows: 392% 393% o wand: the magick wand. 394% 395% o add_wand: A wand that contains the image list to be added 396% 397*/ 398static inline MagickBooleanType InsertImageInWand(MagickWand *wand, 399 Image *images) 400{ 401 if (wand->images == (Image *) NULL) 402 { 403 /* 404 No images in wand, just add them, set current as appropriate. 405 */ 406 if (IfMagickTrue(wand->insert_before)) 407 wand->images=GetFirstImageInList(images); 408 else 409 wand->images=GetLastImageInList(images); 410 return(MagickTrue); 411 } 412 /* user jumped to first image, so prepend new images - remain active */ 413 if (IfMagickTrue((wand->insert_before)) && 414 (wand->images->previous == (Image *) NULL)) 415 { 416 PrependImageToList(&wand->images,images); 417 wand->images=GetFirstImageInList(images); 418 return(MagickTrue); 419 } 420 /* 421 Note you should never have 'insert_before' true when current image is not 422 the first image in the wand! That is no insert before current image, only 423 after current image 424 */ 425 if (wand->images->next == (Image *) NULL) 426 { 427 /* 428 At last image, append new images. 429 */ 430 InsertImageInList(&wand->images,images); 431 wand->images=GetLastImageInList(images); 432 return(MagickTrue); 433 } 434 /* 435 Insert new images, just after the current image. 436 */ 437 InsertImageInList(&wand->images,images); 438 return(MagickTrue); 439} 440 441WandExport MagickBooleanType MagickAddImage(MagickWand *wand, 442 const MagickWand *add_wand) 443{ 444 Image 445 *images; 446 447 assert(wand != (MagickWand *) NULL); 448 assert(wand->signature == WandSignature); 449 if (IfMagickTrue(wand->debug)) 450 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 451 assert(add_wand != (MagickWand *) NULL); 452 assert(add_wand->signature == WandSignature); 453 if (add_wand->images == (Image *) NULL) 454 ThrowWandException(WandError,"ContainsNoImages",add_wand->name); 455 /* 456 Clone images in second wand, and insert into first. 457 */ 458 images=CloneImageList(add_wand->images,wand->exception); 459 if (images == (Image *) NULL) 460 return(MagickFalse); 461 return(InsertImageInWand(wand,images)); 462} 463 464/* 465%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 466% % 467% % 468% % 469% M a g i c k A d d N o i s e I m a g e % 470% % 471% % 472% % 473%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 474% 475% MagickAddNoiseImage() adds random noise to the image. 476% 477% The format of the MagickAddNoiseImage method is: 478% 479% MagickBooleanType MagickAddNoiseImage(MagickWand *wand, 480% const NoiseType noise_type,const double attenuate) 481% 482% A description of each parameter follows: 483% 484% o wand: the magick wand. 485% 486% o noise_type: The type of noise: Uniform, Gaussian, Multiplicative, 487% Impulse, Laplacian, or Poisson. 488% 489% o attenuate: attenuate the random distribution. 490% 491*/ 492WandExport MagickBooleanType MagickAddNoiseImage(MagickWand *wand, 493 const NoiseType noise_type,const double attenuate) 494{ 495 Image 496 *noise_image; 497 498 assert(wand != (MagickWand *) NULL); 499 assert(wand->signature == WandSignature); 500 if (IfMagickTrue(wand->debug)) 501 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 502 if (wand->images == (Image *) NULL) 503 ThrowWandException(WandError,"ContainsNoImages",wand->name); 504 noise_image=AddNoiseImage(wand->images,noise_type,attenuate,wand->exception); 505 if (noise_image == (Image *) NULL) 506 return(MagickFalse); 507 ReplaceImageInList(&wand->images,noise_image); 508 return(MagickTrue); 509} 510 511/* 512%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 513% % 514% % 515% % 516% 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 % 517% % 518% % 519% % 520%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 521% 522% MagickAffineTransformImage() transforms an image as dictated by the affine 523% matrix of the drawing wand. 524% 525% The format of the MagickAffineTransformImage method is: 526% 527% MagickBooleanType MagickAffineTransformImage(MagickWand *wand, 528% const DrawingWand *drawing_wand) 529% 530% A description of each parameter follows: 531% 532% o wand: the magick wand. 533% 534% o drawing_wand: the draw wand. 535% 536*/ 537WandExport MagickBooleanType MagickAffineTransformImage(MagickWand *wand, 538 const DrawingWand *drawing_wand) 539{ 540 DrawInfo 541 *draw_info; 542 543 Image 544 *affine_image; 545 546 assert(wand != (MagickWand *) NULL); 547 assert(wand->signature == WandSignature); 548 if (IfMagickTrue(wand->debug)) 549 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 550 if (wand->images == (Image *) NULL) 551 ThrowWandException(WandError,"ContainsNoImages",wand->name); 552 draw_info=PeekDrawingWand(drawing_wand); 553 if (draw_info == (DrawInfo *) NULL) 554 return(MagickFalse); 555 affine_image=AffineTransformImage(wand->images,&draw_info->affine, 556 wand->exception); 557 draw_info=DestroyDrawInfo(draw_info); 558 if (affine_image == (Image *) NULL) 559 return(MagickFalse); 560 ReplaceImageInList(&wand->images,affine_image); 561 return(MagickTrue); 562} 563 564/* 565%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 566% % 567% % 568% % 569% M a g i c k A n n o t a t e I m a g e % 570% % 571% % 572% % 573%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 574% 575% MagickAnnotateImage() annotates an image with text. 576% 577% The format of the MagickAnnotateImage method is: 578% 579% MagickBooleanType MagickAnnotateImage(MagickWand *wand, 580% const DrawingWand *drawing_wand,const double x,const double y, 581% const double angle,const char *text) 582% 583% A description of each parameter follows: 584% 585% o wand: the magick wand. 586% 587% o drawing_wand: the draw wand. 588% 589% o x: x ordinate to left of text 590% 591% o y: y ordinate to text baseline 592% 593% o angle: rotate text relative to this angle. 594% 595% o text: text to draw 596% 597*/ 598WandExport MagickBooleanType MagickAnnotateImage(MagickWand *wand, 599 const DrawingWand *drawing_wand,const double x,const double y, 600 const double angle,const char *text) 601{ 602 char 603 geometry[MaxTextExtent]; 604 605 DrawInfo 606 *draw_info; 607 608 MagickBooleanType 609 status; 610 611 assert(wand != (MagickWand *) NULL); 612 assert(wand->signature == WandSignature); 613 if (IfMagickTrue(wand->debug)) 614 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 615 if (wand->images == (Image *) NULL) 616 ThrowWandException(WandError,"ContainsNoImages",wand->name); 617 draw_info=PeekDrawingWand(drawing_wand); 618 if (draw_info == (DrawInfo *) NULL) 619 return(MagickFalse); 620 (void) CloneString(&draw_info->text,text); 621 (void) FormatLocaleString(geometry,MaxTextExtent,"%+g%+g",x,y); 622 draw_info->affine.sx=cos((double) DegreesToRadians(fmod(angle,360.0))); 623 draw_info->affine.rx=sin((double) DegreesToRadians(fmod(angle,360.0))); 624 draw_info->affine.ry=(-sin((double) DegreesToRadians(fmod(angle,360.0)))); 625 draw_info->affine.sy=cos((double) DegreesToRadians(fmod(angle,360.0))); 626 (void) CloneString(&draw_info->geometry,geometry); 627 status=AnnotateImage(wand->images,draw_info,wand->exception); 628 draw_info=DestroyDrawInfo(draw_info); 629 return(status); 630} 631 632/* 633%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 634% % 635% % 636% % 637% M a g i c k A n i m a t e I m a g e s % 638% % 639% % 640% % 641%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 642% 643% MagickAnimateImages() animates an image or image sequence. 644% 645% The format of the MagickAnimateImages method is: 646% 647% MagickBooleanType MagickAnimateImages(MagickWand *wand, 648% const char *server_name) 649% 650% A description of each parameter follows: 651% 652% o wand: the magick wand. 653% 654% o server_name: the X server name. 655% 656*/ 657WandExport MagickBooleanType MagickAnimateImages(MagickWand *wand, 658 const char *server_name) 659{ 660 MagickBooleanType 661 status; 662 663 assert(wand != (MagickWand *) NULL); 664 assert(wand->signature == WandSignature); 665 if (IfMagickTrue(wand->debug)) 666 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 667 (void) CloneString(&wand->image_info->server_name,server_name); 668 status=AnimateImages(wand->image_info,wand->images,wand->exception); 669 return(status); 670} 671 672/* 673%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 674% % 675% % 676% % 677% M a g i c k A p p e n d I m a g e s % 678% % 679% % 680% % 681%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 682% 683% MagickAppendImages() append the images in a wand from the current image 684% onwards, creating a new wand with the single image result. This is 685% affected by the gravity and background settings of the first image. 686% 687% Typically you would call either MagickResetIterator() or 688% MagickSetFirstImage() before calling this function to ensure that all 689% the images in the wand's image list will be appended together. 690% 691% The format of the MagickAppendImages method is: 692% 693% MagickWand *MagickAppendImages(MagickWand *wand, 694% const MagickBooleanType stack) 695% 696% A description of each parameter follows: 697% 698% o wand: the magick wand. 699% 700% o stack: By default, images are stacked left-to-right. Set stack to 701% MagickTrue to stack them top-to-bottom. 702% 703*/ 704WandExport MagickWand *MagickAppendImages(MagickWand *wand, 705 const MagickBooleanType stack) 706{ 707 Image 708 *append_image; 709 710 assert(wand != (MagickWand *) NULL); 711 assert(wand->signature == WandSignature); 712 if (IfMagickTrue(wand->debug)) 713 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 714 if (wand->images == (Image *) NULL) 715 return((MagickWand *) NULL); 716 append_image=AppendImages(wand->images,stack,wand->exception); 717 if (append_image == (Image *) NULL) 718 return((MagickWand *) NULL); 719 return(CloneMagickWandFromImages(wand,append_image)); 720} 721 722/* 723%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 724% % 725% % 726% % 727% M a g i c k A u t o G a m m a I m a g e % 728% % 729% % 730% % 731%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 732% 733% MagickAutoGammaImage() extracts the 'mean' from the image and adjust the 734% image to try make set its gamma appropriatally. 735% 736% The format of the MagickAutoGammaImage method is: 737% 738% MagickBooleanType MagickAutoGammaImage(MagickWand *wand) 739% 740% A description of each parameter follows: 741% 742% o wand: the magick wand. 743% 744*/ 745WandExport MagickBooleanType MagickAutoGammaImage(MagickWand *wand) 746{ 747 MagickBooleanType 748 status; 749 750 assert(wand != (MagickWand *) NULL); 751 assert(wand->signature == WandSignature); 752 if (IfMagickTrue(wand->debug)) 753 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 754 if (wand->images == (Image *) NULL) 755 ThrowWandException(WandError,"ContainsNoImages",wand->name); 756 status=AutoGammaImage(wand->images,wand->exception); 757 return(status); 758} 759 760/* 761%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 762% % 763% % 764% % 765% M a g i c k A u t o L e v e l I m a g e % 766% % 767% % 768% % 769%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 770% 771% MagickAutoLevelImage() adjusts the levels of a particular image channel by 772% scaling the minimum and maximum values to the full quantum range. 773% 774% The format of the MagickAutoLevelImage method is: 775% 776% MagickBooleanType MagickAutoLevelImage(MagickWand *wand) 777% 778% A description of each parameter follows: 779% 780% o wand: the magick wand. 781% 782*/ 783WandExport MagickBooleanType MagickAutoLevelImage(MagickWand *wand) 784{ 785 MagickBooleanType 786 status; 787 788 assert(wand != (MagickWand *) NULL); 789 assert(wand->signature == WandSignature); 790 if (IfMagickTrue(wand->debug)) 791 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 792 if (wand->images == (Image *) NULL) 793 ThrowWandException(WandError,"ContainsNoImages",wand->name); 794 status=AutoLevelImage(wand->images,wand->exception); 795 return(status); 796} 797 798/* 799%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 800% % 801% % 802% % 803% 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 % 804% % 805% % 806% % 807%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 808% 809% MagickBlackThresholdImage() is like MagickThresholdImage() but forces all 810% pixels below the threshold into black while leaving all pixels above the 811% threshold unchanged. 812% 813% The format of the MagickBlackThresholdImage method is: 814% 815% MagickBooleanType MagickBlackThresholdImage(MagickWand *wand, 816% const PixelWand *threshold) 817% 818% A description of each parameter follows: 819% 820% o wand: the magick wand. 821% 822% o threshold: the pixel wand. 823% 824*/ 825WandExport MagickBooleanType MagickBlackThresholdImage(MagickWand *wand, 826 const PixelWand *threshold) 827{ 828 char 829 thresholds[MaxTextExtent]; 830 831 MagickBooleanType 832 status; 833 834 assert(wand != (MagickWand *) NULL); 835 assert(wand->signature == WandSignature); 836 if (IfMagickTrue(wand->debug)) 837 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 838 if (wand->images == (Image *) NULL) 839 ThrowWandException(WandError,"ContainsNoImages",wand->name); 840 (void) FormatLocaleString(thresholds,MaxTextExtent, 841 QuantumFormat "," QuantumFormat "," QuantumFormat "," QuantumFormat, 842 PixelGetRedQuantum(threshold),PixelGetGreenQuantum(threshold), 843 PixelGetBlueQuantum(threshold),PixelGetAlphaQuantum(threshold)); 844 status=BlackThresholdImage(wand->images,thresholds,wand->exception); 845 return(status); 846} 847 848/* 849%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 850% % 851% % 852% % 853% M a g i c k B l u e S h i f t I m a g e % 854% % 855% % 856% % 857%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 858% 859% MagickBlueShiftImage() mutes the colors of the image to simulate a scene at 860% nighttime in the moonlight. 861% 862% The format of the MagickBlueShiftImage method is: 863% 864% MagickBooleanType MagickBlueShiftImage(MagickWand *wand, 865% const double factor) 866% 867% A description of each parameter follows: 868% 869% o wand: the magick wand. 870% 871% o factor: the blue shift factor (default 1.5) 872% 873*/ 874WandExport MagickBooleanType MagickBlueShiftImage(MagickWand *wand, 875 const double factor) 876{ 877 Image 878 *shift_image; 879 880 assert(wand != (MagickWand *) NULL); 881 assert(wand->signature == WandSignature); 882 if (IfMagickTrue(wand->debug)) 883 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 884 if (wand->images == (Image *) NULL) 885 ThrowWandException(WandError,"ContainsNoImages",wand->name); 886 shift_image=BlueShiftImage(wand->images,factor,wand->exception); 887 if (shift_image == (Image *) NULL) 888 return(MagickFalse); 889 ReplaceImageInList(&wand->images,shift_image); 890 return(MagickTrue); 891} 892 893/* 894%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 895% % 896% % 897% % 898% M a g i c k B l u r I m a g e % 899% % 900% % 901% % 902%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 903% 904% MagickBlurImage() blurs an image. We convolve the image with a 905% gaussian operator of the given radius and standard deviation (sigma). 906% For reasonable results, the radius should be larger than sigma. Use a 907% radius of 0 and BlurImage() selects a suitable radius for you. 908% 909% The format of the MagickBlurImage method is: 910% 911% MagickBooleanType MagickBlurImage(MagickWand *wand,const double radius, 912% const double sigma) 913% 914% A description of each parameter follows: 915% 916% o wand: the magick wand. 917% 918% o radius: the radius of the , in pixels, not counting the center 919% pixel. 920% 921% o sigma: the standard deviation of the , in pixels. 922% 923*/ 924WandExport MagickBooleanType MagickBlurImage(MagickWand *wand, 925 const double radius,const double sigma) 926{ 927 Image 928 *blur_image; 929 930 assert(wand != (MagickWand *) NULL); 931 assert(wand->signature == WandSignature); 932 if (IfMagickTrue(wand->debug)) 933 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 934 if (wand->images == (Image *) NULL) 935 ThrowWandException(WandError,"ContainsNoImages",wand->name); 936 blur_image=BlurImage(wand->images,radius,sigma,wand->exception); 937 if (blur_image == (Image *) NULL) 938 return(MagickFalse); 939 ReplaceImageInList(&wand->images,blur_image); 940 return(MagickTrue); 941} 942 943/* 944%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 945% % 946% % 947% % 948% M a g i c k B o r d e r I m a g e % 949% % 950% % 951% % 952%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 953% 954% MagickBorderImage() surrounds the image with a border of the color defined 955% by the bordercolor pixel wand. 956% 957% The format of the MagickBorderImage method is: 958% 959% MagickBooleanType MagickBorderImage(MagickWand *wand, 960% const PixelWand *bordercolor,const size_t width, 961% const size_t height,const CompositeOperator compose) 962% 963% A description of each parameter follows: 964% 965% o wand: the magick wand. 966% 967% o bordercolor: the border color pixel wand. 968% 969% o width: the border width. 970% 971% o height: the border height. 972% 973% o compose: the composite operator. 974% 975*/ 976WandExport MagickBooleanType MagickBorderImage(MagickWand *wand, 977 const PixelWand *bordercolor,const size_t width,const size_t height, 978 const CompositeOperator compose) 979{ 980 Image 981 *border_image; 982 983 RectangleInfo 984 border_info; 985 986 assert(wand != (MagickWand *) NULL); 987 assert(wand->signature == WandSignature); 988 if (IfMagickTrue(wand->debug)) 989 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 990 if (wand->images == (Image *) NULL) 991 ThrowWandException(WandError,"ContainsNoImages",wand->name); 992 border_info.width=width; 993 border_info.height=height; 994 border_info.x=0; 995 border_info.y=0; 996 PixelGetQuantumPacket(bordercolor,&wand->images->border_color); 997 border_image=BorderImage(wand->images,&border_info,compose,wand->exception); 998 if (border_image == (Image *) NULL) 999 return(MagickFalse); 1000 ReplaceImageInList(&wand->images,border_image); 1001 return(MagickTrue); 1002} 1003 1004/* 1005%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1006% % 1007% % 1008% % 1009% 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 % 1010% % 1011% % 1012% % 1013%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1014% 1015% Use MagickBrightnessContrastImage() to change the brightness and/or contrast 1016% of an image. It converts the brightness and contrast parameters into slope 1017% and intercept and calls a polynomical function to apply to the image. 1018 1019% 1020% The format of the MagickBrightnessContrastImage method is: 1021% 1022% MagickBooleanType MagickBrightnessContrastImage(MagickWand *wand, 1023% const double brightness,const double contrast) 1024% 1025% A description of each parameter follows: 1026% 1027% o wand: the magick wand. 1028% 1029% o brightness: the brightness percent (-100 .. 100). 1030% 1031% o contrast: the contrast percent (-100 .. 100). 1032% 1033*/ 1034WandExport MagickBooleanType MagickBrightnessContrastImage( 1035 MagickWand *wand,const double brightness,const double contrast) 1036{ 1037 MagickBooleanType 1038 status; 1039 1040 assert(wand != (MagickWand *) NULL); 1041 assert(wand->signature == WandSignature); 1042 if (IfMagickTrue(wand->debug)) 1043 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1044 if (wand->images == (Image *) NULL) 1045 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1046 status=BrightnessContrastImage(wand->images,brightness,contrast, 1047 wand->exception); 1048 return(status); 1049} 1050 1051/* 1052%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1053% % 1054% % 1055% % 1056% M a g i c k C h a n n e l F x I m a g e % 1057% % 1058% % 1059% % 1060%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1061% 1062% MagickChannelFxImage() applies a channel expression to the specified image. 1063% The expression consists of one or more channels, either mnemonic or numeric 1064% (e.g. red, 1), separated by actions as follows: 1065% 1066% <=> exchange two channels (e.g. red<=>blue) 1067% => transfer a channel to another (e.g. red=>green) 1068% , separate channel operations (e.g. red, green) 1069% | read channels from next input image (e.g. red | green) 1070% ; write channels to next output image (e.g. red; green; blue) 1071% 1072% A channel without a operation symbol implies extract. For example, to create 1073% 3 grayscale images from the red, green, and blue channels of an image, use: 1074% 1075% -channel-fx "red; green; blue" 1076% 1077% The format of the MagickChannelFxImage method is: 1078% 1079% MagickWand *MagickChannelFxImage(MagickWand *wand,const char *expression) 1080% 1081% A description of each parameter follows: 1082% 1083% o wand: the magick wand. 1084% 1085% o expression: the expression. 1086% 1087*/ 1088WandExport MagickWand *MagickChannelFxImage(MagickWand *wand, 1089 const char *expression) 1090{ 1091 Image 1092 *fx_image; 1093 1094 assert(wand != (MagickWand *) NULL); 1095 assert(wand->signature == WandSignature); 1096 if (IfMagickTrue(wand->debug)) 1097 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1098 if (wand->images == (Image *) NULL) 1099 return((MagickWand *) NULL); 1100 fx_image=ChannelFxImage(wand->images,expression,wand->exception); 1101 if (fx_image == (Image *) NULL) 1102 return((MagickWand *) NULL); 1103 return(CloneMagickWandFromImages(wand,fx_image)); 1104} 1105 1106/* 1107%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1108% % 1109% % 1110% % 1111% M a g i c k C h a r c o a l I m a g e % 1112% % 1113% % 1114% % 1115%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1116% 1117% MagickCharcoalImage() simulates a charcoal drawing. 1118% 1119% The format of the MagickCharcoalImage method is: 1120% 1121% MagickBooleanType MagickCharcoalImage(MagickWand *wand, 1122% const double radius,const double sigma) 1123% 1124% A description of each parameter follows: 1125% 1126% o wand: the magick wand. 1127% 1128% o radius: the radius of the Gaussian, in pixels, not counting the center 1129% pixel. 1130% 1131% o sigma: the standard deviation of the Gaussian, in pixels. 1132% 1133*/ 1134WandExport MagickBooleanType MagickCharcoalImage(MagickWand *wand, 1135 const double radius,const double sigma) 1136{ 1137 Image 1138 *charcoal_image; 1139 1140 assert(wand != (MagickWand *) NULL); 1141 assert(wand->signature == WandSignature); 1142 if (IfMagickTrue(wand->debug)) 1143 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1144 if (wand->images == (Image *) NULL) 1145 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1146 charcoal_image=CharcoalImage(wand->images,radius,sigma,wand->exception); 1147 if (charcoal_image == (Image *) NULL) 1148 return(MagickFalse); 1149 ReplaceImageInList(&wand->images,charcoal_image); 1150 return(MagickTrue); 1151} 1152 1153/* 1154%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1155% % 1156% % 1157% % 1158% M a g i c k C h o p I m a g e % 1159% % 1160% % 1161% % 1162%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1163% 1164% MagickChopImage() removes a region of an image and collapses the image to 1165% occupy the removed portion 1166% 1167% The format of the MagickChopImage method is: 1168% 1169% MagickBooleanType MagickChopImage(MagickWand *wand, 1170% const size_t width,const size_t height,const ssize_t x, 1171% const ssize_t y) 1172% 1173% A description of each parameter follows: 1174% 1175% o wand: the magick wand. 1176% 1177% o width: the region width. 1178% 1179% o height: the region height. 1180% 1181% o x: the region x offset. 1182% 1183% o y: the region y offset. 1184% 1185% 1186*/ 1187WandExport MagickBooleanType MagickChopImage(MagickWand *wand, 1188 const size_t width,const size_t height,const ssize_t x, 1189 const ssize_t y) 1190{ 1191 Image 1192 *chop_image; 1193 1194 RectangleInfo 1195 chop; 1196 1197 assert(wand != (MagickWand *) NULL); 1198 assert(wand->signature == WandSignature); 1199 if (IfMagickTrue(wand->debug)) 1200 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1201 if (wand->images == (Image *) NULL) 1202 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1203 chop.width=width; 1204 chop.height=height; 1205 chop.x=x; 1206 chop.y=y; 1207 chop_image=ChopImage(wand->images,&chop,wand->exception); 1208 if (chop_image == (Image *) NULL) 1209 return(MagickFalse); 1210 ReplaceImageInList(&wand->images,chop_image); 1211 return(MagickTrue); 1212} 1213 1214/* 1215%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1216% % 1217% % 1218% % 1219% M a g i c k C l a m p I m a g e % 1220% % 1221% % 1222% % 1223%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1224% 1225% MagickClampImage() restricts the color range from 0 to the quantum depth. 1226% 1227% The format of the MagickClampImage method is: 1228% 1229% MagickBooleanType MagickClampImage(MagickWand *wand) 1230% 1231% A description of each parameter follows: 1232% 1233% o wand: the magick wand. 1234% 1235% o channel: the channel. 1236% 1237*/ 1238WandExport MagickBooleanType MagickClampImage(MagickWand *wand) 1239{ 1240 assert(wand != (MagickWand *) NULL); 1241 assert(wand->signature == WandSignature); 1242 if (IfMagickTrue(wand->debug)) 1243 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1244 if (wand->images == (Image *) NULL) 1245 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1246 return(ClampImage(wand->images,wand->exception)); 1247} 1248 1249/* 1250%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1251% % 1252% % 1253% % 1254% M a g i c k C l i p I m a g e % 1255% % 1256% % 1257% % 1258%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1259% 1260% MagickClipImage() clips along the first path from the 8BIM profile, if 1261% present. 1262% 1263% The format of the MagickClipImage method is: 1264% 1265% MagickBooleanType MagickClipImage(MagickWand *wand) 1266% 1267% A description of each parameter follows: 1268% 1269% o wand: the magick wand. 1270% 1271*/ 1272WandExport MagickBooleanType MagickClipImage(MagickWand *wand) 1273{ 1274 MagickBooleanType 1275 status; 1276 1277 assert(wand != (MagickWand *) NULL); 1278 assert(wand->signature == WandSignature); 1279 if (IfMagickTrue(wand->debug)) 1280 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1281 if (wand->images == (Image *) NULL) 1282 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1283 status=ClipImage(wand->images,wand->exception); 1284 return(status); 1285} 1286 1287/* 1288%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1289% % 1290% % 1291% % 1292% M a g i c k C l i p I m a g e P a t h % 1293% % 1294% % 1295% % 1296%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1297% 1298% MagickClipImagePath() clips along the named paths from the 8BIM profile, if 1299% present. Later operations take effect inside the path. Id may be a number 1300% if preceded with #, to work on a numbered path, e.g., "#1" to use the first 1301% path. 1302% 1303% The format of the MagickClipImagePath method is: 1304% 1305% MagickBooleanType MagickClipImagePath(MagickWand *wand, 1306% const char *pathname,const MagickBooleanType inside) 1307% 1308% A description of each parameter follows: 1309% 1310% o wand: the magick wand. 1311% 1312% o pathname: name of clipping path resource. If name is preceded by #, use 1313% clipping path numbered by name. 1314% 1315% o inside: if non-zero, later operations take effect inside clipping path. 1316% Otherwise later operations take effect outside clipping path. 1317% 1318*/ 1319WandExport MagickBooleanType MagickClipImagePath(MagickWand *wand, 1320 const char *pathname,const MagickBooleanType inside) 1321{ 1322 MagickBooleanType 1323 status; 1324 1325 assert(wand != (MagickWand *) NULL); 1326 assert(wand->signature == WandSignature); 1327 if (IfMagickTrue(wand->debug)) 1328 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1329 if (wand->images == (Image *) NULL) 1330 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1331 status=ClipImagePath(wand->images,pathname,inside,wand->exception); 1332 return(status); 1333} 1334 1335/* 1336%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1337% % 1338% % 1339% % 1340% M a g i c k C l u t I m a g e % 1341% % 1342% % 1343% % 1344%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1345% 1346% MagickClutImage() replaces colors in the image from a color lookup table. 1347% 1348% The format of the MagickClutImage method is: 1349% 1350% MagickBooleanType MagickClutImage(MagickWand *wand, 1351% const MagickWand *clut_wand,const PixelInterpolateMethod method) 1352% 1353% A description of each parameter follows: 1354% 1355% o wand: the magick wand. 1356% 1357% o clut_image: the clut image. 1358% 1359% o method: the pixel interpolation method. 1360% 1361*/ 1362WandExport MagickBooleanType MagickClutImage(MagickWand *wand, 1363 const MagickWand *clut_wand,const PixelInterpolateMethod method) 1364{ 1365 MagickBooleanType 1366 status; 1367 1368 assert(wand != (MagickWand *) NULL); 1369 assert(wand->signature == WandSignature); 1370 if (IfMagickTrue(wand->debug)) 1371 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1372 if ((wand->images == (Image *) NULL) || (clut_wand->images == (Image *) NULL)) 1373 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1374 status=ClutImage(wand->images,clut_wand->images,method,wand->exception); 1375 return(status); 1376} 1377 1378/* 1379%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1380% % 1381% % 1382% % 1383% M a g i c k C o a l e s c e I m a g e s % 1384% % 1385% % 1386% % 1387%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1388% 1389% MagickCoalesceImages() composites a set of images while respecting any page 1390% offsets and disposal methods. GIF, MIFF, and MNG animation sequences 1391% typically start with an image background and each subsequent image 1392% varies in size and offset. MagickCoalesceImages() returns a new sequence 1393% where each image in the sequence is the same size as the first and 1394% composited with the next image in the sequence. 1395% 1396% The format of the MagickCoalesceImages method is: 1397% 1398% MagickWand *MagickCoalesceImages(MagickWand *wand) 1399% 1400% A description of each parameter follows: 1401% 1402% o wand: the magick wand. 1403% 1404*/ 1405WandExport MagickWand *MagickCoalesceImages(MagickWand *wand) 1406{ 1407 Image 1408 *coalesce_image; 1409 1410 assert(wand != (MagickWand *) NULL); 1411 assert(wand->signature == WandSignature); 1412 if (IfMagickTrue(wand->debug)) 1413 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1414 if (wand->images == (Image *) NULL) 1415 return((MagickWand *) NULL); 1416 coalesce_image=CoalesceImages(wand->images,wand->exception); 1417 if (coalesce_image == (Image *) NULL) 1418 return((MagickWand *) NULL); 1419 return(CloneMagickWandFromImages(wand,coalesce_image)); 1420} 1421 1422/* 1423%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1424% % 1425% % 1426% % 1427% M a g i c k C o l o r D e c i s i o n I m a g e % 1428% % 1429% % 1430% % 1431%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1432% 1433% MagickColorDecisionListImage() accepts a lightweight Color Correction 1434% Collection (CCC) file which solely contains one or more color corrections 1435% and applies the color correction to the image. Here is a sample CCC file: 1436% 1437% <ColorCorrectionCollection xmlns="urn:ASC:CDL:v1.2"> 1438% <ColorCorrection id="cc03345"> 1439% <SOPNode> 1440% <Slope> 0.9 1.2 0.5 </Slope> 1441% <Offset> 0.4 -0.5 0.6 </Offset> 1442% <Power> 1.0 0.8 1.5 </Power> 1443% </SOPNode> 1444% <SATNode> 1445% <Saturation> 0.85 </Saturation> 1446% </SATNode> 1447% </ColorCorrection> 1448% </ColorCorrectionCollection> 1449% 1450% which includes the offset, slope, and power for each of the RGB channels 1451% as well as the saturation. 1452% 1453% The format of the MagickColorDecisionListImage method is: 1454% 1455% MagickBooleanType MagickColorDecisionListImage(MagickWand *wand, 1456% const char *color_correction_collection) 1457% 1458% A description of each parameter follows: 1459% 1460% o wand: the magick wand. 1461% 1462% o color_correction_collection: the color correction collection in XML. 1463% 1464*/ 1465WandExport MagickBooleanType MagickColorDecisionListImage(MagickWand *wand, 1466 const char *color_correction_collection) 1467{ 1468 MagickBooleanType 1469 status; 1470 1471 assert(wand != (MagickWand *) NULL); 1472 assert(wand->signature == WandSignature); 1473 if (IfMagickTrue(wand->debug)) 1474 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1475 if (wand->images == (Image *) NULL) 1476 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1477 status=ColorDecisionListImage(wand->images,color_correction_collection, 1478 wand->exception); 1479 return(status); 1480} 1481 1482/* 1483%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1484% % 1485% % 1486% % 1487% M a g i c k C o l o r i z e I m a g e % 1488% % 1489% % 1490% % 1491%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1492% 1493% MagickColorizeImage() blends the fill color with each pixel in the image. 1494% 1495% The format of the MagickColorizeImage method is: 1496% 1497% MagickBooleanType MagickColorizeImage(MagickWand *wand, 1498% const PixelWand *colorize,const PixelWand *blend) 1499% 1500% A description of each parameter follows: 1501% 1502% o wand: the magick wand. 1503% 1504% o colorize: the colorize pixel wand. 1505% 1506% o alpha: the alpha pixel wand. 1507% 1508*/ 1509WandExport MagickBooleanType MagickColorizeImage(MagickWand *wand, 1510 const PixelWand *colorize,const PixelWand *blend) 1511{ 1512 char 1513 percent_blend[MaxTextExtent]; 1514 1515 Image 1516 *colorize_image; 1517 1518 PixelInfo 1519 target; 1520 1521 assert(wand != (MagickWand *) NULL); 1522 assert(wand->signature == WandSignature); 1523 if (IfMagickTrue(wand->debug)) 1524 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1525 if (wand->images == (Image *) NULL) 1526 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1527 GetPixelInfo(wand->images,&target); 1528 if (target.colorspace != CMYKColorspace) 1529 (void) FormatLocaleString(percent_blend,MaxTextExtent, 1530 "%g,%g,%g,%g",(double) (100.0*QuantumScale* 1531 PixelGetRedQuantum(blend)),(double) (100.0*QuantumScale* 1532 PixelGetGreenQuantum(blend)),(double) (100.0*QuantumScale* 1533 PixelGetBlueQuantum(blend)),(double) (100.0*QuantumScale* 1534 PixelGetAlphaQuantum(blend))); 1535 else 1536 (void) FormatLocaleString(percent_blend,MaxTextExtent, 1537 "%g,%g,%g,%g,%g",(double) (100.0*QuantumScale* 1538 PixelGetRedQuantum(blend)),(double) (100.0*QuantumScale* 1539 PixelGetGreenQuantum(blend)),(double) (100.0*QuantumScale* 1540 PixelGetBlueQuantum(blend)),(double) (100.0*QuantumScale* 1541 PixelGetBlackQuantum(blend)),(double) (100.0*QuantumScale* 1542 PixelGetAlphaQuantum(blend))); 1543 target=PixelGetPixel(colorize); 1544 colorize_image=ColorizeImage(wand->images,percent_blend,&target, 1545 wand->exception); 1546 if (colorize_image == (Image *) NULL) 1547 return(MagickFalse); 1548 ReplaceImageInList(&wand->images,colorize_image); 1549 return(MagickTrue); 1550} 1551 1552/* 1553%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1554% % 1555% % 1556% % 1557% M a g i c k C o l o r M a t r i x I m a g e % 1558% % 1559% % 1560% % 1561%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1562% 1563% MagickColorMatrixImage() apply color transformation to an image. The method 1564% permits saturation changes, hue rotation, luminance to alpha, and various 1565% other effects. Although variable-sized transformation matrices can be used, 1566% typically one uses a 5x5 matrix for an RGBA image and a 6x6 for CMYKA 1567% (or RGBA with offsets). The matrix is similar to those used by Adobe Flash 1568% except offsets are in column 6 rather than 5 (in support of CMYKA images) 1569% and offsets are normalized (divide Flash offset by 255). 1570% 1571% The format of the MagickColorMatrixImage method is: 1572% 1573% MagickBooleanType MagickColorMatrixImage(MagickWand *wand, 1574% const KernelInfo *color_matrix) 1575% 1576% A description of each parameter follows: 1577% 1578% o wand: the magick wand. 1579% 1580% o color_matrix: the color matrix. 1581% 1582*/ 1583WandExport MagickBooleanType MagickColorMatrixImage(MagickWand *wand, 1584 const KernelInfo *color_matrix) 1585{ 1586 Image 1587 *color_image; 1588 1589 assert(wand != (MagickWand *) NULL); 1590 assert(wand->signature == WandSignature); 1591 if (IfMagickTrue(wand->debug)) 1592 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1593 if (color_matrix == (const KernelInfo *) NULL) 1594 return(MagickFalse); 1595 if (wand->images == (Image *) NULL) 1596 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1597 color_image=ColorMatrixImage(wand->images,color_matrix,wand->exception); 1598 if (color_image == (Image *) NULL) 1599 return(MagickFalse); 1600 ReplaceImageInList(&wand->images,color_image); 1601 return(MagickTrue); 1602} 1603 1604/* 1605%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1606% % 1607% % 1608% % 1609% M a g i c k C o m b i n e I m a g e s % 1610% % 1611% % 1612% % 1613%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1614% 1615% MagickCombineImages() combines one or more images into a single image. The 1616% grayscale value of the pixels of each image in the sequence is assigned in 1617% order to the specified hannels of the combined image. The typical 1618% ordering would be image 1 => Red, 2 => Green, 3 => Blue, etc. 1619% 1620% The format of the MagickCombineImages method is: 1621% 1622% MagickWand *MagickCombineImages(MagickWand *wand, 1623% const ColorspaceType colorspace) 1624% 1625% A description of each parameter follows: 1626% 1627% o wand: the magick wand. 1628% 1629% o colorspace: the colorspace. 1630% 1631*/ 1632WandExport MagickWand *MagickCombineImages(MagickWand *wand, 1633 const ColorspaceType colorspace) 1634{ 1635 Image 1636 *combine_image; 1637 1638 assert(wand != (MagickWand *) NULL); 1639 assert(wand->signature == WandSignature); 1640 if (IfMagickTrue(wand->debug)) 1641 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1642 if (wand->images == (Image *) NULL) 1643 return((MagickWand *) NULL); 1644 combine_image=CombineImages(wand->images,colorspace,wand->exception); 1645 if (combine_image == (Image *) NULL) 1646 return((MagickWand *) NULL); 1647 return(CloneMagickWandFromImages(wand,combine_image)); 1648} 1649 1650/* 1651%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1652% % 1653% % 1654% % 1655% M a g i c k C o m m e n t I m a g e % 1656% % 1657% % 1658% % 1659%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1660% 1661% MagickCommentImage() adds a comment to your image. 1662% 1663% The format of the MagickCommentImage method is: 1664% 1665% MagickBooleanType MagickCommentImage(MagickWand *wand, 1666% const char *comment) 1667% 1668% A description of each parameter follows: 1669% 1670% o wand: the magick wand. 1671% 1672% o comment: the image comment. 1673% 1674*/ 1675WandExport MagickBooleanType MagickCommentImage(MagickWand *wand, 1676 const char *comment) 1677{ 1678 MagickBooleanType 1679 status; 1680 1681 assert(wand != (MagickWand *) NULL); 1682 assert(wand->signature == WandSignature); 1683 if (IfMagickTrue(wand->debug)) 1684 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1685 if (wand->images == (Image *) NULL) 1686 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1687 status=SetImageProperty(wand->images,"comment",comment,wand->exception); 1688 return(status); 1689} 1690 1691/* 1692%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1693% % 1694% % 1695% % 1696% M a g i c k C o m p a r e I m a g e L a y e r s % 1697% % 1698% % 1699% % 1700%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1701% 1702% MagickCompareImagesLayers() compares each image with the next in a sequence 1703% and returns the maximum bounding region of any pixel differences it 1704% discovers. 1705% 1706% The format of the MagickCompareImagesLayers method is: 1707% 1708% MagickWand *MagickCompareImagesLayers(MagickWand *wand, 1709% const LayerMethod method) 1710% 1711% A description of each parameter follows: 1712% 1713% o wand: the magick wand. 1714% 1715% o method: the compare method. 1716% 1717*/ 1718WandExport MagickWand *MagickCompareImagesLayers(MagickWand *wand, 1719 const LayerMethod method) 1720{ 1721 Image 1722 *layers_image; 1723 1724 assert(wand != (MagickWand *) NULL); 1725 assert(wand->signature == WandSignature); 1726 if (IfMagickTrue(wand->debug)) 1727 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1728 if (wand->images == (Image *) NULL) 1729 return((MagickWand *) NULL); 1730 layers_image=CompareImagesLayers(wand->images,method,wand->exception); 1731 if (layers_image == (Image *) NULL) 1732 return((MagickWand *) NULL); 1733 return(CloneMagickWandFromImages(wand,layers_image)); 1734} 1735 1736/* 1737%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1738% % 1739% % 1740% % 1741% M a g i c k C o m p a r e I m a g e s % 1742% % 1743% % 1744% % 1745%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1746% 1747% MagickCompareImages() compares an image to a reconstructed image and returns 1748% the specified difference image. 1749% 1750% The format of the MagickCompareImages method is: 1751% 1752% MagickWand *MagickCompareImages(MagickWand *wand, 1753% const MagickWand *reference,const MetricType metric, 1754% double *distortion) 1755% 1756% A description of each parameter follows: 1757% 1758% o wand: the magick wand. 1759% 1760% o reference: the reference wand. 1761% 1762% o metric: the metric. 1763% 1764% o distortion: the computed distortion between the images. 1765% 1766*/ 1767WandExport MagickWand *MagickCompareImages(MagickWand *wand, 1768 const MagickWand *reference,const MetricType metric,double *distortion) 1769{ 1770 Image 1771 *compare_image; 1772 1773 1774 assert(wand != (MagickWand *) NULL); 1775 assert(wand->signature == WandSignature); 1776 if (IfMagickTrue(wand->debug)) 1777 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1778 if ((wand->images == (Image *) NULL) || (reference->images == (Image *) NULL)) 1779 { 1780 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 1781 "ContainsNoImages","`%s'",wand->name); 1782 return((MagickWand *) NULL); 1783 } 1784 compare_image=CompareImages(wand->images,reference->images,metric,distortion, 1785 wand->exception); 1786 if (compare_image == (Image *) NULL) 1787 return((MagickWand *) NULL); 1788 return(CloneMagickWandFromImages(wand,compare_image)); 1789} 1790 1791/* 1792%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1793% % 1794% % 1795% % 1796% M a g i c k C o m p o s i t e I m a g e % 1797% % 1798% % 1799% % 1800%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1801% 1802% MagickCompositeImage() composite one image onto another at the specified 1803% offset. 1804% 1805% The format of the MagickCompositeImage method is: 1806% 1807% MagickBooleanType MagickCompositeImage(MagickWand *wand, 1808% const MagickWand *source_wand,const CompositeOperator compose, 1809% const MagickBooleanType clip_to_self,const ssize_t x,const ssize_t y) 1810% 1811% A description of each parameter follows: 1812% 1813% o wand: the magick wand holding the destination images 1814% 1815% o source_image: the magick wand holding source image. 1816% 1817% o compose: This operator affects how the composite is applied to the 1818% image. The default is Over. These are some of the compose methods 1819% availble. 1820% 1821% OverCompositeOp InCompositeOp OutCompositeOp 1822% AtopCompositeOp XorCompositeOp PlusCompositeOp 1823% MinusCompositeOp AddCompositeOp SubtractCompositeOp 1824% DifferenceCompositeOp BumpmapCompositeOp CopyCompositeOp 1825% DisplaceCompositeOp 1826% 1827% o clip_to_self: set to MagickTrue to limit composition to area composed. 1828% 1829% o x: the column offset of the composited image. 1830% 1831% o y: the row offset of the composited image. 1832% 1833*/ 1834WandExport MagickBooleanType MagickCompositeImage(MagickWand *wand, 1835 const MagickWand *source_wand,const CompositeOperator compose, 1836 const MagickBooleanType clip_to_self,const ssize_t x,const ssize_t y) 1837{ 1838 MagickBooleanType 1839 status; 1840 1841 assert(wand != (MagickWand *) NULL); 1842 assert(wand->signature == WandSignature); 1843 if (IfMagickTrue(wand->debug)) 1844 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1845 if ((wand->images == (Image *) NULL) || 1846 (source_wand->images == (Image *) NULL)) 1847 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1848 status=CompositeImage(wand->images,source_wand->images,compose,clip_to_self, 1849 x,y,wand->exception); 1850 return(status); 1851} 1852 1853/* 1854%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1855% % 1856% % 1857% % 1858% M a g i c k C o m p o s i t e L a y e r s % 1859% % 1860% % 1861% % 1862%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1863% 1864% MagickCompositeLayers() composite the images in the source wand over the 1865% images in the destination wand in sequence, starting with the current 1866% image in both lists. 1867% 1868% Each layer from the two image lists are composted together until the end of 1869% one of the image lists is reached. The offset of each composition is also 1870% adjusted to match the virtual canvas offsets of each layer. As such the 1871% given offset is relative to the virtual canvas, and not the actual image. 1872% 1873% Composition uses given x and y offsets, as the 'origin' location of the 1874% source images virtual canvas (not the real image) allowing you to compose a 1875% list of 'layer images' into the destiantioni images. This makes it well 1876% sutiable for directly composing 'Clears Frame Animations' or 'Coaleased 1877% Animations' onto a static or other 'Coaleased Animation' destination image 1878% list. GIF disposal handling is not looked at. 1879% 1880% Special case:- If one of the image sequences is the last image (just a 1881% single image remaining), that image is repeatally composed with all the 1882% images in the other image list. Either the source or destination lists may 1883% be the single image, for this situation. 1884% 1885% In the case of a single destination image (or last image given), that image 1886% will ve cloned to match the number of images remaining in the source image 1887% list. 1888% 1889% This is equivelent to the "-layer Composite" Shell API operator. 1890% 1891% The format of the MagickCompositeLayers method is: 1892% 1893% MagickBooleanType MagickCompositeLayers(MagickWand *wand, 1894% const MagickWand *source_wand, const CompositeOperator compose, 1895% const ssize_t x,const ssize_t y) 1896% 1897% A description of each parameter follows: 1898% 1899% o wand: the magick wand holding destaintion images 1900% 1901% o source_wand: the wand holding the source images 1902% 1903% o compose, x, y: composition arguments 1904% 1905*/ 1906WandExport MagickBooleanType MagickCompositeLayers(MagickWand *wand, 1907 const MagickWand *source_wand,const CompositeOperator compose, 1908 const ssize_t x,const ssize_t y) 1909{ 1910 MagickBooleanType 1911 status; 1912 1913 assert(wand != (MagickWand *) NULL); 1914 assert(wand->signature == WandSignature); 1915 if (IfMagickTrue(wand->debug)) 1916 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1917 if ((wand->images == (Image *) NULL) || 1918 (source_wand->images == (Image *) NULL)) 1919 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1920 CompositeLayers(wand->images,compose,source_wand->images,x,y,wand->exception); 1921 status=MagickTrue; /* FUTURE: determine status from exceptions */ 1922 return(status); 1923} 1924 1925/* 1926%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1927% % 1928% % 1929% % 1930% M a g i c k C o n t r a s t I m a g e % 1931% % 1932% % 1933% % 1934%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1935% 1936% MagickContrastImage() enhances the intensity differences between the lighter 1937% and darker elements of the image. Set sharpen to a value other than 0 to 1938% increase the image contrast otherwise the contrast is reduced. 1939% 1940% The format of the MagickContrastImage method is: 1941% 1942% MagickBooleanType MagickContrastImage(MagickWand *wand, 1943% const MagickBooleanType sharpen) 1944% 1945% A description of each parameter follows: 1946% 1947% o wand: the magick wand. 1948% 1949% o sharpen: Increase or decrease image contrast. 1950% 1951% 1952*/ 1953WandExport MagickBooleanType MagickContrastImage(MagickWand *wand, 1954 const MagickBooleanType sharpen) 1955{ 1956 MagickBooleanType 1957 status; 1958 1959 assert(wand != (MagickWand *) NULL); 1960 assert(wand->signature == WandSignature); 1961 if (IfMagickTrue(wand->debug)) 1962 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 1963 if (wand->images == (Image *) NULL) 1964 ThrowWandException(WandError,"ContainsNoImages",wand->name); 1965 status=ContrastImage(wand->images,sharpen,wand->exception); 1966 return(status); 1967} 1968 1969/* 1970%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1971% % 1972% % 1973% % 1974% 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 % 1975% % 1976% % 1977% % 1978%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1979% 1980% MagickContrastStretchImage() enhances the contrast of a color image by 1981% adjusting the pixels color to span the entire range of colors available. 1982% You can also reduce the influence of a particular channel with a gamma 1983% value of 0. 1984% 1985% The format of the MagickContrastStretchImage method is: 1986% 1987% MagickBooleanType MagickContrastStretchImage(MagickWand *wand, 1988% const double black_point,const double white_point) 1989% 1990% A description of each parameter follows: 1991% 1992% o wand: the magick wand. 1993% 1994% o black_point: the black point. 1995% 1996% o white_point: the white point. 1997% 1998*/ 1999WandExport MagickBooleanType MagickContrastStretchImage(MagickWand *wand, 2000 const double black_point,const double white_point) 2001{ 2002 MagickBooleanType 2003 status; 2004 2005 assert(wand != (MagickWand *) NULL); 2006 assert(wand->signature == WandSignature); 2007 if (IfMagickTrue(wand->debug)) 2008 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2009 if (wand->images == (Image *) NULL) 2010 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2011 status=ContrastStretchImage(wand->images,black_point,white_point, 2012 wand->exception); 2013 return(status); 2014} 2015 2016/* 2017%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2018% % 2019% % 2020% % 2021% M a g i c k C o n v o l v e I m a g e % 2022% % 2023% % 2024% % 2025%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2026% 2027% MagickConvolveImage() applies a custom convolution kernel to the image. 2028% 2029% The format of the MagickConvolveImage method is: 2030% 2031% MagickBooleanType MagickConvolveImage(MagickWand *wand, 2032% const KernelInfo *kernel) 2033% 2034% A description of each parameter follows: 2035% 2036% o wand: the magick wand. 2037% 2038% o kernel: An array of doubles representing the convolution kernel. 2039% 2040*/ 2041WandExport MagickBooleanType MagickConvolveImage(MagickWand *wand, 2042 const KernelInfo *kernel) 2043{ 2044 Image 2045 *filter_image; 2046 2047 assert(wand != (MagickWand *) NULL); 2048 assert(wand->signature == WandSignature); 2049 if (IfMagickTrue(wand->debug)) 2050 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2051 if (kernel == (const KernelInfo *) NULL) 2052 return(MagickFalse); 2053 if (wand->images == (Image *) NULL) 2054 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2055 filter_image=ConvolveImage(wand->images,kernel,wand->exception); 2056 if (filter_image == (Image *) NULL) 2057 return(MagickFalse); 2058 ReplaceImageInList(&wand->images,filter_image); 2059 return(MagickTrue); 2060} 2061 2062/* 2063%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2064% % 2065% % 2066% % 2067% M a g i c k C r o p I m a g e % 2068% % 2069% % 2070% % 2071%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2072% 2073% MagickCropImage() extracts a region of the image. 2074% 2075% The format of the MagickCropImage method is: 2076% 2077% MagickBooleanType MagickCropImage(MagickWand *wand, 2078% const size_t width,const size_t height,const ssize_t x,const ssize_t y) 2079% 2080% A description of each parameter follows: 2081% 2082% o wand: the magick wand. 2083% 2084% o width: the region width. 2085% 2086% o height: the region height. 2087% 2088% o x: the region x-offset. 2089% 2090% o y: the region y-offset. 2091% 2092*/ 2093WandExport MagickBooleanType MagickCropImage(MagickWand *wand, 2094 const size_t width,const size_t height,const ssize_t x,const ssize_t y) 2095{ 2096 Image 2097 *crop_image; 2098 2099 RectangleInfo 2100 crop; 2101 2102 assert(wand != (MagickWand *) NULL); 2103 assert(wand->signature == WandSignature); 2104 if (IfMagickTrue(wand->debug)) 2105 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2106 if (wand->images == (Image *) NULL) 2107 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2108 crop.width=width; 2109 crop.height=height; 2110 crop.x=x; 2111 crop.y=y; 2112 crop_image=CropImage(wand->images,&crop,wand->exception); 2113 if (crop_image == (Image *) NULL) 2114 return(MagickFalse); 2115 ReplaceImageInList(&wand->images,crop_image); 2116 return(MagickTrue); 2117} 2118 2119/* 2120%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2121% % 2122% % 2123% % 2124% M a g i c k C y c l e C o l o r m a p I m a g e % 2125% % 2126% % 2127% % 2128%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2129% 2130% MagickCycleColormapImage() displaces an image's colormap by a given number 2131% of positions. If you cycle the colormap a number of times you can produce 2132% a psychodelic effect. 2133% 2134% The format of the MagickCycleColormapImage method is: 2135% 2136% MagickBooleanType MagickCycleColormapImage(MagickWand *wand, 2137% const ssize_t displace) 2138% 2139% A description of each parameter follows: 2140% 2141% o wand: the magick wand. 2142% 2143% o pixel_wand: the pixel wand. 2144% 2145*/ 2146WandExport MagickBooleanType MagickCycleColormapImage(MagickWand *wand, 2147 const ssize_t displace) 2148{ 2149 MagickBooleanType 2150 status; 2151 2152 assert(wand != (MagickWand *) NULL); 2153 assert(wand->signature == WandSignature); 2154 if (IfMagickTrue(wand->debug)) 2155 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2156 if (wand->images == (Image *) NULL) 2157 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2158 status=CycleColormapImage(wand->images,displace,wand->exception); 2159 return(status); 2160} 2161 2162/* 2163%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2164% % 2165% % 2166% % 2167% M a g i c k C o n s t i t u t e I m a g e % 2168% % 2169% % 2170% % 2171%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2172% 2173% MagickConstituteImage() adds an image to the wand comprised of the pixel 2174% data you supply. The pixel data must be in scanline order top-to-bottom. 2175% The data can be char, short int, int, float, or double. Float and double 2176% require the pixels to be normalized [0..1], otherwise [0..Max], where Max 2177% is the maximum value the type can accomodate (e.g. 255 for char). For 2178% example, to create a 640x480 image from unsigned red-green-blue character 2179% data, use 2180% 2181% MagickConstituteImage(wand,640,640,"RGB",CharPixel,pixels); 2182% 2183% The format of the MagickConstituteImage method is: 2184% 2185% MagickBooleanType MagickConstituteImage(MagickWand *wand, 2186% const size_t columns,const size_t rows,const char *map, 2187% const StorageType storage,void *pixels) 2188% 2189% A description of each parameter follows: 2190% 2191% o wand: the magick wand. 2192% 2193% o columns: width in pixels of the image. 2194% 2195% o rows: height in pixels of the image. 2196% 2197% o map: This string reflects the expected ordering of the pixel array. 2198% It can be any combination or order of R = red, G = green, B = blue, 2199% A = alpha (0 is transparent), O = alpha (0 is opaque), C = cyan, 2200% Y = yellow, M = magenta, K = black, I = intensity (for grayscale), 2201% P = pad. 2202% 2203% o storage: Define the data type of the pixels. Float and double types are 2204% expected to be normalized [0..1] otherwise [0..QuantumRange]. Choose from 2205% these types: CharPixel, DoublePixel, FloatPixel, IntegerPixel, 2206% LongPixel, QuantumPixel, or ShortPixel. 2207% 2208% o pixels: This array of values contain the pixel components as defined by 2209% map and type. You must preallocate this array where the expected 2210% length varies depending on the values of width, height, map, and type. 2211% 2212% 2213*/ 2214WandExport MagickBooleanType MagickConstituteImage(MagickWand *wand, 2215 const size_t columns,const size_t rows,const char *map, 2216 const StorageType storage,const void *pixels) 2217{ 2218 Image 2219 *images; 2220 2221 assert(wand != (MagickWand *) NULL); 2222 assert(wand->signature == WandSignature); 2223 if (IfMagickTrue(wand->debug)) 2224 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2225 images=ConstituteImage(columns,rows,map,storage,pixels,wand->exception); 2226 if (images == (Image *) NULL) 2227 return(MagickFalse); 2228 return(InsertImageInWand(wand,images)); 2229} 2230 2231/* 2232%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2233% % 2234% % 2235% % 2236% M a g i c k D e c i p h e r I m a g e % 2237% % 2238% % 2239% % 2240%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2241% 2242% MagickDecipherImage() converts cipher pixels to plain pixels. 2243% 2244% The format of the MagickDecipherImage method is: 2245% 2246% MagickBooleanType MagickDecipherImage(MagickWand *wand, 2247% const char *passphrase) 2248% 2249% A description of each parameter follows: 2250% 2251% o wand: the magick wand. 2252% 2253% o passphrase: the passphrase. 2254% 2255*/ 2256WandExport MagickBooleanType MagickDecipherImage(MagickWand *wand, 2257 const char *passphrase) 2258{ 2259 assert(wand != (MagickWand *) NULL); 2260 assert(wand->signature == WandSignature); 2261 if (IfMagickTrue(wand->debug)) 2262 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2263 if (wand->images == (Image *) NULL) 2264 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2265 return(DecipherImage(wand->images,passphrase,wand->exception)); 2266} 2267 2268/* 2269%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2270% % 2271% % 2272% % 2273% M a g i c k D e c o n s t r u c t I m a g e s % 2274% % 2275% % 2276% % 2277%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2278% 2279% MagickDeconstructImages() compares each image with the next in a sequence 2280% and returns the maximum bounding region of any pixel differences it 2281% discovers. 2282% 2283% The format of the MagickDeconstructImages method is: 2284% 2285% MagickWand *MagickDeconstructImages(MagickWand *wand) 2286% 2287% A description of each parameter follows: 2288% 2289% o wand: the magick wand. 2290% 2291*/ 2292WandExport MagickWand *MagickDeconstructImages(MagickWand *wand) 2293{ 2294 Image 2295 *deconstruct_image; 2296 2297 assert(wand != (MagickWand *) NULL); 2298 assert(wand->signature == WandSignature); 2299 if (IfMagickTrue(wand->debug)) 2300 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2301 if (wand->images == (Image *) NULL) 2302 return((MagickWand *) NULL); 2303 deconstruct_image=CompareImagesLayers(wand->images,CompareAnyLayer, 2304 wand->exception); 2305 if (deconstruct_image == (Image *) NULL) 2306 return((MagickWand *) NULL); 2307 return(CloneMagickWandFromImages(wand,deconstruct_image)); 2308} 2309 2310/* 2311%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2312% % 2313% % 2314% % 2315% M a g i c k D e s k e w I m a g e % 2316% % 2317% % 2318% % 2319%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2320% 2321% MagickDeskewImage() removes skew from the image. Skew is an artifact that 2322% occurs in scanned images because of the camera being misaligned, 2323% imperfections in the scanning or surface, or simply because the paper was 2324% not placed completely flat when scanned. 2325% 2326% The format of the MagickDeskewImage method is: 2327% 2328% MagickBooleanType MagickDeskewImage(MagickWand *wand, 2329% const double threshold) 2330% 2331% A description of each parameter follows: 2332% 2333% o wand: the magick wand. 2334% 2335% o threshold: separate background from foreground. 2336% 2337*/ 2338WandExport MagickBooleanType MagickDeskewImage(MagickWand *wand, 2339 const double threshold) 2340{ 2341 Image 2342 *sepia_image; 2343 2344 assert(wand != (MagickWand *) NULL); 2345 assert(wand->signature == WandSignature); 2346 if (IfMagickTrue(wand->debug)) 2347 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2348 if (wand->images == (Image *) NULL) 2349 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2350 sepia_image=DeskewImage(wand->images,threshold,wand->exception); 2351 if (sepia_image == (Image *) NULL) 2352 return(MagickFalse); 2353 ReplaceImageInList(&wand->images,sepia_image); 2354 return(MagickTrue); 2355} 2356 2357/* 2358%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2359% % 2360% % 2361% % 2362% M a g i c k D e s p e c k l e I m a g e % 2363% % 2364% % 2365% % 2366%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2367% 2368% MagickDespeckleImage() reduces the speckle noise in an image while 2369% perserving the edges of the original image. 2370% 2371% The format of the MagickDespeckleImage method is: 2372% 2373% MagickBooleanType MagickDespeckleImage(MagickWand *wand) 2374% 2375% A description of each parameter follows: 2376% 2377% o wand: the magick wand. 2378% 2379*/ 2380WandExport MagickBooleanType MagickDespeckleImage(MagickWand *wand) 2381{ 2382 Image 2383 *despeckle_image; 2384 2385 assert(wand != (MagickWand *) NULL); 2386 assert(wand->signature == WandSignature); 2387 if (IfMagickTrue(wand->debug)) 2388 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2389 if (wand->images == (Image *) NULL) 2390 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2391 despeckle_image=DespeckleImage(wand->images,wand->exception); 2392 if (despeckle_image == (Image *) NULL) 2393 return(MagickFalse); 2394 ReplaceImageInList(&wand->images,despeckle_image); 2395 return(MagickTrue); 2396} 2397 2398/* 2399%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2400% % 2401% % 2402% % 2403% M a g i c k D e s t r o y I m a g e % 2404% % 2405% % 2406% % 2407%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2408% 2409% MagickDestroyImage() dereferences an image, deallocating memory associated 2410% with the image if the reference count becomes zero. 2411% 2412% The format of the MagickDestroyImage method is: 2413% 2414% Image *MagickDestroyImage(Image *image) 2415% 2416% A description of each parameter follows: 2417% 2418% o image: the image. 2419% 2420*/ 2421WandExport Image *MagickDestroyImage(Image *image) 2422{ 2423 return(DestroyImage(image)); 2424} 2425 2426/* 2427%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2428% % 2429% % 2430% % 2431% M a g i c k D i s p l a y I m a g e % 2432% % 2433% % 2434% % 2435%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2436% 2437% MagickDisplayImage() displays an image. 2438% 2439% The format of the MagickDisplayImage method is: 2440% 2441% MagickBooleanType MagickDisplayImage(MagickWand *wand, 2442% const char *server_name) 2443% 2444% A description of each parameter follows: 2445% 2446% o wand: the magick wand. 2447% 2448% o server_name: the X server name. 2449% 2450*/ 2451WandExport MagickBooleanType MagickDisplayImage(MagickWand *wand, 2452 const char *server_name) 2453{ 2454 Image 2455 *image; 2456 2457 MagickBooleanType 2458 status; 2459 2460 assert(wand != (MagickWand *) NULL); 2461 assert(wand->signature == WandSignature); 2462 if (IfMagickTrue(wand->debug)) 2463 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2464 if (wand->images == (Image *) NULL) 2465 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2466 image=CloneImage(wand->images,0,0,MagickTrue,wand->exception); 2467 if (image == (Image *) NULL) 2468 return(MagickFalse); 2469 (void) CloneString(&wand->image_info->server_name,server_name); 2470 status=DisplayImages(wand->image_info,image,wand->exception); 2471 image=DestroyImage(image); 2472 return(status); 2473} 2474 2475/* 2476%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2477% % 2478% % 2479% % 2480% M a g i c k D i s p l a y I m a g e s % 2481% % 2482% % 2483% % 2484%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2485% 2486% MagickDisplayImages() displays an image or image sequence. 2487% 2488% The format of the MagickDisplayImages method is: 2489% 2490% MagickBooleanType MagickDisplayImages(MagickWand *wand, 2491% const char *server_name) 2492% 2493% A description of each parameter follows: 2494% 2495% o wand: the magick wand. 2496% 2497% o server_name: the X server name. 2498% 2499*/ 2500WandExport MagickBooleanType MagickDisplayImages(MagickWand *wand, 2501 const char *server_name) 2502{ 2503 MagickBooleanType 2504 status; 2505 2506 assert(wand != (MagickWand *) NULL); 2507 assert(wand->signature == WandSignature); 2508 if (IfMagickTrue(wand->debug)) 2509 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2510 (void) CloneString(&wand->image_info->server_name,server_name); 2511 status=DisplayImages(wand->image_info,wand->images,wand->exception); 2512 return(status); 2513} 2514 2515/* 2516%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2517% % 2518% % 2519% % 2520% M a g i c k D i s t o r t I m a g e % 2521% % 2522% % 2523% % 2524%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2525% 2526% MagickDistortImage() distorts an image using various distortion methods, by 2527% mapping color lookups of the source image to a new destination image 2528% usally of the same size as the source image, unless 'bestfit' is set to 2529% true. 2530% 2531% If 'bestfit' is enabled, and distortion allows it, the destination image is 2532% adjusted to ensure the whole source 'image' will just fit within the final 2533% destination image, which will be sized and offset accordingly. Also in 2534% many cases the virtual offset of the source image will be taken into 2535% account in the mapping. 2536% 2537% The format of the MagickDistortImage method is: 2538% 2539% MagickBooleanType MagickDistortImage(MagickWand *wand, 2540% const DistortImageMethod method,const size_t number_arguments, 2541% const double *arguments,const MagickBooleanType bestfit) 2542% 2543% A description of each parameter follows: 2544% 2545% o image: the image to be distorted. 2546% 2547% o method: the method of image distortion. 2548% 2549% ArcDistortion always ignores the source image offset, and always 2550% 'bestfit' the destination image with the top left corner offset 2551% relative to the polar mapping center. 2552% 2553% Bilinear has no simple inverse mapping so it does not allow 'bestfit' 2554% style of image distortion. 2555% 2556% Affine, Perspective, and Bilinear, do least squares fitting of the 2557% distortion when more than the minimum number of control point pairs 2558% are provided. 2559% 2560% Perspective, and Bilinear, falls back to a Affine distortion when less 2561% that 4 control point pairs are provided. While Affine distortions let 2562% you use any number of control point pairs, that is Zero pairs is a 2563% no-Op (viewport only) distrotion, one pair is a translation and two 2564% pairs of control points do a scale-rotate-translate, without any 2565% shearing. 2566% 2567% o number_arguments: the number of arguments given for this distortion 2568% method. 2569% 2570% o arguments: the arguments for this distortion method. 2571% 2572% o bestfit: Attempt to resize destination to fit distorted source. 2573% 2574*/ 2575WandExport MagickBooleanType MagickDistortImage(MagickWand *wand, 2576 const DistortImageMethod method,const size_t number_arguments, 2577 const double *arguments,const MagickBooleanType bestfit) 2578{ 2579 Image 2580 *distort_image; 2581 2582 assert(wand != (MagickWand *) NULL); 2583 assert(wand->signature == WandSignature); 2584 if (IfMagickTrue(wand->debug)) 2585 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2586 if (wand->images == (Image *) NULL) 2587 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2588 distort_image=DistortImage(wand->images,method,number_arguments,arguments, 2589 bestfit,wand->exception); 2590 if (distort_image == (Image *) NULL) 2591 return(MagickFalse); 2592 ReplaceImageInList(&wand->images,distort_image); 2593 return(MagickTrue); 2594} 2595 2596/* 2597%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2598% % 2599% % 2600% % 2601% M a g i c k D r a w I m a g e % 2602% % 2603% % 2604% % 2605%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2606% 2607% MagickDrawImage() renders the drawing wand on the current image. 2608% 2609% The format of the MagickDrawImage method is: 2610% 2611% MagickBooleanType MagickDrawImage(MagickWand *wand, 2612% const DrawingWand *drawing_wand) 2613% 2614% A description of each parameter follows: 2615% 2616% o wand: the magick wand. 2617% 2618% o drawing_wand: the draw wand. 2619% 2620*/ 2621WandExport MagickBooleanType MagickDrawImage(MagickWand *wand, 2622 const DrawingWand *drawing_wand) 2623{ 2624 char 2625 *primitive; 2626 2627 DrawInfo 2628 *draw_info; 2629 2630 MagickBooleanType 2631 status; 2632 2633 assert(wand != (MagickWand *) NULL); 2634 assert(wand->signature == WandSignature); 2635 if (IfMagickTrue(wand->debug)) 2636 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2637 if (wand->images == (Image *) NULL) 2638 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2639 draw_info=PeekDrawingWand(drawing_wand); 2640 if ((draw_info == (DrawInfo *) NULL) || 2641 (draw_info->primitive == (char *) NULL)) 2642 return(MagickFalse); 2643 primitive=AcquireString(draw_info->primitive); 2644 draw_info=DestroyDrawInfo(draw_info); 2645 draw_info=CloneDrawInfo(wand->image_info,(DrawInfo *) NULL); 2646 draw_info->primitive=primitive; 2647 status=DrawImage(wand->images,draw_info,wand->exception); 2648 draw_info=DestroyDrawInfo(draw_info); 2649 return(status); 2650} 2651 2652/* 2653%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2654% % 2655% % 2656% % 2657% M a g i c k E d g e I m a g e % 2658% % 2659% % 2660% % 2661%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2662% 2663% MagickEdgeImage() enhance edges within the image with a convolution filter 2664% of the given radius. Use a radius of 0 and Edge() selects a suitable 2665% radius for you. 2666% 2667% The format of the MagickEdgeImage method is: 2668% 2669% MagickBooleanType MagickEdgeImage(MagickWand *wand,const double radius) 2670% 2671% A description of each parameter follows: 2672% 2673% o wand: the magick wand. 2674% 2675% o radius: the radius of the pixel neighborhood. 2676% 2677*/ 2678WandExport MagickBooleanType MagickEdgeImage(MagickWand *wand, 2679 const double radius) 2680{ 2681 Image 2682 *edge_image; 2683 2684 assert(wand != (MagickWand *) NULL); 2685 assert(wand->signature == WandSignature); 2686 if (IfMagickTrue(wand->debug)) 2687 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2688 if (wand->images == (Image *) NULL) 2689 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2690 edge_image=EdgeImage(wand->images,radius,wand->exception); 2691 if (edge_image == (Image *) NULL) 2692 return(MagickFalse); 2693 ReplaceImageInList(&wand->images,edge_image); 2694 return(MagickTrue); 2695} 2696 2697/* 2698%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2699% % 2700% % 2701% % 2702% M a g i c k E m b o s s I m a g e % 2703% % 2704% % 2705% % 2706%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2707% 2708% MagickEmbossImage() returns a grayscale image with a three-dimensional 2709% effect. We convolve the image with a Gaussian operator of the given radius 2710% and standard deviation (sigma). For reasonable results, radius should be 2711% larger than sigma. Use a radius of 0 and Emboss() selects a suitable 2712% radius for you. 2713% 2714% The format of the MagickEmbossImage method is: 2715% 2716% MagickBooleanType MagickEmbossImage(MagickWand *wand,const double radius, 2717% const double sigma) 2718% 2719% A description of each parameter follows: 2720% 2721% o wand: the magick wand. 2722% 2723% o radius: the radius of the Gaussian, in pixels, not counting the center 2724% pixel. 2725% 2726% o sigma: the standard deviation of the Gaussian, in pixels. 2727% 2728*/ 2729WandExport MagickBooleanType MagickEmbossImage(MagickWand *wand, 2730 const double radius,const double sigma) 2731{ 2732 Image 2733 *emboss_image; 2734 2735 assert(wand != (MagickWand *) NULL); 2736 assert(wand->signature == WandSignature); 2737 if (IfMagickTrue(wand->debug)) 2738 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2739 if (wand->images == (Image *) NULL) 2740 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2741 emboss_image=EmbossImage(wand->images,radius,sigma,wand->exception); 2742 if (emboss_image == (Image *) NULL) 2743 return(MagickFalse); 2744 ReplaceImageInList(&wand->images,emboss_image); 2745 return(MagickTrue); 2746} 2747 2748/* 2749%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2750% % 2751% % 2752% % 2753% M a g i c k E n c i p h e r I m a g e % 2754% % 2755% % 2756% % 2757%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2758% 2759% MagickEncipherImage() converts plaint pixels to cipher pixels. 2760% 2761% The format of the MagickEncipherImage method is: 2762% 2763% MagickBooleanType MagickEncipherImage(MagickWand *wand, 2764% const char *passphrase) 2765% 2766% A description of each parameter follows: 2767% 2768% o wand: the magick wand. 2769% 2770% o passphrase: the passphrase. 2771% 2772*/ 2773WandExport MagickBooleanType MagickEncipherImage(MagickWand *wand, 2774 const char *passphrase) 2775{ 2776 assert(wand != (MagickWand *) NULL); 2777 assert(wand->signature == WandSignature); 2778 if (IfMagickTrue(wand->debug)) 2779 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2780 if (wand->images == (Image *) NULL) 2781 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2782 return(EncipherImage(wand->images,passphrase,wand->exception)); 2783} 2784 2785/* 2786%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2787% % 2788% % 2789% % 2790% M a g i c k E n h a n c e I m a g e % 2791% % 2792% % 2793% % 2794%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2795% 2796% MagickEnhanceImage() applies a digital filter that improves the quality of a 2797% noisy image. 2798% 2799% The format of the MagickEnhanceImage method is: 2800% 2801% MagickBooleanType MagickEnhanceImage(MagickWand *wand) 2802% 2803% A description of each parameter follows: 2804% 2805% o wand: the magick wand. 2806% 2807*/ 2808WandExport MagickBooleanType MagickEnhanceImage(MagickWand *wand) 2809{ 2810 Image 2811 *enhance_image; 2812 2813 assert(wand != (MagickWand *) NULL); 2814 assert(wand->signature == WandSignature); 2815 if (IfMagickTrue(wand->debug)) 2816 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2817 if (wand->images == (Image *) NULL) 2818 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2819 enhance_image=EnhanceImage(wand->images,wand->exception); 2820 if (enhance_image == (Image *) NULL) 2821 return(MagickFalse); 2822 ReplaceImageInList(&wand->images,enhance_image); 2823 return(MagickTrue); 2824} 2825 2826/* 2827%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2828% % 2829% % 2830% % 2831% M a g i c k E q u a l i z e I m a g e % 2832% % 2833% % 2834% % 2835%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2836% 2837% MagickEqualizeImage() equalizes the image histogram. 2838% 2839% The format of the MagickEqualizeImage method is: 2840% 2841% MagickBooleanType MagickEqualizeImage(MagickWand *wand) 2842% 2843% A description of each parameter follows: 2844% 2845% o wand: the magick wand. 2846% 2847% o channel: the image channel(s). 2848% 2849*/ 2850WandExport MagickBooleanType MagickEqualizeImage(MagickWand *wand) 2851{ 2852 MagickBooleanType 2853 status; 2854 2855 assert(wand != (MagickWand *) NULL); 2856 assert(wand->signature == WandSignature); 2857 if (IfMagickTrue(wand->debug)) 2858 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2859 if (wand->images == (Image *) NULL) 2860 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2861 status=EqualizeImage(wand->images,wand->exception); 2862 return(status); 2863} 2864 2865/* 2866%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2867% % 2868% % 2869% % 2870% M a g i c k E v a l u a t e I m a g e % 2871% % 2872% % 2873% % 2874%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2875% 2876% MagickEvaluateImage() applys an arithmetic, relational, or logical 2877% expression to an image. Use these operators to lighten or darken an image, 2878% to increase or decrease contrast in an image, or to produce the "negative" 2879% of an image. 2880% 2881% The format of the MagickEvaluateImage method is: 2882% 2883% MagickBooleanType MagickEvaluateImage(MagickWand *wand, 2884% const MagickEvaluateOperator operator,const double value) 2885% MagickBooleanType MagickEvaluateImages(MagickWand *wand, 2886% const MagickEvaluateOperator operator) 2887% 2888% A description of each parameter follows: 2889% 2890% o wand: the magick wand. 2891% 2892% o op: A channel operator. 2893% 2894% o value: A value value. 2895% 2896*/ 2897 2898WandExport MagickWand *MagickEvaluateImages(MagickWand *wand, 2899 const MagickEvaluateOperator op) 2900{ 2901 Image 2902 *evaluate_image; 2903 2904 assert(wand != (MagickWand *) NULL); 2905 assert(wand->signature == WandSignature); 2906 if (IfMagickTrue(wand->debug)) 2907 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2908 if (wand->images == (Image *) NULL) 2909 return((MagickWand *) NULL); 2910 evaluate_image=EvaluateImages(wand->images,op,wand->exception); 2911 if (evaluate_image == (Image *) NULL) 2912 return((MagickWand *) NULL); 2913 return(CloneMagickWandFromImages(wand,evaluate_image)); 2914} 2915 2916WandExport MagickBooleanType MagickEvaluateImage(MagickWand *wand, 2917 const MagickEvaluateOperator op,const double value) 2918{ 2919 MagickBooleanType 2920 status; 2921 2922 assert(wand != (MagickWand *) NULL); 2923 assert(wand->signature == WandSignature); 2924 if (IfMagickTrue(wand->debug)) 2925 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2926 if (wand->images == (Image *) NULL) 2927 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2928 status=EvaluateImage(wand->images,op,value,wand->exception); 2929 return(status); 2930} 2931 2932/* 2933%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2934% % 2935% % 2936% % 2937% M a g i c k E x p o r t I m a g e P i x e l s % 2938% % 2939% % 2940% % 2941%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2942% 2943% MagickExportImagePixels() extracts pixel data from an image and returns it 2944% to you. The method returns MagickTrue on success otherwise MagickFalse if 2945% an error is encountered. The data is returned as char, short int, int, 2946% ssize_t, float, or double in the order specified by map. 2947% 2948% Suppose you want to extract the first scanline of a 640x480 image as 2949% character data in red-green-blue order: 2950% 2951% MagickExportImagePixels(wand,0,0,640,1,"RGB",CharPixel,pixels); 2952% 2953% The format of the MagickExportImagePixels method is: 2954% 2955% MagickBooleanType MagickExportImagePixels(MagickWand *wand, 2956% const ssize_t x,const ssize_t y,const size_t columns, 2957% const size_t rows,const char *map,const StorageType storage, 2958% void *pixels) 2959% 2960% A description of each parameter follows: 2961% 2962% o wand: the magick wand. 2963% 2964% o x, y, columns, rows: These values define the perimeter 2965% of a region of pixels you want to extract. 2966% 2967% o map: This string reflects the expected ordering of the pixel array. 2968% It can be any combination or order of R = red, G = green, B = blue, 2969% A = alpha (0 is transparent), O = alpha (0 is opaque), C = cyan, 2970% Y = yellow, M = magenta, K = black, I = intensity (for grayscale), 2971% P = pad. 2972% 2973% o storage: Define the data type of the pixels. Float and double types are 2974% expected to be normalized [0..1] otherwise [0..QuantumRange]. Choose from 2975% these types: CharPixel, DoublePixel, FloatPixel, IntegerPixel, 2976% LongPixel, QuantumPixel, or ShortPixel. 2977% 2978% o pixels: This array of values contain the pixel components as defined by 2979% map and type. You must preallocate this array where the expected 2980% length varies depending on the values of width, height, map, and type. 2981% 2982*/ 2983WandExport MagickBooleanType MagickExportImagePixels(MagickWand *wand, 2984 const ssize_t x,const ssize_t y,const size_t columns, 2985 const size_t rows,const char *map,const StorageType storage, 2986 void *pixels) 2987{ 2988 MagickBooleanType 2989 status; 2990 2991 assert(wand != (MagickWand *) NULL); 2992 assert(wand->signature == WandSignature); 2993 if (IfMagickTrue(wand->debug)) 2994 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 2995 if (wand->images == (Image *) NULL) 2996 ThrowWandException(WandError,"ContainsNoImages",wand->name); 2997 status=ExportImagePixels(wand->images,x,y,columns,rows,map, 2998 storage,pixels,wand->exception); 2999 return(status); 3000} 3001 3002/* 3003%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3004% % 3005% % 3006% % 3007% M a g i c k E x t e n t I m a g e % 3008% % 3009% % 3010% % 3011%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3012% 3013% MagickExtentImage() extends the image as defined by the geometry, gravity, 3014% and wand background color. Set the (x,y) offset of the geometry to move 3015% the original wand relative to the extended wand. 3016% 3017% The format of the MagickExtentImage method is: 3018% 3019% MagickBooleanType MagickExtentImage(MagickWand *wand,const size_t width, 3020% const size_t height,const ssize_t x,const ssize_t y) 3021% 3022% A description of each parameter follows: 3023% 3024% o wand: the magick wand. 3025% 3026% o width: the region width. 3027% 3028% o height: the region height. 3029% 3030% o x: the region x offset. 3031% 3032% o y: the region y offset. 3033% 3034*/ 3035WandExport MagickBooleanType MagickExtentImage(MagickWand *wand, 3036 const size_t width,const size_t height,const ssize_t x,const ssize_t y) 3037{ 3038 Image 3039 *extent_image; 3040 3041 RectangleInfo 3042 extent; 3043 3044 assert(wand != (MagickWand *) NULL); 3045 assert(wand->signature == WandSignature); 3046 if (IfMagickTrue(wand->debug)) 3047 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3048 if (wand->images == (Image *) NULL) 3049 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3050 extent.width=width; 3051 extent.height=height; 3052 extent.x=x; 3053 extent.y=y; 3054 extent_image=ExtentImage(wand->images,&extent,wand->exception); 3055 if (extent_image == (Image *) NULL) 3056 return(MagickFalse); 3057 ReplaceImageInList(&wand->images,extent_image); 3058 return(MagickTrue); 3059} 3060 3061/* 3062%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3063% % 3064% % 3065% % 3066% M a g i c k F l i p I m a g e % 3067% % 3068% % 3069% % 3070%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3071% 3072% MagickFlipImage() creates a vertical mirror image by reflecting the pixels 3073% around the central x-axis. 3074% 3075% The format of the MagickFlipImage method is: 3076% 3077% MagickBooleanType MagickFlipImage(MagickWand *wand) 3078% 3079% A description of each parameter follows: 3080% 3081% o wand: the magick wand. 3082% 3083*/ 3084WandExport MagickBooleanType MagickFlipImage(MagickWand *wand) 3085{ 3086 Image 3087 *flip_image; 3088 3089 assert(wand != (MagickWand *) NULL); 3090 assert(wand->signature == WandSignature); 3091 if (IfMagickTrue(wand->debug)) 3092 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3093 if (wand->images == (Image *) NULL) 3094 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3095 flip_image=FlipImage(wand->images,wand->exception); 3096 if (flip_image == (Image *) NULL) 3097 return(MagickFalse); 3098 ReplaceImageInList(&wand->images,flip_image); 3099 return(MagickTrue); 3100} 3101 3102/* 3103%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3104% % 3105% % 3106% % 3107% 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 % 3108% % 3109% % 3110% % 3111%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3112% 3113% MagickFloodfillPaintImage() changes the color value of any pixel that matches 3114% target and is an immediate neighbor. If the method FillToBorderMethod is 3115% specified, the color value is changed for any neighbor pixel that does not 3116% match the bordercolor member of image. 3117% 3118% The format of the MagickFloodfillPaintImage method is: 3119% 3120% MagickBooleanType MagickFloodfillPaintImage(MagickWand *wand, 3121% const PixelWand *fill,const double fuzz,const PixelWand *bordercolor, 3122% const ssize_t x,const ssize_t y,const MagickBooleanType invert) 3123% 3124% A description of each parameter follows: 3125% 3126% o wand: the magick wand. 3127% 3128% o fill: the floodfill color pixel wand. 3129% 3130% o fuzz: By default target must match a particular pixel color 3131% exactly. However, in many cases two colors may differ by a small amount. 3132% The fuzz member of image defines how much tolerance is acceptable to 3133% consider two colors as the same. For example, set fuzz to 10 and the 3134% color red at intensities of 100 and 102 respectively are now interpreted 3135% as the same color for the purposes of the floodfill. 3136% 3137% o bordercolor: the border color pixel wand. 3138% 3139% o x,y: the starting location of the operation. 3140% 3141% o invert: paint any pixel that does not match the target color. 3142% 3143*/ 3144WandExport MagickBooleanType MagickFloodfillPaintImage(MagickWand *wand, 3145 const PixelWand *fill,const double fuzz,const PixelWand *bordercolor, 3146 const ssize_t x,const ssize_t y,const MagickBooleanType invert) 3147{ 3148 DrawInfo 3149 *draw_info; 3150 3151 MagickBooleanType 3152 status; 3153 3154 PixelInfo 3155 target; 3156 3157 assert(wand != (MagickWand *) NULL); 3158 assert(wand->signature == WandSignature); 3159 if (IfMagickTrue(wand->debug)) 3160 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3161 if (wand->images == (Image *) NULL) 3162 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3163 draw_info=CloneDrawInfo(wand->image_info,(DrawInfo *) NULL); 3164 PixelGetQuantumPacket(fill,&draw_info->fill); 3165 (void) GetOneVirtualPixelInfo(wand->images,TileVirtualPixelMethod,x % 3166 wand->images->columns,y % wand->images->rows,&target,wand->exception); 3167 if (bordercolor != (PixelWand *) NULL) 3168 PixelGetMagickColor(bordercolor,&target); 3169 wand->images->fuzz=fuzz; 3170 status=FloodfillPaintImage(wand->images,draw_info,&target,x,y,invert, 3171 wand->exception); 3172 draw_info=DestroyDrawInfo(draw_info); 3173 return(status); 3174} 3175 3176/* 3177%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3178% % 3179% % 3180% % 3181% M a g i c k F l o p I m a g e % 3182% % 3183% % 3184% % 3185%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3186% 3187% MagickFlopImage() creates a horizontal mirror image by reflecting the pixels 3188% around the central y-axis. 3189% 3190% The format of the MagickFlopImage method is: 3191% 3192% MagickBooleanType MagickFlopImage(MagickWand *wand) 3193% 3194% A description of each parameter follows: 3195% 3196% o wand: the magick wand. 3197% 3198*/ 3199WandExport MagickBooleanType MagickFlopImage(MagickWand *wand) 3200{ 3201 Image 3202 *flop_image; 3203 3204 assert(wand != (MagickWand *) NULL); 3205 assert(wand->signature == WandSignature); 3206 if (IfMagickTrue(wand->debug)) 3207 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3208 if (wand->images == (Image *) NULL) 3209 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3210 flop_image=FlopImage(wand->images,wand->exception); 3211 if (flop_image == (Image *) NULL) 3212 return(MagickFalse); 3213 ReplaceImageInList(&wand->images,flop_image); 3214 return(MagickTrue); 3215} 3216 3217/* 3218%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3219% % 3220% % 3221% % 3222% 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 % 3223% % 3224% % 3225% % 3226%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3227% 3228% MagickForwardFourierTransformImage() implements the discrete Fourier 3229% transform (DFT) of the image either as a magnitude / phase or real / 3230% imaginary image pair. 3231% 3232% The format of the MagickForwardFourierTransformImage method is: 3233% 3234% MagickBooleanType MagickForwardFourierTransformImage(MagickWand *wand, 3235% const MagickBooleanType magnitude) 3236% 3237% A description of each parameter follows: 3238% 3239% o wand: the magick wand. 3240% 3241% o magnitude: if true, return as magnitude / phase pair otherwise a real / 3242% imaginary image pair. 3243% 3244*/ 3245WandExport MagickBooleanType MagickForwardFourierTransformImage( 3246 MagickWand *wand,const MagickBooleanType magnitude) 3247{ 3248 Image 3249 *forward_image; 3250 3251 assert(wand != (MagickWand *) NULL); 3252 assert(wand->signature == WandSignature); 3253 if (IfMagickTrue(wand->debug)) 3254 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3255 if (wand->images == (Image *) NULL) 3256 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3257 forward_image=ForwardFourierTransformImage(wand->images,magnitude, 3258 wand->exception); 3259 if (forward_image == (Image *) NULL) 3260 return(MagickFalse); 3261 ReplaceImageInList(&wand->images,forward_image); 3262 return(MagickTrue); 3263} 3264 3265/* 3266%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3267% % 3268% % 3269% % 3270% M a g i c k F r a m e I m a g e % 3271% % 3272% % 3273% % 3274%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3275% 3276% MagickFrameImage() adds a simulated three-dimensional border around the 3277% image. The width and height specify the border width of the vertical and 3278% horizontal sides of the frame. The inner and outer bevels indicate the 3279% width of the inner and outer shadows of the frame. 3280% 3281% The format of the MagickFrameImage method is: 3282% 3283% MagickBooleanType MagickFrameImage(MagickWand *wand, 3284% const PixelWand *matte_color,const size_t width, 3285% const size_t height,const ssize_t inner_bevel, 3286% const ssize_t outer_bevel,const CompositeOperator compose) 3287% 3288% A description of each parameter follows: 3289% 3290% o wand: the magick wand. 3291% 3292% o matte_color: the frame color pixel wand. 3293% 3294% o width: the border width. 3295% 3296% o height: the border height. 3297% 3298% o inner_bevel: the inner bevel width. 3299% 3300% o outer_bevel: the outer bevel width. 3301% 3302% o compose: the composite operator. 3303% 3304*/ 3305WandExport MagickBooleanType MagickFrameImage(MagickWand *wand, 3306 const PixelWand *matte_color,const size_t width,const size_t height, 3307 const ssize_t inner_bevel,const ssize_t outer_bevel, 3308 const CompositeOperator compose) 3309{ 3310 Image 3311 *frame_image; 3312 3313 FrameInfo 3314 frame_info; 3315 3316 assert(wand != (MagickWand *) NULL); 3317 assert(wand->signature == WandSignature); 3318 if (IfMagickTrue(wand->debug)) 3319 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3320 if (wand->images == (Image *) NULL) 3321 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3322 (void) ResetMagickMemory(&frame_info,0,sizeof(frame_info)); 3323 frame_info.width=wand->images->columns+2*width; 3324 frame_info.height=wand->images->rows+2*height; 3325 frame_info.x=(ssize_t) width; 3326 frame_info.y=(ssize_t) height; 3327 frame_info.inner_bevel=inner_bevel; 3328 frame_info.outer_bevel=outer_bevel; 3329 PixelGetQuantumPacket(matte_color,&wand->images->matte_color); 3330 frame_image=FrameImage(wand->images,&frame_info,compose,wand->exception); 3331 if (frame_image == (Image *) NULL) 3332 return(MagickFalse); 3333 ReplaceImageInList(&wand->images,frame_image); 3334 return(MagickTrue); 3335} 3336 3337/* 3338%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3339% % 3340% % 3341% % 3342% M a g i c k F u n c t i o n I m a g e % 3343% % 3344% % 3345% % 3346%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3347% 3348% MagickFunctionImage() applys an arithmetic, relational, or logical 3349% expression to an image. Use these operators to lighten or darken an image, 3350% to increase or decrease contrast in an image, or to produce the "negative" 3351% of an image. 3352% 3353% The format of the MagickFunctionImage method is: 3354% 3355% MagickBooleanType MagickFunctionImage(MagickWand *wand, 3356% const MagickFunction function,const size_t number_arguments, 3357% const double *arguments) 3358% 3359% A description of each parameter follows: 3360% 3361% o wand: the magick wand. 3362% 3363% o function: the image function. 3364% 3365% o number_arguments: the number of function arguments. 3366% 3367% o arguments: the function arguments. 3368% 3369*/ 3370WandExport MagickBooleanType MagickFunctionImage(MagickWand *wand, 3371 const MagickFunction function,const size_t number_arguments, 3372 const double *arguments) 3373{ 3374 MagickBooleanType 3375 status; 3376 3377 assert(wand != (MagickWand *) NULL); 3378 assert(wand->signature == WandSignature); 3379 if (IfMagickTrue(wand->debug)) 3380 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3381 if (wand->images == (Image *) NULL) 3382 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3383 status=FunctionImage(wand->images,function,number_arguments,arguments, 3384 wand->exception); 3385 return(status); 3386} 3387 3388/* 3389%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3390% % 3391% % 3392% % 3393% M a g i c k F x I m a g e % 3394% % 3395% % 3396% % 3397%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3398% 3399% MagickFxImage() evaluate expression for each pixel in the image. 3400% 3401% The format of the MagickFxImage method is: 3402% 3403% MagickWand *MagickFxImage(MagickWand *wand,const char *expression) 3404% 3405% A description of each parameter follows: 3406% 3407% o wand: the magick wand. 3408% 3409% o expression: the expression. 3410% 3411*/ 3412WandExport MagickWand *MagickFxImage(MagickWand *wand,const char *expression) 3413{ 3414 Image 3415 *fx_image; 3416 3417 assert(wand != (MagickWand *) NULL); 3418 assert(wand->signature == WandSignature); 3419 if (IfMagickTrue(wand->debug)) 3420 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3421 if (wand->images == (Image *) NULL) 3422 return((MagickWand *) NULL); 3423 fx_image=FxImage(wand->images,expression,wand->exception); 3424 if (fx_image == (Image *) NULL) 3425 return((MagickWand *) NULL); 3426 return(CloneMagickWandFromImages(wand,fx_image)); 3427} 3428 3429/* 3430%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3431% % 3432% % 3433% % 3434% M a g i c k G a m m a I m a g e % 3435% % 3436% % 3437% % 3438%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3439% 3440% MagickGammaImage() gamma-corrects an image. The same image viewed on 3441% different devices will have perceptual differences in the way the image's 3442% intensities are represented on the screen. Specify individual gamma levels 3443% for the red, green, and blue channels, or adjust all three with the gamma 3444% parameter. Values typically range from 0.8 to 2.3. 3445% 3446% You can also reduce the influence of a particular channel with a gamma 3447% value of 0. 3448% 3449% The format of the MagickGammaImage method is: 3450% 3451% MagickBooleanType MagickGammaImage(MagickWand *wand,const double gamma) 3452% 3453% A description of each parameter follows: 3454% 3455% o wand: the magick wand. 3456% 3457% o level: Define the level of gamma correction. 3458% 3459*/ 3460WandExport MagickBooleanType MagickGammaImage(MagickWand *wand, 3461 const double gamma) 3462{ 3463 MagickBooleanType 3464 status; 3465 3466 assert(wand != (MagickWand *) NULL); 3467 assert(wand->signature == WandSignature); 3468 if (IfMagickTrue(wand->debug)) 3469 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3470 if (wand->images == (Image *) NULL) 3471 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3472 status=GammaImage(wand->images,gamma,wand->exception); 3473 return(status); 3474} 3475 3476/* 3477%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3478% % 3479% % 3480% % 3481% M a g i c k G a u s s i a n B l u r I m a g e % 3482% % 3483% % 3484% % 3485%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3486% 3487% MagickGaussianBlurImage() blurs an image. We convolve the image with a 3488% Gaussian operator of the given radius and standard deviation (sigma). 3489% For reasonable results, the radius should be larger than sigma. Use a 3490% radius of 0 and MagickGaussianBlurImage() selects a suitable radius for you. 3491% 3492% The format of the MagickGaussianBlurImage method is: 3493% 3494% MagickBooleanType MagickGaussianBlurImage(MagickWand *wand, 3495% const double radius,const double sigma) 3496% 3497% A description of each parameter follows: 3498% 3499% o wand: the magick wand. 3500% 3501% o radius: the radius of the Gaussian, in pixels, not counting the center 3502% pixel. 3503% 3504% o sigma: the standard deviation of the Gaussian, in pixels. 3505% 3506*/ 3507WandExport MagickBooleanType MagickGaussianBlurImage(MagickWand *wand, 3508 const double radius,const double sigma) 3509{ 3510 Image 3511 *blur_image; 3512 3513 assert(wand != (MagickWand *) NULL); 3514 assert(wand->signature == WandSignature); 3515 if (IfMagickTrue(wand->debug)) 3516 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3517 if (wand->images == (Image *) NULL) 3518 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3519 blur_image=GaussianBlurImage(wand->images,radius,sigma,wand->exception); 3520 if (blur_image == (Image *) NULL) 3521 return(MagickFalse); 3522 ReplaceImageInList(&wand->images,blur_image); 3523 return(MagickTrue); 3524} 3525 3526/* 3527%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3528% % 3529% % 3530% % 3531% M a g i c k G e t I m a g e % 3532% % 3533% % 3534% % 3535%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3536% 3537% MagickGetImage() gets the image at the current image index. 3538% 3539% The format of the MagickGetImage method is: 3540% 3541% MagickWand *MagickGetImage(MagickWand *wand) 3542% 3543% A description of each parameter follows: 3544% 3545% o wand: the magick wand. 3546% 3547*/ 3548WandExport MagickWand *MagickGetImage(MagickWand *wand) 3549{ 3550 Image 3551 *image; 3552 3553 assert(wand != (MagickWand *) NULL); 3554 assert(wand->signature == WandSignature); 3555 if (IfMagickTrue(wand->debug)) 3556 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3557 if (wand->images == (Image *) NULL) 3558 { 3559 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 3560 "ContainsNoImages","`%s'",wand->name); 3561 return((MagickWand *) NULL); 3562 } 3563 image=CloneImage(wand->images,0,0,MagickTrue,wand->exception); 3564 if (image == (Image *) NULL) 3565 return((MagickWand *) NULL); 3566 return(CloneMagickWandFromImages(wand,image)); 3567} 3568 3569/* 3570%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3571% % 3572% % 3573% % 3574% 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 % 3575% % 3576% % 3577% % 3578%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3579% 3580% MagickGetImageAlphaChannel() returns MagickFalse if the image alpha channel 3581% is not activated. That is, the image is RGB rather than RGBA or CMYK rather 3582% than CMYKA. 3583% 3584% The format of the MagickGetImageAlphaChannel method is: 3585% 3586% size_t MagickGetImageAlphaChannel(MagickWand *wand) 3587% 3588% A description of each parameter follows: 3589% 3590% o wand: the magick wand. 3591% 3592*/ 3593WandExport MagickBooleanType MagickGetImageAlphaChannel(MagickWand *wand) 3594{ 3595 assert(wand != (MagickWand *) NULL); 3596 assert(wand->signature == WandSignature); 3597 if (IfMagickTrue(wand->debug)) 3598 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3599 if (wand->images == (Image *) NULL) 3600 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3601 return(GetImageAlphaChannel(wand->images)); 3602} 3603 3604/* 3605%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3606% % 3607% % 3608% % 3609% M a g i c k G e t I m a g e C l i p M a s k % 3610% % 3611% % 3612% % 3613%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3614% 3615% MagickGetImageMask() gets the image clip mask at the current image index. 3616% 3617% The format of the MagickGetImageMask method is: 3618% 3619% MagickWand *MagickGetImageMask(MagickWand *wand) 3620% 3621% A description of each parameter follows: 3622% 3623% o wand: the magick wand. 3624% 3625*/ 3626WandExport MagickWand *MagickGetImageMask(MagickWand *wand) 3627{ 3628 Image 3629 *image; 3630 3631 assert(wand != (MagickWand *) NULL); 3632 assert(wand->signature == WandSignature); 3633 if (IfMagickTrue(wand->debug)) 3634 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3635 if (wand->images == (Image *) NULL) 3636 { 3637 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 3638 "ContainsNoImages","`%s'",wand->name); 3639 return((MagickWand *) NULL); 3640 } 3641 image=GetImageMask(wand->images,wand->exception); 3642 if (image == (Image *) NULL) 3643 return((MagickWand *) NULL); 3644 return(CloneMagickWandFromImages(wand,image)); 3645} 3646 3647/* 3648%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3649% % 3650% % 3651% % 3652% 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 % 3653% % 3654% % 3655% % 3656%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3657% 3658% MagickGetImageBackgroundColor() returns the image background color. 3659% 3660% The format of the MagickGetImageBackgroundColor method is: 3661% 3662% MagickBooleanType MagickGetImageBackgroundColor(MagickWand *wand, 3663% PixelWand *background_color) 3664% 3665% A description of each parameter follows: 3666% 3667% o wand: the magick wand. 3668% 3669% o background_color: Return the background color. 3670% 3671*/ 3672WandExport MagickBooleanType MagickGetImageBackgroundColor(MagickWand *wand, 3673 PixelWand *background_color) 3674{ 3675 assert(wand != (MagickWand *) NULL); 3676 assert(wand->signature == WandSignature); 3677 if (IfMagickTrue(wand->debug)) 3678 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3679 if (wand->images == (Image *) NULL) 3680 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3681 PixelSetPixelColor(background_color,&wand->images->background_color); 3682 return(MagickTrue); 3683} 3684 3685/* 3686%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3687% % 3688% % 3689% % 3690% M a g i c k G e t I m a g e B l o b % 3691% % 3692% % 3693% % 3694%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3695% 3696% MagickGetImageBlob() implements direct to memory image formats. It returns 3697% the image as a blob (a formatted "file" in memory) and its length, starting 3698% from the current position in the image sequence. Use MagickSetImageFormat() 3699% to set the format to write to the blob (GIF, JPEG, PNG, etc.). 3700% 3701% Utilize MagickResetIterator() to ensure the write is from the beginning of 3702% the image sequence. 3703% 3704% Use MagickRelinquishMemory() to free the blob when you are done with it. 3705% 3706% The format of the MagickGetImageBlob method is: 3707% 3708% unsigned char *MagickGetImageBlob(MagickWand *wand,size_t *length) 3709% 3710% A description of each parameter follows: 3711% 3712% o wand: the magick wand. 3713% 3714% o length: the length of the blob. 3715% 3716*/ 3717WandExport unsigned char *MagickGetImageBlob(MagickWand *wand,size_t *length) 3718{ 3719 assert(wand != (MagickWand *) NULL); 3720 assert(wand->signature == WandSignature); 3721 if (IfMagickTrue(wand->debug)) 3722 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3723 if (wand->images == (Image *) NULL) 3724 { 3725 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 3726 "ContainsNoImages","`%s'",wand->name); 3727 return((unsigned char *) NULL); 3728 } 3729 return(ImageToBlob(wand->image_info,wand->images,length,wand->exception)); 3730} 3731 3732/* 3733%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3734% % 3735% % 3736% % 3737% M a g i c k G e t I m a g e s B l o b % 3738% % 3739% % 3740% % 3741%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3742% 3743% MagickGetImageBlob() implements direct to memory image formats. It 3744% returns the image sequence as a blob and its length. The format of the image 3745% determines the format of the returned blob (GIF, JPEG, PNG, etc.). To 3746% return a different image format, use MagickSetImageFormat(). 3747% 3748% Note, some image formats do not permit multiple images to the same image 3749% stream (e.g. JPEG). in this instance, just the first image of the 3750% sequence is returned as a blob. 3751% 3752% The format of the MagickGetImagesBlob method is: 3753% 3754% unsigned char *MagickGetImagesBlob(MagickWand *wand,size_t *length) 3755% 3756% A description of each parameter follows: 3757% 3758% o wand: the magick wand. 3759% 3760% o length: the length of the blob. 3761% 3762*/ 3763WandExport unsigned char *MagickGetImagesBlob(MagickWand *wand,size_t *length) 3764{ 3765 unsigned char 3766 *blob; 3767 3768 assert(wand != (MagickWand *) NULL); 3769 assert(wand->signature == WandSignature); 3770 if (IfMagickTrue(wand->debug)) 3771 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3772 if (wand->images == (Image *) NULL) 3773 { 3774 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 3775 "ContainsNoImages","`%s'",wand->name); 3776 return((unsigned char *) NULL); 3777 } 3778 blob=ImagesToBlob(wand->image_info,GetFirstImageInList(wand->images),length, 3779 wand->exception); 3780 return(blob); 3781} 3782 3783/* 3784%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3785% % 3786% % 3787% % 3788% 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 % 3789% % 3790% % 3791% % 3792%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3793% 3794% MagickGetImageBluePrimary() returns the chromaticy blue primary point for the 3795% image. 3796% 3797% The format of the MagickGetImageBluePrimary method is: 3798% 3799% MagickBooleanType MagickGetImageBluePrimary(MagickWand *wand,double *x, 3800% double *y) 3801% 3802% A description of each parameter follows: 3803% 3804% o wand: the magick wand. 3805% 3806% o x: the chromaticity blue primary x-point. 3807% 3808% o y: the chromaticity blue primary y-point. 3809% 3810*/ 3811WandExport MagickBooleanType MagickGetImageBluePrimary(MagickWand *wand, 3812 double *x,double *y) 3813{ 3814 assert(wand != (MagickWand *) NULL); 3815 assert(wand->signature == WandSignature); 3816 if (IfMagickTrue(wand->debug)) 3817 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3818 if (wand->images == (Image *) NULL) 3819 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3820 *x=wand->images->chromaticity.blue_primary.x; 3821 *y=wand->images->chromaticity.blue_primary.y; 3822 return(MagickTrue); 3823} 3824 3825/* 3826%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3827% % 3828% % 3829% % 3830% 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 % 3831% % 3832% % 3833% % 3834%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3835% 3836% MagickGetImageBorderColor() returns the image border color. 3837% 3838% The format of the MagickGetImageBorderColor method is: 3839% 3840% MagickBooleanType MagickGetImageBorderColor(MagickWand *wand, 3841% PixelWand *border_color) 3842% 3843% A description of each parameter follows: 3844% 3845% o wand: the magick wand. 3846% 3847% o border_color: Return the border color. 3848% 3849*/ 3850WandExport MagickBooleanType MagickGetImageBorderColor(MagickWand *wand, 3851 PixelWand *border_color) 3852{ 3853 assert(wand != (MagickWand *) NULL); 3854 assert(wand->signature == WandSignature); 3855 if (IfMagickTrue(wand->debug)) 3856 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3857 if (wand->images == (Image *) NULL) 3858 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3859 PixelSetPixelColor(border_color,&wand->images->border_color); 3860 return(MagickTrue); 3861} 3862 3863/* 3864%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3865% % 3866% % 3867% % 3868% M a g i c k G e t I m a g e F e a t u r e s % 3869% % 3870% % 3871% % 3872%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3873% 3874% MagickGetImageFeatures() returns features for each channel in the 3875% image in each of four directions (horizontal, vertical, left and right 3876% diagonals) for the specified distance. The features include the angular 3877% second moment, contrast, correlation, sum of squares: variance, inverse 3878% difference moment, sum average, sum varience, sum entropy, entropy, 3879% difference variance, difference entropy, information measures of 3880% correlation 1, information measures of correlation 2, and maximum 3881% correlation coefficient. You can access the red channel contrast, for 3882% example, like this: 3883% 3884% channel_features=MagickGetImageFeatures(wand,1); 3885% contrast=channel_features[RedPixelChannel].contrast[0]; 3886% 3887% Use MagickRelinquishMemory() to free the statistics buffer. 3888% 3889% The format of the MagickGetImageFeatures method is: 3890% 3891% ChannelFeatures *MagickGetImageFeatures(MagickWand *wand, 3892% const size_t distance) 3893% 3894% A description of each parameter follows: 3895% 3896% o wand: the magick wand. 3897% 3898% o distance: the distance. 3899% 3900*/ 3901WandExport ChannelFeatures *MagickGetImageFeatures(MagickWand *wand, 3902 const size_t distance) 3903{ 3904 assert(wand != (MagickWand *) NULL); 3905 assert(wand->signature == WandSignature); 3906 if (IfMagickTrue(wand->debug)) 3907 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3908 if (wand->images == (Image *) NULL) 3909 { 3910 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 3911 "ContainsNoImages","`%s'",wand->name); 3912 return((ChannelFeatures *) NULL); 3913 } 3914 return(GetImageFeatures(wand->images,distance,wand->exception)); 3915} 3916 3917/* 3918%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3919% % 3920% % 3921% % 3922% M a g i c k G e t I m a g e K u r t o s i s % 3923% % 3924% % 3925% % 3926%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3927% 3928% MagickGetImageKurtosis() gets the kurtosis and skewness of one or 3929% more image channels. 3930% 3931% The format of the MagickGetImageKurtosis method is: 3932% 3933% MagickBooleanType MagickGetImageKurtosis(MagickWand *wand, 3934% double *kurtosis,double *skewness) 3935% 3936% A description of each parameter follows: 3937% 3938% o wand: the magick wand. 3939% 3940% o kurtosis: The kurtosis for the specified channel(s). 3941% 3942% o skewness: The skewness for the specified channel(s). 3943% 3944*/ 3945WandExport MagickBooleanType MagickGetImageKurtosis(MagickWand *wand, 3946 double *kurtosis,double *skewness) 3947{ 3948 MagickBooleanType 3949 status; 3950 3951 assert(wand != (MagickWand *) NULL); 3952 assert(wand->signature == WandSignature); 3953 if (IfMagickTrue(wand->debug)) 3954 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 3955 if (wand->images == (Image *) NULL) 3956 ThrowWandException(WandError,"ContainsNoImages",wand->name); 3957 status=GetImageKurtosis(wand->images,kurtosis,skewness,wand->exception); 3958 return(status); 3959} 3960 3961/* 3962%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3963% % 3964% % 3965% % 3966% M a g i c k G e t I m a g e M e a n % 3967% % 3968% % 3969% % 3970%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3971% 3972% MagickGetImageMean() gets the mean and standard deviation of one or more 3973% image channels. 3974% 3975% The format of the MagickGetImageMean method is: 3976% 3977% MagickBooleanType MagickGetImageMean(MagickWand *wand,double *mean, 3978% double *standard_deviation) 3979% 3980% A description of each parameter follows: 3981% 3982% o wand: the magick wand. 3983% 3984% o channel: the image channel(s). 3985% 3986% o mean: The mean pixel value for the specified channel(s). 3987% 3988% o standard_deviation: The standard deviation for the specified channel(s). 3989% 3990*/ 3991WandExport MagickBooleanType MagickGetImageMean(MagickWand *wand,double *mean, 3992 double *standard_deviation) 3993{ 3994 MagickBooleanType 3995 status; 3996 3997 assert(wand != (MagickWand *) NULL); 3998 assert(wand->signature == WandSignature); 3999 if (IfMagickTrue(wand->debug)) 4000 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4001 if (wand->images == (Image *) NULL) 4002 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4003 status=GetImageMean(wand->images,mean,standard_deviation,wand->exception); 4004 return(status); 4005} 4006 4007/* 4008%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4009% % 4010% % 4011% % 4012% M a g i c k G e t I m a g e R a n g e % 4013% % 4014% % 4015% % 4016%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4017% 4018% MagickGetImageRange() gets the range for one or more image channels. 4019% 4020% The format of the MagickGetImageRange method is: 4021% 4022% MagickBooleanType MagickGetImageRange(MagickWand *wand,double *minima, 4023% double *maxima) 4024% 4025% A description of each parameter follows: 4026% 4027% o wand: the magick wand. 4028% 4029% o minima: The minimum pixel value for the specified channel(s). 4030% 4031% o maxima: The maximum pixel value for the specified channel(s). 4032% 4033*/ 4034WandExport MagickBooleanType MagickGetImageRange(MagickWand *wand, 4035 double *minima,double *maxima) 4036{ 4037 MagickBooleanType 4038 status; 4039 4040 assert(wand != (MagickWand *) NULL); 4041 assert(wand->signature == WandSignature); 4042 if (IfMagickTrue(wand->debug)) 4043 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4044 if (wand->images == (Image *) NULL) 4045 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4046 status=GetImageRange(wand->images,minima,maxima,wand->exception); 4047 return(status); 4048} 4049 4050/* 4051%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4052% % 4053% % 4054% % 4055% M a g i c k G e t I m a g e S t a t i s t i c s % 4056% % 4057% % 4058% % 4059%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4060% 4061% MagickGetImageStatistics() returns statistics for each channel in the 4062% image. The statistics include the channel depth, its minima and 4063% maxima, the mean, the standard deviation, the kurtosis and the skewness. 4064% You can access the red channel mean, for example, like this: 4065% 4066% channel_statistics=MagickGetImageStatistics(wand); 4067% red_mean=channel_statistics[RedPixelChannel].mean; 4068% 4069% Use MagickRelinquishMemory() to free the statistics buffer. 4070% 4071% The format of the MagickGetImageStatistics method is: 4072% 4073% ChannelStatistics *MagickGetImageStatistics(MagickWand *wand) 4074% 4075% A description of each parameter follows: 4076% 4077% o wand: the magick wand. 4078% 4079*/ 4080WandExport ChannelStatistics *MagickGetImageStatistics(MagickWand *wand) 4081{ 4082 assert(wand != (MagickWand *) NULL); 4083 assert(wand->signature == WandSignature); 4084 if (IfMagickTrue(wand->debug)) 4085 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4086 if (wand->images == (Image *) NULL) 4087 { 4088 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4089 "ContainsNoImages","`%s'",wand->name); 4090 return((ChannelStatistics *) NULL); 4091 } 4092 return(GetImageStatistics(wand->images,wand->exception)); 4093} 4094 4095/* 4096%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4097% % 4098% % 4099% % 4100% 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 % 4101% % 4102% % 4103% % 4104%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4105% 4106% MagickGetImageColormapColor() returns the color of the specified colormap 4107% index. 4108% 4109% The format of the MagickGetImageColormapColor method is: 4110% 4111% MagickBooleanType MagickGetImageColormapColor(MagickWand *wand, 4112% const size_t index,PixelWand *color) 4113% 4114% A description of each parameter follows: 4115% 4116% o wand: the magick wand. 4117% 4118% o index: the offset into the image colormap. 4119% 4120% o color: Return the colormap color in this wand. 4121% 4122*/ 4123WandExport MagickBooleanType MagickGetImageColormapColor(MagickWand *wand, 4124 const size_t index,PixelWand *color) 4125{ 4126 assert(wand != (MagickWand *) NULL); 4127 assert(wand->signature == WandSignature); 4128 if (IfMagickTrue(wand->debug)) 4129 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4130 if (wand->images == (Image *) NULL) 4131 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4132 if ((wand->images->colormap == (PixelInfo *) NULL) || 4133 (index >= wand->images->colors)) 4134 { 4135 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4136 "InvalidColormapIndex","`%s'",wand->name); 4137 return(MagickFalse); 4138 } 4139 PixelSetPixelColor(color,wand->images->colormap+index); 4140 return(MagickTrue); 4141} 4142 4143/* 4144%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4145% % 4146% % 4147% % 4148% M a g i c k G e t I m a g e C o l o r s % 4149% % 4150% % 4151% % 4152%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4153% 4154% MagickGetImageColors() gets the number of unique colors in the image. 4155% 4156% The format of the MagickGetImageColors method is: 4157% 4158% size_t MagickGetImageColors(MagickWand *wand) 4159% 4160% A description of each parameter follows: 4161% 4162% o wand: the magick wand. 4163% 4164*/ 4165WandExport size_t MagickGetImageColors(MagickWand *wand) 4166{ 4167 assert(wand != (MagickWand *) NULL); 4168 assert(wand->signature == WandSignature); 4169 if (IfMagickTrue(wand->debug)) 4170 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4171 if (wand->images == (Image *) NULL) 4172 { 4173 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4174 "ContainsNoImages","`%s'",wand->name); 4175 return(0); 4176 } 4177 return(GetNumberColors(wand->images,(FILE *) NULL,wand->exception)); 4178} 4179 4180/* 4181%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4182% % 4183% % 4184% % 4185% M a g i c k G e t I m a g e C o l o r s p a c e % 4186% % 4187% % 4188% % 4189%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4190% 4191% MagickGetImageColorspace() gets the image colorspace. 4192% 4193% The format of the MagickGetImageColorspace method is: 4194% 4195% ColorspaceType MagickGetImageColorspace(MagickWand *wand) 4196% 4197% A description of each parameter follows: 4198% 4199% o wand: the magick wand. 4200% 4201*/ 4202WandExport ColorspaceType MagickGetImageColorspace(MagickWand *wand) 4203{ 4204 assert(wand != (MagickWand *) NULL); 4205 assert(wand->signature == WandSignature); 4206 if (IfMagickTrue(wand->debug)) 4207 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4208 if (wand->images == (Image *) NULL) 4209 { 4210 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4211 "ContainsNoImages","`%s'",wand->name); 4212 return(UndefinedColorspace); 4213 } 4214 return(wand->images->colorspace); 4215} 4216 4217/* 4218%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4219% % 4220% % 4221% % 4222% M a g i c k G e t I m a g e C o m p o s e % 4223% % 4224% % 4225% % 4226%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4227% 4228% MagickGetImageCompose() returns the composite operator associated with the 4229% image. 4230% 4231% The format of the MagickGetImageCompose method is: 4232% 4233% CompositeOperator MagickGetImageCompose(MagickWand *wand) 4234% 4235% A description of each parameter follows: 4236% 4237% o wand: the magick wand. 4238% 4239*/ 4240WandExport CompositeOperator MagickGetImageCompose(MagickWand *wand) 4241{ 4242 assert(wand != (MagickWand *) NULL); 4243 assert(wand->signature == WandSignature); 4244 if (IfMagickTrue(wand->debug)) 4245 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4246 if (wand->images == (Image *) NULL) 4247 { 4248 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4249 "ContainsNoImages","`%s'",wand->name); 4250 return(UndefinedCompositeOp); 4251 } 4252 return(wand->images->compose); 4253} 4254 4255/* 4256%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4257% % 4258% % 4259% % 4260% 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 % 4261% % 4262% % 4263% % 4264%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4265% 4266% MagickGetImageCompression() gets the image compression. 4267% 4268% The format of the MagickGetImageCompression method is: 4269% 4270% CompressionType MagickGetImageCompression(MagickWand *wand) 4271% 4272% A description of each parameter follows: 4273% 4274% o wand: the magick wand. 4275% 4276*/ 4277WandExport CompressionType MagickGetImageCompression(MagickWand *wand) 4278{ 4279 assert(wand != (MagickWand *) NULL); 4280 assert(wand->signature == WandSignature); 4281 if (IfMagickTrue(wand->debug)) 4282 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4283 if (wand->images == (Image *) NULL) 4284 { 4285 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4286 "ContainsNoImages","`%s'",wand->name); 4287 return(UndefinedCompression); 4288 } 4289 return(wand->images->compression); 4290} 4291 4292/* 4293%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4294% % 4295% % 4296% % 4297% 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 % 4298% % 4299% % 4300% % 4301%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4302% 4303% MagickGetImageCompressionQuality() gets the image compression quality. 4304% 4305% The format of the MagickGetImageCompressionQuality method is: 4306% 4307% size_t MagickGetImageCompressionQuality(MagickWand *wand) 4308% 4309% A description of each parameter follows: 4310% 4311% o wand: the magick wand. 4312% 4313*/ 4314WandExport size_t MagickGetImageCompressionQuality(MagickWand *wand) 4315{ 4316 assert(wand != (MagickWand *) NULL); 4317 assert(wand->signature == WandSignature); 4318 if (IfMagickTrue(wand->debug)) 4319 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4320 if (wand->images == (Image *) NULL) 4321 { 4322 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4323 "ContainsNoImages","`%s'",wand->name); 4324 return(0UL); 4325 } 4326 return(wand->images->quality); 4327} 4328 4329/* 4330%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4331% % 4332% % 4333% % 4334% M a g i c k G e t I m a g e D e l a y % 4335% % 4336% % 4337% % 4338%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4339% 4340% MagickGetImageDelay() gets the image delay. 4341% 4342% The format of the MagickGetImageDelay method is: 4343% 4344% size_t MagickGetImageDelay(MagickWand *wand) 4345% 4346% A description of each parameter follows: 4347% 4348% o wand: the magick wand. 4349% 4350*/ 4351WandExport size_t MagickGetImageDelay(MagickWand *wand) 4352{ 4353 assert(wand != (MagickWand *) NULL); 4354 assert(wand->signature == WandSignature); 4355 if (IfMagickTrue(wand->debug)) 4356 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4357 if (wand->images == (Image *) NULL) 4358 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4359 return(wand->images->delay); 4360} 4361 4362/* 4363%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4364% % 4365% % 4366% % 4367% M a g i c k G e t I m a g e D e p t h % 4368% % 4369% % 4370% % 4371%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4372% 4373% MagickGetImageDepth() gets the image depth. 4374% 4375% The format of the MagickGetImageDepth method is: 4376% 4377% size_t MagickGetImageDepth(MagickWand *wand) 4378% 4379% A description of each parameter follows: 4380% 4381% o wand: the magick wand. 4382% 4383*/ 4384WandExport size_t MagickGetImageDepth(MagickWand *wand) 4385{ 4386 assert(wand != (MagickWand *) NULL); 4387 assert(wand->signature == WandSignature); 4388 if (IfMagickTrue(wand->debug)) 4389 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4390 if (wand->images == (Image *) NULL) 4391 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4392 return(wand->images->depth); 4393} 4394 4395/* 4396%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4397% % 4398% % 4399% % 4400% M a g i c k G e t I m a g e D i s p o s e % 4401% % 4402% % 4403% % 4404%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4405% 4406% MagickGetImageDispose() gets the image disposal method. 4407% 4408% The format of the MagickGetImageDispose method is: 4409% 4410% DisposeType MagickGetImageDispose(MagickWand *wand) 4411% 4412% A description of each parameter follows: 4413% 4414% o wand: the magick wand. 4415% 4416*/ 4417WandExport DisposeType MagickGetImageDispose(MagickWand *wand) 4418{ 4419 assert(wand != (MagickWand *) NULL); 4420 assert(wand->signature == WandSignature); 4421 if (IfMagickTrue(wand->debug)) 4422 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4423 if (wand->images == (Image *) NULL) 4424 { 4425 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4426 "ContainsNoImages","`%s'",wand->name); 4427 return(UndefinedDispose); 4428 } 4429 return((DisposeType) wand->images->dispose); 4430} 4431 4432/* 4433%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4434% % 4435% % 4436% % 4437% M a g i c k G e t I m a g e D i s t o r t i o n % 4438% % 4439% % 4440% % 4441%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4442% 4443% MagickGetImageDistortion() compares an image to a reconstructed image and 4444% returns the specified distortion metric. 4445% 4446% The format of the MagickGetImageDistortion method is: 4447% 4448% MagickBooleanType MagickGetImageDistortion(MagickWand *wand, 4449% const MagickWand *reference,const MetricType metric, 4450% double *distortion) 4451% 4452% A description of each parameter follows: 4453% 4454% o wand: the magick wand. 4455% 4456% o reference: the reference wand. 4457% 4458% o metric: the metric. 4459% 4460% o distortion: the computed distortion between the images. 4461% 4462*/ 4463WandExport MagickBooleanType MagickGetImageDistortion(MagickWand *wand, 4464 const MagickWand *reference,const MetricType metric,double *distortion) 4465{ 4466 MagickBooleanType 4467 status; 4468 4469 assert(wand != (MagickWand *) NULL); 4470 assert(wand->signature == WandSignature); 4471 if (IfMagickTrue(wand->debug)) 4472 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4473 if ((wand->images == (Image *) NULL) || (reference->images == (Image *) NULL)) 4474 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4475 status=GetImageDistortion(wand->images,reference->images,metric,distortion, 4476 wand->exception); 4477 return(status); 4478} 4479 4480/* 4481%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4482% % 4483% % 4484% % 4485% 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 % 4486% % 4487% % 4488% % 4489%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4490% 4491% MagickGetImageDistortions() compares one or more pixel channels of an 4492% image to a reconstructed image and returns the specified distortion metrics. 4493% 4494% Use MagickRelinquishMemory() to free the metrics when you are done with them. 4495% 4496% The format of the MagickGetImageDistortion method is: 4497% 4498% double *MagickGetImageDistortion(MagickWand *wand, 4499% const MagickWand *reference,const MetricType metric) 4500% 4501% A description of each parameter follows: 4502% 4503% o wand: the magick wand. 4504% 4505% o reference: the reference wand. 4506% 4507% o metric: the metric. 4508% 4509*/ 4510WandExport double *MagickGetImageDistortions(MagickWand *wand, 4511 const MagickWand *reference,const MetricType metric) 4512{ 4513 double 4514 *channel_distortion; 4515 4516 assert(wand != (MagickWand *) NULL); 4517 assert(wand->signature == WandSignature); 4518 if (IfMagickTrue(wand->debug)) 4519 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4520 assert(reference != (MagickWand *) NULL); 4521 assert(reference->signature == WandSignature); 4522 if ((wand->images == (Image *) NULL) || (reference->images == (Image *) NULL)) 4523 { 4524 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4525 "ContainsNoImages","`%s'",wand->name); 4526 return((double *) NULL); 4527 } 4528 channel_distortion=GetImageDistortions(wand->images,reference->images, 4529 metric,wand->exception); 4530 return(channel_distortion); 4531} 4532 4533/* 4534%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4535% % 4536% % 4537% % 4538% M a g i c k G e t I m a g e E n d i a n % 4539% % 4540% % 4541% % 4542%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4543% 4544% MagickGetImageEndian() gets the image endian. 4545% 4546% The format of the MagickGetImageEndian method is: 4547% 4548% EndianType MagickGetImageEndian(MagickWand *wand) 4549% 4550% A description of each parameter follows: 4551% 4552% o wand: the magick wand. 4553% 4554*/ 4555WandExport EndianType MagickGetImageEndian(MagickWand *wand) 4556{ 4557 assert(wand != (MagickWand *) NULL); 4558 assert(wand->signature == WandSignature); 4559 if (IfMagickTrue(wand->debug)) 4560 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4561 if (wand->images == (Image *) NULL) 4562 { 4563 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4564 "ContainsNoImages","`%s'",wand->name); 4565 return(UndefinedEndian); 4566 } 4567 return(wand->images->endian); 4568} 4569 4570/* 4571%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4572% % 4573% % 4574% % 4575% M a g i c k G e t I m a g e F i l e n a m e % 4576% % 4577% % 4578% % 4579%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4580% 4581% MagickGetImageFilename() returns the filename of a particular image in a 4582% sequence. 4583% 4584% The format of the MagickGetImageFilename method is: 4585% 4586% char *MagickGetImageFilename(MagickWand *wand) 4587% 4588% A description of each parameter follows: 4589% 4590% o wand: the magick wand. 4591% 4592*/ 4593WandExport char *MagickGetImageFilename(MagickWand *wand) 4594{ 4595 assert(wand != (MagickWand *) NULL); 4596 assert(wand->signature == WandSignature); 4597 if (IfMagickTrue(wand->debug)) 4598 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4599 if (wand->images == (Image *) NULL) 4600 { 4601 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4602 "ContainsNoImages","`%s'",wand->name); 4603 return((char *) NULL); 4604 } 4605 return(AcquireString(wand->images->filename)); 4606} 4607 4608/* 4609%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4610% % 4611% % 4612% % 4613% M a g i c k G e t I m a g e F o r m a t % 4614% % 4615% % 4616% % 4617%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4618% 4619% MagickGetImageFormat() returns the format of a particular image in a 4620% sequence. 4621% 4622% The format of the MagickGetImageFormat method is: 4623% 4624% char *MagickGetImageFormat(MagickWand *wand) 4625% 4626% A description of each parameter follows: 4627% 4628% o wand: the magick wand. 4629% 4630*/ 4631WandExport char *MagickGetImageFormat(MagickWand *wand) 4632{ 4633 assert(wand != (MagickWand *) NULL); 4634 assert(wand->signature == WandSignature); 4635 if (IfMagickTrue(wand->debug)) 4636 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4637 if (wand->images == (Image *) NULL) 4638 { 4639 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4640 "ContainsNoImages","`%s'",wand->name); 4641 return((char *) NULL); 4642 } 4643 return(AcquireString(wand->images->magick)); 4644} 4645 4646/* 4647%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4648% % 4649% % 4650% % 4651% M a g i c k G e t I m a g e F u z z % 4652% % 4653% % 4654% % 4655%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4656% 4657% MagickGetImageFuzz() gets the image fuzz. 4658% 4659% The format of the MagickGetImageFuzz method is: 4660% 4661% double MagickGetImageFuzz(MagickWand *wand) 4662% 4663% A description of each parameter follows: 4664% 4665% o wand: the magick wand. 4666% 4667*/ 4668WandExport double MagickGetImageFuzz(MagickWand *wand) 4669{ 4670 assert(wand != (MagickWand *) NULL); 4671 assert(wand->signature == WandSignature); 4672 if (IfMagickTrue(wand->debug)) 4673 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4674 if (wand->images == (Image *) NULL) 4675 { 4676 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4677 "ContainsNoImages","`%s'",wand->name); 4678 return(0.0); 4679 } 4680 return(wand->images->fuzz); 4681} 4682 4683/* 4684%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4685% % 4686% % 4687% % 4688% M a g i c k G e t I m a g e G a m m a % 4689% % 4690% % 4691% % 4692%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4693% 4694% MagickGetImageGamma() gets the image gamma. 4695% 4696% The format of the MagickGetImageGamma method is: 4697% 4698% double MagickGetImageGamma(MagickWand *wand) 4699% 4700% A description of each parameter follows: 4701% 4702% o wand: the magick wand. 4703% 4704*/ 4705WandExport double MagickGetImageGamma(MagickWand *wand) 4706{ 4707 assert(wand != (MagickWand *) NULL); 4708 assert(wand->signature == WandSignature); 4709 if (IfMagickTrue(wand->debug)) 4710 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4711 if (wand->images == (Image *) NULL) 4712 { 4713 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4714 "ContainsNoImages","`%s'",wand->name); 4715 return(0.0); 4716 } 4717 return(wand->images->gamma); 4718} 4719 4720/* 4721%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4722% % 4723% % 4724% % 4725% M a g i c k G e t I m a g e G r a v i t y % 4726% % 4727% % 4728% % 4729%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4730% 4731% MagickGetImageGravity() gets the image gravity. 4732% 4733% The format of the MagickGetImageGravity method is: 4734% 4735% GravityType MagickGetImageGravity(MagickWand *wand) 4736% 4737% A description of each parameter follows: 4738% 4739% o wand: the magick wand. 4740% 4741*/ 4742WandExport GravityType MagickGetImageGravity(MagickWand *wand) 4743{ 4744 assert(wand != (MagickWand *) NULL); 4745 assert(wand->signature == WandSignature); 4746 if (IfMagickTrue(wand->debug)) 4747 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4748 if (wand->images == (Image *) NULL) 4749 { 4750 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4751 "ContainsNoImages","`%s'",wand->name); 4752 return(UndefinedGravity); 4753 } 4754 return(wand->images->gravity); 4755} 4756 4757/* 4758%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4759% % 4760% % 4761% % 4762% 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 % 4763% % 4764% % 4765% % 4766%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4767% 4768% MagickGetImageGreenPrimary() returns the chromaticy green primary point. 4769% 4770% The format of the MagickGetImageGreenPrimary method is: 4771% 4772% MagickBooleanType MagickGetImageGreenPrimary(MagickWand *wand,double *x, 4773% double *y) 4774% 4775% A description of each parameter follows: 4776% 4777% o wand: the magick wand. 4778% 4779% o x: the chromaticity green primary x-point. 4780% 4781% o y: the chromaticity green primary y-point. 4782% 4783*/ 4784WandExport MagickBooleanType MagickGetImageGreenPrimary(MagickWand *wand, 4785 double *x,double *y) 4786{ 4787 assert(wand != (MagickWand *) NULL); 4788 assert(wand->signature == WandSignature); 4789 if (IfMagickTrue(wand->debug)) 4790 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4791 if (wand->images == (Image *) NULL) 4792 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4793 *x=wand->images->chromaticity.green_primary.x; 4794 *y=wand->images->chromaticity.green_primary.y; 4795 return(MagickTrue); 4796} 4797 4798/* 4799%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4800% % 4801% % 4802% % 4803% M a g i c k G e t I m a g e H e i g h t % 4804% % 4805% % 4806% % 4807%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4808% 4809% MagickGetImageHeight() returns the image height. 4810% 4811% The format of the MagickGetImageHeight method is: 4812% 4813% size_t MagickGetImageHeight(MagickWand *wand) 4814% 4815% A description of each parameter follows: 4816% 4817% o wand: the magick wand. 4818% 4819*/ 4820WandExport size_t MagickGetImageHeight(MagickWand *wand) 4821{ 4822 assert(wand != (MagickWand *) NULL); 4823 assert(wand->signature == WandSignature); 4824 if (IfMagickTrue(wand->debug)) 4825 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4826 if (wand->images == (Image *) NULL) 4827 ThrowWandException(WandError,"ContainsNoImages",wand->name); 4828 return(wand->images->rows); 4829} 4830 4831/* 4832%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4833% % 4834% % 4835% % 4836% M a g i c k G e t I m a g e H i s t o g r a m % 4837% % 4838% % 4839% % 4840%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4841% 4842% MagickGetImageHistogram() returns the image histogram as an array of 4843% PixelWand wands. 4844% 4845% The format of the MagickGetImageHistogram method is: 4846% 4847% PixelWand **MagickGetImageHistogram(MagickWand *wand, 4848% size_t *number_colors) 4849% 4850% A description of each parameter follows: 4851% 4852% o wand: the magick wand. 4853% 4854% o number_colors: the number of unique colors in the image and the number 4855% of pixel wands returned. 4856% 4857*/ 4858WandExport PixelWand **MagickGetImageHistogram(MagickWand *wand, 4859 size_t *number_colors) 4860{ 4861 PixelInfo 4862 *histogram; 4863 4864 PixelWand 4865 **pixel_wands; 4866 4867 register ssize_t 4868 i; 4869 4870 assert(wand != (MagickWand *) NULL); 4871 assert(wand->signature == WandSignature); 4872 if (IfMagickTrue(wand->debug)) 4873 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4874 if (wand->images == (Image *) NULL) 4875 { 4876 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4877 "ContainsNoImages","`%s'",wand->name); 4878 return((PixelWand **) NULL); 4879 } 4880 histogram=GetImageHistogram(wand->images,number_colors,wand->exception); 4881 if (histogram == (PixelInfo *) NULL) 4882 return((PixelWand **) NULL); 4883 pixel_wands=NewPixelWands(*number_colors); 4884 for (i=0; i < (ssize_t) *number_colors; i++) 4885 { 4886 PixelSetPixelColor(pixel_wands[i],&histogram[i]); 4887 PixelSetColorCount(pixel_wands[i],(size_t) histogram[i].count); 4888 } 4889 histogram=(PixelInfo *) RelinquishMagickMemory(histogram); 4890 return(pixel_wands); 4891} 4892 4893/* 4894%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4895% % 4896% % 4897% % 4898% 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 % 4899% % 4900% % 4901% % 4902%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4903% 4904% MagickGetImageInterlaceScheme() gets the image interlace scheme. 4905% 4906% The format of the MagickGetImageInterlaceScheme method is: 4907% 4908% InterlaceType MagickGetImageInterlaceScheme(MagickWand *wand) 4909% 4910% A description of each parameter follows: 4911% 4912% o wand: the magick wand. 4913% 4914*/ 4915WandExport InterlaceType MagickGetImageInterlaceScheme(MagickWand *wand) 4916{ 4917 assert(wand != (MagickWand *) NULL); 4918 assert(wand->signature == WandSignature); 4919 if (IfMagickTrue(wand->debug)) 4920 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4921 if (wand->images == (Image *) NULL) 4922 { 4923 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4924 "ContainsNoImages","`%s'",wand->name); 4925 return(UndefinedInterlace); 4926 } 4927 return(wand->images->interlace); 4928} 4929 4930/* 4931%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4932% % 4933% % 4934% % 4935% 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 % 4936% % 4937% % 4938% % 4939%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4940% 4941% MagickGetImageInterpolateMethod() returns the interpolation method for the 4942% sepcified image. 4943% 4944% The format of the MagickGetImageInterpolateMethod method is: 4945% 4946% PixelInterpolateMethod MagickGetImagePixelInterpolateMethod( 4947% MagickWand *wand) 4948% 4949% A description of each parameter follows: 4950% 4951% o wand: the magick wand. 4952% 4953*/ 4954WandExport PixelInterpolateMethod MagickGetImageInterpolateMethod( 4955 MagickWand *wand) 4956{ 4957 assert(wand != (MagickWand *) NULL); 4958 assert(wand->signature == WandSignature); 4959 if (IfMagickTrue(wand->debug)) 4960 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4961 if (wand->images == (Image *) NULL) 4962 { 4963 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 4964 "ContainsNoImages","`%s'",wand->name); 4965 return(UndefinedInterpolatePixel); 4966 } 4967 return(wand->images->interpolate); 4968} 4969 4970/* 4971%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4972% % 4973% % 4974% % 4975% M a g i c k G e t I m a g e I t e r a t i o n s % 4976% % 4977% % 4978% % 4979%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4980% 4981% MagickGetImageIterations() gets the image iterations. 4982% 4983% The format of the MagickGetImageIterations method is: 4984% 4985% size_t MagickGetImageIterations(MagickWand *wand) 4986% 4987% A description of each parameter follows: 4988% 4989% o wand: the magick wand. 4990% 4991*/ 4992WandExport size_t MagickGetImageIterations(MagickWand *wand) 4993{ 4994 assert(wand != (MagickWand *) NULL); 4995 assert(wand->signature == WandSignature); 4996 if (IfMagickTrue(wand->debug)) 4997 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 4998 if (wand->images == (Image *) NULL) 4999 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5000 return(wand->images->iterations); 5001} 5002 5003/* 5004%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5005% % 5006% % 5007% % 5008% M a g i c k G e t I m a g e L e n g t h % 5009% % 5010% % 5011% % 5012%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5013% 5014% MagickGetImageLength() returns the image length in bytes. 5015% 5016% The format of the MagickGetImageLength method is: 5017% 5018% MagickBooleanType MagickGetImageLength(MagickWand *wand, 5019% MagickSizeType *length) 5020% 5021% A description of each parameter follows: 5022% 5023% o wand: the magick wand. 5024% 5025% o length: the image length in bytes. 5026% 5027*/ 5028WandExport MagickBooleanType MagickGetImageLength(MagickWand *wand, 5029 MagickSizeType *length) 5030{ 5031 assert(wand != (MagickWand *) NULL); 5032 assert(wand->signature == WandSignature); 5033 if (IfMagickTrue(wand->debug)) 5034 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5035 if (wand->images == (Image *) NULL) 5036 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5037 *length=GetBlobSize(wand->images); 5038 return(MagickTrue); 5039} 5040 5041/* 5042%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5043% % 5044% % 5045% % 5046% M a g i c k G e t I m a g e M a t t e C o l o r % 5047% % 5048% % 5049% % 5050%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5051% 5052% MagickGetImageMatteColor() returns the image matte color. 5053% 5054% The format of the MagickGetImageMatteColor method is: 5055% 5056% MagickBooleanType MagickGetImagematteColor(MagickWand *wand, 5057% PixelWand *matte_color) 5058% 5059% A description of each parameter follows: 5060% 5061% o wand: the magick wand. 5062% 5063% o matte_color: Return the matte color. 5064% 5065*/ 5066WandExport MagickBooleanType MagickGetImageMatteColor(MagickWand *wand, 5067 PixelWand *matte_color) 5068{ 5069 assert(wand != (MagickWand *) NULL); 5070 assert(wand->signature == WandSignature); 5071 if (IfMagickTrue(wand->debug)) 5072 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5073 if (wand->images == (Image *) NULL) 5074 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5075 PixelSetPixelColor(matte_color,&wand->images->matte_color); 5076 return(MagickTrue); 5077} 5078 5079/* 5080%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5081% % 5082% % 5083% % 5084% 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 % 5085% % 5086% % 5087% % 5088%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5089% 5090% MagickGetImageOrientation() returns the image orientation. 5091% 5092% The format of the MagickGetImageOrientation method is: 5093% 5094% OrientationType MagickGetImageOrientation(MagickWand *wand) 5095% 5096% A description of each parameter follows: 5097% 5098% o wand: the magick wand. 5099% 5100*/ 5101WandExport OrientationType MagickGetImageOrientation(MagickWand *wand) 5102{ 5103 assert(wand != (MagickWand *) NULL); 5104 assert(wand->signature == WandSignature); 5105 if (IfMagickTrue(wand->debug)) 5106 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5107 if (wand->images == (Image *) NULL) 5108 { 5109 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 5110 "ContainsNoImages","`%s'",wand->name); 5111 return(UndefinedOrientation); 5112 } 5113 return(wand->images->orientation); 5114} 5115 5116/* 5117%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5118% % 5119% % 5120% % 5121% M a g i c k G e t I m a g e P a g e % 5122% % 5123% % 5124% % 5125%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5126% 5127% MagickGetImagePage() returns the page geometry associated with the image. 5128% 5129% The format of the MagickGetImagePage method is: 5130% 5131% MagickBooleanType MagickGetImagePage(MagickWand *wand, 5132% size_t *width,size_t *height,ssize_t *x,ssize_t *y) 5133% 5134% A description of each parameter follows: 5135% 5136% o wand: the magick wand. 5137% 5138% o width: the page width. 5139% 5140% o height: the page height. 5141% 5142% o x: the page x-offset. 5143% 5144% o y: the page y-offset. 5145% 5146*/ 5147WandExport MagickBooleanType MagickGetImagePage(MagickWand *wand, 5148 size_t *width,size_t *height,ssize_t *x,ssize_t *y) 5149{ 5150 assert(wand != (const MagickWand *) NULL); 5151 assert(wand->signature == WandSignature); 5152 if (IfMagickTrue(wand->debug)) 5153 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5154 if (wand->images == (Image *) NULL) 5155 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5156 *width=wand->images->page.width; 5157 *height=wand->images->page.height; 5158 *x=wand->images->page.x; 5159 *y=wand->images->page.y; 5160 return(MagickTrue); 5161} 5162 5163/* 5164%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5165% % 5166% % 5167% % 5168% M a g i c k G e t I m a g e P i x e l C o l o r % 5169% % 5170% % 5171% % 5172%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5173% 5174% MagickGetImagePixelColor() returns the color of the specified pixel. 5175% 5176% The format of the MagickGetImagePixelColor method is: 5177% 5178% MagickBooleanType MagickGetImagePixelColor(MagickWand *wand, 5179% const ssize_t x,const ssize_t y,PixelWand *color) 5180% 5181% A description of each parameter follows: 5182% 5183% o wand: the magick wand. 5184% 5185% o x,y: the pixel offset into the image. 5186% 5187% o color: Return the colormap color in this wand. 5188% 5189*/ 5190WandExport MagickBooleanType MagickGetImagePixelColor(MagickWand *wand, 5191 const ssize_t x,const ssize_t y,PixelWand *color) 5192{ 5193 register const Quantum 5194 *p; 5195 5196 CacheView 5197 *image_view; 5198 5199 assert(wand != (MagickWand *) NULL); 5200 assert(wand->signature == WandSignature); 5201 if (IfMagickTrue(wand->debug)) 5202 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5203 if (wand->images == (Image *) NULL) 5204 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5205 image_view=AcquireVirtualCacheView(wand->images,wand->exception); 5206 p=GetCacheViewVirtualPixels(image_view,x,y,1,1,wand->exception); 5207 if (p == (const Quantum *) NULL) 5208 { 5209 image_view=DestroyCacheView(image_view); 5210 return(MagickFalse); 5211 } 5212 PixelSetQuantumPixel(wand->images,p,color); 5213 image_view=DestroyCacheView(image_view); 5214 return(MagickTrue); 5215} 5216 5217/* 5218%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5219% % 5220% % 5221% % 5222% M a g i c k G e t I m a g e R e d P r i m a r y % 5223% % 5224% % 5225% % 5226%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5227% 5228% MagickGetImageRedPrimary() returns the chromaticy red primary point. 5229% 5230% The format of the MagickGetImageRedPrimary method is: 5231% 5232% MagickBooleanType MagickGetImageRedPrimary(MagickWand *wand,double *x, 5233% double *y) 5234% 5235% A description of each parameter follows: 5236% 5237% o wand: the magick wand. 5238% 5239% o x: the chromaticity red primary x-point. 5240% 5241% o y: the chromaticity red primary y-point. 5242% 5243*/ 5244WandExport MagickBooleanType MagickGetImageRedPrimary(MagickWand *wand, 5245 double *x,double *y) 5246{ 5247 assert(wand != (MagickWand *) NULL); 5248 assert(wand->signature == WandSignature); 5249 if (IfMagickTrue(wand->debug)) 5250 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5251 if (wand->images == (Image *) NULL) 5252 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5253 *x=wand->images->chromaticity.red_primary.x; 5254 *y=wand->images->chromaticity.red_primary.y; 5255 return(MagickTrue); 5256} 5257 5258/* 5259%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5260% % 5261% % 5262% % 5263% M a g i c k G e t I m a g e R e g i o n % 5264% % 5265% % 5266% % 5267%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5268% 5269% MagickGetImageRegion() extracts a region of the image and returns it as a 5270% a new wand. 5271% 5272% The format of the MagickGetImageRegion method is: 5273% 5274% MagickWand *MagickGetImageRegion(MagickWand *wand, 5275% const size_t width,const size_t height,const ssize_t x, 5276% const ssize_t y) 5277% 5278% A description of each parameter follows: 5279% 5280% o wand: the magick wand. 5281% 5282% o width: the region width. 5283% 5284% o height: the region height. 5285% 5286% o x: the region x offset. 5287% 5288% o y: the region y offset. 5289% 5290*/ 5291WandExport MagickWand *MagickGetImageRegion(MagickWand *wand, 5292 const size_t width,const size_t height,const ssize_t x, 5293 const ssize_t y) 5294{ 5295 Image 5296 *region_image; 5297 5298 RectangleInfo 5299 region; 5300 5301 assert(wand != (MagickWand *) NULL); 5302 assert(wand->signature == WandSignature); 5303 if (IfMagickTrue(wand->debug)) 5304 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5305 if (wand->images == (Image *) NULL) 5306 return((MagickWand *) NULL); 5307 region.width=width; 5308 region.height=height; 5309 region.x=x; 5310 region.y=y; 5311 region_image=CropImage(wand->images,®ion,wand->exception); 5312 if (region_image == (Image *) NULL) 5313 return((MagickWand *) NULL); 5314 return(CloneMagickWandFromImages(wand,region_image)); 5315} 5316 5317/* 5318%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5319% % 5320% % 5321% % 5322% 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 % 5323% % 5324% % 5325% % 5326%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5327% 5328% MagickGetImageRenderingIntent() gets the image rendering intent. 5329% 5330% The format of the MagickGetImageRenderingIntent method is: 5331% 5332% RenderingIntent MagickGetImageRenderingIntent(MagickWand *wand) 5333% 5334% A description of each parameter follows: 5335% 5336% o wand: the magick wand. 5337% 5338*/ 5339WandExport RenderingIntent MagickGetImageRenderingIntent(MagickWand *wand) 5340{ 5341 assert(wand != (MagickWand *) NULL); 5342 assert(wand->signature == WandSignature); 5343 if (IfMagickTrue(wand->debug)) 5344 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5345 if (wand->images == (Image *) NULL) 5346 { 5347 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 5348 "ContainsNoImages","`%s'",wand->name); 5349 return(UndefinedIntent); 5350 } 5351 return((RenderingIntent) wand->images->rendering_intent); 5352} 5353 5354/* 5355%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5356% % 5357% % 5358% % 5359% M a g i c k G e t I m a g e R e s o l u t i o n % 5360% % 5361% % 5362% % 5363%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5364% 5365% MagickGetImageResolution() gets the image X and Y resolution. 5366% 5367% The format of the MagickGetImageResolution method is: 5368% 5369% MagickBooleanType MagickGetImageResolution(MagickWand *wand,double *x, 5370% double *y) 5371% 5372% A description of each parameter follows: 5373% 5374% o wand: the magick wand. 5375% 5376% o x: the image x-resolution. 5377% 5378% o y: the image y-resolution. 5379% 5380*/ 5381WandExport MagickBooleanType MagickGetImageResolution(MagickWand *wand, 5382 double *x,double *y) 5383{ 5384 assert(wand != (MagickWand *) NULL); 5385 assert(wand->signature == WandSignature); 5386 if (IfMagickTrue(wand->debug)) 5387 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5388 if (wand->images == (Image *) NULL) 5389 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5390 *x=wand->images->resolution.x; 5391 *y=wand->images->resolution.y; 5392 return(MagickTrue); 5393} 5394 5395/* 5396%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5397% % 5398% % 5399% % 5400% M a g i c k G e t I m a g e S c e n e % 5401% % 5402% % 5403% % 5404%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5405% 5406% MagickGetImageScene() gets the image scene. 5407% 5408% The format of the MagickGetImageScene method is: 5409% 5410% size_t MagickGetImageScene(MagickWand *wand) 5411% 5412% A description of each parameter follows: 5413% 5414% o wand: the magick wand. 5415% 5416*/ 5417WandExport size_t MagickGetImageScene(MagickWand *wand) 5418{ 5419 assert(wand != (MagickWand *) NULL); 5420 assert(wand->signature == WandSignature); 5421 if (IfMagickTrue(wand->debug)) 5422 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5423 if (wand->images == (Image *) NULL) 5424 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5425 return(wand->images->scene); 5426} 5427 5428/* 5429%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5430% % 5431% % 5432% % 5433% M a g i c k G e t I m a g e S i g n a t u r e % 5434% % 5435% % 5436% % 5437%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5438% 5439% MagickGetImageSignature() generates an SHA-256 message digest for the image 5440% pixel stream. 5441% 5442% The format of the MagickGetImageSignature method is: 5443% 5444% char *MagickGetImageSignature(MagickWand *wand) 5445% 5446% A description of each parameter follows: 5447% 5448% o wand: the magick wand. 5449% 5450*/ 5451WandExport char *MagickGetImageSignature(MagickWand *wand) 5452{ 5453 const char 5454 *value; 5455 5456 MagickBooleanType 5457 status; 5458 5459 assert(wand != (MagickWand *) NULL); 5460 assert(wand->signature == WandSignature); 5461 if (IfMagickTrue(wand->debug)) 5462 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5463 if (wand->images == (Image *) NULL) 5464 { 5465 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 5466 "ContainsNoImages","`%s'",wand->name); 5467 return((char *) NULL); 5468 } 5469 status=SignatureImage(wand->images,wand->exception); 5470 if (IfMagickFalse(status)) 5471 return((char *) NULL); 5472 value=GetImageProperty(wand->images,"signature",wand->exception); 5473 if (value == (const char *) NULL) 5474 return((char *) NULL); 5475 return(AcquireString(value)); 5476} 5477 5478/* 5479%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5480% % 5481% % 5482% % 5483% 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 % 5484% % 5485% % 5486% % 5487%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5488% 5489% MagickGetImageTicksPerSecond() gets the image ticks-per-second. 5490% 5491% The format of the MagickGetImageTicksPerSecond method is: 5492% 5493% size_t MagickGetImageTicksPerSecond(MagickWand *wand) 5494% 5495% A description of each parameter follows: 5496% 5497% o wand: the magick wand. 5498% 5499*/ 5500WandExport size_t MagickGetImageTicksPerSecond(MagickWand *wand) 5501{ 5502 assert(wand != (MagickWand *) NULL); 5503 assert(wand->signature == WandSignature); 5504 if (IfMagickTrue(wand->debug)) 5505 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5506 if (wand->images == (Image *) NULL) 5507 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5508 return((size_t) wand->images->ticks_per_second); 5509} 5510 5511/* 5512%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5513% % 5514% % 5515% % 5516% M a g i c k G e t I m a g e T y p e % 5517% % 5518% % 5519% % 5520%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5521% 5522% MagickGetImageType() gets the potential image type: 5523% 5524% Bilevel Grayscale GrayscaleMatte 5525% Palette PaletteMatte TrueColor 5526% TrueColorMatte ColorSeparation ColorSeparationMatte 5527% 5528% To ensure the image type matches its potential, use MagickSetImageType(): 5529% 5530% (void) MagickSetImageType(wand,MagickGetImageType(wand)); 5531% 5532% The format of the MagickGetImageType method is: 5533% 5534% ImageType MagickGetImageType(MagickWand *wand) 5535% 5536% A description of each parameter follows: 5537% 5538% o wand: the magick wand. 5539% 5540*/ 5541WandExport ImageType MagickGetImageType(MagickWand *wand) 5542{ 5543 assert(wand != (MagickWand *) NULL); 5544 assert(wand->signature == WandSignature); 5545 if (IfMagickTrue(wand->debug)) 5546 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5547 if (wand->images == (Image *) NULL) 5548 { 5549 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 5550 "ContainsNoImages","`%s'",wand->name); 5551 return(UndefinedType); 5552 } 5553 return(GetImageType(wand->images,wand->exception)); 5554} 5555 5556/* 5557%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5558% % 5559% % 5560% % 5561% M a g i c k G e t I m a g e U n i t s % 5562% % 5563% % 5564% % 5565%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5566% 5567% MagickGetImageUnits() gets the image units of resolution. 5568% 5569% The format of the MagickGetImageUnits method is: 5570% 5571% ResolutionType MagickGetImageUnits(MagickWand *wand) 5572% 5573% A description of each parameter follows: 5574% 5575% o wand: the magick wand. 5576% 5577*/ 5578WandExport ResolutionType MagickGetImageUnits(MagickWand *wand) 5579{ 5580 assert(wand != (MagickWand *) NULL); 5581 assert(wand->signature == WandSignature); 5582 if (IfMagickTrue(wand->debug)) 5583 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5584 if (wand->images == (Image *) NULL) 5585 { 5586 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 5587 "ContainsNoImages","`%s'",wand->name); 5588 return(UndefinedResolution); 5589 } 5590 return(wand->images->units); 5591} 5592 5593/* 5594%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5595% % 5596% % 5597% % 5598% 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 % 5599% % 5600% % 5601% % 5602%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5603% 5604% MagickGetImageVirtualPixelMethod() returns the virtual pixel method for the 5605% sepcified image. 5606% 5607% The format of the MagickGetImageVirtualPixelMethod method is: 5608% 5609% VirtualPixelMethod MagickGetImageVirtualPixelMethod(MagickWand *wand) 5610% 5611% A description of each parameter follows: 5612% 5613% o wand: the magick wand. 5614% 5615*/ 5616WandExport VirtualPixelMethod MagickGetImageVirtualPixelMethod(MagickWand *wand) 5617{ 5618 assert(wand != (MagickWand *) NULL); 5619 assert(wand->signature == WandSignature); 5620 if (IfMagickTrue(wand->debug)) 5621 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5622 if (wand->images == (Image *) NULL) 5623 { 5624 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 5625 "ContainsNoImages","`%s'",wand->name); 5626 return(UndefinedVirtualPixelMethod); 5627 } 5628 return(GetImageVirtualPixelMethod(wand->images)); 5629} 5630 5631/* 5632%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5633% % 5634% % 5635% % 5636% M a g i c k G e t I m a g e W h i t e P o i n t % 5637% % 5638% % 5639% % 5640%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5641% 5642% MagickGetImageWhitePoint() returns the chromaticy white point. 5643% 5644% The format of the MagickGetImageWhitePoint method is: 5645% 5646% MagickBooleanType MagickGetImageWhitePoint(MagickWand *wand,double *x, 5647% double *y) 5648% 5649% A description of each parameter follows: 5650% 5651% o wand: the magick wand. 5652% 5653% o x: the chromaticity white x-point. 5654% 5655% o y: the chromaticity white y-point. 5656% 5657*/ 5658WandExport MagickBooleanType MagickGetImageWhitePoint(MagickWand *wand, 5659 double *x,double *y) 5660{ 5661 assert(wand != (MagickWand *) NULL); 5662 assert(wand->signature == WandSignature); 5663 if (IfMagickTrue(wand->debug)) 5664 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5665 if (wand->images == (Image *) NULL) 5666 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5667 *x=wand->images->chromaticity.white_point.x; 5668 *y=wand->images->chromaticity.white_point.y; 5669 return(MagickTrue); 5670} 5671 5672/* 5673%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5674% % 5675% % 5676% % 5677% M a g i c k G e t I m a g e W i d t h % 5678% % 5679% % 5680% % 5681%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5682% 5683% MagickGetImageWidth() returns the image width. 5684% 5685% The format of the MagickGetImageWidth method is: 5686% 5687% size_t MagickGetImageWidth(MagickWand *wand) 5688% 5689% A description of each parameter follows: 5690% 5691% o wand: the magick wand. 5692% 5693*/ 5694WandExport size_t MagickGetImageWidth(MagickWand *wand) 5695{ 5696 assert(wand != (MagickWand *) NULL); 5697 assert(wand->signature == WandSignature); 5698 if (IfMagickTrue(wand->debug)) 5699 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5700 if (wand->images == (Image *) NULL) 5701 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5702 return(wand->images->columns); 5703} 5704 5705/* 5706%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5707% % 5708% % 5709% % 5710% M a g i c k G e t N u m b e r I m a g e s % 5711% % 5712% % 5713% % 5714%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5715% 5716% MagickGetNumberImages() returns the number of images associated with a 5717% magick wand. 5718% 5719% The format of the MagickGetNumberImages method is: 5720% 5721% size_t MagickGetNumberImages(MagickWand *wand) 5722% 5723% A description of each parameter follows: 5724% 5725% o wand: the magick wand. 5726% 5727*/ 5728WandExport size_t MagickGetNumberImages(MagickWand *wand) 5729{ 5730 assert(wand != (MagickWand *) NULL); 5731 assert(wand->signature == WandSignature); 5732 if (IfMagickTrue(wand->debug)) 5733 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5734 return(GetImageListLength(wand->images)); 5735} 5736 5737/* 5738%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5739% % 5740% % 5741% % 5742% 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 % 5743% % 5744% % 5745% % 5746%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5747% 5748% MagickGetImageTotalInkDensity() gets the image total ink density. 5749% 5750% The format of the MagickGetImageTotalInkDensity method is: 5751% 5752% double MagickGetImageTotalInkDensity(MagickWand *wand) 5753% 5754% A description of each parameter follows: 5755% 5756% o wand: the magick wand. 5757% 5758*/ 5759WandExport double MagickGetImageTotalInkDensity(MagickWand *wand) 5760{ 5761 assert(wand != (MagickWand *) NULL); 5762 assert(wand->signature == WandSignature); 5763 if (IfMagickTrue(wand->debug)) 5764 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5765 if (wand->images == (Image *) NULL) 5766 { 5767 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 5768 "ContainsNoImages","`%s'",wand->name); 5769 return(0.0); 5770 } 5771 return(GetImageTotalInkDensity(wand->images,wand->exception)); 5772} 5773 5774/* 5775%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5776% % 5777% % 5778% % 5779% M a g i c k H a l d C l u t I m a g e % 5780% % 5781% % 5782% % 5783%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5784% 5785% MagickHaldClutImage() replaces colors in the image from a Hald color lookup 5786% table. A Hald color lookup table is a 3-dimensional color cube mapped to 2 5787% dimensions. Create it with the HALD coder. You can apply any color 5788% transformation to the Hald image and then use this method to apply the 5789% transform to the image. 5790% 5791% The format of the MagickHaldClutImage method is: 5792% 5793% MagickBooleanType MagickHaldClutImage(MagickWand *wand, 5794% const MagickWand *hald_wand) 5795% 5796% A description of each parameter follows: 5797% 5798% o wand: the magick wand. 5799% 5800% o hald_image: the hald CLUT image. 5801% 5802*/ 5803WandExport MagickBooleanType MagickHaldClutImage(MagickWand *wand, 5804 const MagickWand *hald_wand) 5805{ 5806 MagickBooleanType 5807 status; 5808 5809 assert(wand != (MagickWand *) NULL); 5810 assert(wand->signature == WandSignature); 5811 if (IfMagickTrue(wand->debug)) 5812 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5813 if ((wand->images == (Image *) NULL) || (hald_wand->images == (Image *) NULL)) 5814 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5815 status=HaldClutImage(wand->images,hald_wand->images,wand->exception); 5816 return(status); 5817} 5818 5819/* 5820%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5821% % 5822% % 5823% % 5824% M a g i c k H a s N e x t I m a g e % 5825% % 5826% % 5827% % 5828%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5829% 5830% MagickHasNextImage() returns MagickTrue if the wand has more images when 5831% traversing the list in the forward direction 5832% 5833% The format of the MagickHasNextImage method is: 5834% 5835% MagickBooleanType MagickHasNextImage(MagickWand *wand) 5836% 5837% A description of each parameter follows: 5838% 5839% o wand: the magick wand. 5840% 5841*/ 5842WandExport MagickBooleanType MagickHasNextImage(MagickWand *wand) 5843{ 5844 assert(wand != (MagickWand *) NULL); 5845 assert(wand->signature == WandSignature); 5846 if (IfMagickTrue(wand->debug)) 5847 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5848 if (wand->images == (Image *) NULL) 5849 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5850 if (GetNextImageInList(wand->images) == (Image *) NULL) 5851 return(MagickFalse); 5852 return(MagickTrue); 5853} 5854 5855/* 5856%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5857% % 5858% % 5859% % 5860% M a g i c k H a s P r e v i o u s I m a g e % 5861% % 5862% % 5863% % 5864%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5865% 5866% MagickHasPreviousImage() returns MagickTrue if the wand has more images when 5867% traversing the list in the reverse direction 5868% 5869% The format of the MagickHasPreviousImage method is: 5870% 5871% MagickBooleanType MagickHasPreviousImage(MagickWand *wand) 5872% 5873% A description of each parameter follows: 5874% 5875% o wand: the magick wand. 5876% 5877*/ 5878WandExport MagickBooleanType MagickHasPreviousImage(MagickWand *wand) 5879{ 5880 assert(wand != (MagickWand *) NULL); 5881 assert(wand->signature == WandSignature); 5882 if (IfMagickTrue(wand->debug)) 5883 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5884 if (wand->images == (Image *) NULL) 5885 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5886 if (GetPreviousImageInList(wand->images) == (Image *) NULL) 5887 return(MagickFalse); 5888 return(MagickTrue); 5889} 5890 5891/* 5892%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5893% % 5894% % 5895% % 5896% M a g i c k I d e n t i f y I m a g e % 5897% % 5898% % 5899% % 5900%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5901% 5902% MagickIdentifyImage() identifies an image by printing its attributes to the 5903% file. Attributes include the image width, height, size, and others. 5904% 5905% The format of the MagickIdentifyImage method is: 5906% 5907% const char *MagickIdentifyImage(MagickWand *wand) 5908% 5909% A description of each parameter follows: 5910% 5911% o wand: the magick wand. 5912% 5913*/ 5914WandExport char *MagickIdentifyImage(MagickWand *wand) 5915{ 5916 char 5917 *description, 5918 filename[MaxTextExtent]; 5919 5920 FILE 5921 *file; 5922 5923 int 5924 unique_file; 5925 5926 assert(wand != (MagickWand *) NULL); 5927 assert(wand->signature == WandSignature); 5928 if (IfMagickTrue(wand->debug)) 5929 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5930 if (wand->images == (Image *) NULL) 5931 { 5932 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 5933 "ContainsNoImages","`%s'",wand->name); 5934 return((char *) NULL); 5935 } 5936 description=(char *) NULL; 5937 unique_file=AcquireUniqueFileResource(filename); 5938 file=(FILE *) NULL; 5939 if (unique_file != -1) 5940 file=fdopen(unique_file,"wb"); 5941 if ((unique_file == -1) || (file == (FILE *) NULL)) 5942 { 5943 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 5944 "UnableToCreateTemporaryFile","`%s'",wand->name); 5945 return((char *) NULL); 5946 } 5947 (void) IdentifyImage(wand->images,file,MagickTrue,wand->exception); 5948 (void) fclose(file); 5949 description=FileToString(filename,~0,wand->exception); 5950 (void) RelinquishUniqueFileResource(filename); 5951 return(description); 5952} 5953 5954/* 5955%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5956% % 5957% % 5958% % 5959% M a g i c k I m p l o d e I m a g e % 5960% % 5961% % 5962% % 5963%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5964% 5965% MagickImplodeImage() creates a new image that is a copy of an existing 5966% one with the image pixels "implode" by the specified percentage. It 5967% allocates the memory necessary for the new Image structure and returns a 5968% pointer to the new image. 5969% 5970% The format of the MagickImplodeImage method is: 5971% 5972% MagickBooleanType MagickImplodeImage(MagickWand *wand, 5973% const double radius,const PixelInterpolateMethod method) 5974% 5975% A description of each parameter follows: 5976% 5977% o wand: the magick wand. 5978% 5979% o amount: Define the extent of the implosion. 5980% 5981% o method: the pixel interpolation method. 5982% 5983*/ 5984WandExport MagickBooleanType MagickImplodeImage(MagickWand *wand, 5985 const double amount,const PixelInterpolateMethod method) 5986{ 5987 Image 5988 *implode_image; 5989 5990 assert(wand != (MagickWand *) NULL); 5991 assert(wand->signature == WandSignature); 5992 if (IfMagickTrue(wand->debug)) 5993 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 5994 if (wand->images == (Image *) NULL) 5995 ThrowWandException(WandError,"ContainsNoImages",wand->name); 5996 implode_image=ImplodeImage(wand->images,amount,method,wand->exception); 5997 if (implode_image == (Image *) NULL) 5998 return(MagickFalse); 5999 ReplaceImageInList(&wand->images,implode_image); 6000 return(MagickTrue); 6001} 6002 6003/* 6004%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6005% % 6006% % 6007% % 6008% M a g i c k I m p o r t I m a g e P i x e l s % 6009% % 6010% % 6011% % 6012%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6013% 6014% MagickImportImagePixels() accepts pixel datand stores it in the image at the 6015% location you specify. The method returns MagickFalse on success otherwise 6016% MagickTrue if an error is encountered. The pixel data can be either char, 6017% short int, int, ssize_t, float, or double in the order specified by map. 6018% 6019% Suppose your want to upload the first scanline of a 640x480 image from 6020% character data in red-green-blue order: 6021% 6022% MagickImportImagePixels(wand,0,0,640,1,"RGB",CharPixel,pixels); 6023% 6024% The format of the MagickImportImagePixels method is: 6025% 6026% MagickBooleanType MagickImportImagePixels(MagickWand *wand, 6027% const ssize_t x,const ssize_t y,const size_t columns, 6028% const size_t rows,const char *map,const StorageType storage, 6029% const void *pixels) 6030% 6031% A description of each parameter follows: 6032% 6033% o wand: the magick wand. 6034% 6035% o x, y, columns, rows: These values define the perimeter of a region 6036% of pixels you want to define. 6037% 6038% o map: This string reflects the expected ordering of the pixel array. 6039% It can be any combination or order of R = red, G = green, B = blue, 6040% A = alpha (0 is transparent), O = alpha (0 is opaque), C = cyan, 6041% Y = yellow, M = magenta, K = black, I = intensity (for grayscale), 6042% P = pad. 6043% 6044% o storage: Define the data type of the pixels. Float and double types are 6045% expected to be normalized [0..1] otherwise [0..QuantumRange]. Choose from 6046% these types: CharPixel, ShortPixel, IntegerPixel, LongPixel, FloatPixel, 6047% or DoublePixel. 6048% 6049% o pixels: This array of values contain the pixel components as defined by 6050% map and type. You must preallocate this array where the expected 6051% length varies depending on the values of width, height, map, and type. 6052% 6053*/ 6054WandExport MagickBooleanType MagickImportImagePixels(MagickWand *wand, 6055 const ssize_t x,const ssize_t y,const size_t columns,const size_t rows, 6056 const char *map,const StorageType storage,const void *pixels) 6057{ 6058 MagickBooleanType 6059 status; 6060 6061 assert(wand != (MagickWand *) NULL); 6062 assert(wand->signature == WandSignature); 6063 if (IfMagickTrue(wand->debug)) 6064 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6065 if (wand->images == (Image *) NULL) 6066 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6067 status=ImportImagePixels(wand->images,x,y,columns,rows,map,storage,pixels, 6068 wand->exception); 6069 return(status); 6070} 6071 6072/* 6073%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6074% % 6075% % 6076% % 6077% M a g i c k I n t e r p o l a t i v e R e s i z e I m a g e % 6078% % 6079% % 6080% % 6081%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6082% 6083% MagickInterpolativeResizeImage() resize image using a interpolative 6084% method. 6085% 6086% MagickBooleanType MagickInterpolativeResizeImage(MagickWand *wand, 6087% const size_t columns,const size_t rows, 6088% const PixelInterpolateMethod method) 6089% 6090% A description of each parameter follows: 6091% 6092% o wand: the magick wand. 6093% 6094% o columns: the number of columns in the scaled image. 6095% 6096% o rows: the number of rows in the scaled image. 6097% 6098% o interpolate: the pixel interpolation method. 6099% 6100*/ 6101WandExport MagickBooleanType MagickInterpolativeResizeImage(MagickWand *wand, 6102 const size_t columns,const size_t rows,const PixelInterpolateMethod method) 6103{ 6104 Image 6105 *resize_image; 6106 6107 assert(wand != (MagickWand *) NULL); 6108 assert(wand->signature == WandSignature); 6109 if (IfMagickTrue(wand->debug)) 6110 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6111 if (wand->images == (Image *) NULL) 6112 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6113 resize_image=InterpolativeResizeImage(wand->images,columns,rows,method, 6114 wand->exception); 6115 if (resize_image == (Image *) NULL) 6116 return(MagickFalse); 6117 ReplaceImageInList(&wand->images,resize_image); 6118 return(MagickTrue); 6119} 6120 6121/* 6122%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6123% % 6124% % 6125% % 6126% 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 % 6127% % 6128% % 6129% % 6130%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6131% 6132% MagickInverseFourierTransformImage() implements the inverse discrete 6133% Fourier transform (DFT) of the image either as a magnitude / phase or real / 6134% imaginary image pair. 6135% 6136% The format of the MagickInverseFourierTransformImage method is: 6137% 6138% MagickBooleanType MagickInverseFourierTransformImage( 6139% MagickWand *magnitude_wand,MagickWand *phase_wand, 6140% const MagickBooleanType magnitude) 6141% 6142% A description of each parameter follows: 6143% 6144% o magnitude_wand: the magnitude or real wand. 6145% 6146% o phase_wand: the phase or imaginary wand. 6147% 6148% o magnitude: if true, return as magnitude / phase pair otherwise a real / 6149% imaginary image pair. 6150% 6151*/ 6152WandExport MagickBooleanType MagickInverseFourierTransformImage( 6153 MagickWand *magnitude_wand,MagickWand *phase_wand, 6154 const MagickBooleanType magnitude) 6155{ 6156 Image 6157 *inverse_image; 6158 6159 MagickWand 6160 *wand; 6161 6162 assert(magnitude_wand != (MagickWand *) NULL); 6163 assert(magnitude_wand->signature == WandSignature); 6164 if (IfMagickTrue(magnitude_wand->debug)) 6165 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s", 6166 magnitude_wand->name); 6167 wand=magnitude_wand; 6168 if (magnitude_wand->images == (Image *) NULL) 6169 ThrowWandException(WandError,"ContainsNoImages", 6170 magnitude_wand->name); 6171 assert(phase_wand != (MagickWand *) NULL); 6172 assert(phase_wand->signature == WandSignature); 6173 inverse_image=InverseFourierTransformImage(magnitude_wand->images, 6174 phase_wand->images,magnitude,wand->exception); 6175 if (inverse_image == (Image *) NULL) 6176 return(MagickFalse); 6177 ReplaceImageInList(&wand->images,inverse_image); 6178 return(MagickTrue); 6179} 6180 6181/* 6182%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6183% % 6184% % 6185% % 6186% M a g i c k L a b e l I m a g e % 6187% % 6188% % 6189% % 6190%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6191% 6192% MagickLabelImage() adds a label to your image. 6193% 6194% The format of the MagickLabelImage method is: 6195% 6196% MagickBooleanType MagickLabelImage(MagickWand *wand,const char *label) 6197% 6198% A description of each parameter follows: 6199% 6200% o wand: the magick wand. 6201% 6202% o label: the image label. 6203% 6204*/ 6205WandExport MagickBooleanType MagickLabelImage(MagickWand *wand, 6206 const char *label) 6207{ 6208 MagickBooleanType 6209 status; 6210 6211 assert(wand != (MagickWand *) NULL); 6212 assert(wand->signature == WandSignature); 6213 if (IfMagickTrue(wand->debug)) 6214 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6215 if (wand->images == (Image *) NULL) 6216 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6217 status=SetImageProperty(wand->images,"label",label,wand->exception); 6218 return(status); 6219} 6220 6221/* 6222%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6223% % 6224% % 6225% % 6226% M a g i c k L e v e l I m a g e % 6227% % 6228% % 6229% % 6230%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6231% 6232% MagickLevelImage() adjusts the levels of an image by scaling the colors 6233% falling between specified white and black points to the full available 6234% quantum range. The parameters provided represent the black, mid, and white 6235% points. The black point specifies the darkest color in the image. Colors 6236% darker than the black point are set to zero. Mid point specifies a gamma 6237% correction to apply to the image. White point specifies the lightest color 6238% in the image. Colors brighter than the white point are set to the maximum 6239% quantum value. 6240% 6241% The format of the MagickLevelImage method is: 6242% 6243% MagickBooleanType MagickLevelImage(MagickWand *wand, 6244% const double black_point,const double gamma,const double white_point) 6245% MagickBooleanType MagickLevelImage(MagickWand *wand, 6246% const ChannelType channel,const double black_point,const double gamma, 6247% const double white_point) 6248% 6249% A description of each parameter follows: 6250% 6251% o wand: the magick wand. 6252% 6253% o channel: Identify which channel to level: RedPixelChannel, 6254% GreenPixelChannel, etc. 6255% 6256% o black_point: the black point. 6257% 6258% o gamma: the gamma. 6259% 6260% o white_point: the white point. 6261% 6262*/ 6263WandExport MagickBooleanType MagickLevelImage(MagickWand *wand, 6264 const double black_point,const double gamma,const double white_point) 6265{ 6266 MagickBooleanType 6267 status; 6268 6269 assert(wand != (MagickWand *) NULL); 6270 assert(wand->signature == WandSignature); 6271 if (IfMagickTrue(wand->debug)) 6272 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6273 if (wand->images == (Image *) NULL) 6274 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6275 status=LevelImage(wand->images,black_point,white_point,gamma, 6276 wand->exception); 6277 return(status); 6278} 6279 6280/* 6281%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6282% % 6283% % 6284% % 6285% M a g i c k L i n e a r S t r e t c h I m a g e % 6286% % 6287% % 6288% % 6289%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6290% 6291% MagickLinearStretchImage() stretches with saturation the image intensity. 6292% 6293% You can also reduce the influence of a particular channel with a gamma 6294% value of 0. 6295% 6296% The format of the MagickLinearStretchImage method is: 6297% 6298% MagickBooleanType MagickLinearStretchImage(MagickWand *wand, 6299% const double black_point,const double white_point) 6300% 6301% A description of each parameter follows: 6302% 6303% o wand: the magick wand. 6304% 6305% o black_point: the black point. 6306% 6307% o white_point: the white point. 6308% 6309*/ 6310WandExport MagickBooleanType MagickLinearStretchImage(MagickWand *wand, 6311 const double black_point,const double white_point) 6312{ 6313 MagickBooleanType 6314 status; 6315 6316 assert(wand != (MagickWand *) NULL); 6317 assert(wand->signature == WandSignature); 6318 if (IfMagickTrue(wand->debug)) 6319 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6320 if (wand->images == (Image *) NULL) 6321 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6322 status=LinearStretchImage(wand->images,black_point,white_point, 6323 wand->exception); 6324 return(status); 6325} 6326 6327/* 6328%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6329% % 6330% % 6331% % 6332% M a g i c k L i q u i d R e s c a l e I m a g e % 6333% % 6334% % 6335% % 6336%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6337% 6338% MagickLiquidRescaleImage() rescales image with seam carving. 6339% 6340% MagickBooleanType MagickLiquidRescaleImage(MagickWand *wand, 6341% const size_t columns,const size_t rows, 6342% const double delta_x,const double rigidity) 6343% 6344% A description of each parameter follows: 6345% 6346% o wand: the magick wand. 6347% 6348% o columns: the number of columns in the scaled image. 6349% 6350% o rows: the number of rows in the scaled image. 6351% 6352% o delta_x: maximum seam transversal step (0 means straight seams). 6353% 6354% o rigidity: introduce a bias for non-straight seams (typically 0). 6355% 6356*/ 6357WandExport MagickBooleanType MagickLiquidRescaleImage(MagickWand *wand, 6358 const size_t columns,const size_t rows,const double delta_x, 6359 const double rigidity) 6360{ 6361 Image 6362 *rescale_image; 6363 6364 assert(wand != (MagickWand *) NULL); 6365 assert(wand->signature == WandSignature); 6366 if (IfMagickTrue(wand->debug)) 6367 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6368 if (wand->images == (Image *) NULL) 6369 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6370 rescale_image=LiquidRescaleImage(wand->images,columns,rows,delta_x, 6371 rigidity,wand->exception); 6372 if (rescale_image == (Image *) NULL) 6373 return(MagickFalse); 6374 ReplaceImageInList(&wand->images,rescale_image); 6375 return(MagickTrue); 6376} 6377 6378/* 6379%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6380% % 6381% % 6382% % 6383% M a g i c k M a g n i f y I m a g e % 6384% % 6385% % 6386% % 6387%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6388% 6389% MagickMagnifyImage() is a convenience method that scales an image 6390% proportionally to twice its original size. 6391% 6392% The format of the MagickMagnifyImage method is: 6393% 6394% MagickBooleanType MagickMagnifyImage(MagickWand *wand) 6395% 6396% A description of each parameter follows: 6397% 6398% o wand: the magick wand. 6399% 6400*/ 6401WandExport MagickBooleanType MagickMagnifyImage(MagickWand *wand) 6402{ 6403 Image 6404 *magnify_image; 6405 6406 assert(wand != (MagickWand *) NULL); 6407 assert(wand->signature == WandSignature); 6408 if (IfMagickTrue(wand->debug)) 6409 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6410 if (wand->images == (Image *) NULL) 6411 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6412 magnify_image=MagnifyImage(wand->images,wand->exception); 6413 if (magnify_image == (Image *) NULL) 6414 return(MagickFalse); 6415 ReplaceImageInList(&wand->images,magnify_image); 6416 return(MagickTrue); 6417} 6418 6419/* 6420%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6421% % 6422% % 6423% % 6424% M a g i c k M e r g e I m a g e L a y e r s % 6425% % 6426% % 6427% % 6428%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6429% 6430% MagickMergeImageLayers() composes all the image layers from the current 6431% given image onward to produce a single image of the merged layers. 6432% 6433% The inital canvas's size depends on the given LayerMethod, and is 6434% initialized using the first images background color. The images 6435% are then compositied onto that image in sequence using the given 6436% composition that has been assigned to each individual image. 6437% 6438% The format of the MagickMergeImageLayers method is: 6439% 6440% MagickWand *MagickMergeImageLayers(MagickWand *wand, 6441% const LayerMethod method) 6442% 6443% A description of each parameter follows: 6444% 6445% o wand: the magick wand. 6446% 6447% o method: the method of selecting the size of the initial canvas. 6448% 6449% MergeLayer: Merge all layers onto a canvas just large enough 6450% to hold all the actual images. The virtual canvas of the 6451% first image is preserved but otherwise ignored. 6452% 6453% FlattenLayer: Use the virtual canvas size of first image. 6454% Images which fall outside this canvas is clipped. 6455% This can be used to 'fill out' a given virtual canvas. 6456% 6457% MosaicLayer: Start with the virtual canvas of the first image, 6458% enlarging left and right edges to contain all images. 6459% Images with negative offsets will be clipped. 6460% 6461*/ 6462WandExport MagickWand *MagickMergeImageLayers(MagickWand *wand, 6463 const LayerMethod method) 6464{ 6465 Image 6466 *mosaic_image; 6467 6468 assert(wand != (MagickWand *) NULL); 6469 assert(wand->signature == WandSignature); 6470 if (IfMagickTrue(wand->debug)) 6471 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6472 if (wand->images == (Image *) NULL) 6473 return((MagickWand *) NULL); 6474 mosaic_image=MergeImageLayers(wand->images,method,wand->exception); 6475 if (mosaic_image == (Image *) NULL) 6476 return((MagickWand *) NULL); 6477 return(CloneMagickWandFromImages(wand,mosaic_image)); 6478} 6479 6480/* 6481%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6482% % 6483% % 6484% % 6485% M a g i c k M i n i f y I m a g e % 6486% % 6487% % 6488% % 6489%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6490% 6491% MagickMinifyImage() is a convenience method that scales an image 6492% proportionally to one-half its original size 6493% 6494% The format of the MagickMinifyImage method is: 6495% 6496% MagickBooleanType MagickMinifyImage(MagickWand *wand) 6497% 6498% A description of each parameter follows: 6499% 6500% o wand: the magick wand. 6501% 6502*/ 6503WandExport MagickBooleanType MagickMinifyImage(MagickWand *wand) 6504{ 6505 Image 6506 *minify_image; 6507 6508 assert(wand != (MagickWand *) NULL); 6509 assert(wand->signature == WandSignature); 6510 if (IfMagickTrue(wand->debug)) 6511 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6512 if (wand->images == (Image *) NULL) 6513 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6514 minify_image=MinifyImage(wand->images,wand->exception); 6515 if (minify_image == (Image *) NULL) 6516 return(MagickFalse); 6517 ReplaceImageInList(&wand->images,minify_image); 6518 return(MagickTrue); 6519} 6520 6521/* 6522%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6523% % 6524% % 6525% % 6526% M a g i c k M o d u l a t e I m a g e % 6527% % 6528% % 6529% % 6530%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6531% 6532% MagickModulateImage() lets you control the brightness, saturation, and hue 6533% of an image. Hue is the percentage of absolute rotation from the current 6534% position. For example 50 results in a counter-clockwise rotation of 90 6535% degrees, 150 results in a clockwise rotation of 90 degrees, with 0 and 200 6536% both resulting in a rotation of 180 degrees. 6537% 6538% To increase the color brightness by 20% and decrease the color saturation by 6539% 10% and leave the hue unchanged, use: 120,90,100. 6540% 6541% The format of the MagickModulateImage method is: 6542% 6543% MagickBooleanType MagickModulateImage(MagickWand *wand, 6544% const double brightness,const double saturation,const double hue) 6545% 6546% A description of each parameter follows: 6547% 6548% o wand: the magick wand. 6549% 6550% o brightness: the percent change in brighness. 6551% 6552% o saturation: the percent change in saturation. 6553% 6554% o hue: the percent change in hue. 6555% 6556*/ 6557WandExport MagickBooleanType MagickModulateImage(MagickWand *wand, 6558 const double brightness,const double saturation,const double hue) 6559{ 6560 char 6561 modulate[MaxTextExtent]; 6562 6563 MagickBooleanType 6564 status; 6565 6566 assert(wand != (MagickWand *) NULL); 6567 assert(wand->signature == WandSignature); 6568 if (IfMagickTrue(wand->debug)) 6569 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6570 if (wand->images == (Image *) NULL) 6571 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6572 (void) FormatLocaleString(modulate,MaxTextExtent,"%g,%g,%g", 6573 brightness,saturation,hue); 6574 status=ModulateImage(wand->images,modulate,wand->exception); 6575 return(status); 6576} 6577 6578/* 6579%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6580% % 6581% % 6582% % 6583% M a g i c k M o n t a g e I m a g e % 6584% % 6585% % 6586% % 6587%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6588% 6589% MagickMontageImage() creates a composite image by combining several 6590% separate images. The images are tiled on the composite image with the name 6591% of the image optionally appearing just below the individual tile. 6592% 6593% The format of the MagickMontageImage method is: 6594% 6595% MagickWand *MagickMontageImage(MagickWand *wand, 6596% const DrawingWand drawing_wand,const char *tile_geometry, 6597% const char *thumbnail_geometry,const MontageMode mode, 6598% const char *frame) 6599% 6600% A description of each parameter follows: 6601% 6602% o wand: the magick wand. 6603% 6604% o drawing_wand: the drawing wand. The font name, size, and color are 6605% obtained from this wand. 6606% 6607% o tile_geometry: the number of tiles per row and page (e.g. 6x4+0+0). 6608% 6609% o thumbnail_geometry: Preferred image size and border size of each 6610% thumbnail (e.g. 120x120+4+3>). 6611% 6612% o mode: Thumbnail framing mode: Frame, Unframe, or Concatenate. 6613% 6614% o frame: Surround the image with an ornamental border (e.g. 15x15+3+3). 6615% The frame color is that of the thumbnail's matte color. 6616% 6617*/ 6618WandExport MagickWand *MagickMontageImage(MagickWand *wand, 6619 const DrawingWand *drawing_wand,const char *tile_geometry, 6620 const char *thumbnail_geometry,const MontageMode mode,const char *frame) 6621{ 6622 char 6623 *font; 6624 6625 Image 6626 *montage_image; 6627 6628 MontageInfo 6629 *montage_info; 6630 6631 PixelWand 6632 *pixel_wand; 6633 6634 assert(wand != (MagickWand *) NULL); 6635 assert(wand->signature == WandSignature); 6636 if (IfMagickTrue(wand->debug)) 6637 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6638 if (wand->images == (Image *) NULL) 6639 return((MagickWand *) NULL); 6640 montage_info=CloneMontageInfo(wand->image_info,(MontageInfo *) NULL); 6641 switch (mode) 6642 { 6643 case FrameMode: 6644 { 6645 (void) CloneString(&montage_info->frame,"15x15+3+3"); 6646 montage_info->shadow=MagickTrue; 6647 break; 6648 } 6649 case UnframeMode: 6650 { 6651 montage_info->frame=(char *) NULL; 6652 montage_info->shadow=MagickFalse; 6653 montage_info->border_width=0; 6654 break; 6655 } 6656 case ConcatenateMode: 6657 { 6658 montage_info->frame=(char *) NULL; 6659 montage_info->shadow=MagickFalse; 6660 (void) CloneString(&montage_info->geometry,"+0+0"); 6661 montage_info->border_width=0; 6662 break; 6663 } 6664 default: 6665 break; 6666 } 6667 font=DrawGetFont(drawing_wand); 6668 if (font != (char *) NULL) 6669 (void) CloneString(&montage_info->font,font); 6670 if (frame != (char *) NULL) 6671 (void) CloneString(&montage_info->frame,frame); 6672 montage_info->pointsize=DrawGetFontSize(drawing_wand); 6673 pixel_wand=NewPixelWand(); 6674 DrawGetFillColor(drawing_wand,pixel_wand); 6675 PixelGetQuantumPacket(pixel_wand,&montage_info->fill); 6676 DrawGetStrokeColor(drawing_wand,pixel_wand); 6677 PixelGetQuantumPacket(pixel_wand,&montage_info->stroke); 6678 pixel_wand=DestroyPixelWand(pixel_wand); 6679 if (thumbnail_geometry != (char *) NULL) 6680 (void) CloneString(&montage_info->geometry,thumbnail_geometry); 6681 if (tile_geometry != (char *) NULL) 6682 (void) CloneString(&montage_info->tile,tile_geometry); 6683 montage_image=MontageImageList(wand->image_info,montage_info,wand->images, 6684 wand->exception); 6685 montage_info=DestroyMontageInfo(montage_info); 6686 if (montage_image == (Image *) NULL) 6687 return((MagickWand *) NULL); 6688 return(CloneMagickWandFromImages(wand,montage_image)); 6689} 6690 6691/* 6692%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6693% % 6694% % 6695% % 6696% M a g i c k M o r p h I m a g e s % 6697% % 6698% % 6699% % 6700%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6701% 6702% MagickMorphImages() method morphs a set of images. Both the image pixels 6703% and size are linearly interpolated to give the appearance of a 6704% meta-morphosis from one image to the next. 6705% 6706% The format of the MagickMorphImages method is: 6707% 6708% MagickWand *MagickMorphImages(MagickWand *wand, 6709% const size_t number_frames) 6710% 6711% A description of each parameter follows: 6712% 6713% o wand: the magick wand. 6714% 6715% o number_frames: the number of in-between images to generate. 6716% 6717*/ 6718WandExport MagickWand *MagickMorphImages(MagickWand *wand, 6719 const size_t number_frames) 6720{ 6721 Image 6722 *morph_image; 6723 6724 assert(wand != (MagickWand *) NULL); 6725 assert(wand->signature == WandSignature); 6726 if (IfMagickTrue(wand->debug)) 6727 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6728 if (wand->images == (Image *) NULL) 6729 return((MagickWand *) NULL); 6730 morph_image=MorphImages(wand->images,number_frames,wand->exception); 6731 if (morph_image == (Image *) NULL) 6732 return((MagickWand *) NULL); 6733 return(CloneMagickWandFromImages(wand,morph_image)); 6734} 6735 6736/* 6737%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6738% % 6739% % 6740% % 6741% M a g i c k M o r p h o l o g y I m a g e % 6742% % 6743% % 6744% % 6745%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6746% 6747% MagickMorphologyImage() applies a user supplied kernel to the image 6748% according to the given mophology method. 6749% 6750% The format of the MagickMorphologyImage method is: 6751% 6752% MagickBooleanType MagickMorphologyImage(MagickWand *wand, 6753% MorphologyMethod method,const ssize_t iterations,KernelInfo *kernel) 6754% 6755% A description of each parameter follows: 6756% 6757% o wand: the magick wand. 6758% 6759% o method: the morphology method to be applied. 6760% 6761% o iterations: apply the operation this many times (or no change). 6762% A value of -1 means loop until no change found. How this is applied 6763% may depend on the morphology method. Typically this is a value of 1. 6764% 6765% o kernel: An array of doubles representing the morphology kernel. 6766% 6767*/ 6768WandExport MagickBooleanType MagickMorphologyImage(MagickWand *wand, 6769 MorphologyMethod method,const ssize_t iterations,KernelInfo *kernel) 6770{ 6771 Image 6772 *morphology_image; 6773 6774 assert(wand != (MagickWand *) NULL); 6775 assert(wand->signature == WandSignature); 6776 if (IfMagickTrue(wand->debug)) 6777 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6778 if (kernel == (const KernelInfo *) NULL) 6779 return(MagickFalse); 6780 if (wand->images == (Image *) NULL) 6781 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6782 morphology_image=MorphologyImage(wand->images,method,iterations,kernel, 6783 wand->exception); 6784 if (morphology_image == (Image *) NULL) 6785 return(MagickFalse); 6786 ReplaceImageInList(&wand->images,morphology_image); 6787 return(MagickTrue); 6788} 6789 6790/* 6791%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6792% % 6793% % 6794% % 6795% M a g i c k M o t i o n B l u r I m a g e % 6796% % 6797% % 6798% % 6799%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6800% 6801% MagickMotionBlurImage() simulates motion blur. We convolve the image with a 6802% Gaussian operator of the given radius and standard deviation (sigma). 6803% For reasonable results, radius should be larger than sigma. Use a 6804% radius of 0 and MotionBlurImage() selects a suitable radius for you. 6805% Angle gives the angle of the blurring motion. 6806% 6807% The format of the MagickMotionBlurImage method is: 6808% 6809% MagickBooleanType MagickMotionBlurImage(MagickWand *wand, 6810% const double radius,const double sigma,const double angle) 6811% 6812% A description of each parameter follows: 6813% 6814% o wand: the magick wand. 6815% 6816% o radius: the radius of the Gaussian, in pixels, not counting 6817% the center pixel. 6818% 6819% o sigma: the standard deviation of the Gaussian, in pixels. 6820% 6821% o angle: Apply the effect along this angle. 6822% 6823*/ 6824WandExport MagickBooleanType MagickMotionBlurImage(MagickWand *wand, 6825 const double radius,const double sigma,const double angle) 6826{ 6827 Image 6828 *blur_image; 6829 6830 assert(wand != (MagickWand *) NULL); 6831 assert(wand->signature == WandSignature); 6832 if (IfMagickTrue(wand->debug)) 6833 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6834 if (wand->images == (Image *) NULL) 6835 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6836 blur_image=MotionBlurImage(wand->images,radius,sigma,angle,wand->exception); 6837 if (blur_image == (Image *) NULL) 6838 return(MagickFalse); 6839 ReplaceImageInList(&wand->images,blur_image); 6840 return(MagickTrue); 6841} 6842 6843/* 6844%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6845% % 6846% % 6847% % 6848% M a g i c k N e g a t e I m a g e % 6849% % 6850% % 6851% % 6852%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6853% 6854% MagickNegateImage() negates the colors in the reference image. The 6855% Grayscale option means that only grayscale values within the image are 6856% negated. 6857% 6858% You can also reduce the influence of a particular channel with a gamma 6859% value of 0. 6860% 6861% The format of the MagickNegateImage method is: 6862% 6863% MagickBooleanType MagickNegateImage(MagickWand *wand, 6864% const MagickBooleanType gray) 6865% 6866% A description of each parameter follows: 6867% 6868% o wand: the magick wand. 6869% 6870% o gray: If MagickTrue, only negate grayscale pixels within the image. 6871% 6872*/ 6873WandExport MagickBooleanType MagickNegateImage(MagickWand *wand, 6874 const MagickBooleanType gray) 6875{ 6876 MagickBooleanType 6877 status; 6878 6879 assert(wand != (MagickWand *) NULL); 6880 assert(wand->signature == WandSignature); 6881 if (IfMagickTrue(wand->debug)) 6882 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6883 if (wand->images == (Image *) NULL) 6884 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6885 status=NegateImage(wand->images,gray,wand->exception); 6886 return(status); 6887} 6888 6889/* 6890%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6891% % 6892% % 6893% % 6894% M a g i c k N e w I m a g e % 6895% % 6896% % 6897% % 6898%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6899% 6900% MagickNewImage() adds a blank image canvas of the specified size and 6901% background color to the wand. 6902% 6903% The format of the MagickNewImage method is: 6904% 6905% MagickBooleanType MagickNewImage(MagickWand *wand, 6906% const size_t columns,const size_t rows, 6907% const PixelWand *background) 6908% 6909% A description of each parameter follows: 6910% 6911% o wand: the magick wand. 6912% 6913% o width: the image width. 6914% 6915% o height: the image height. 6916% 6917% o background: the image color. 6918% 6919*/ 6920WandExport MagickBooleanType MagickNewImage(MagickWand *wand,const size_t width, 6921 const size_t height,const PixelWand *background) 6922{ 6923 Image 6924 *images; 6925 6926 PixelInfo 6927 pixel; 6928 6929 assert(wand != (MagickWand *) NULL); 6930 assert(wand->signature == WandSignature); 6931 if (IfMagickTrue(wand->debug)) 6932 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6933 PixelGetMagickColor(background,&pixel); 6934 images=NewMagickImage(wand->image_info,width,height,&pixel,wand->exception); 6935 if (images == (Image *) NULL) 6936 return(MagickFalse); 6937 return(InsertImageInWand(wand,images)); 6938} 6939 6940/* 6941%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6942% % 6943% % 6944% % 6945% M a g i c k N e x t I m a g e % 6946% % 6947% % 6948% % 6949%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6950% 6951% MagickNextImage() sets the next image in the wand as the current image. 6952% 6953% It is typically used after MagickResetIterator(), after which its first use 6954% will set the first image as the current image (unless the wand is empty). 6955% 6956% It will return MagickFalse when no more images are left to be returned 6957% which happens when the wand is empty, or the current image is the last 6958% image. 6959% 6960% When the above condition (end of image list) is reached, the iterator is 6961% automaticall set so that you can start using MagickPreviousImage() to 6962% again iterate over the images in the reverse direction, starting with the 6963% last image (again). You can jump to this condition immeditally using 6964% MagickSetLastIterator(). 6965% 6966% The format of the MagickNextImage method is: 6967% 6968% MagickBooleanType MagickNextImage(MagickWand *wand) 6969% 6970% A description of each parameter follows: 6971% 6972% o wand: the magick wand. 6973% 6974*/ 6975WandExport MagickBooleanType MagickNextImage(MagickWand *wand) 6976{ 6977 assert(wand != (MagickWand *) NULL); 6978 assert(wand->signature == WandSignature); 6979 if (IfMagickTrue(wand->debug)) 6980 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 6981 if (wand->images == (Image *) NULL) 6982 ThrowWandException(WandError,"ContainsNoImages",wand->name); 6983 wand->insert_before=MagickFalse; /* Inserts is now appended */ 6984 if (IfMagickTrue(wand->image_pending)) 6985 { 6986 wand->image_pending=MagickFalse; 6987 return(MagickTrue); 6988 } 6989 if (GetNextImageInList(wand->images) == (Image *) NULL) 6990 { 6991 wand->image_pending=MagickTrue; /* No image, PreviousImage re-gets */ 6992 return(MagickFalse); 6993 } 6994 wand->images=GetNextImageInList(wand->images); 6995 return(MagickTrue); 6996} 6997 6998/* 6999%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7000% % 7001% % 7002% % 7003% M a g i c k N o r m a l i z e I m a g e % 7004% % 7005% % 7006% % 7007%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7008% 7009% MagickNormalizeImage() enhances the contrast of a color image by adjusting 7010% the pixels color to span the entire range of colors available 7011% 7012% You can also reduce the influence of a particular channel with a gamma 7013% value of 0. 7014% 7015% The format of the MagickNormalizeImage method is: 7016% 7017% MagickBooleanType MagickNormalizeImage(MagickWand *wand) 7018% 7019% A description of each parameter follows: 7020% 7021% o wand: the magick wand. 7022% 7023*/ 7024WandExport MagickBooleanType MagickNormalizeImage(MagickWand *wand) 7025{ 7026 MagickBooleanType 7027 status; 7028 7029 assert(wand != (MagickWand *) NULL); 7030 assert(wand->signature == WandSignature); 7031 if (IfMagickTrue(wand->debug)) 7032 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7033 if (wand->images == (Image *) NULL) 7034 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7035 status=NormalizeImage(wand->images,wand->exception); 7036 return(status); 7037} 7038 7039/* 7040%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7041% % 7042% % 7043% % 7044% M a g i c k O i l P a i n t I m a g e % 7045% % 7046% % 7047% % 7048%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7049% 7050% MagickOilPaintImage() applies a special effect filter that simulates an oil 7051% painting. Each pixel is replaced by the most frequent color occurring 7052% in a circular region defined by radius. 7053% 7054% The format of the MagickOilPaintImage method is: 7055% 7056% MagickBooleanType MagickOilPaintImage(MagickWand *wand, 7057% const double radius,const double sigma) 7058% 7059% A description of each parameter follows: 7060% 7061% o wand: the magick wand. 7062% 7063% o radius: the radius of the circular neighborhood. 7064% 7065% o sigma: the standard deviation of the Gaussian, in pixels. 7066% 7067*/ 7068WandExport MagickBooleanType MagickOilPaintImage(MagickWand *wand, 7069 const double radius,const double sigma) 7070{ 7071 Image 7072 *paint_image; 7073 7074 assert(wand != (MagickWand *) NULL); 7075 assert(wand->signature == WandSignature); 7076 if (IfMagickTrue(wand->debug)) 7077 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7078 if (wand->images == (Image *) NULL) 7079 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7080 paint_image=OilPaintImage(wand->images,radius,sigma,wand->exception); 7081 if (paint_image == (Image *) NULL) 7082 return(MagickFalse); 7083 ReplaceImageInList(&wand->images,paint_image); 7084 return(MagickTrue); 7085} 7086 7087/* 7088%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7089% % 7090% % 7091% % 7092% M a g i c k O p a q u e P a i n t I m a g e % 7093% % 7094% % 7095% % 7096%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7097% 7098% MagickOpaquePaintImage() changes any pixel that matches color with the color 7099% defined by fill. 7100% 7101% The format of the MagickOpaquePaintImage method is: 7102% 7103% MagickBooleanType MagickOpaquePaintImage(MagickWand *wand, 7104% const PixelWand *target,const PixelWand *fill,const double fuzz, 7105% const MagickBooleanType invert) 7106% 7107% A description of each parameter follows: 7108% 7109% o wand: the magick wand. 7110% 7111% o target: Change this target color to the fill color within the image. 7112% 7113% o fill: the fill pixel wand. 7114% 7115% o fuzz: By default target must match a particular pixel color 7116% exactly. However, in many cases two colors may differ by a small amount. 7117% The fuzz member of image defines how much tolerance is acceptable to 7118% consider two colors as the same. For example, set fuzz to 10 and the 7119% color red at intensities of 100 and 102 respectively are now interpreted 7120% as the same color for the purposes of the floodfill. 7121% 7122% o invert: paint any pixel that does not match the target color. 7123% 7124*/ 7125WandExport MagickBooleanType MagickOpaquePaintImage(MagickWand *wand, 7126 const PixelWand *target,const PixelWand *fill,const double fuzz, 7127 const MagickBooleanType invert) 7128{ 7129 MagickBooleanType 7130 status; 7131 7132 PixelInfo 7133 fill_pixel, 7134 target_pixel; 7135 7136 assert(wand != (MagickWand *) NULL); 7137 assert(wand->signature == WandSignature); 7138 if (IfMagickTrue(wand->debug)) 7139 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7140 if (wand->images == (Image *) NULL) 7141 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7142 PixelGetMagickColor(target,&target_pixel); 7143 PixelGetMagickColor(fill,&fill_pixel); 7144 wand->images->fuzz=fuzz; 7145 status=OpaquePaintImage(wand->images,&target_pixel,&fill_pixel,invert, 7146 wand->exception); 7147 return(status); 7148} 7149 7150/* 7151%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7152% % 7153% % 7154% % 7155% 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 % 7156% % 7157% % 7158% % 7159%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7160% 7161% MagickOptimizeImageLayers() compares each image the GIF disposed forms of the 7162% previous image in the sequence. From this it attempts to select the 7163% smallest cropped image to replace each frame, while preserving the results 7164% of the animation. 7165% 7166% The format of the MagickOptimizeImageLayers method is: 7167% 7168% MagickWand *MagickOptimizeImageLayers(MagickWand *wand) 7169% 7170% A description of each parameter follows: 7171% 7172% o wand: the magick wand. 7173% 7174*/ 7175WandExport MagickWand *MagickOptimizeImageLayers(MagickWand *wand) 7176{ 7177 Image 7178 *optimize_image; 7179 7180 assert(wand != (MagickWand *) NULL); 7181 assert(wand->signature == WandSignature); 7182 if (IfMagickTrue(wand->debug)) 7183 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7184 if (wand->images == (Image *) NULL) 7185 return((MagickWand *) NULL); 7186 optimize_image=OptimizeImageLayers(wand->images,wand->exception); 7187 if (optimize_image == (Image *) NULL) 7188 return((MagickWand *) NULL); 7189 return(CloneMagickWandFromImages(wand,optimize_image)); 7190} 7191 7192/* 7193%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7194% % 7195% % 7196% % 7197% M a g i c k O p t i m i z e I m a g e T r a n s p a r e n c y % 7198% % 7199% % 7200% % 7201%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7202% 7203% MagickOptimizeImageTransparency() takes a frame optimized GIF animation, and 7204% compares the overlayed pixels against the disposal image resulting from all 7205% the previous frames in the animation. Any pixel that does not change the 7206% disposal image (and thus does not effect the outcome of an overlay) is made 7207% transparent. 7208% 7209% WARNING: This modifies the current images directly, rather than generate 7210% a new image sequence. 7211% The format of the MagickOptimizeImageTransparency method is: 7212% 7213% MagickBooleanType MagickOptimizeImageTransparency(MagickWand *wand) 7214% 7215% A description of each parameter follows: 7216% 7217% o wand: the magick wand. 7218% 7219*/ 7220WandExport MagickBooleanType MagickOptimizeImageTransparency(MagickWand *wand) 7221{ 7222 assert(wand != (MagickWand *) NULL); 7223 assert(wand->signature == WandSignature); 7224 if (IfMagickTrue(wand->debug)) 7225 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7226 if (wand->images == (Image *) NULL) 7227 return(MagickFalse); 7228 OptimizeImageTransparency(wand->images,wand->exception); 7229 return(MagickTrue); 7230} 7231 7232/* 7233%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7234% % 7235% % 7236% % 7237% 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 % 7238% % 7239% % 7240% % 7241%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7242% 7243% MagickOrderedPosterizeImage() performs an ordered dither based on a number 7244% of pre-defined dithering threshold maps, but over multiple intensity levels, 7245% which can be different for different channels, according to the input 7246% arguments. 7247% 7248% The format of the MagickOrderedPosterizeImage method is: 7249% 7250% MagickBooleanType MagickOrderedPosterizeImage(MagickWand *wand, 7251% const char *threshold_map) 7252% 7253% A description of each parameter follows: 7254% 7255% o image: the image. 7256% 7257% o threshold_map: A string containing the name of the threshold dither 7258% map to use, followed by zero or more numbers representing the number of 7259% color levels tho dither between. 7260% 7261% Any level number less than 2 is equivalent to 2, and means only binary 7262% dithering will be applied to each color channel. 7263% 7264% No numbers also means a 2 level (bitmap) dither will be applied to all 7265% channels, while a single number is the number of levels applied to each 7266% channel in sequence. More numbers will be applied in turn to each of 7267% the color channels. 7268% 7269% For example: "o3x3,6" generates a 6 level posterization of the image 7270% with a ordered 3x3 diffused pixel dither being applied between each 7271% level. While checker,8,8,4 will produce a 332 colormaped image with 7272% only a single checkerboard hash pattern (50% grey) between each color 7273% level, to basically double the number of color levels with a bare 7274% minimim of dithering. 7275% 7276*/ 7277WandExport MagickBooleanType MagickOrderedPosterizeImage(MagickWand *wand, 7278 const char *threshold_map) 7279{ 7280 MagickBooleanType 7281 status; 7282 7283 assert(wand != (MagickWand *) NULL); 7284 assert(wand->signature == WandSignature); 7285 if (IfMagickTrue(wand->debug)) 7286 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7287 if (wand->images == (Image *) NULL) 7288 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7289 status=OrderedPosterizeImage(wand->images,threshold_map,wand->exception); 7290 return(status); 7291} 7292 7293/* 7294%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7295% % 7296% % 7297% % 7298% M a g i c k P i n g I m a g e % 7299% % 7300% % 7301% % 7302%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7303% 7304% MagickPingImage() is the same as MagickReadImage() except the only valid 7305% information returned is the image width, height, size, and format. It 7306% is designed to efficiently obtain this information from a file without 7307% reading the entire image sequence into memory. 7308% 7309% The format of the MagickPingImage method is: 7310% 7311% MagickBooleanType MagickPingImage(MagickWand *wand,const char *filename) 7312% 7313% A description of each parameter follows: 7314% 7315% o wand: the magick wand. 7316% 7317% o filename: the image filename. 7318% 7319*/ 7320WandExport MagickBooleanType MagickPingImage(MagickWand *wand, 7321 const char *filename) 7322{ 7323 Image 7324 *images; 7325 7326 ImageInfo 7327 *ping_info; 7328 7329 assert(wand != (MagickWand *) NULL); 7330 assert(wand->signature == WandSignature); 7331 if (IfMagickTrue(wand->debug)) 7332 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7333 ping_info=CloneImageInfo(wand->image_info); 7334 if (filename != (const char *) NULL) 7335 (void) CopyMagickString(ping_info->filename,filename,MaxTextExtent); 7336 images=PingImage(ping_info,wand->exception); 7337 ping_info=DestroyImageInfo(ping_info); 7338 if (images == (Image *) NULL) 7339 return(MagickFalse); 7340 return(InsertImageInWand(wand,images)); 7341} 7342 7343/* 7344%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7345% % 7346% % 7347% % 7348% M a g i c k P i n g I m a g e B l o b % 7349% % 7350% % 7351% % 7352%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7353% 7354% MagickPingImageBlob() pings an image or image sequence from a blob. 7355% 7356% The format of the MagickPingImageBlob method is: 7357% 7358% MagickBooleanType MagickPingImageBlob(MagickWand *wand, 7359% const void *blob,const size_t length) 7360% 7361% A description of each parameter follows: 7362% 7363% o wand: the magick wand. 7364% 7365% o blob: the blob. 7366% 7367% o length: the blob length. 7368% 7369*/ 7370WandExport MagickBooleanType MagickPingImageBlob(MagickWand *wand, 7371 const void *blob,const size_t length) 7372{ 7373 Image 7374 *images; 7375 7376 ImageInfo 7377 *read_info; 7378 7379 assert(wand != (MagickWand *) NULL); 7380 assert(wand->signature == WandSignature); 7381 if (IfMagickTrue(wand->debug)) 7382 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7383 read_info=CloneImageInfo(wand->image_info); 7384 SetImageInfoBlob(read_info,blob,length); 7385 images=PingImage(read_info,wand->exception); 7386 read_info=DestroyImageInfo(read_info); 7387 if (images == (Image *) NULL) 7388 return(MagickFalse); 7389 return(InsertImageInWand(wand,images)); 7390} 7391 7392/* 7393%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7394% % 7395% % 7396% % 7397% M a g i c k P i n g I m a g e F i l e % 7398% % 7399% % 7400% % 7401%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7402% 7403% MagickPingImageFile() pings an image or image sequence from an open file 7404% descriptor. 7405% 7406% The format of the MagickPingImageFile method is: 7407% 7408% MagickBooleanType MagickPingImageFile(MagickWand *wand,FILE *file) 7409% 7410% A description of each parameter follows: 7411% 7412% o wand: the magick wand. 7413% 7414% o file: the file descriptor. 7415% 7416*/ 7417WandExport MagickBooleanType MagickPingImageFile(MagickWand *wand,FILE *file) 7418{ 7419 Image 7420 *images; 7421 7422 ImageInfo 7423 *read_info; 7424 7425 assert(wand != (MagickWand *) NULL); 7426 assert(wand->signature == WandSignature); 7427 assert(file != (FILE *) NULL); 7428 if (IfMagickTrue(wand->debug)) 7429 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7430 read_info=CloneImageInfo(wand->image_info); 7431 SetImageInfoFile(read_info,file); 7432 images=PingImage(read_info,wand->exception); 7433 read_info=DestroyImageInfo(read_info); 7434 if (images == (Image *) NULL) 7435 return(MagickFalse); 7436 return(InsertImageInWand(wand,images)); 7437} 7438 7439/* 7440%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7441% % 7442% % 7443% % 7444% M a g i c k P o l a r o i d I m a g e % 7445% % 7446% % 7447% % 7448%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7449% 7450% MagickPolaroidImage() simulates a Polaroid picture. 7451% 7452% The format of the MagickPolaroidImage method is: 7453% 7454% MagickBooleanType MagickPolaroidImage(MagickWand *wand, 7455% const DrawingWand *drawing_wand,const char *caption,const double angle, 7456% const PixelInterpolateMethod method) 7457% 7458% A description of each parameter follows: 7459% 7460% o wand: the magick wand. 7461% 7462% o drawing_wand: the draw wand. 7463% 7464% o caption: the Polaroid caption. 7465% 7466% o angle: Apply the effect along this angle. 7467% 7468% o method: the pixel interpolation method. 7469% 7470*/ 7471WandExport MagickBooleanType MagickPolaroidImage(MagickWand *wand, 7472 const DrawingWand *drawing_wand,const char *caption,const double angle, 7473 const PixelInterpolateMethod method) 7474{ 7475 DrawInfo 7476 *draw_info; 7477 7478 Image 7479 *polaroid_image; 7480 7481 assert(wand != (MagickWand *) NULL); 7482 assert(wand->signature == WandSignature); 7483 if (IfMagickTrue(wand->debug)) 7484 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7485 if (wand->images == (Image *) NULL) 7486 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7487 draw_info=PeekDrawingWand(drawing_wand); 7488 if (draw_info == (DrawInfo *) NULL) 7489 return(MagickFalse); 7490 polaroid_image=PolaroidImage(wand->images,draw_info,caption,angle,method, 7491 wand->exception); 7492 if (polaroid_image == (Image *) NULL) 7493 return(MagickFalse); 7494 ReplaceImageInList(&wand->images,polaroid_image); 7495 return(MagickTrue); 7496} 7497 7498/* 7499%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7500% % 7501% % 7502% % 7503% M a g i c k P o s t e r i z e I m a g e % 7504% % 7505% % 7506% % 7507%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7508% 7509% MagickPosterizeImage() reduces the image to a limited number of color level. 7510% 7511% The format of the MagickPosterizeImage method is: 7512% 7513% MagickBooleanType MagickPosterizeImage(MagickWand *wand, 7514% const size_t levels,const DitherMethod method) 7515% 7516% A description of each parameter follows: 7517% 7518% o wand: the magick wand. 7519% 7520% o levels: Number of color levels allowed in each channel. Very low values 7521% (2, 3, or 4) have the most visible effect. 7522% 7523% o method: choose the dither method: UndefinedDitherMethod, 7524% NoDitherMethod, RiemersmaDitherMethod, or FloydSteinbergDitherMethod. 7525% 7526*/ 7527WandExport MagickBooleanType MagickPosterizeImage(MagickWand *wand, 7528 const size_t levels,const DitherMethod dither) 7529{ 7530 MagickBooleanType 7531 status; 7532 7533 assert(wand != (MagickWand *) NULL); 7534 assert(wand->signature == WandSignature); 7535 if (IfMagickTrue(wand->debug)) 7536 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7537 if (wand->images == (Image *) NULL) 7538 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7539 status=PosterizeImage(wand->images,levels,dither,wand->exception); 7540 return(status); 7541} 7542 7543/* 7544%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7545% % 7546% % 7547% % 7548% M a g i c k P r e v i e w I m a g e s % 7549% % 7550% % 7551% % 7552%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7553% 7554% MagickPreviewImages() tiles 9 thumbnails of the specified image with an 7555% image processing operation applied at varying strengths. This helpful 7556% to quickly pin-point an appropriate parameter for an image processing 7557% operation. 7558% 7559% The format of the MagickPreviewImages method is: 7560% 7561% MagickWand *MagickPreviewImages(MagickWand *wand, 7562% const PreviewType preview) 7563% 7564% A description of each parameter follows: 7565% 7566% o wand: the magick wand. 7567% 7568% o preview: the preview type. 7569% 7570*/ 7571WandExport MagickWand *MagickPreviewImages(MagickWand *wand, 7572 const PreviewType preview) 7573{ 7574 Image 7575 *preview_image; 7576 7577 assert(wand != (MagickWand *) NULL); 7578 assert(wand->signature == WandSignature); 7579 if (IfMagickTrue(wand->debug)) 7580 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7581 if (wand->images == (Image *) NULL) 7582 return((MagickWand *) NULL); 7583 preview_image=PreviewImage(wand->images,preview,wand->exception); 7584 if (preview_image == (Image *) NULL) 7585 return((MagickWand *) NULL); 7586 return(CloneMagickWandFromImages(wand,preview_image)); 7587} 7588 7589/* 7590%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7591% % 7592% % 7593% % 7594% M a g i c k P r e v i o u s I m a g e % 7595% % 7596% % 7597% % 7598%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7599% 7600% MagickPreviousImage() sets the previous image in the wand as the current 7601% image. 7602% 7603% It is typically used after MagickSetLastIterator(), after which its first 7604% use will set the last image as the current image (unless the wand is empty). 7605% 7606% It will return MagickFalse when no more images are left to be returned 7607% which happens when the wand is empty, or the current image is the first 7608% image. At that point the iterator is than reset to again process images in 7609% the forward direction, again starting with the first image in list. Images 7610% added at this point are prepended. 7611% 7612% Also at that point any images added to the wand using MagickAddImages() or 7613% MagickReadImages() will be prepended before the first image. In this sense 7614% the condition is not quite exactly the same as MagickResetIterator(). 7615% 7616% The format of the MagickPreviousImage method is: 7617% 7618% MagickBooleanType MagickPreviousImage(MagickWand *wand) 7619% 7620% A description of each parameter follows: 7621% 7622% o wand: the magick wand. 7623% 7624*/ 7625WandExport MagickBooleanType MagickPreviousImage(MagickWand *wand) 7626{ 7627 assert(wand != (MagickWand *) NULL); 7628 assert(wand->signature == WandSignature); 7629 if (IfMagickTrue(wand->debug)) 7630 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7631 if (wand->images == (Image *) NULL) 7632 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7633 if (IfMagickTrue(wand->image_pending)) 7634 { 7635 wand->image_pending=MagickFalse; /* image returned no longer pending */ 7636 return(MagickTrue); 7637 } 7638 if (GetPreviousImageInList(wand->images) == (Image *) NULL) 7639 { 7640 wand->image_pending=MagickTrue; /* Next now re-gets first image */ 7641 wand->insert_before=MagickTrue; /* insert/add prepends new images */ 7642 return(MagickFalse); 7643 } 7644 wand->images=GetPreviousImageInList(wand->images); 7645 return(MagickTrue); 7646} 7647 7648/* 7649%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7650% % 7651% % 7652% % 7653% M a g i c k Q u a n t i z e I m a g e % 7654% % 7655% % 7656% % 7657%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7658% 7659% MagickQuantizeImage() analyzes the colors within a reference image and 7660% chooses a fixed number of colors to represent the image. The goal of the 7661% algorithm is to minimize the color difference between the input and output 7662% image while minimizing the processing time. 7663% 7664% The format of the MagickQuantizeImage method is: 7665% 7666% MagickBooleanType MagickQuantizeImage(MagickWand *wand, 7667% const size_t number_colors,const ColorspaceType colorspace, 7668% const size_t treedepth,const DitherMethod dither_method, 7669% const MagickBooleanType measure_error) 7670% 7671% A description of each parameter follows: 7672% 7673% o wand: the magick wand. 7674% 7675% o number_colors: the number of colors. 7676% 7677% o colorspace: Perform color reduction in this colorspace, typically 7678% RGBColorspace. 7679% 7680% o treedepth: Normally, this integer value is zero or one. A zero or 7681% 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 7682% reference image with the least amount of memory and the fastest 7683% computational speed. In some cases, such as an image with low color 7684% dispersion (a few number of colors), a value other than 7685% Log4(number_colors) is required. To expand the color tree completely, 7686% use a value of 8. 7687% 7688% o dither_method: choose from UndefinedDitherMethod, NoDitherMethod, 7689% RiemersmaDitherMethod, FloydSteinbergDitherMethod. 7690% 7691% o measure_error: A value other than zero measures the difference between 7692% the original and quantized images. This difference is the total 7693% quantization error. The error is computed by summing over all pixels 7694% in an image the distance squared in RGB space between each reference 7695% pixel value and its quantized value. 7696% 7697*/ 7698WandExport MagickBooleanType MagickQuantizeImage(MagickWand *wand, 7699 const size_t number_colors,const ColorspaceType colorspace, 7700 const size_t treedepth,const DitherMethod dither_method, 7701 const MagickBooleanType measure_error) 7702{ 7703 MagickBooleanType 7704 status; 7705 7706 QuantizeInfo 7707 *quantize_info; 7708 7709 assert(wand != (MagickWand *) NULL); 7710 assert(wand->signature == WandSignature); 7711 if (IfMagickTrue(wand->debug)) 7712 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7713 if (wand->images == (Image *) NULL) 7714 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7715 quantize_info=CloneQuantizeInfo((QuantizeInfo *) NULL); 7716 quantize_info->number_colors=number_colors; 7717 quantize_info->dither_method=dither_method; 7718 quantize_info->tree_depth=treedepth; 7719 quantize_info->colorspace=colorspace; 7720 quantize_info->measure_error=measure_error; 7721 status=QuantizeImage(quantize_info,wand->images,wand->exception); 7722 quantize_info=DestroyQuantizeInfo(quantize_info); 7723 return(status); 7724} 7725 7726/* 7727%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7728% % 7729% % 7730% % 7731% M a g i c k Q u a n t i z e I m a g e s % 7732% % 7733% % 7734% % 7735%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7736% 7737% MagickQuantizeImages() analyzes the colors within a sequence of images and 7738% chooses a fixed number of colors to represent the image. The goal of the 7739% algorithm is to minimize the color difference between the input and output 7740% image while minimizing the processing time. 7741% 7742% The format of the MagickQuantizeImages method is: 7743% 7744% MagickBooleanType MagickQuantizeImages(MagickWand *wand, 7745% const size_t number_colors,const ColorspaceType colorspace, 7746% const size_t treedepth,const DitherMethod dither_method, 7747% const MagickBooleanType measure_error) 7748% 7749% A description of each parameter follows: 7750% 7751% o wand: the magick wand. 7752% 7753% o number_colors: the number of colors. 7754% 7755% o colorspace: Perform color reduction in this colorspace, typically 7756% RGBColorspace. 7757% 7758% o treedepth: Normally, this integer value is zero or one. A zero or 7759% 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 7760% reference image with the least amount of memory and the fastest 7761% computational speed. In some cases, such as an image with low color 7762% dispersion (a few number of colors), a value other than 7763% Log4(number_colors) is required. To expand the color tree completely, 7764% use a value of 8. 7765% 7766% o dither_method: choose from these dither methods: NoDitherMethod, 7767% RiemersmaDitherMethod, or FloydSteinbergDitherMethod. 7768% 7769% o measure_error: A value other than zero measures the difference between 7770% the original and quantized images. This difference is the total 7771% quantization error. The error is computed by summing over all pixels 7772% in an image the distance squared in RGB space between each reference 7773% pixel value and its quantized value. 7774% 7775*/ 7776WandExport MagickBooleanType MagickQuantizeImages(MagickWand *wand, 7777 const size_t number_colors,const ColorspaceType colorspace, 7778 const size_t treedepth,const DitherMethod dither_method, 7779 const MagickBooleanType measure_error) 7780{ 7781 MagickBooleanType 7782 status; 7783 7784 QuantizeInfo 7785 *quantize_info; 7786 7787 assert(wand != (MagickWand *) NULL); 7788 assert(wand->signature == WandSignature); 7789 if (IfMagickTrue(wand->debug)) 7790 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7791 if (wand->images == (Image *) NULL) 7792 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7793 quantize_info=CloneQuantizeInfo((QuantizeInfo *) NULL); 7794 quantize_info->number_colors=number_colors; 7795 quantize_info->dither_method=dither_method; 7796 quantize_info->tree_depth=treedepth; 7797 quantize_info->colorspace=colorspace; 7798 quantize_info->measure_error=measure_error; 7799 status=QuantizeImages(quantize_info,wand->images,wand->exception); 7800 quantize_info=DestroyQuantizeInfo(quantize_info); 7801 return(status); 7802} 7803 7804/* 7805%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7806% % 7807% % 7808% % 7809% M a g i c k R a d i a l B l u r I m a g e % 7810% % 7811% % 7812% % 7813%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7814% 7815% MagickRadialBlurImage() radial blurs an image. 7816% 7817% The format of the MagickRadialBlurImage method is: 7818% 7819% MagickBooleanType MagickRadialBlurImage(MagickWand *wand, 7820% const double angle) 7821% 7822% A description of each parameter follows: 7823% 7824% o wand: the magick wand. 7825% 7826% o angle: the angle of the blur in degrees. 7827% 7828*/ 7829WandExport MagickBooleanType MagickRadialBlurImage(MagickWand *wand, 7830 const double angle) 7831{ 7832 Image 7833 *blur_image; 7834 7835 assert(wand != (MagickWand *) NULL); 7836 assert(wand->signature == WandSignature); 7837 if (IfMagickTrue(wand->debug)) 7838 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7839 if (wand->images == (Image *) NULL) 7840 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7841 blur_image=RadialBlurImage(wand->images,angle,wand->exception); 7842 if (blur_image == (Image *) NULL) 7843 return(MagickFalse); 7844 ReplaceImageInList(&wand->images,blur_image); 7845 return(MagickTrue); 7846} 7847 7848/* 7849%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7850% % 7851% % 7852% % 7853% M a g i c k R a i s e I m a g e % 7854% % 7855% % 7856% % 7857%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7858% 7859% MagickRaiseImage() creates a simulated three-dimensional button-like effect 7860% by lightening and darkening the edges of the image. Members width and 7861% height of raise_info define the width of the vertical and horizontal 7862% edge of the effect. 7863% 7864% The format of the MagickRaiseImage method is: 7865% 7866% MagickBooleanType MagickRaiseImage(MagickWand *wand, 7867% const size_t width,const size_t height,const ssize_t x, 7868% const ssize_t y,const MagickBooleanType raise) 7869% 7870% A description of each parameter follows: 7871% 7872% o wand: the magick wand. 7873% 7874% o width,height,x,y: Define the dimensions of the area to raise. 7875% 7876% o raise: A value other than zero creates a 3-D raise effect, 7877% otherwise it has a lowered effect. 7878% 7879*/ 7880WandExport MagickBooleanType MagickRaiseImage(MagickWand *wand, 7881 const size_t width,const size_t height,const ssize_t x, 7882 const ssize_t y,const MagickBooleanType raise) 7883{ 7884 MagickBooleanType 7885 status; 7886 7887 RectangleInfo 7888 raise_info; 7889 7890 assert(wand != (MagickWand *) NULL); 7891 assert(wand->signature == WandSignature); 7892 if (IfMagickTrue(wand->debug)) 7893 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7894 if (wand->images == (Image *) NULL) 7895 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7896 raise_info.width=width; 7897 raise_info.height=height; 7898 raise_info.x=x; 7899 raise_info.y=y; 7900 status=RaiseImage(wand->images,&raise_info,raise,wand->exception); 7901 return(status); 7902} 7903 7904/* 7905%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7906% % 7907% % 7908% % 7909% 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 % 7910% % 7911% % 7912% % 7913%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7914% 7915% MagickRandomThresholdImage() changes the value of individual pixels based on 7916% the intensity of each pixel compared to threshold. The result is a 7917% high-contrast, two color image. 7918% 7919% The format of the MagickRandomThresholdImage method is: 7920% 7921% MagickBooleanType MagickRandomThresholdImage(MagickWand *wand, 7922% const double low,const double high) 7923% 7924% A description of each parameter follows: 7925% 7926% o wand: the magick wand. 7927% 7928% o low,high: Specify the high and low thresholds. These values range from 7929% 0 to QuantumRange. 7930% 7931*/ 7932WandExport MagickBooleanType MagickRandomThresholdImage(MagickWand *wand, 7933 const double low,const double high) 7934{ 7935 char 7936 threshold[MaxTextExtent]; 7937 7938 assert(wand != (MagickWand *) NULL); 7939 assert(wand->signature == WandSignature); 7940 if (IfMagickTrue(wand->debug)) 7941 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7942 if (wand->images == (Image *) NULL) 7943 ThrowWandException(WandError,"ContainsNoImages",wand->name); 7944 (void) FormatLocaleString(threshold,MaxTextExtent,"%gx%g",low,high); 7945 return(RandomThresholdImage(wand->images,threshold,wand->exception)); 7946} 7947 7948/* 7949%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7950% % 7951% % 7952% % 7953% M a g i c k R e a d I m a g e % 7954% % 7955% % 7956% % 7957%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7958% 7959% MagickReadImage() reads an image or image sequence. The images are inserted 7960% jjust before the current image pointer position. 7961% 7962% Use MagickSetFirstIterator(), to insert new images before all the current 7963% images in the wand, MagickSetLastIterator() to append add to the end, 7964% MagickSetImageIndex() to place images just after the given index. 7965% 7966% The format of the MagickReadImage method is: 7967% 7968% MagickBooleanType MagickReadImage(MagickWand *wand,const char *filename) 7969% 7970% A description of each parameter follows: 7971% 7972% o wand: the magick wand. 7973% 7974% o filename: the image filename. 7975% 7976*/ 7977WandExport MagickBooleanType MagickReadImage(MagickWand *wand, 7978 const char *filename) 7979{ 7980 Image 7981 *images; 7982 7983 ImageInfo 7984 *read_info; 7985 7986 assert(wand != (MagickWand *) NULL); 7987 assert(wand->signature == WandSignature); 7988 if (IfMagickTrue(wand->debug)) 7989 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 7990 read_info=CloneImageInfo(wand->image_info); 7991 if (filename != (const char *) NULL) 7992 (void) CopyMagickString(read_info->filename,filename,MaxTextExtent); 7993 images=ReadImage(read_info,wand->exception); 7994 read_info=DestroyImageInfo(read_info); 7995 if (images == (Image *) NULL) 7996 return(MagickFalse); 7997 return(InsertImageInWand(wand,images)); 7998} 7999 8000/* 8001%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8002% % 8003% % 8004% % 8005% M a g i c k R e a d I m a g e B l o b % 8006% % 8007% % 8008% % 8009%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8010% 8011% MagickReadImageBlob() reads an image or image sequence from a blob. 8012% In all other respects it is like MagickReadImage(). 8013% 8014% The format of the MagickReadImageBlob method is: 8015% 8016% MagickBooleanType MagickReadImageBlob(MagickWand *wand, 8017% const void *blob,const size_t length) 8018% 8019% A description of each parameter follows: 8020% 8021% o wand: the magick wand. 8022% 8023% o blob: the blob. 8024% 8025% o length: the blob length. 8026% 8027*/ 8028WandExport MagickBooleanType MagickReadImageBlob(MagickWand *wand, 8029 const void *blob,const size_t length) 8030{ 8031 Image 8032 *images; 8033 8034 assert(wand != (MagickWand *) NULL); 8035 assert(wand->signature == WandSignature); 8036 if (IfMagickTrue(wand->debug)) 8037 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8038 images=BlobToImage(wand->image_info,blob,length,wand->exception); 8039 if (images == (Image *) NULL) 8040 return(MagickFalse); 8041 return(InsertImageInWand(wand,images)); 8042} 8043 8044/* 8045%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8046% % 8047% % 8048% % 8049% M a g i c k R e a d I m a g e F i l e % 8050% % 8051% % 8052% % 8053%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8054% 8055% MagickReadImageFile() reads an image or image sequence from an already 8056% opened file descriptor. Otherwise it is like MagickReadImage(). 8057% 8058% The format of the MagickReadImageFile method is: 8059% 8060% MagickBooleanType MagickReadImageFile(MagickWand *wand,FILE *file) 8061% 8062% A description of each parameter follows: 8063% 8064% o wand: the magick wand. 8065% 8066% o file: the file descriptor. 8067% 8068*/ 8069WandExport MagickBooleanType MagickReadImageFile(MagickWand *wand,FILE *file) 8070{ 8071 Image 8072 *images; 8073 8074 ImageInfo 8075 *read_info; 8076 8077 assert(wand != (MagickWand *) NULL); 8078 assert(wand->signature == WandSignature); 8079 assert(file != (FILE *) NULL); 8080 if (IfMagickTrue(wand->debug)) 8081 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8082 read_info=CloneImageInfo(wand->image_info); 8083 SetImageInfoFile(read_info,file); 8084 images=ReadImage(read_info,wand->exception); 8085 read_info=DestroyImageInfo(read_info); 8086 if (images == (Image *) NULL) 8087 return(MagickFalse); 8088 return(InsertImageInWand(wand,images)); 8089} 8090 8091/* 8092%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8093% % 8094% % 8095% % 8096% M a g i c k R e m a p I m a g e % 8097% % 8098% % 8099% % 8100%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8101% 8102% MagickRemapImage() replaces the colors of an image with the closest color 8103% from a reference image. 8104% 8105% The format of the MagickRemapImage method is: 8106% 8107% MagickBooleanType MagickRemapImage(MagickWand *wand, 8108% const MagickWand *remap_wand,const DitherMethod method) 8109% 8110% A description of each parameter follows: 8111% 8112% o wand: the magick wand. 8113% 8114% o affinity: the affinity wand. 8115% 8116% o method: choose from these dither methods: NoDitherMethod, 8117% RiemersmaDitherMethod, or FloydSteinbergDitherMethod. 8118% 8119*/ 8120WandExport MagickBooleanType MagickRemapImage(MagickWand *wand, 8121 const MagickWand *remap_wand,const DitherMethod dither_method) 8122{ 8123 MagickBooleanType 8124 status; 8125 8126 QuantizeInfo 8127 *quantize_info; 8128 8129 assert(wand != (MagickWand *) NULL); 8130 assert(wand->signature == WandSignature); 8131 if (IfMagickTrue(wand->debug)) 8132 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8133 if ((wand->images == (Image *) NULL) || 8134 (remap_wand->images == (Image *) NULL)) 8135 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8136 quantize_info=AcquireQuantizeInfo(wand->image_info); 8137 quantize_info->dither_method=dither_method; 8138 status=RemapImage(quantize_info,wand->images,remap_wand->images, 8139 wand->exception); 8140 quantize_info=DestroyQuantizeInfo(quantize_info); 8141 return(status); 8142} 8143 8144/* 8145%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8146% % 8147% % 8148% % 8149% M a g i c k R e m o v e I m a g e % 8150% % 8151% % 8152% % 8153%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8154% 8155% MagickRemoveImage() removes an image from the image list. 8156% 8157% The format of the MagickRemoveImage method is: 8158% 8159% MagickBooleanType MagickRemoveImage(MagickWand *wand) 8160% 8161% A description of each parameter follows: 8162% 8163% o wand: the magick wand. 8164% 8165% o insert: the splice wand. 8166% 8167*/ 8168WandExport MagickBooleanType MagickRemoveImage(MagickWand *wand) 8169{ 8170 assert(wand != (MagickWand *) NULL); 8171 assert(wand->signature == WandSignature); 8172 if (IfMagickTrue(wand->debug)) 8173 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8174 if (wand->images == (Image *) NULL) 8175 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8176 DeleteImageFromList(&wand->images); 8177 return(MagickTrue); 8178} 8179 8180/* 8181%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8182% % 8183% % 8184% % 8185% M a g i c k R e s a m p l e I m a g e % 8186% % 8187% % 8188% % 8189%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8190% 8191% MagickResampleImage() resample image to desired resolution. 8192% 8193% Bessel Blackman Box 8194% Catrom Cubic Gaussian 8195% Hanning Hermite Lanczos 8196% Mitchell Point Quandratic 8197% Sinc Triangle 8198% 8199% Most of the filters are FIR (finite impulse response), however, Bessel, 8200% Gaussian, and Sinc are IIR (infinite impulse response). Bessel and Sinc 8201% are windowed (brought down to zero) with the Blackman filter. 8202% 8203% The format of the MagickResampleImage method is: 8204% 8205% MagickBooleanType MagickResampleImage(MagickWand *wand, 8206% const double x_resolution,const double y_resolution, 8207% const FilterTypes filter) 8208% 8209% A description of each parameter follows: 8210% 8211% o wand: the magick wand. 8212% 8213% o x_resolution: the new image x resolution. 8214% 8215% o y_resolution: the new image y resolution. 8216% 8217% o filter: Image filter to use. 8218% 8219*/ 8220WandExport MagickBooleanType MagickResampleImage(MagickWand *wand, 8221 const double x_resolution,const double y_resolution,const FilterTypes filter) 8222{ 8223 Image 8224 *resample_image; 8225 8226 assert(wand != (MagickWand *) NULL); 8227 assert(wand->signature == WandSignature); 8228 if (IfMagickTrue(wand->debug)) 8229 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8230 if (wand->images == (Image *) NULL) 8231 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8232 resample_image=ResampleImage(wand->images,x_resolution,y_resolution,filter, 8233 wand->exception); 8234 if (resample_image == (Image *) NULL) 8235 return(MagickFalse); 8236 ReplaceImageInList(&wand->images,resample_image); 8237 return(MagickTrue); 8238} 8239 8240/* 8241%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8242% % 8243% % 8244% % 8245% M a g i c k R e s e t I m a g e P a g e % 8246% % 8247% % 8248% % 8249%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8250% 8251% MagickResetImagePage() resets the Wand page canvas and position. 8252% 8253% The format of the MagickResetImagePage method is: 8254% 8255% MagickBooleanType MagickResetImagePage(MagickWand *wand, 8256% const char *page) 8257% 8258% A description of each parameter follows: 8259% 8260% o wand: the magick wand. 8261% 8262% o page: the relative page specification. 8263% 8264*/ 8265WandExport MagickBooleanType MagickResetImagePage(MagickWand *wand, 8266 const char *page) 8267{ 8268 assert(wand != (MagickWand *) NULL); 8269 assert(wand->signature == WandSignature); 8270 if (IfMagickTrue(wand->debug)) 8271 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8272 if (wand->images == (Image *) NULL) 8273 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8274 if ((page == (char *) NULL) || (*page == '\0')) 8275 { 8276 (void) ParseAbsoluteGeometry("0x0+0+0",&wand->images->page); 8277 return(MagickTrue); 8278 } 8279 return(ResetImagePage(wand->images,page)); 8280} 8281 8282/* 8283%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8284% % 8285% % 8286% % 8287% M a g i c k R e s i z e I m a g e % 8288% % 8289% % 8290% % 8291%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8292% 8293% MagickResizeImage() scales an image to the desired dimensions with one of 8294% these filters: 8295% 8296% Bessel Blackman Box 8297% Catrom Cubic Gaussian 8298% Hanning Hermite Lanczos 8299% Mitchell Point Quandratic 8300% Sinc Triangle 8301% 8302% Most of the filters are FIR (finite impulse response), however, Bessel, 8303% Gaussian, and Sinc are IIR (infinite impulse response). Bessel and Sinc 8304% are windowed (brought down to zero) with the Blackman filter. 8305% 8306% The format of the MagickResizeImage method is: 8307% 8308% MagickBooleanType MagickResizeImage(MagickWand *wand, 8309% const size_t columns,const size_t rows,const FilterTypes filter) 8310% 8311% A description of each parameter follows: 8312% 8313% o wand: the magick wand. 8314% 8315% o columns: the number of columns in the scaled image. 8316% 8317% o rows: the number of rows in the scaled image. 8318% 8319% o filter: Image filter to use. 8320% 8321*/ 8322WandExport MagickBooleanType MagickResizeImage(MagickWand *wand, 8323 const size_t columns,const size_t rows,const FilterTypes filter) 8324{ 8325 Image 8326 *resize_image; 8327 8328 assert(wand != (MagickWand *) NULL); 8329 assert(wand->signature == WandSignature); 8330 if (IfMagickTrue(wand->debug)) 8331 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8332 if (wand->images == (Image *) NULL) 8333 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8334 resize_image=ResizeImage(wand->images,columns,rows,filter,wand->exception); 8335 if (resize_image == (Image *) NULL) 8336 return(MagickFalse); 8337 ReplaceImageInList(&wand->images,resize_image); 8338 return(MagickTrue); 8339} 8340 8341/* 8342%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8343% % 8344% % 8345% % 8346% M a g i c k R o l l I m a g e % 8347% % 8348% % 8349% % 8350%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8351% 8352% MagickRollImage() offsets an image as defined by x and y. 8353% 8354% The format of the MagickRollImage method is: 8355% 8356% MagickBooleanType MagickRollImage(MagickWand *wand,const ssize_t x, 8357% const size_t y) 8358% 8359% A description of each parameter follows: 8360% 8361% o wand: the magick wand. 8362% 8363% o x: the x offset. 8364% 8365% o y: the y offset. 8366% 8367% 8368*/ 8369WandExport MagickBooleanType MagickRollImage(MagickWand *wand, 8370 const ssize_t x,const ssize_t y) 8371{ 8372 Image 8373 *roll_image; 8374 8375 assert(wand != (MagickWand *) NULL); 8376 assert(wand->signature == WandSignature); 8377 if (IfMagickTrue(wand->debug)) 8378 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8379 if (wand->images == (Image *) NULL) 8380 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8381 roll_image=RollImage(wand->images,x,y,wand->exception); 8382 if (roll_image == (Image *) NULL) 8383 return(MagickFalse); 8384 ReplaceImageInList(&wand->images,roll_image); 8385 return(MagickTrue); 8386} 8387 8388/* 8389%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8390% % 8391% % 8392% % 8393% M a g i c k R o t a t e I m a g e % 8394% % 8395% % 8396% % 8397%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8398% 8399% MagickRotateImage() rotates an image the specified number of degrees. Empty 8400% triangles left over from rotating the image are filled with the 8401% background color. 8402% 8403% The format of the MagickRotateImage method is: 8404% 8405% MagickBooleanType MagickRotateImage(MagickWand *wand, 8406% const PixelWand *background,const double degrees) 8407% 8408% A description of each parameter follows: 8409% 8410% o wand: the magick wand. 8411% 8412% o background: the background pixel wand. 8413% 8414% o degrees: the number of degrees to rotate the image. 8415% 8416% 8417*/ 8418WandExport MagickBooleanType MagickRotateImage(MagickWand *wand, 8419 const PixelWand *background,const double degrees) 8420{ 8421 Image 8422 *rotate_image; 8423 8424 assert(wand != (MagickWand *) NULL); 8425 assert(wand->signature == WandSignature); 8426 if (IfMagickTrue(wand->debug)) 8427 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8428 if (wand->images == (Image *) NULL) 8429 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8430 PixelGetQuantumPacket(background,&wand->images->background_color); 8431 rotate_image=RotateImage(wand->images,degrees,wand->exception); 8432 if (rotate_image == (Image *) NULL) 8433 return(MagickFalse); 8434 ReplaceImageInList(&wand->images,rotate_image); 8435 return(MagickTrue); 8436} 8437 8438/* 8439%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8440% % 8441% % 8442% % 8443% M a g i c k S a m p l e I m a g e % 8444% % 8445% % 8446% % 8447%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8448% 8449% MagickSampleImage() scales an image to the desired dimensions with pixel 8450% sampling. Unlike other scaling methods, this method does not introduce 8451% any additional color into the scaled image. 8452% 8453% The format of the MagickSampleImage method is: 8454% 8455% MagickBooleanType MagickSampleImage(MagickWand *wand, 8456% const size_t columns,const size_t rows) 8457% 8458% A description of each parameter follows: 8459% 8460% o wand: the magick wand. 8461% 8462% o columns: the number of columns in the scaled image. 8463% 8464% o rows: the number of rows in the scaled image. 8465% 8466% 8467*/ 8468WandExport MagickBooleanType MagickSampleImage(MagickWand *wand, 8469 const size_t columns,const size_t rows) 8470{ 8471 Image 8472 *sample_image; 8473 8474 assert(wand != (MagickWand *) NULL); 8475 assert(wand->signature == WandSignature); 8476 if (IfMagickTrue(wand->debug)) 8477 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8478 if (wand->images == (Image *) NULL) 8479 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8480 sample_image=SampleImage(wand->images,columns,rows,wand->exception); 8481 if (sample_image == (Image *) NULL) 8482 return(MagickFalse); 8483 ReplaceImageInList(&wand->images,sample_image); 8484 return(MagickTrue); 8485} 8486 8487/* 8488%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8489% % 8490% % 8491% % 8492% M a g i c k S c a l e I m a g e % 8493% % 8494% % 8495% % 8496%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8497% 8498% MagickScaleImage() scales the size of an image to the given dimensions. 8499% 8500% The format of the MagickScaleImage method is: 8501% 8502% MagickBooleanType MagickScaleImage(MagickWand *wand, 8503% const size_t columns,const size_t rows) 8504% 8505% A description of each parameter follows: 8506% 8507% o wand: the magick wand. 8508% 8509% o columns: the number of columns in the scaled image. 8510% 8511% o rows: the number of rows in the scaled image. 8512% 8513% 8514*/ 8515WandExport MagickBooleanType MagickScaleImage(MagickWand *wand, 8516 const size_t columns,const size_t rows) 8517{ 8518 Image 8519 *scale_image; 8520 8521 assert(wand != (MagickWand *) NULL); 8522 assert(wand->signature == WandSignature); 8523 if (IfMagickTrue(wand->debug)) 8524 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8525 if (wand->images == (Image *) NULL) 8526 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8527 scale_image=ScaleImage(wand->images,columns,rows,wand->exception); 8528 if (scale_image == (Image *) NULL) 8529 return(MagickFalse); 8530 ReplaceImageInList(&wand->images,scale_image); 8531 return(MagickTrue); 8532} 8533 8534/* 8535%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8536% % 8537% % 8538% % 8539% M a g i c k S e g m e n t I m a g e % 8540% % 8541% % 8542% % 8543%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8544% 8545% MagickSegmentImage() segments an image by analyzing the histograms of the 8546% color components and identifying units that are homogeneous with the fuzzy 8547% C-means technique. 8548% 8549% The format of the SegmentImage method is: 8550% 8551% MagickBooleanType MagickSegmentImage(MagickWand *wand, 8552% const ColorspaceType colorspace,const MagickBooleanType verbose, 8553% const double cluster_threshold,const double smooth_threshold) 8554% 8555% A description of each parameter follows. 8556% 8557% o wand: the wand. 8558% 8559% o colorspace: the image colorspace. 8560% 8561% o verbose: Set to MagickTrue to print detailed information about the 8562% identified classes. 8563% 8564% o cluster_threshold: This represents the minimum number of pixels 8565% contained in a hexahedra before it can be considered valid (expressed as 8566% a percentage). 8567% 8568% o smooth_threshold: the smoothing threshold eliminates noise in the second 8569% derivative of the histogram. As the value is increased, you can expect a 8570% smoother second derivative. 8571% 8572*/ 8573MagickExport MagickBooleanType MagickSegmentImage(MagickWand *wand, 8574 const ColorspaceType colorspace,const MagickBooleanType verbose, 8575 const double cluster_threshold,const double smooth_threshold) 8576{ 8577 MagickBooleanType 8578 status; 8579 8580 assert(wand != (MagickWand *) NULL); 8581 assert(wand->signature == WandSignature); 8582 if (IfMagickTrue(wand->debug)) 8583 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8584 if (wand->images == (Image *) NULL) 8585 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8586 status=SegmentImage(wand->images,colorspace,verbose,cluster_threshold, 8587 smooth_threshold,wand->exception); 8588 return(status); 8589} 8590 8591/* 8592%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8593% % 8594% % 8595% % 8596% M a g i c k S e l e c t i v e B l u r I m a g e % 8597% % 8598% % 8599% % 8600%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8601% 8602% MagickSelectiveBlurImage() selectively blur an image within a contrast 8603% threshold. It is similar to the unsharpen mask that sharpens everything with 8604% contrast above a certain threshold. 8605% 8606% The format of the MagickSelectiveBlurImage method is: 8607% 8608% MagickBooleanType MagickSelectiveBlurImage(MagickWand *wand, 8609% const double radius,const double sigma,const double threshold) 8610% 8611% A description of each parameter follows: 8612% 8613% o wand: the magick wand. 8614% 8615% o radius: the radius of the gaussian, in pixels, not counting the center 8616% pixel. 8617% 8618% o sigma: the standard deviation of the gaussian, in pixels. 8619% 8620% o threshold: only pixels within this contrast threshold are included 8621% in the blur operation. 8622% 8623*/ 8624WandExport MagickBooleanType MagickSelectiveBlurImage(MagickWand *wand, 8625 const double radius,const double sigma,const double threshold) 8626{ 8627 Image 8628 *blur_image; 8629 8630 assert(wand != (MagickWand *) NULL); 8631 assert(wand->signature == WandSignature); 8632 if (IfMagickTrue(wand->debug)) 8633 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8634 if (wand->images == (Image *) NULL) 8635 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8636 blur_image=SelectiveBlurImage(wand->images,radius,sigma,threshold, 8637 wand->exception); 8638 if (blur_image == (Image *) NULL) 8639 return(MagickFalse); 8640 ReplaceImageInList(&wand->images,blur_image); 8641 return(MagickTrue); 8642} 8643 8644/* 8645%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8646% % 8647% % 8648% % 8649% 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 % 8650% % 8651% % 8652% % 8653%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8654% 8655% MagickSeparateImage() separates a channel from the image and returns a 8656% grayscale image. A channel is a particular color component of each pixel 8657% in the image. 8658% 8659% The format of the MagickSeparateImage method is: 8660% 8661% MagickBooleanType MagickSeparateImage(MagickWand *wand, 8662% const ChannelType channel) 8663% 8664% A description of each parameter follows: 8665% 8666% o wand: the magick wand. 8667% 8668% o channel: the channel. 8669% 8670*/ 8671WandExport MagickBooleanType MagickSeparateImage(MagickWand *wand, 8672 const ChannelType channel) 8673{ 8674 Image 8675 *separate_image; 8676 8677 assert(wand != (MagickWand *) NULL); 8678 assert(wand->signature == WandSignature); 8679 if (IfMagickTrue(wand->debug)) 8680 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8681 if (wand->images == (Image *) NULL) 8682 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8683 separate_image=SeparateImage(wand->images,channel,wand->exception); 8684 if (separate_image == (Image *) NULL) 8685 return(MagickFalse); 8686 ReplaceImageInList(&wand->images,separate_image); 8687 return(MagickTrue); 8688} 8689 8690/* 8691%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8692% % 8693% % 8694% % 8695% M a g i c k S e p i a T o n e I m a g e % 8696% % 8697% % 8698% % 8699%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8700% 8701% MagickSepiaToneImage() applies a special effect to the image, similar to the 8702% effect achieved in a photo darkroom by sepia toning. Threshold ranges from 8703% 0 to QuantumRange and is a measure of the extent of the sepia toning. A 8704% threshold of 80% is a good starting point for a reasonable tone. 8705% 8706% The format of the MagickSepiaToneImage method is: 8707% 8708% MagickBooleanType MagickSepiaToneImage(MagickWand *wand, 8709% const double threshold) 8710% 8711% A description of each parameter follows: 8712% 8713% o wand: the magick wand. 8714% 8715% o threshold: Define the extent of the sepia toning. 8716% 8717*/ 8718WandExport MagickBooleanType MagickSepiaToneImage(MagickWand *wand, 8719 const double threshold) 8720{ 8721 Image 8722 *sepia_image; 8723 8724 assert(wand != (MagickWand *) NULL); 8725 assert(wand->signature == WandSignature); 8726 if (IfMagickTrue(wand->debug)) 8727 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8728 if (wand->images == (Image *) NULL) 8729 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8730 sepia_image=SepiaToneImage(wand->images,threshold,wand->exception); 8731 if (sepia_image == (Image *) NULL) 8732 return(MagickFalse); 8733 ReplaceImageInList(&wand->images,sepia_image); 8734 return(MagickTrue); 8735} 8736 8737/* 8738%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8739% % 8740% % 8741% % 8742% M a g i c k S e t I m a g e % 8743% % 8744% % 8745% % 8746%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8747% 8748% MagickSetImage() replaces the last image returned by MagickSetImageIndex(), 8749% MagickNextImage(), MagickPreviousImage() with the images from the specified 8750% wand. 8751% 8752% The format of the MagickSetImage method is: 8753% 8754% MagickBooleanType MagickSetImage(MagickWand *wand, 8755% const MagickWand *set_wand) 8756% 8757% A description of each parameter follows: 8758% 8759% o wand: the magick wand. 8760% 8761% o set_wand: the set_wand wand. 8762% 8763*/ 8764WandExport MagickBooleanType MagickSetImage(MagickWand *wand, 8765 const MagickWand *set_wand) 8766{ 8767 Image 8768 *images; 8769 8770 assert(wand != (MagickWand *) NULL); 8771 assert(wand->signature == WandSignature); 8772 if (IfMagickTrue(wand->debug)) 8773 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8774 assert(set_wand != (MagickWand *) NULL); 8775 assert(set_wand->signature == WandSignature); 8776 if (IfMagickTrue(wand->debug)) 8777 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",set_wand->name); 8778 if (set_wand->images == (Image *) NULL) 8779 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8780 images=CloneImageList(set_wand->images,wand->exception); 8781 if (images == (Image *) NULL) 8782 return(MagickFalse); 8783 ReplaceImageInList(&wand->images,images); 8784 return(MagickTrue); 8785} 8786 8787/* 8788%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8789% % 8790% % 8791% % 8792% 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 % 8793% % 8794% % 8795% % 8796%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8797% 8798% MagickSetImageAlphaChannel() activates, deactivates, resets, or sets the 8799% alpha channel. 8800% 8801% The format of the MagickSetImageAlphaChannel method is: 8802% 8803% MagickBooleanType MagickSetImageAlphaChannel(MagickWand *wand, 8804% const AlphaChannelOption alpha_type) 8805% 8806% A description of each parameter follows: 8807% 8808% o wand: the magick wand. 8809% 8810% o alpha_type: the alpha channel type: ActivateAlphaChannel, 8811% DeactivateAlphaChannel, OpaqueAlphaChannel, or SetAlphaChannel. 8812% 8813*/ 8814WandExport MagickBooleanType MagickSetImageAlphaChannel(MagickWand *wand, 8815 const AlphaChannelOption alpha_type) 8816{ 8817 assert(wand != (MagickWand *) NULL); 8818 assert(wand->signature == WandSignature); 8819 if (IfMagickTrue(wand->debug)) 8820 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8821 if (wand->images == (Image *) NULL) 8822 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8823 return(SetImageAlphaChannel(wand->images,alpha_type,wand->exception)); 8824} 8825 8826/* 8827%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8828% % 8829% % 8830% % 8831% 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 % 8832% % 8833% % 8834% % 8835%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8836% 8837% MagickSetImageBackgroundColor() sets the image background color. 8838% 8839% The format of the MagickSetImageBackgroundColor method is: 8840% 8841% MagickBooleanType MagickSetImageBackgroundColor(MagickWand *wand, 8842% const PixelWand *background) 8843% 8844% A description of each parameter follows: 8845% 8846% o wand: the magick wand. 8847% 8848% o background: the background pixel wand. 8849% 8850*/ 8851WandExport MagickBooleanType MagickSetImageBackgroundColor(MagickWand *wand, 8852 const PixelWand *background) 8853{ 8854 assert(wand != (MagickWand *) NULL); 8855 assert(wand->signature == WandSignature); 8856 if (IfMagickTrue(wand->debug)) 8857 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8858 if (wand->images == (Image *) NULL) 8859 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8860 PixelGetQuantumPacket(background,&wand->images->background_color); 8861 return(MagickTrue); 8862} 8863 8864/* 8865%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8866% % 8867% % 8868% % 8869% 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 % 8870% % 8871% % 8872% % 8873%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8874% 8875% MagickSetImageBluePrimary() sets the image chromaticity blue primary point. 8876% 8877% The format of the MagickSetImageBluePrimary method is: 8878% 8879% MagickBooleanType MagickSetImageBluePrimary(MagickWand *wand, 8880% const double x,const double y) 8881% 8882% A description of each parameter follows: 8883% 8884% o wand: the magick wand. 8885% 8886% o x: the blue primary x-point. 8887% 8888% o y: the blue primary y-point. 8889% 8890*/ 8891WandExport MagickBooleanType MagickSetImageBluePrimary(MagickWand *wand, 8892 const double x,const double y) 8893{ 8894 assert(wand != (MagickWand *) NULL); 8895 assert(wand->signature == WandSignature); 8896 if (IfMagickTrue(wand->debug)) 8897 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8898 if (wand->images == (Image *) NULL) 8899 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8900 wand->images->chromaticity.blue_primary.x=x; 8901 wand->images->chromaticity.blue_primary.y=y; 8902 return(MagickTrue); 8903} 8904 8905/* 8906%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8907% % 8908% % 8909% % 8910% 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 % 8911% % 8912% % 8913% % 8914%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8915% 8916% MagickSetImageBorderColor() sets the image border color. 8917% 8918% The format of the MagickSetImageBorderColor method is: 8919% 8920% MagickBooleanType MagickSetImageBorderColor(MagickWand *wand, 8921% const PixelWand *border) 8922% 8923% A description of each parameter follows: 8924% 8925% o wand: the magick wand. 8926% 8927% o border: the border pixel wand. 8928% 8929*/ 8930WandExport MagickBooleanType MagickSetImageBorderColor(MagickWand *wand, 8931 const PixelWand *border) 8932{ 8933 assert(wand != (MagickWand *) NULL); 8934 assert(wand->signature == WandSignature); 8935 if (IfMagickTrue(wand->debug)) 8936 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8937 if (wand->images == (Image *) NULL) 8938 ThrowWandException(WandError,"ContainsNoImages",wand->name); 8939 PixelGetQuantumPacket(border,&wand->images->border_color); 8940 return(MagickTrue); 8941} 8942 8943/* 8944%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8945% % 8946% % 8947% % 8948% M a g i c k S e t I m a g e C l i p M a s k % 8949% % 8950% % 8951% % 8952%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8953% 8954% MagickSetImageMask() sets image clip mask. 8955% 8956% The format of the MagickSetImageMask method is: 8957% 8958% MagickBooleanType MagickSetImageMask(MagickWand *wand, 8959% const MagickWand *clip_mask) 8960% 8961% A description of each parameter follows: 8962% 8963% o wand: the magick wand. 8964% 8965% o clip_mask: the clip_mask wand. 8966% 8967*/ 8968WandExport MagickBooleanType MagickSetImageMask(MagickWand *wand, 8969 const MagickWand *clip_mask) 8970{ 8971 assert(wand != (MagickWand *) NULL); 8972 assert(wand->signature == WandSignature); 8973 if (IfMagickTrue(wand->debug)) 8974 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 8975 assert(clip_mask != (MagickWand *) NULL); 8976 assert(clip_mask->signature == WandSignature); 8977 if (IfMagickTrue(clip_mask->debug)) 8978 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",clip_mask->name); 8979 if (clip_mask->images == (Image *) NULL) 8980 ThrowWandException(WandError,"ContainsNoImages",clip_mask->name); 8981 return(SetImageMask(wand->images,clip_mask->images,wand->exception)); 8982} 8983 8984/* 8985%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8986% % 8987% % 8988% % 8989% M a g i c k S e t I m a g e C o l o r % 8990% % 8991% % 8992% % 8993%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8994% 8995% MagickSetImageColor() set the entire wand canvas to the specified color. 8996% 8997% The format of the MagickSetImageColor method is: 8998% 8999% MagickBooleanType MagickSetImageColor(MagickWand *wand, 9000% const PixelWand *color) 9001% 9002% A description of each parameter follows: 9003% 9004% o wand: the magick wand. 9005% 9006% o background: the image color. 9007% 9008*/ 9009WandExport MagickBooleanType MagickSetImageColor(MagickWand *wand, 9010 const PixelWand *color) 9011{ 9012 PixelInfo 9013 pixel; 9014 9015 assert(wand != (MagickWand *) NULL); 9016 assert(wand->signature == WandSignature); 9017 if (IfMagickTrue(wand->debug)) 9018 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9019 PixelGetMagickColor(color,&pixel); 9020 return(SetImageColor(wand->images,&pixel,wand->exception)); 9021} 9022 9023/* 9024%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9025% % 9026% % 9027% % 9028% 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 % 9029% % 9030% % 9031% % 9032%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9033% 9034% MagickSetImageColormapColor() sets the color of the specified colormap 9035% index. 9036% 9037% The format of the MagickSetImageColormapColor method is: 9038% 9039% MagickBooleanType MagickSetImageColormapColor(MagickWand *wand, 9040% const size_t index,const PixelWand *color) 9041% 9042% A description of each parameter follows: 9043% 9044% o wand: the magick wand. 9045% 9046% o index: the offset into the image colormap. 9047% 9048% o color: Return the colormap color in this wand. 9049% 9050*/ 9051WandExport MagickBooleanType MagickSetImageColormapColor(MagickWand *wand, 9052 const size_t index,const PixelWand *color) 9053{ 9054 assert(wand != (MagickWand *) NULL); 9055 assert(wand->signature == WandSignature); 9056 if (IfMagickTrue(wand->debug)) 9057 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9058 if (wand->images == (Image *) NULL) 9059 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9060 if ((wand->images->colormap == (PixelInfo *) NULL) || 9061 (index >= wand->images->colors)) 9062 ThrowWandException(WandError,"InvalidColormapIndex",wand->name); 9063 PixelGetQuantumPacket(color,wand->images->colormap+index); 9064 return(SyncImage(wand->images,wand->exception)); 9065} 9066 9067/* 9068%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9069% % 9070% % 9071% % 9072% M a g i c k S e t I m a g e C o l o r s p a c e % 9073% % 9074% % 9075% % 9076%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9077% 9078% MagickSetImageColorspace() sets the image colorspace. But does not modify 9079% the image data. 9080% 9081% The format of the MagickSetImageColorspace method is: 9082% 9083% MagickBooleanType MagickSetImageColorspace(MagickWand *wand, 9084% const ColorspaceType colorspace) 9085% 9086% A description of each parameter follows: 9087% 9088% o wand: the magick wand. 9089% 9090% o colorspace: the image colorspace: UndefinedColorspace, RGBColorspace, 9091% GRAYColorspace, TransparentColorspace, OHTAColorspace, XYZColorspace, 9092% YCbCrColorspace, YCCColorspace, YIQColorspace, YPbPrColorspace, 9093% YPbPrColorspace, YUVColorspace, CMYKColorspace, sRGBColorspace, 9094% HSLColorspace, or HWBColorspace. 9095% 9096*/ 9097WandExport MagickBooleanType MagickSetImageColorspace(MagickWand *wand, 9098 const ColorspaceType colorspace) 9099{ 9100 assert(wand != (MagickWand *) NULL); 9101 assert(wand->signature == WandSignature); 9102 if (IfMagickTrue(wand->debug)) 9103 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9104 if (wand->images == (Image *) NULL) 9105 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9106 return(SetImageColorspace(wand->images,colorspace,wand->exception)); 9107} 9108 9109/* 9110%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9111% % 9112% % 9113% % 9114% M a g i c k S e t I m a g e C o m p o s e % 9115% % 9116% % 9117% % 9118%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9119% 9120% MagickSetImageCompose() sets the image composite operator, useful for 9121% specifying how to composite the image thumbnail when using the 9122% MagickMontageImage() method. 9123% 9124% The format of the MagickSetImageCompose method is: 9125% 9126% MagickBooleanType MagickSetImageCompose(MagickWand *wand, 9127% const CompositeOperator compose) 9128% 9129% A description of each parameter follows: 9130% 9131% o wand: the magick wand. 9132% 9133% o compose: the image composite operator. 9134% 9135*/ 9136WandExport MagickBooleanType MagickSetImageCompose(MagickWand *wand, 9137 const CompositeOperator compose) 9138{ 9139 assert(wand != (MagickWand *) NULL); 9140 assert(wand->signature == WandSignature); 9141 if (IfMagickTrue(wand->debug)) 9142 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9143 if (wand->images == (Image *) NULL) 9144 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9145 wand->images->compose=compose; 9146 return(MagickTrue); 9147} 9148 9149/* 9150%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9151% % 9152% % 9153% % 9154% 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 % 9155% % 9156% % 9157% % 9158%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9159% 9160% MagickSetImageCompression() sets the image compression. 9161% 9162% The format of the MagickSetImageCompression method is: 9163% 9164% MagickBooleanType MagickSetImageCompression(MagickWand *wand, 9165% const CompressionType compression) 9166% 9167% A description of each parameter follows: 9168% 9169% o wand: the magick wand. 9170% 9171% o compression: the image compression type. 9172% 9173*/ 9174WandExport MagickBooleanType MagickSetImageCompression(MagickWand *wand, 9175 const CompressionType compression) 9176{ 9177 assert(wand != (MagickWand *) NULL); 9178 assert(wand->signature == WandSignature); 9179 if (IfMagickTrue(wand->debug)) 9180 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9181 if (wand->images == (Image *) NULL) 9182 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9183 wand->images->compression=compression; 9184 return(MagickTrue); 9185} 9186 9187/* 9188%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9189% % 9190% % 9191% % 9192% 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 % 9193% % 9194% % 9195% % 9196%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9197% 9198% MagickSetImageCompressionQuality() sets the image compression quality. 9199% 9200% The format of the MagickSetImageCompressionQuality method is: 9201% 9202% MagickBooleanType MagickSetImageCompressionQuality(MagickWand *wand, 9203% const size_t quality) 9204% 9205% A description of each parameter follows: 9206% 9207% o wand: the magick wand. 9208% 9209% o quality: the image compression tlityype. 9210% 9211*/ 9212WandExport MagickBooleanType MagickSetImageCompressionQuality(MagickWand *wand, 9213 const size_t quality) 9214{ 9215 assert(wand != (MagickWand *) NULL); 9216 assert(wand->signature == WandSignature); 9217 if (IfMagickTrue(wand->debug)) 9218 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9219 if (wand->images == (Image *) NULL) 9220 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9221 wand->images->quality=quality; 9222 return(MagickTrue); 9223} 9224 9225/* 9226%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9227% % 9228% % 9229% % 9230% M a g i c k S e t I m a g e D e l a y % 9231% % 9232% % 9233% % 9234%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9235% 9236% MagickSetImageDelay() sets the image delay. 9237% 9238% The format of the MagickSetImageDelay method is: 9239% 9240% MagickBooleanType MagickSetImageDelay(MagickWand *wand, 9241% const size_t delay) 9242% 9243% A description of each parameter follows: 9244% 9245% o wand: the magick wand. 9246% 9247% o delay: the image delay in ticks-per-second units. 9248% 9249*/ 9250WandExport MagickBooleanType MagickSetImageDelay(MagickWand *wand, 9251 const size_t delay) 9252{ 9253 assert(wand != (MagickWand *) NULL); 9254 assert(wand->signature == WandSignature); 9255 if (IfMagickTrue(wand->debug)) 9256 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9257 if (wand->images == (Image *) NULL) 9258 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9259 wand->images->delay=delay; 9260 return(MagickTrue); 9261} 9262 9263/* 9264%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9265% % 9266% % 9267% % 9268% M a g i c k S e t I m a g e D e p t h % 9269% % 9270% % 9271% % 9272%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9273% 9274% MagickSetImageDepth() sets the image depth. 9275% 9276% The format of the MagickSetImageDepth method is: 9277% 9278% MagickBooleanType MagickSetImageDepth(MagickWand *wand, 9279% const size_t depth) 9280% 9281% A description of each parameter follows: 9282% 9283% o wand: the magick wand. 9284% 9285% o depth: the image depth in bits: 8, 16, or 32. 9286% 9287*/ 9288WandExport MagickBooleanType MagickSetImageDepth(MagickWand *wand, 9289 const size_t depth) 9290{ 9291 assert(wand != (MagickWand *) NULL); 9292 assert(wand->signature == WandSignature); 9293 if (IfMagickTrue(wand->debug)) 9294 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9295 if (wand->images == (Image *) NULL) 9296 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9297 return(SetImageDepth(wand->images,depth,wand->exception)); 9298} 9299 9300/* 9301%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9302% % 9303% % 9304% % 9305% M a g i c k S e t I m a g e D i s p o s e % 9306% % 9307% % 9308% % 9309%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9310% 9311% MagickSetImageDispose() sets the image disposal method. 9312% 9313% The format of the MagickSetImageDispose method is: 9314% 9315% MagickBooleanType MagickSetImageDispose(MagickWand *wand, 9316% const DisposeType dispose) 9317% 9318% A description of each parameter follows: 9319% 9320% o wand: the magick wand. 9321% 9322% o dispose: the image disposeal type. 9323% 9324*/ 9325WandExport MagickBooleanType MagickSetImageDispose(MagickWand *wand, 9326 const DisposeType dispose) 9327{ 9328 assert(wand != (MagickWand *) NULL); 9329 assert(wand->signature == WandSignature); 9330 if (IfMagickTrue(wand->debug)) 9331 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9332 if (wand->images == (Image *) NULL) 9333 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9334 wand->images->dispose=dispose; 9335 return(MagickTrue); 9336} 9337 9338/* 9339%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9340% % 9341% % 9342% % 9343% M a g i c k S e t I m a g e E n d i a n % 9344% % 9345% % 9346% % 9347%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9348% 9349% MagickSetImageEndian() sets the image endian method. 9350% 9351% The format of the MagickSetImageEndian method is: 9352% 9353% MagickBooleanType MagickSetImageEndian(MagickWand *wand, 9354% const EndianType endian) 9355% 9356% A description of each parameter follows: 9357% 9358% o wand: the magick wand. 9359% 9360% o endian: the image endian type. 9361% 9362*/ 9363WandExport MagickBooleanType MagickSetImageEndian(MagickWand *wand, 9364 const EndianType endian) 9365{ 9366 assert(wand != (MagickWand *) NULL); 9367 assert(wand->signature == WandSignature); 9368 if (wand->debug != MagickFalse) 9369 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9370 if (wand->images == (Image *) NULL) 9371 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9372 wand->images->endian=endian; 9373 return(MagickTrue); 9374} 9375 9376/* 9377%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9378% % 9379% % 9380% % 9381% M a g i c k S e t I m a g e E x t e n t % 9382% % 9383% % 9384% % 9385%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9386% 9387% MagickSetImageExtent() sets the image size (i.e. columns & rows). 9388% 9389% The format of the MagickSetImageExtent method is: 9390% 9391% MagickBooleanType MagickSetImageExtent(MagickWand *wand, 9392% const size_t columns,const unsigned rows) 9393% 9394% A description of each parameter follows: 9395% 9396% o wand: the magick wand. 9397% 9398% o columns: The image width in pixels. 9399% 9400% o rows: The image height in pixels. 9401% 9402*/ 9403WandExport MagickBooleanType MagickSetImageExtent(MagickWand *wand, 9404 const size_t columns,const size_t rows) 9405{ 9406 assert(wand != (MagickWand *) NULL); 9407 assert(wand->signature == WandSignature); 9408 if (IfMagickTrue(wand->debug)) 9409 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9410 if (wand->images == (Image *) NULL) 9411 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9412 return(SetImageExtent(wand->images,columns,rows,wand->exception)); 9413} 9414 9415/* 9416%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9417% % 9418% % 9419% % 9420% M a g i c k S e t I m a g e F i l e n a m e % 9421% % 9422% % 9423% % 9424%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9425% 9426% MagickSetImageFilename() sets the filename of a particular image in a 9427% sequence. 9428% 9429% The format of the MagickSetImageFilename method is: 9430% 9431% MagickBooleanType MagickSetImageFilename(MagickWand *wand, 9432% const char *filename) 9433% 9434% A description of each parameter follows: 9435% 9436% o wand: the magick wand. 9437% 9438% o filename: the image filename. 9439% 9440*/ 9441WandExport MagickBooleanType MagickSetImageFilename(MagickWand *wand, 9442 const char *filename) 9443{ 9444 assert(wand != (MagickWand *) NULL); 9445 assert(wand->signature == WandSignature); 9446 if (IfMagickTrue(wand->debug)) 9447 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9448 if (wand->images == (Image *) NULL) 9449 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9450 if (filename != (const char *) NULL) 9451 (void) CopyMagickString(wand->images->filename,filename,MaxTextExtent); 9452 return(MagickTrue); 9453} 9454 9455/* 9456%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9457% % 9458% % 9459% % 9460% M a g i c k S e t I m a g e F o r m a t % 9461% % 9462% % 9463% % 9464%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9465% 9466% MagickSetImageFormat() sets the format of a particular image in a 9467% sequence. 9468% 9469% The format of the MagickSetImageFormat method is: 9470% 9471% MagickBooleanType MagickSetImageFormat(MagickWand *wand, 9472% const char *format) 9473% 9474% A description of each parameter follows: 9475% 9476% o wand: the magick wand. 9477% 9478% o format: the image format. 9479% 9480*/ 9481WandExport MagickBooleanType MagickSetImageFormat(MagickWand *wand, 9482 const char *format) 9483{ 9484 const MagickInfo 9485 *magick_info; 9486 9487 assert(wand != (MagickWand *) NULL); 9488 assert(wand->signature == WandSignature); 9489 if (IfMagickTrue(wand->debug)) 9490 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9491 if (wand->images == (Image *) NULL) 9492 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9493 if ((format == (char *) NULL) || (*format == '\0')) 9494 { 9495 *wand->images->magick='\0'; 9496 return(MagickTrue); 9497 } 9498 magick_info=GetMagickInfo(format,wand->exception); 9499 if (magick_info == (const MagickInfo *) NULL) 9500 return(MagickFalse); 9501 ClearMagickException(wand->exception); 9502 (void) CopyMagickString(wand->images->magick,format,MaxTextExtent); 9503 return(MagickTrue); 9504} 9505 9506/* 9507%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9508% % 9509% % 9510% % 9511% M a g i c k S e t I m a g e F u z z % 9512% % 9513% % 9514% % 9515%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9516% 9517% MagickSetImageFuzz() sets the image fuzz. 9518% 9519% The format of the MagickSetImageFuzz method is: 9520% 9521% MagickBooleanType MagickSetImageFuzz(MagickWand *wand, 9522% const double fuzz) 9523% 9524% A description of each parameter follows: 9525% 9526% o wand: the magick wand. 9527% 9528% o fuzz: the image fuzz. 9529% 9530*/ 9531WandExport MagickBooleanType MagickSetImageFuzz(MagickWand *wand, 9532 const double fuzz) 9533{ 9534 assert(wand != (MagickWand *) NULL); 9535 assert(wand->signature == WandSignature); 9536 if (IfMagickTrue(wand->debug)) 9537 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9538 if (wand->images == (Image *) NULL) 9539 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9540 wand->images->fuzz=fuzz; 9541 return(MagickTrue); 9542} 9543 9544/* 9545%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9546% % 9547% % 9548% % 9549% M a g i c k S e t I m a g e G a m m a % 9550% % 9551% % 9552% % 9553%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9554% 9555% MagickSetImageGamma() sets the image gamma. 9556% 9557% The format of the MagickSetImageGamma method is: 9558% 9559% MagickBooleanType MagickSetImageGamma(MagickWand *wand, 9560% const double gamma) 9561% 9562% A description of each parameter follows: 9563% 9564% o wand: the magick wand. 9565% 9566% o gamma: the image gamma. 9567% 9568*/ 9569WandExport MagickBooleanType MagickSetImageGamma(MagickWand *wand, 9570 const double gamma) 9571{ 9572 assert(wand != (MagickWand *) NULL); 9573 assert(wand->signature == WandSignature); 9574 if (IfMagickTrue(wand->debug)) 9575 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9576 if (wand->images == (Image *) NULL) 9577 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9578 wand->images->gamma=gamma; 9579 return(MagickTrue); 9580} 9581 9582/* 9583%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9584% % 9585% % 9586% % 9587% M a g i c k S e t I m a g e G r a v i t y % 9588% % 9589% % 9590% % 9591%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9592% 9593% MagickSetImageGravity() sets the image gravity type. 9594% 9595% The format of the MagickSetImageGravity method is: 9596% 9597% MagickBooleanType MagickSetImageGravity(MagickWand *wand, 9598% const GravityType gravity) 9599% 9600% A description of each parameter follows: 9601% 9602% o wand: the magick wand. 9603% 9604% o gravity: the image interlace scheme: NoInterlace, LineInterlace, 9605% PlaneInterlace, PartitionInterlace. 9606% 9607*/ 9608WandExport MagickBooleanType MagickSetImageGravity(MagickWand *wand, 9609 const GravityType gravity) 9610{ 9611 assert(wand != (MagickWand *) NULL); 9612 assert(wand->signature == WandSignature); 9613 if (IfMagickTrue(wand->debug)) 9614 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9615 if (wand->images == (Image *) NULL) 9616 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9617 wand->images->gravity=gravity; 9618 return(MagickTrue); 9619} 9620 9621/* 9622%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9623% % 9624% % 9625% % 9626% 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 % 9627% % 9628% % 9629% % 9630%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9631% 9632% MagickSetImageGreenPrimary() sets the image chromaticity green primary 9633% point. 9634% 9635% The format of the MagickSetImageGreenPrimary method is: 9636% 9637% MagickBooleanType MagickSetImageGreenPrimary(MagickWand *wand, 9638% const double x,const double y) 9639% 9640% A description of each parameter follows: 9641% 9642% o wand: the magick wand. 9643% 9644% o x: the green primary x-point. 9645% 9646% o y: the green primary y-point. 9647% 9648% 9649*/ 9650WandExport MagickBooleanType MagickSetImageGreenPrimary(MagickWand *wand, 9651 const double x,const double y) 9652{ 9653 assert(wand != (MagickWand *) NULL); 9654 assert(wand->signature == WandSignature); 9655 if (IfMagickTrue(wand->debug)) 9656 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9657 if (wand->images == (Image *) NULL) 9658 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9659 wand->images->chromaticity.green_primary.x=x; 9660 wand->images->chromaticity.green_primary.y=y; 9661 return(MagickTrue); 9662} 9663 9664/* 9665%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9666% % 9667% % 9668% % 9669% 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 % 9670% % 9671% % 9672% % 9673%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9674% 9675% MagickSetImageInterlaceScheme() sets the image interlace scheme. 9676% 9677% The format of the MagickSetImageInterlaceScheme method is: 9678% 9679% MagickBooleanType MagickSetImageInterlaceScheme(MagickWand *wand, 9680% const InterlaceType interlace) 9681% 9682% A description of each parameter follows: 9683% 9684% o wand: the magick wand. 9685% 9686% o interlace: the image interlace scheme: NoInterlace, LineInterlace, 9687% PlaneInterlace, PartitionInterlace. 9688% 9689*/ 9690WandExport MagickBooleanType MagickSetImageInterlaceScheme(MagickWand *wand, 9691 const InterlaceType interlace) 9692{ 9693 assert(wand != (MagickWand *) NULL); 9694 assert(wand->signature == WandSignature); 9695 if (IfMagickTrue(wand->debug)) 9696 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9697 if (wand->images == (Image *) NULL) 9698 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9699 wand->images->interlace=interlace; 9700 return(MagickTrue); 9701} 9702 9703/* 9704%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9705% % 9706% % 9707% % 9708% 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 % 9709% % 9710% % 9711% % 9712%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9713% 9714% MagickSetImagePixelInterpolateMethod() sets the image interpolate pixel 9715% method. 9716% 9717% The format of the MagickSetImagePixelInterpolateMethod method is: 9718% 9719% MagickBooleanType MagickSetImagePixelInterpolateMethod(MagickWand *wand, 9720% const PixelInterpolateMethod method) 9721% 9722% A description of each parameter follows: 9723% 9724% o wand: the magick wand. 9725% 9726% o method: the image interpole pixel methods: choose from Undefined, 9727% Average, Bicubic, Bilinear, Filter, Integer, Mesh, NearestNeighbor. 9728% 9729*/ 9730WandExport MagickBooleanType MagickSetImagePixelInterpolateMethod( 9731 MagickWand *wand,const PixelInterpolateMethod method) 9732{ 9733 assert(wand != (MagickWand *) NULL); 9734 assert(wand->signature == WandSignature); 9735 if (IfMagickTrue(wand->debug)) 9736 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9737 if (wand->images == (Image *) NULL) 9738 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9739 wand->images->interpolate=method; 9740 return(MagickTrue); 9741} 9742 9743/* 9744%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9745% % 9746% % 9747% % 9748% M a g i c k S e t I m a g e I t e r a t i o n s % 9749% % 9750% % 9751% % 9752%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9753% 9754% MagickSetImageIterations() sets the image iterations. 9755% 9756% The format of the MagickSetImageIterations method is: 9757% 9758% MagickBooleanType MagickSetImageIterations(MagickWand *wand, 9759% const size_t iterations) 9760% 9761% A description of each parameter follows: 9762% 9763% o wand: the magick wand. 9764% 9765% o delay: the image delay in 1/100th of a second. 9766% 9767*/ 9768WandExport MagickBooleanType MagickSetImageIterations(MagickWand *wand, 9769 const size_t iterations) 9770{ 9771 assert(wand != (MagickWand *) NULL); 9772 assert(wand->signature == WandSignature); 9773 if (IfMagickTrue(wand->debug)) 9774 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9775 if (wand->images == (Image *) NULL) 9776 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9777 wand->images->iterations=iterations; 9778 return(MagickTrue); 9779} 9780 9781/* 9782%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9783% % 9784% % 9785% % 9786% M a g i c k S e t I m a g e M a t t e % 9787% % 9788% % 9789% % 9790%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9791% 9792% MagickSetImageMatte() sets the image matte channel. 9793% 9794% The format of the MagickSetImageMatteColor method is: 9795% 9796% MagickBooleanType MagickSetImageMatteColor(MagickWand *wand, 9797% const MagickBooleanType *matte) 9798% 9799% A description of each parameter follows: 9800% 9801% o wand: the magick wand. 9802% 9803% o matte: Set to MagickTrue to enable the image matte channel otherwise 9804% MagickFalse. 9805% 9806*/ 9807WandExport MagickBooleanType MagickSetImageMatte(MagickWand *wand, 9808 const MagickBooleanType matte) 9809{ 9810 assert(wand != (MagickWand *) NULL); 9811 assert(wand->signature == WandSignature); 9812 if (IfMagickTrue(wand->debug)) 9813 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9814 if (wand->images == (Image *) NULL) 9815 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9816 if ((wand->images->alpha_trait != BlendPixelTrait) && IsMagickTrue(matte)) 9817 (void) SetImageAlpha(wand->images,OpaqueAlpha,wand->exception); 9818 wand->images->alpha_trait=matte != MagickFalse ? BlendPixelTrait : 9819 UndefinedPixelTrait; 9820 return(MagickTrue); 9821} 9822 9823/* 9824%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9825% % 9826% % 9827% % 9828% M a g i c k S e t I m a g e M a t t e C o l o r % 9829% % 9830% % 9831% % 9832%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9833% 9834% MagickSetImageMatteColor() sets the image matte color. 9835% 9836% The format of the MagickSetImageMatteColor method is: 9837% 9838% MagickBooleanType MagickSetImageMatteColor(MagickWand *wand, 9839% const PixelWand *matte) 9840% 9841% A description of each parameter follows: 9842% 9843% o wand: the magick wand. 9844% 9845% o matte: the matte pixel wand. 9846% 9847*/ 9848WandExport MagickBooleanType MagickSetImageMatteColor(MagickWand *wand, 9849 const PixelWand *matte) 9850{ 9851 assert(wand != (MagickWand *) NULL); 9852 assert(wand->signature == WandSignature); 9853 if (IfMagickTrue(wand->debug)) 9854 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9855 if (wand->images == (Image *) NULL) 9856 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9857 PixelGetQuantumPacket(matte,&wand->images->matte_color); 9858 return(MagickTrue); 9859} 9860 9861/* 9862%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9863% % 9864% % 9865% % 9866% M a g i c k S e t I m a g e O p a c i t y % 9867% % 9868% % 9869% % 9870%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9871% 9872% MagickSetImageAlpha() sets the image to the specified alpha level. 9873% 9874% The format of the MagickSetImageAlpha method is: 9875% 9876% MagickBooleanType MagickSetImageAlpha(MagickWand *wand, 9877% const double alpha) 9878% 9879% A description of each parameter follows: 9880% 9881% o wand: the magick wand. 9882% 9883% o alpha: the level of transparency: 1.0 is fully opaque and 0.0 is fully 9884% transparent. 9885% 9886*/ 9887WandExport MagickBooleanType MagickSetImageAlpha(MagickWand *wand, 9888 const double alpha) 9889{ 9890 MagickBooleanType 9891 status; 9892 9893 assert(wand != (MagickWand *) NULL); 9894 assert(wand->signature == WandSignature); 9895 if (IfMagickTrue(wand->debug)) 9896 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9897 if (wand->images == (Image *) NULL) 9898 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9899 status=SetImageAlpha(wand->images,ClampToQuantum(QuantumRange*alpha), 9900 wand->exception); 9901 return(status); 9902} 9903 9904/* 9905%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9906% % 9907% % 9908% % 9909% 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 % 9910% % 9911% % 9912% % 9913%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9914% 9915% MagickSetImageOrientation() sets the image orientation. 9916% 9917% The format of the MagickSetImageOrientation method is: 9918% 9919% MagickBooleanType MagickSetImageOrientation(MagickWand *wand, 9920% const OrientationType orientation) 9921% 9922% A description of each parameter follows: 9923% 9924% o wand: the magick wand. 9925% 9926% o orientation: the image orientation type. 9927% 9928*/ 9929WandExport MagickBooleanType MagickSetImageOrientation(MagickWand *wand, 9930 const OrientationType orientation) 9931{ 9932 assert(wand != (MagickWand *) NULL); 9933 assert(wand->signature == WandSignature); 9934 if (IfMagickTrue(wand->debug)) 9935 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9936 if (wand->images == (Image *) NULL) 9937 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9938 wand->images->orientation=orientation; 9939 return(MagickTrue); 9940} 9941 9942/* 9943%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9944% % 9945% % 9946% % 9947% M a g i c k S e t I m a g e P a g e % 9948% % 9949% % 9950% % 9951%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9952% 9953% MagickSetImagePage() sets the page geometry of the image. 9954% 9955% The format of the MagickSetImagePage method is: 9956% 9957% MagickBooleanType MagickSetImagePage(MagickWand *wand,const size_t width,% const size_t height,const ssize_t x,const ssize_t y) 9958% 9959% A description of each parameter follows: 9960% 9961% o wand: the magick wand. 9962% 9963% o width: the page width. 9964% 9965% o height: the page height. 9966% 9967% o x: the page x-offset. 9968% 9969% o y: the page y-offset. 9970% 9971*/ 9972WandExport MagickBooleanType MagickSetImagePage(MagickWand *wand, 9973 const size_t width,const size_t height,const ssize_t x, 9974 const ssize_t y) 9975{ 9976 assert(wand != (MagickWand *) NULL); 9977 assert(wand->signature == WandSignature); 9978 if (IfMagickTrue(wand->debug)) 9979 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 9980 if (wand->images == (Image *) NULL) 9981 ThrowWandException(WandError,"ContainsNoImages",wand->name); 9982 wand->images->page.width=width; 9983 wand->images->page.height=height; 9984 wand->images->page.x=x; 9985 wand->images->page.y=y; 9986 return(MagickTrue); 9987} 9988 9989/* 9990%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9991% % 9992% % 9993% % 9994% 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 % 9995% % 9996% % 9997% % 9998%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9999% 10000% MagickSetImageProgressMonitor() sets the wand image progress monitor to the 10001% specified method and returns the previous progress monitor if any. The 10002% progress monitor method looks like this: 10003% 10004% MagickBooleanType MagickProgressMonitor(const char *text, 10005% const MagickOffsetType offset,const MagickSizeType span, 10006% void *client_data) 10007% 10008% If the progress monitor returns MagickFalse, the current operation is 10009% interrupted. 10010% 10011% The format of the MagickSetImageProgressMonitor method is: 10012% 10013% MagickProgressMonitor MagickSetImageProgressMonitor(MagickWand *wand 10014% const MagickProgressMonitor progress_monitor,void *client_data) 10015% 10016% A description of each parameter follows: 10017% 10018% o wand: the magick wand. 10019% 10020% o progress_monitor: Specifies a pointer to a method to monitor progress 10021% of an image operation. 10022% 10023% o client_data: Specifies a pointer to any client data. 10024% 10025*/ 10026WandExport MagickProgressMonitor MagickSetImageProgressMonitor(MagickWand *wand, 10027 const MagickProgressMonitor progress_monitor,void *client_data) 10028{ 10029 MagickProgressMonitor 10030 previous_monitor; 10031 10032 assert(wand != (MagickWand *) NULL); 10033 assert(wand->signature == WandSignature); 10034 if (IfMagickTrue(wand->debug)) 10035 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10036 if (wand->images == (Image *) NULL) 10037 { 10038 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 10039 "ContainsNoImages","`%s'",wand->name); 10040 return((MagickProgressMonitor) NULL); 10041 } 10042 previous_monitor=SetImageProgressMonitor(wand->images, 10043 progress_monitor,client_data); 10044 return(previous_monitor); 10045} 10046 10047/* 10048%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10049% % 10050% % 10051% % 10052% M a g i c k S e t I m a g e R e d P r i m a r y % 10053% % 10054% % 10055% % 10056%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10057% 10058% MagickSetImageRedPrimary() sets the image chromaticity red primary point. 10059% 10060% The format of the MagickSetImageRedPrimary method is: 10061% 10062% MagickBooleanType MagickSetImageRedPrimary(MagickWand *wand, 10063% const double x,const double y) 10064% 10065% A description of each parameter follows: 10066% 10067% o wand: the magick wand. 10068% 10069% o x: the red primary x-point. 10070% 10071% o y: the red primary y-point. 10072% 10073*/ 10074WandExport MagickBooleanType MagickSetImageRedPrimary(MagickWand *wand, 10075 const double x,const double y) 10076{ 10077 assert(wand != (MagickWand *) NULL); 10078 assert(wand->signature == WandSignature); 10079 if (IfMagickTrue(wand->debug)) 10080 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10081 if (wand->images == (Image *) NULL) 10082 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10083 wand->images->chromaticity.red_primary.x=x; 10084 wand->images->chromaticity.red_primary.y=y; 10085 return(MagickTrue); 10086} 10087 10088/* 10089%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10090% % 10091% % 10092% % 10093% 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 % 10094% % 10095% % 10096% % 10097%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10098% 10099% MagickSetImageRenderingIntent() sets the image rendering intent. 10100% 10101% The format of the MagickSetImageRenderingIntent method is: 10102% 10103% MagickBooleanType MagickSetImageRenderingIntent(MagickWand *wand, 10104% const RenderingIntent rendering_intent) 10105% 10106% A description of each parameter follows: 10107% 10108% o wand: the magick wand. 10109% 10110% o rendering_intent: the image rendering intent: UndefinedIntent, 10111% SaturationIntent, PerceptualIntent, AbsoluteIntent, or RelativeIntent. 10112% 10113*/ 10114WandExport MagickBooleanType MagickSetImageRenderingIntent(MagickWand *wand, 10115 const RenderingIntent rendering_intent) 10116{ 10117 assert(wand != (MagickWand *) NULL); 10118 assert(wand->signature == WandSignature); 10119 if (IfMagickTrue(wand->debug)) 10120 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10121 if (wand->images == (Image *) NULL) 10122 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10123 wand->images->rendering_intent=rendering_intent; 10124 return(MagickTrue); 10125} 10126 10127/* 10128%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10129% % 10130% % 10131% % 10132% M a g i c k S e t I m a g e R e s o l u t i o n % 10133% % 10134% % 10135% % 10136%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10137% 10138% MagickSetImageResolution() sets the image resolution. 10139% 10140% The format of the MagickSetImageResolution method is: 10141% 10142% MagickBooleanType MagickSetImageResolution(MagickWand *wand, 10143% const double x_resolution,const double y_resolution) 10144% 10145% A description of each parameter follows: 10146% 10147% o wand: the magick wand. 10148% 10149% o x_resolution: the image x resolution. 10150% 10151% o y_resolution: the image y resolution. 10152% 10153*/ 10154WandExport MagickBooleanType MagickSetImageResolution(MagickWand *wand, 10155 const double x_resolution,const double y_resolution) 10156{ 10157 assert(wand != (MagickWand *) NULL); 10158 assert(wand->signature == WandSignature); 10159 if (IfMagickTrue(wand->debug)) 10160 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10161 if (wand->images == (Image *) NULL) 10162 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10163 wand->images->resolution.x=x_resolution; 10164 wand->images->resolution.y=y_resolution; 10165 return(MagickTrue); 10166} 10167 10168/* 10169%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10170% % 10171% % 10172% % 10173% M a g i c k S e t I m a g e S c e n e % 10174% % 10175% % 10176% % 10177%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10178% 10179% MagickSetImageScene() sets the image scene. 10180% 10181% The format of the MagickSetImageScene method is: 10182% 10183% MagickBooleanType MagickSetImageScene(MagickWand *wand, 10184% const size_t scene) 10185% 10186% A description of each parameter follows: 10187% 10188% o wand: the magick wand. 10189% 10190% o delay: the image scene number. 10191% 10192*/ 10193WandExport MagickBooleanType MagickSetImageScene(MagickWand *wand, 10194 const size_t scene) 10195{ 10196 assert(wand != (MagickWand *) NULL); 10197 assert(wand->signature == WandSignature); 10198 if (IfMagickTrue(wand->debug)) 10199 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10200 if (wand->images == (Image *) NULL) 10201 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10202 wand->images->scene=scene; 10203 return(MagickTrue); 10204} 10205 10206/* 10207%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10208% % 10209% % 10210% % 10211% 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 % 10212% % 10213% % 10214% % 10215%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10216% 10217% MagickSetImageTicksPerSecond() sets the image ticks-per-second. 10218% 10219% The format of the MagickSetImageTicksPerSecond method is: 10220% 10221% MagickBooleanType MagickSetImageTicksPerSecond(MagickWand *wand, 10222% const ssize_t ticks_per-second) 10223% 10224% A description of each parameter follows: 10225% 10226% o wand: the magick wand. 10227% 10228% o ticks_per_second: the units to use for the image delay. 10229% 10230*/ 10231WandExport MagickBooleanType MagickSetImageTicksPerSecond(MagickWand *wand, 10232 const ssize_t ticks_per_second) 10233{ 10234 assert(wand != (MagickWand *) NULL); 10235 assert(wand->signature == WandSignature); 10236 if (IfMagickTrue(wand->debug)) 10237 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10238 if (wand->images == (Image *) NULL) 10239 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10240 wand->images->ticks_per_second=ticks_per_second; 10241 return(MagickTrue); 10242} 10243 10244/* 10245%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10246% % 10247% % 10248% % 10249% M a g i c k S e t I m a g e T y p e % 10250% % 10251% % 10252% % 10253%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10254% 10255% MagickSetImageType() sets the image type. 10256% 10257% The format of the MagickSetImageType method is: 10258% 10259% MagickBooleanType MagickSetImageType(MagickWand *wand, 10260% const ImageType image_type) 10261% 10262% A description of each parameter follows: 10263% 10264% o wand: the magick wand. 10265% 10266% o image_type: the image type: UndefinedType, BilevelType, GrayscaleType, 10267% GrayscaleMatteType, PaletteType, PaletteMatteType, TrueColorType, 10268% TrueColorMatteType, ColorSeparationType, ColorSeparationMatteType, 10269% or OptimizeType. 10270% 10271*/ 10272WandExport MagickBooleanType MagickSetImageType(MagickWand *wand, 10273 const ImageType image_type) 10274{ 10275 assert(wand != (MagickWand *) NULL); 10276 assert(wand->signature == WandSignature); 10277 if (IfMagickTrue(wand->debug)) 10278 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10279 if (wand->images == (Image *) NULL) 10280 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10281 return(SetImageType(wand->images,image_type,wand->exception)); 10282} 10283 10284/* 10285%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10286% % 10287% % 10288% % 10289% M a g i c k S e t I m a g e U n i t s % 10290% % 10291% % 10292% % 10293%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10294% 10295% MagickSetImageUnits() sets the image units of resolution. 10296% 10297% The format of the MagickSetImageUnits method is: 10298% 10299% MagickBooleanType MagickSetImageUnits(MagickWand *wand, 10300% const ResolutionType units) 10301% 10302% A description of each parameter follows: 10303% 10304% o wand: the magick wand. 10305% 10306% o units: the image units of resolution : UndefinedResolution, 10307% PixelsPerInchResolution, or PixelsPerCentimeterResolution. 10308% 10309*/ 10310WandExport MagickBooleanType MagickSetImageUnits(MagickWand *wand, 10311 const ResolutionType units) 10312{ 10313 assert(wand != (MagickWand *) NULL); 10314 assert(wand->signature == WandSignature); 10315 if (IfMagickTrue(wand->debug)) 10316 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10317 if (wand->images == (Image *) NULL) 10318 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10319 wand->images->units=units; 10320 return(MagickTrue); 10321} 10322 10323/* 10324%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10325% % 10326% % 10327% % 10328% 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 % 10329% % 10330% % 10331% % 10332%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10333% 10334% MagickSetImageVirtualPixelMethod() sets the image virtual pixel method. 10335% 10336% The format of the MagickSetImageVirtualPixelMethod method is: 10337% 10338% VirtualPixelMethod MagickSetImageVirtualPixelMethod(MagickWand *wand, 10339% const VirtualPixelMethod method) 10340% 10341% A description of each parameter follows: 10342% 10343% o wand: the magick wand. 10344% 10345% o method: the image virtual pixel method : UndefinedVirtualPixelMethod, 10346% ConstantVirtualPixelMethod, EdgeVirtualPixelMethod, 10347% MirrorVirtualPixelMethod, or TileVirtualPixelMethod. 10348% 10349*/ 10350WandExport VirtualPixelMethod MagickSetImageVirtualPixelMethod(MagickWand *wand, 10351 const VirtualPixelMethod method) 10352{ 10353 assert(wand != (MagickWand *) NULL); 10354 assert(wand->signature == WandSignature); 10355 if (IfMagickTrue(wand->debug)) 10356 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10357 if (wand->images == (Image *) NULL) 10358 return(UndefinedVirtualPixelMethod); 10359 return(SetImageVirtualPixelMethod(wand->images,method,wand->exception)); 10360} 10361 10362/* 10363%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10364% % 10365% % 10366% % 10367% M a g i c k S e t I m a g e W h i t e P o i n t % 10368% % 10369% % 10370% % 10371%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10372% 10373% MagickSetImageWhitePoint() sets the image chromaticity white point. 10374% 10375% The format of the MagickSetImageWhitePoint method is: 10376% 10377% MagickBooleanType MagickSetImageWhitePoint(MagickWand *wand, 10378% const double x,const double y) 10379% 10380% A description of each parameter follows: 10381% 10382% o wand: the magick wand. 10383% 10384% o x: the white x-point. 10385% 10386% o y: the white y-point. 10387% 10388*/ 10389WandExport MagickBooleanType MagickSetImageWhitePoint(MagickWand *wand, 10390 const double x,const double y) 10391{ 10392 assert(wand != (MagickWand *) NULL); 10393 assert(wand->signature == WandSignature); 10394 if (IfMagickTrue(wand->debug)) 10395 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10396 if (wand->images == (Image *) NULL) 10397 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10398 wand->images->chromaticity.white_point.x=x; 10399 wand->images->chromaticity.white_point.y=y; 10400 return(MagickTrue); 10401} 10402 10403/* 10404%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10405% % 10406% % 10407% % 10408% M a g i c k S h a d e I m a g e C h a n n e l % 10409% % 10410% % 10411% % 10412%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10413% 10414% MagickShadeImage() shines a distant light on an image to create a 10415% three-dimensional effect. You control the positioning of the light with 10416% azimuth and elevation; azimuth is measured in degrees off the x axis 10417% and elevation is measured in pixels above the Z axis. 10418% 10419% The format of the MagickShadeImage method is: 10420% 10421% MagickBooleanType MagickShadeImage(MagickWand *wand, 10422% const MagickBooleanType gray,const double azimuth, 10423% const double elevation) 10424% 10425% A description of each parameter follows: 10426% 10427% o wand: the magick wand. 10428% 10429% o gray: A value other than zero shades the intensity of each pixel. 10430% 10431% o azimuth, elevation: Define the light source direction. 10432% 10433*/ 10434WandExport MagickBooleanType MagickShadeImage(MagickWand *wand, 10435 const MagickBooleanType gray,const double asimuth,const double elevation) 10436{ 10437 Image 10438 *shade_image; 10439 10440 assert(wand != (MagickWand *) NULL); 10441 assert(wand->signature == WandSignature); 10442 if (IfMagickTrue(wand->debug)) 10443 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10444 if (wand->images == (Image *) NULL) 10445 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10446 shade_image=ShadeImage(wand->images,gray,asimuth,elevation,wand->exception); 10447 if (shade_image == (Image *) NULL) 10448 return(MagickFalse); 10449 ReplaceImageInList(&wand->images,shade_image); 10450 return(MagickTrue); 10451} 10452 10453/* 10454%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10455% % 10456% % 10457% % 10458% M a g i c k S h a d o w I m a g e % 10459% % 10460% % 10461% % 10462%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10463% 10464% MagickShadowImage() simulates an image shadow. 10465% 10466% The format of the MagickShadowImage method is: 10467% 10468% MagickBooleanType MagickShadowImage(MagickWand *wand,const double alpha, 10469% const double sigma,const ssize_t x,const ssize_t y) 10470% 10471% A description of each parameter follows: 10472% 10473% o wand: the magick wand. 10474% 10475% o alpha: percentage transparency. 10476% 10477% o sigma: the standard deviation of the Gaussian, in pixels. 10478% 10479% o x: the shadow x-offset. 10480% 10481% o y: the shadow y-offset. 10482% 10483*/ 10484WandExport MagickBooleanType MagickShadowImage(MagickWand *wand, 10485 const double alpha,const double sigma,const ssize_t x,const ssize_t y) 10486{ 10487 Image 10488 *shadow_image; 10489 10490 assert(wand != (MagickWand *) NULL); 10491 assert(wand->signature == WandSignature); 10492 if (IfMagickTrue(wand->debug)) 10493 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10494 if (wand->images == (Image *) NULL) 10495 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10496 shadow_image=ShadowImage(wand->images,alpha,sigma,x,y,wand->exception); 10497 if (shadow_image == (Image *) NULL) 10498 return(MagickFalse); 10499 ReplaceImageInList(&wand->images,shadow_image); 10500 return(MagickTrue); 10501} 10502 10503/* 10504%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10505% % 10506% % 10507% % 10508% M a g i c k S h a r p e n I m a g e % 10509% % 10510% % 10511% % 10512%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10513% 10514% MagickSharpenImage() sharpens an image. We convolve the image with a 10515% Gaussian operator of the given radius and standard deviation (sigma). 10516% For reasonable results, the radius should be larger than sigma. Use a 10517% radius of 0 and MagickSharpenImage() selects a suitable radius for you. 10518% 10519% The format of the MagickSharpenImage method is: 10520% 10521% MagickBooleanType MagickSharpenImage(MagickWand *wand, 10522% const double radius,const double sigma) 10523% 10524% A description of each parameter follows: 10525% 10526% o wand: the magick wand. 10527% 10528% o radius: the radius of the Gaussian, in pixels, not counting the center 10529% pixel. 10530% 10531% o sigma: the standard deviation of the Gaussian, in pixels. 10532% 10533*/ 10534WandExport MagickBooleanType MagickSharpenImage(MagickWand *wand, 10535 const double radius,const double sigma) 10536{ 10537 Image 10538 *sharp_image; 10539 10540 assert(wand != (MagickWand *) NULL); 10541 assert(wand->signature == WandSignature); 10542 if (IfMagickTrue(wand->debug)) 10543 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10544 if (wand->images == (Image *) NULL) 10545 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10546 sharp_image=SharpenImage(wand->images,radius,sigma,wand->exception); 10547 if (sharp_image == (Image *) NULL) 10548 return(MagickFalse); 10549 ReplaceImageInList(&wand->images,sharp_image); 10550 return(MagickTrue); 10551} 10552 10553/* 10554%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10555% % 10556% % 10557% % 10558% M a g i c k S h a v e I m a g e % 10559% % 10560% % 10561% % 10562%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10563% 10564% MagickShaveImage() shaves pixels from the image edges. It allocates the 10565% memory necessary for the new Image structure and returns a pointer to the 10566% new image. 10567% 10568% The format of the MagickShaveImage method is: 10569% 10570% MagickBooleanType MagickShaveImage(MagickWand *wand, 10571% const size_t columns,const size_t rows) 10572% 10573% A description of each parameter follows: 10574% 10575% o wand: the magick wand. 10576% 10577% o columns: the number of columns in the scaled image. 10578% 10579% o rows: the number of rows in the scaled image. 10580% 10581% 10582*/ 10583WandExport MagickBooleanType MagickShaveImage(MagickWand *wand, 10584 const size_t columns,const size_t rows) 10585{ 10586 Image 10587 *shave_image; 10588 10589 RectangleInfo 10590 shave_info; 10591 10592 assert(wand != (MagickWand *) NULL); 10593 assert(wand->signature == WandSignature); 10594 if (IfMagickTrue(wand->debug)) 10595 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10596 if (wand->images == (Image *) NULL) 10597 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10598 shave_info.width=columns; 10599 shave_info.height=rows; 10600 shave_info.x=0; 10601 shave_info.y=0; 10602 shave_image=ShaveImage(wand->images,&shave_info,wand->exception); 10603 if (shave_image == (Image *) NULL) 10604 return(MagickFalse); 10605 ReplaceImageInList(&wand->images,shave_image); 10606 return(MagickTrue); 10607} 10608 10609/* 10610%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10611% % 10612% % 10613% % 10614% M a g i c k S h e a r I m a g e % 10615% % 10616% % 10617% % 10618%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10619% 10620% MagickShearImage() slides one edge of an image along the X or Y axis, 10621% creating a parallelogram. An X direction shear slides an edge along the X 10622% axis, while a Y direction shear slides an edge along the Y axis. The amount 10623% of the shear is controlled by a shear angle. For X direction shears, x_shear 10624% is measured relative to the Y axis, and similarly, for Y direction shears 10625% y_shear is measured relative to the X axis. Empty triangles left over from 10626% shearing the image are filled with the background color. 10627% 10628% The format of the MagickShearImage method is: 10629% 10630% MagickBooleanType MagickShearImage(MagickWand *wand, 10631% const PixelWand *background,const double x_shear,const double y_shear) 10632% 10633% A description of each parameter follows: 10634% 10635% o wand: the magick wand. 10636% 10637% o background: the background pixel wand. 10638% 10639% o x_shear: the number of degrees to shear the image. 10640% 10641% o y_shear: the number of degrees to shear the image. 10642% 10643*/ 10644WandExport MagickBooleanType MagickShearImage(MagickWand *wand, 10645 const PixelWand *background,const double x_shear,const double y_shear) 10646{ 10647 Image 10648 *shear_image; 10649 10650 assert(wand != (MagickWand *) NULL); 10651 assert(wand->signature == WandSignature); 10652 if (IfMagickTrue(wand->debug)) 10653 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10654 if (wand->images == (Image *) NULL) 10655 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10656 PixelGetQuantumPacket(background,&wand->images->background_color); 10657 shear_image=ShearImage(wand->images,x_shear,y_shear,wand->exception); 10658 if (shear_image == (Image *) NULL) 10659 return(MagickFalse); 10660 ReplaceImageInList(&wand->images,shear_image); 10661 return(MagickTrue); 10662} 10663 10664/* 10665%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10666% % 10667% % 10668% % 10669% 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 % 10670% % 10671% % 10672% % 10673%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10674% 10675% MagickSigmoidalContrastImage() adjusts the contrast of an image with a 10676% non-linear sigmoidal contrast algorithm. Increase the contrast of the 10677% image using a sigmoidal transfer function without saturating highlights or 10678% shadows. Contrast indicates how much to increase the contrast (0 is none; 10679% 3 is typical; 20 is pushing it); mid-point indicates where midtones fall in 10680% the resultant image (0 is white; 50% is middle-gray; 100% is black). Set 10681% sharpen to MagickTrue to increase the image contrast otherwise the contrast 10682% is reduced. 10683% 10684% The format of the MagickSigmoidalContrastImage method is: 10685% 10686% MagickBooleanType MagickSigmoidalContrastImage(MagickWand *wand, 10687% const MagickBooleanType sharpen,const double alpha,const double beta) 10688% 10689% A description of each parameter follows: 10690% 10691% o wand: the magick wand. 10692% 10693% o sharpen: Increase or decrease image contrast. 10694% 10695% o alpha: strength of the contrast, the larger the number the more 10696% 'threshold-like' it becomes. 10697% 10698% o beta: midpoint of the function as a color value 0 to QuantumRange. 10699% 10700*/ 10701WandExport MagickBooleanType MagickSigmoidalContrastImage( 10702 MagickWand *wand,const MagickBooleanType sharpen,const double alpha, 10703 const double beta) 10704{ 10705 MagickBooleanType 10706 status; 10707 10708 assert(wand != (MagickWand *) NULL); 10709 assert(wand->signature == WandSignature); 10710 if (IfMagickTrue(wand->debug)) 10711 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10712 if (wand->images == (Image *) NULL) 10713 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10714 status=SigmoidalContrastImage(wand->images,sharpen,alpha,beta, 10715 wand->exception); 10716 return(status); 10717} 10718 10719/* 10720%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10721% % 10722% % 10723% % 10724% M a g i c k S i m i l a r i t y I m a g e % 10725% % 10726% % 10727% % 10728%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10729% 10730% MagickSimilarityImage() compares the reference image of the image and 10731% returns the best match offset. In addition, it returns a similarity image 10732% such that an exact match location is completely white and if none of the 10733% pixels match, black, otherwise some gray level in-between. 10734% 10735% The format of the MagickSimilarityImage method is: 10736% 10737% MagickWand *MagickSimilarityImage(MagickWand *wand, 10738% const MagickWand *reference,const MetricType metric, 10739% const double similarity_threshold,RectangeInfo *offset, 10740% double *similarity) 10741% 10742% A description of each parameter follows: 10743% 10744% o wand: the magick wand. 10745% 10746% o reference: the reference wand. 10747% 10748% o metric: the metric. 10749% 10750% o similarity_threshold: minimum distortion for (sub)image match. 10751% 10752% o offset: the best match offset of the reference image within the image. 10753% 10754% o similarity: the computed similarity between the images. 10755% 10756*/ 10757WandExport MagickWand *MagickSimilarityImage(MagickWand *wand, 10758 const MagickWand *reference,const MetricType metric, 10759 const double similarity_threshold,RectangleInfo *offset,double *similarity) 10760{ 10761 Image 10762 *similarity_image; 10763 10764 assert(wand != (MagickWand *) NULL); 10765 assert(wand->signature == WandSignature); 10766 if (IfMagickTrue(wand->debug)) 10767 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10768 if ((wand->images == (Image *) NULL) || (reference->images == (Image *) NULL)) 10769 { 10770 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 10771 "ContainsNoImages","`%s'",wand->name); 10772 return((MagickWand *) NULL); 10773 } 10774 similarity_image=SimilarityImage(wand->images,reference->images,metric, 10775 similarity_threshold,offset,similarity,wand->exception); 10776 if (similarity_image == (Image *) NULL) 10777 return((MagickWand *) NULL); 10778 return(CloneMagickWandFromImages(wand,similarity_image)); 10779} 10780 10781/* 10782%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10783% % 10784% % 10785% % 10786% M a g i c k S k e t c h I m a g e % 10787% % 10788% % 10789% % 10790%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10791% 10792% MagickSketchImage() simulates a pencil sketch. We convolve the image with 10793% a Gaussian operator of the given radius and standard deviation (sigma). 10794% For reasonable results, radius should be larger than sigma. Use a 10795% radius of 0 and SketchImage() selects a suitable radius for you. 10796% Angle gives the angle of the blurring motion. 10797% 10798% The format of the MagickSketchImage method is: 10799% 10800% MagickBooleanType MagickSketchImage(MagickWand *wand, 10801% const double radius,const double sigma,const double angle) 10802% 10803% A description of each parameter follows: 10804% 10805% o wand: the magick wand. 10806% 10807% o radius: the radius of the Gaussian, in pixels, not counting 10808% the center pixel. 10809% 10810% o sigma: the standard deviation of the Gaussian, in pixels. 10811% 10812% o angle: apply the effect along this angle. 10813% 10814*/ 10815WandExport MagickBooleanType MagickSketchImage(MagickWand *wand, 10816 const double radius,const double sigma,const double angle) 10817{ 10818 Image 10819 *sketch_image; 10820 10821 assert(wand != (MagickWand *) NULL); 10822 assert(wand->signature == WandSignature); 10823 if (IfMagickTrue(wand->debug)) 10824 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10825 if (wand->images == (Image *) NULL) 10826 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10827 sketch_image=SketchImage(wand->images,radius,sigma,angle,wand->exception); 10828 if (sketch_image == (Image *) NULL) 10829 return(MagickFalse); 10830 ReplaceImageInList(&wand->images,sketch_image); 10831 return(MagickTrue); 10832} 10833 10834/* 10835%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10836% % 10837% % 10838% % 10839% M a g i c k S m u s h I m a g e s % 10840% % 10841% % 10842% % 10843%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10844% 10845% MagickSmushImages() takes all images from the current image pointer to the 10846% end of the image list and smushs them to each other top-to-bottom if the 10847% stack parameter is true, otherwise left-to-right. 10848% 10849% The format of the MagickSmushImages method is: 10850% 10851% MagickWand *MagickSmushImages(MagickWand *wand, 10852% const MagickBooleanType stack,const ssize_t offset) 10853% 10854% A description of each parameter follows: 10855% 10856% o wand: the magick wand. 10857% 10858% o stack: By default, images are stacked left-to-right. Set stack to 10859% MagickTrue to stack them top-to-bottom. 10860% 10861% o offset: minimum distance in pixels between images. 10862% 10863*/ 10864WandExport MagickWand *MagickSmushImages(MagickWand *wand, 10865 const MagickBooleanType stack,const ssize_t offset) 10866{ 10867 Image 10868 *smush_image; 10869 10870 assert(wand != (MagickWand *) NULL); 10871 assert(wand->signature == WandSignature); 10872 if (IfMagickTrue(wand->debug)) 10873 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10874 if (wand->images == (Image *) NULL) 10875 return((MagickWand *) NULL); 10876 smush_image=SmushImages(wand->images,stack,offset,wand->exception); 10877 if (smush_image == (Image *) NULL) 10878 return((MagickWand *) NULL); 10879 return(CloneMagickWandFromImages(wand,smush_image)); 10880} 10881 10882/* 10883%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10884% % 10885% % 10886% % 10887% M a g i c k S o l a r i z e I m a g e % 10888% % 10889% % 10890% % 10891%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10892% 10893% MagickSolarizeImage() applies a special effect to the image, similar to the 10894% effect achieved in a photo darkroom by selectively exposing areas of photo 10895% sensitive paper to light. Threshold ranges from 0 to QuantumRange and is a 10896% measure of the extent of the solarization. 10897% 10898% The format of the MagickSolarizeImage method is: 10899% 10900% MagickBooleanType MagickSolarizeImage(MagickWand *wand, 10901% const double threshold) 10902% 10903% A description of each parameter follows: 10904% 10905% o wand: the magick wand. 10906% 10907% o threshold: Define the extent of the solarization. 10908% 10909*/ 10910WandExport MagickBooleanType MagickSolarizeImage(MagickWand *wand, 10911 const double threshold) 10912{ 10913 MagickBooleanType 10914 status; 10915 10916 assert(wand != (MagickWand *) NULL); 10917 assert(wand->signature == WandSignature); 10918 if (IfMagickTrue(wand->debug)) 10919 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10920 if (wand->images == (Image *) NULL) 10921 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10922 status=SolarizeImage(wand->images,threshold,wand->exception); 10923 return(status); 10924} 10925 10926/* 10927%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10928% % 10929% % 10930% % 10931% M a g i c k S p a r s e C o l o r I m a g e % 10932% % 10933% % 10934% % 10935%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10936% 10937% MagickSparseColorImage(), given a set of coordinates, interpolates the 10938% colors found at those coordinates, across the whole image, using various 10939% methods. 10940% 10941% The format of the MagickSparseColorImage method is: 10942% 10943% MagickBooleanType MagickSparseColorImage(MagickWand *wand, 10944% const SparseColorMethod method,const size_t number_arguments, 10945% const double *arguments) 10946% 10947% A description of each parameter follows: 10948% 10949% o image: the image to be sparseed. 10950% 10951% o method: the method of image sparseion. 10952% 10953% ArcSparseColorion will always ignore source image offset, and always 10954% 'bestfit' the destination image with the top left corner offset 10955% relative to the polar mapping center. 10956% 10957% Bilinear has no simple inverse mapping so will not allow 'bestfit' 10958% style of image sparseion. 10959% 10960% Affine, Perspective, and Bilinear, will do least squares fitting of 10961% the distrotion when more than the minimum number of control point 10962% pairs are provided. 10963% 10964% Perspective, and Bilinear, will fall back to a Affine sparseion when 10965% less than 4 control point pairs are provided. While Affine sparseions 10966% will let you use any number of control point pairs, that is Zero pairs 10967% is a No-Op (viewport only) distrotion, one pair is a translation and 10968% two pairs of control points will do a scale-rotate-translate, without 10969% any shearing. 10970% 10971% o number_arguments: the number of arguments given for this sparseion 10972% method. 10973% 10974% o arguments: the arguments for this sparseion method. 10975% 10976*/ 10977WandExport MagickBooleanType MagickSparseColorImage(MagickWand *wand, 10978 const SparseColorMethod method,const size_t number_arguments, 10979 const double *arguments) 10980{ 10981 Image 10982 *sparse_image; 10983 10984 assert(wand != (MagickWand *) NULL); 10985 assert(wand->signature == WandSignature); 10986 if (IfMagickTrue(wand->debug)) 10987 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 10988 if (wand->images == (Image *) NULL) 10989 ThrowWandException(WandError,"ContainsNoImages",wand->name); 10990 sparse_image=SparseColorImage(wand->images,method,number_arguments,arguments, 10991 wand->exception); 10992 if (sparse_image == (Image *) NULL) 10993 return(MagickFalse); 10994 ReplaceImageInList(&wand->images,sparse_image); 10995 return(MagickTrue); 10996} 10997 10998/* 10999%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11000% % 11001% % 11002% % 11003% M a g i c k S p l i c e I m a g e % 11004% % 11005% % 11006% % 11007%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11008% 11009% MagickSpliceImage() splices a solid color into the image. 11010% 11011% The format of the MagickSpliceImage method is: 11012% 11013% MagickBooleanType MagickSpliceImage(MagickWand *wand, 11014% const size_t width,const size_t height,const ssize_t x, 11015% const ssize_t y) 11016% 11017% A description of each parameter follows: 11018% 11019% o wand: the magick wand. 11020% 11021% o width: the region width. 11022% 11023% o height: the region height. 11024% 11025% o x: the region x offset. 11026% 11027% o y: the region y offset. 11028% 11029*/ 11030WandExport MagickBooleanType MagickSpliceImage(MagickWand *wand, 11031 const size_t width,const size_t height,const ssize_t x, 11032 const ssize_t y) 11033{ 11034 Image 11035 *splice_image; 11036 11037 RectangleInfo 11038 splice; 11039 11040 assert(wand != (MagickWand *) NULL); 11041 assert(wand->signature == WandSignature); 11042 if (IfMagickTrue(wand->debug)) 11043 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11044 if (wand->images == (Image *) NULL) 11045 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11046 splice.width=width; 11047 splice.height=height; 11048 splice.x=x; 11049 splice.y=y; 11050 splice_image=SpliceImage(wand->images,&splice,wand->exception); 11051 if (splice_image == (Image *) NULL) 11052 return(MagickFalse); 11053 ReplaceImageInList(&wand->images,splice_image); 11054 return(MagickTrue); 11055} 11056 11057/* 11058%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11059% % 11060% % 11061% % 11062% M a g i c k S p r e a d I m a g e % 11063% % 11064% % 11065% % 11066%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11067% 11068% MagickSpreadImage() is a special effects method that randomly displaces each 11069% pixel in a block defined by the radius parameter. 11070% 11071% The format of the MagickSpreadImage method is: 11072% 11073% MagickBooleanType MagickSpreadImage(MagickWand *wand,const double radius, 11074% const PixelInterpolateMethod method) 11075% 11076% A description of each parameter follows: 11077% 11078% o wand: the magick wand. 11079% 11080% o radius: Choose a random pixel in a neighborhood of this extent. 11081% 11082% o method: the pixel interpolation method. 11083% 11084*/ 11085WandExport MagickBooleanType MagickSpreadImage(MagickWand *wand, 11086 const double radius,const PixelInterpolateMethod method) 11087{ 11088 Image 11089 *spread_image; 11090 11091 assert(wand != (MagickWand *) NULL); 11092 assert(wand->signature == WandSignature); 11093 if (IfMagickTrue(wand->debug)) 11094 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11095 if (wand->images == (Image *) NULL) 11096 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11097 spread_image=SpreadImage(wand->images,radius,method,wand->exception); 11098 if (spread_image == (Image *) NULL) 11099 return(MagickFalse); 11100 ReplaceImageInList(&wand->images,spread_image); 11101 return(MagickTrue); 11102} 11103 11104/* 11105%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11106% % 11107% % 11108% % 11109% M a g i c k S t a t i s t i c I m a g e % 11110% % 11111% % 11112% % 11113%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11114% 11115% MagickStatisticImage() replace each pixel with corresponding statistic from 11116% the neighborhood of the specified width and height. 11117% 11118% The format of the MagickStatisticImage method is: 11119% 11120% MagickBooleanType MagickStatisticImage(MagickWand *wand, 11121% const StatisticType type,const double width,const size_t height) 11122% 11123% A description of each parameter follows: 11124% 11125% o wand: the magick wand. 11126% 11127% o type: the statistic type (e.g. median, mode, etc.). 11128% 11129% o width: the width of the pixel neighborhood. 11130% 11131% o height: the height of the pixel neighborhood. 11132% 11133*/ 11134WandExport MagickBooleanType MagickStatisticImage(MagickWand *wand, 11135 const StatisticType type,const size_t width,const size_t height) 11136{ 11137 Image 11138 *statistic_image; 11139 11140 assert(wand != (MagickWand *) NULL); 11141 assert(wand->signature == WandSignature); 11142 if (IfMagickTrue(wand->debug)) 11143 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11144 if (wand->images == (Image *) NULL) 11145 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11146 statistic_image=StatisticImage(wand->images,type,width,height, 11147 wand->exception); 11148 if (statistic_image == (Image *) NULL) 11149 return(MagickFalse); 11150 ReplaceImageInList(&wand->images,statistic_image); 11151 return(MagickTrue); 11152} 11153 11154/* 11155%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11156% % 11157% % 11158% % 11159% M a g i c k S t e g a n o I m a g e % 11160% % 11161% % 11162% % 11163%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11164% 11165% MagickSteganoImage() hides a digital watermark within the image. 11166% Recover the hidden watermark later to prove that the authenticity of 11167% an image. Offset defines the start position within the image to hide 11168% the watermark. 11169% 11170% The format of the MagickSteganoImage method is: 11171% 11172% MagickWand *MagickSteganoImage(MagickWand *wand, 11173% const MagickWand *watermark_wand,const ssize_t offset) 11174% 11175% A description of each parameter follows: 11176% 11177% o wand: the magick wand. 11178% 11179% o watermark_wand: the watermark wand. 11180% 11181% o offset: Start hiding at this offset into the image. 11182% 11183*/ 11184WandExport MagickWand *MagickSteganoImage(MagickWand *wand, 11185 const MagickWand *watermark_wand,const ssize_t offset) 11186{ 11187 Image 11188 *stegano_image; 11189 11190 assert(wand != (MagickWand *) NULL); 11191 assert(wand->signature == WandSignature); 11192 if (IfMagickTrue(wand->debug)) 11193 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11194 if ((wand->images == (Image *) NULL) || 11195 (watermark_wand->images == (Image *) NULL)) 11196 { 11197 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 11198 "ContainsNoImages","`%s'",wand->name); 11199 return((MagickWand *) NULL); 11200 } 11201 wand->images->offset=offset; 11202 stegano_image=SteganoImage(wand->images,watermark_wand->images, 11203 wand->exception); 11204 if (stegano_image == (Image *) NULL) 11205 return((MagickWand *) NULL); 11206 return(CloneMagickWandFromImages(wand,stegano_image)); 11207} 11208 11209/* 11210%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11211% % 11212% % 11213% % 11214% M a g i c k S t e r e o I m a g e % 11215% % 11216% % 11217% % 11218%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11219% 11220% MagickStereoImage() composites two images and produces a single image that 11221% is the composite of a left and right image of a stereo pair 11222% 11223% The format of the MagickStereoImage method is: 11224% 11225% MagickWand *MagickStereoImage(MagickWand *wand, 11226% const MagickWand *offset_wand) 11227% 11228% A description of each parameter follows: 11229% 11230% o wand: the magick wand. 11231% 11232% o offset_wand: Another image wand. 11233% 11234*/ 11235WandExport MagickWand *MagickStereoImage(MagickWand *wand, 11236 const MagickWand *offset_wand) 11237{ 11238 Image 11239 *stereo_image; 11240 11241 assert(wand != (MagickWand *) NULL); 11242 assert(wand->signature == WandSignature); 11243 if (IfMagickTrue(wand->debug)) 11244 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11245 if ((wand->images == (Image *) NULL) || 11246 (offset_wand->images == (Image *) NULL)) 11247 { 11248 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 11249 "ContainsNoImages","`%s'",wand->name); 11250 return((MagickWand *) NULL); 11251 } 11252 stereo_image=StereoImage(wand->images,offset_wand->images,wand->exception); 11253 if (stereo_image == (Image *) NULL) 11254 return((MagickWand *) NULL); 11255 return(CloneMagickWandFromImages(wand,stereo_image)); 11256} 11257 11258/* 11259%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11260% % 11261% % 11262% % 11263% M a g i c k S t r i p I m a g e % 11264% % 11265% % 11266% % 11267%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11268% 11269% MagickStripImage() strips an image of all profiles and comments. 11270% 11271% The format of the MagickStripImage method is: 11272% 11273% MagickBooleanType MagickStripImage(MagickWand *wand) 11274% 11275% A description of each parameter follows: 11276% 11277% o wand: the magick wand. 11278% 11279*/ 11280WandExport MagickBooleanType MagickStripImage(MagickWand *wand) 11281{ 11282 assert(wand != (MagickWand *) NULL); 11283 assert(wand->signature == WandSignature); 11284 if (IfMagickTrue(wand->debug)) 11285 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11286 if (wand->images == (Image *) NULL) 11287 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11288 return(StripImage(wand->images,wand->exception)); 11289} 11290 11291/* 11292%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11293% % 11294% % 11295% % 11296% M a g i c k S w i r l I m a g e % 11297% % 11298% % 11299% % 11300%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11301% 11302% MagickSwirlImage() swirls the pixels about the center of the image, where 11303% degrees indicates the sweep of the arc through which each pixel is moved. 11304% You get a more dramatic effect as the degrees move from 1 to 360. 11305% 11306% The format of the MagickSwirlImage method is: 11307% 11308% MagickBooleanType MagickSwirlImage(MagickWand *wand,const double degrees, 11309% const PixelInterpolateMethod method) 11310% 11311% A description of each parameter follows: 11312% 11313% o wand: the magick wand. 11314% 11315% o degrees: Define the tightness of the swirling effect. 11316% 11317% o method: the pixel interpolation method. 11318% 11319*/ 11320WandExport MagickBooleanType MagickSwirlImage(MagickWand *wand, 11321 const double degrees,const PixelInterpolateMethod method) 11322{ 11323 Image 11324 *swirl_image; 11325 11326 assert(wand != (MagickWand *) NULL); 11327 assert(wand->signature == WandSignature); 11328 if (IfMagickTrue(wand->debug)) 11329 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11330 if (wand->images == (Image *) NULL) 11331 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11332 swirl_image=SwirlImage(wand->images,degrees,method,wand->exception); 11333 if (swirl_image == (Image *) NULL) 11334 return(MagickFalse); 11335 ReplaceImageInList(&wand->images,swirl_image); 11336 return(MagickTrue); 11337} 11338 11339/* 11340%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11341% % 11342% % 11343% % 11344% M a g i c k T e x t u r e I m a g e % 11345% % 11346% % 11347% % 11348%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11349% 11350% MagickTextureImage() repeatedly tiles the texture image across and down the 11351% image canvas. 11352% 11353% The format of the MagickTextureImage method is: 11354% 11355% MagickWand *MagickTextureImage(MagickWand *wand, 11356% const MagickWand *texture_wand) 11357% 11358% A description of each parameter follows: 11359% 11360% o wand: the magick wand. 11361% 11362% o texture_wand: the texture wand 11363% 11364*/ 11365WandExport MagickWand *MagickTextureImage(MagickWand *wand, 11366 const MagickWand *texture_wand) 11367{ 11368 Image 11369 *texture_image; 11370 11371 MagickBooleanType 11372 status; 11373 11374 assert(wand != (MagickWand *) NULL); 11375 assert(wand->signature == WandSignature); 11376 if (IfMagickTrue(wand->debug)) 11377 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11378 if ((wand->images == (Image *) NULL) || 11379 (texture_wand->images == (Image *) NULL)) 11380 { 11381 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError, 11382 "ContainsNoImages","`%s'",wand->name); 11383 return((MagickWand *) NULL); 11384 } 11385 texture_image=CloneImage(wand->images,0,0,MagickTrue,wand->exception); 11386 if (texture_image == (Image *) NULL) 11387 return((MagickWand *) NULL); 11388 status=TextureImage(texture_image,texture_wand->images,wand->exception); 11389 if (IfMagickFalse(status)) 11390 { 11391 texture_image=DestroyImage(texture_image); 11392 return((MagickWand *) NULL); 11393 } 11394 return(CloneMagickWandFromImages(wand,texture_image)); 11395} 11396 11397/* 11398%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11399% % 11400% % 11401% % 11402% M a g i c k T h r e s h o l d I m a g e % 11403% % 11404% % 11405% % 11406%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11407% 11408% MagickThresholdImage() changes the value of individual pixels based on 11409% the intensity of each pixel compared to threshold. The result is a 11410% high-contrast, two color image. 11411% 11412% The format of the MagickThresholdImage method is: 11413% 11414% MagickBooleanType MagickThresholdImage(MagickWand *wand, 11415% const double threshold) 11416% MagickBooleanType MagickThresholdImageChannel(MagickWand *wand, 11417% const ChannelType channel,const double threshold) 11418% 11419% A description of each parameter follows: 11420% 11421% o wand: the magick wand. 11422% 11423% o channel: the image channel(s). 11424% 11425% o threshold: Define the threshold value. 11426% 11427*/ 11428WandExport MagickBooleanType MagickThresholdImage(MagickWand *wand, 11429 const double threshold) 11430{ 11431 MagickBooleanType 11432 status; 11433 11434 status=MagickThresholdImageChannel(wand,DefaultChannels,threshold); 11435 return(status); 11436} 11437 11438WandExport MagickBooleanType MagickThresholdImageChannel(MagickWand *wand, 11439 const ChannelType channel,const double threshold) 11440{ 11441 MagickBooleanType 11442 status; 11443 11444 assert(wand != (MagickWand *) NULL); 11445 assert(wand->signature == WandSignature); 11446 if (IfMagickTrue(wand->debug)) 11447 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11448 if (wand->images == (Image *) NULL) 11449 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11450 status=BilevelImage(wand->images,threshold,wand->exception); 11451 return(status); 11452} 11453 11454/* 11455%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11456% % 11457% % 11458% % 11459% M a g i c k T h u m b n a i l I m a g e % 11460% % 11461% % 11462% % 11463%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11464% 11465% MagickThumbnailImage() changes the size of an image to the given dimensions 11466% and removes any associated profiles. The goal is to produce small low cost 11467% thumbnail images suited for display on the Web. 11468% 11469% The format of the MagickThumbnailImage method is: 11470% 11471% MagickBooleanType MagickThumbnailImage(MagickWand *wand, 11472% const size_t columns,const size_t rows) 11473% 11474% A description of each parameter follows: 11475% 11476% o wand: the magick wand. 11477% 11478% o columns: the number of columns in the scaled image. 11479% 11480% o rows: the number of rows in the scaled image. 11481% 11482*/ 11483WandExport MagickBooleanType MagickThumbnailImage(MagickWand *wand, 11484 const size_t columns,const size_t rows) 11485{ 11486 Image 11487 *thumbnail_image; 11488 11489 assert(wand != (MagickWand *) NULL); 11490 assert(wand->signature == WandSignature); 11491 if (IfMagickTrue(wand->debug)) 11492 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11493 if (wand->images == (Image *) NULL) 11494 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11495 thumbnail_image=ThumbnailImage(wand->images,columns,rows,wand->exception); 11496 if (thumbnail_image == (Image *) NULL) 11497 return(MagickFalse); 11498 ReplaceImageInList(&wand->images,thumbnail_image); 11499 return(MagickTrue); 11500} 11501 11502/* 11503%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11504% % 11505% % 11506% % 11507% M a g i c k T i n t I m a g e % 11508% % 11509% % 11510% % 11511%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11512% 11513% MagickTintImage() applies a color vector to each pixel in the image. The 11514% length of the vector is 0 for black and white and at its maximum for the 11515% midtones. The vector weighting function is 11516% f(x)=(1-(4.0*((x-0.5)*(x-0.5)))). 11517% 11518% The format of the MagickTintImage method is: 11519% 11520% MagickBooleanType MagickTintImage(MagickWand *wand, 11521% const PixelWand *tint,const PixelWand *blend) 11522% 11523% A description of each parameter follows: 11524% 11525% o wand: the magick wand. 11526% 11527% o tint: the tint pixel wand. 11528% 11529% o alpha: the alpha pixel wand. 11530% 11531*/ 11532WandExport MagickBooleanType MagickTintImage(MagickWand *wand, 11533 const PixelWand *tint,const PixelWand *blend) 11534{ 11535 char 11536 percent_blend[MaxTextExtent]; 11537 11538 Image 11539 *tint_image; 11540 11541 PixelInfo 11542 target; 11543 11544 assert(wand != (MagickWand *) NULL); 11545 assert(wand->signature == WandSignature); 11546 if (IfMagickTrue(wand->debug)) 11547 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11548 if (wand->images == (Image *) NULL) 11549 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11550 if (wand->images->colorspace != CMYKColorspace) 11551 (void) FormatLocaleString(percent_blend,MaxTextExtent, 11552 "%g,%g,%g,%g",(double) (100.0*QuantumScale* 11553 PixelGetRedQuantum(blend)),(double) (100.0*QuantumScale* 11554 PixelGetGreenQuantum(blend)),(double) (100.0*QuantumScale* 11555 PixelGetBlueQuantum(blend)),(double) (100.0*QuantumScale* 11556 PixelGetAlphaQuantum(blend))); 11557 else 11558 (void) FormatLocaleString(percent_blend,MaxTextExtent, 11559 "%g,%g,%g,%g,%g",(double) (100.0*QuantumScale* 11560 PixelGetCyanQuantum(blend)),(double) (100.0*QuantumScale* 11561 PixelGetMagentaQuantum(blend)),(double) (100.0*QuantumScale* 11562 PixelGetYellowQuantum(blend)),(double) (100.0*QuantumScale* 11563 PixelGetBlackQuantum(blend)),(double) (100.0*QuantumScale* 11564 PixelGetAlphaQuantum(blend))); 11565 target=PixelGetPixel(tint); 11566 tint_image=TintImage(wand->images,percent_blend,&target,wand->exception); 11567 if (tint_image == (Image *) NULL) 11568 return(MagickFalse); 11569 ReplaceImageInList(&wand->images,tint_image); 11570 return(MagickTrue); 11571} 11572 11573/* 11574%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11575% % 11576% % 11577% % 11578% M a g i c k T r a n s f o r m I m a g e % 11579% % 11580% % 11581% % 11582%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11583% 11584% MagickTransformImage() is a convenience method that behaves like 11585% MagickResizeImage() or MagickCropImage() but accepts scaling and/or cropping 11586% information as a region geometry specification. If the operation fails, 11587% a NULL image handle is returned. 11588% 11589% The format of the MagickTransformImage method is: 11590% 11591% MagickWand *MagickTransformImage(MagickWand *wand,const char *crop, 11592% const char *geometry) 11593% 11594% A description of each parameter follows: 11595% 11596% o wand: the magick wand. 11597% 11598% o crop: A crop geometry string. This geometry defines a subregion of the 11599% image to crop. 11600% 11601% o geometry: An image geometry string. This geometry defines the final 11602% size of the image. 11603% 11604*/ 11605WandExport MagickWand *MagickTransformImage(MagickWand *wand, 11606 const char *crop,const char *geometry) 11607{ 11608 Image 11609 *transform_image; 11610 11611 MagickBooleanType 11612 status; 11613 11614 assert(wand != (MagickWand *) NULL); 11615 assert(wand->signature == WandSignature); 11616 if (IfMagickTrue(wand->debug)) 11617 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11618 if (wand->images == (Image *) NULL) 11619 return((MagickWand *) NULL); 11620 transform_image=CloneImage(wand->images,0,0,MagickTrue,wand->exception); 11621 if (transform_image == (Image *) NULL) 11622 return((MagickWand *) NULL); 11623 status=TransformImage(&transform_image,crop,geometry,wand->exception); 11624 if (IfMagickFalse(status)) 11625 { 11626 transform_image=DestroyImage(transform_image); 11627 return((MagickWand *) NULL); 11628 } 11629 return(CloneMagickWandFromImages(wand,transform_image)); 11630} 11631 11632/* 11633%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11634% % 11635% % 11636% % 11637% 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 % 11638% % 11639% % 11640% % 11641%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11642% 11643% MagickTransformImageColorspace() transform the image colorspace, setting 11644% the images colorspace while transforming the images data to that 11645% colorspace. 11646% 11647% The format of the MagickTransformImageColorspace method is: 11648% 11649% MagickBooleanType MagickTransformImageColorspace(MagickWand *wand, 11650% const ColorspaceType colorspace) 11651% 11652% A description of each parameter follows: 11653% 11654% o wand: the magick wand. 11655% 11656% o colorspace: the image colorspace: UndefinedColorspace, 11657% sRGBColorspace, RGBColorspace, GRAYColorspace, 11658% OHTAColorspace, XYZColorspace, YCbCrColorspace, 11659% YCCColorspace, YIQColorspace, YPbPrColorspace, 11660% YPbPrColorspace, YUVColorspace, CMYKColorspace, 11661% HSLColorspace, HWBColorspace. 11662% 11663*/ 11664WandExport MagickBooleanType MagickTransformImageColorspace(MagickWand *wand, 11665 const ColorspaceType colorspace) 11666{ 11667 assert(wand != (MagickWand *) NULL); 11668 assert(wand->signature == WandSignature); 11669 if (IfMagickTrue(wand->debug)) 11670 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11671 if (wand->images == (Image *) NULL) 11672 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11673 return(TransformImageColorspace(wand->images,colorspace,wand->exception)); 11674} 11675 11676/* 11677%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11678% % 11679% % 11680% % 11681% 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 % 11682% % 11683% % 11684% % 11685%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11686% 11687% MagickTransparentPaintImage() changes any pixel that matches color with the 11688% color defined by fill. 11689% 11690% The format of the MagickTransparentPaintImage method is: 11691% 11692% MagickBooleanType MagickTransparentPaintImage(MagickWand *wand, 11693% const PixelWand *target,const double alpha,const double fuzz, 11694% const MagickBooleanType invert) 11695% 11696% A description of each parameter follows: 11697% 11698% o wand: the magick wand. 11699% 11700% o target: Change this target color to specified alpha value within 11701% the image. 11702% 11703% o alpha: the level of transparency: 1.0 is fully opaque and 0.0 is fully 11704% transparent. 11705% 11706% o fuzz: By default target must match a particular pixel color 11707% exactly. However, in many cases two colors may differ by a small amount. 11708% The fuzz member of image defines how much tolerance is acceptable to 11709% consider two colors as the same. For example, set fuzz to 10 and the 11710% color red at intensities of 100 and 102 respectively are now interpreted 11711% as the same color for the purposes of the floodfill. 11712% 11713% o invert: paint any pixel that does not match the target color. 11714% 11715*/ 11716WandExport MagickBooleanType MagickTransparentPaintImage(MagickWand *wand, 11717 const PixelWand *target,const double alpha,const double fuzz, 11718 const MagickBooleanType invert) 11719{ 11720 MagickBooleanType 11721 status; 11722 11723 PixelInfo 11724 target_pixel; 11725 11726 assert(wand != (MagickWand *) NULL); 11727 assert(wand->signature == WandSignature); 11728 if (IfMagickTrue(wand->debug)) 11729 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11730 if (wand->images == (Image *) NULL) 11731 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11732 PixelGetMagickColor(target,&target_pixel); 11733 wand->images->fuzz=fuzz; 11734 status=TransparentPaintImage(wand->images,&target_pixel,ClampToQuantum( 11735 QuantumRange*alpha),invert,wand->exception); 11736 return(status); 11737} 11738 11739/* 11740%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11741% % 11742% % 11743% % 11744% M a g i c k T r a n s p o s e I m a g e % 11745% % 11746% % 11747% % 11748%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11749% 11750% MagickTransposeImage() creates a vertical mirror image by reflecting the 11751% pixels around the central x-axis while rotating them 90-degrees. 11752% 11753% The format of the MagickTransposeImage method is: 11754% 11755% MagickBooleanType MagickTransposeImage(MagickWand *wand) 11756% 11757% A description of each parameter follows: 11758% 11759% o wand: the magick wand. 11760% 11761*/ 11762WandExport MagickBooleanType MagickTransposeImage(MagickWand *wand) 11763{ 11764 Image 11765 *transpose_image; 11766 11767 assert(wand != (MagickWand *) NULL); 11768 assert(wand->signature == WandSignature); 11769 if (IfMagickTrue(wand->debug)) 11770 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11771 if (wand->images == (Image *) NULL) 11772 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11773 transpose_image=TransposeImage(wand->images,wand->exception); 11774 if (transpose_image == (Image *) NULL) 11775 return(MagickFalse); 11776 ReplaceImageInList(&wand->images,transpose_image); 11777 return(MagickTrue); 11778} 11779 11780/* 11781%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11782% % 11783% % 11784% % 11785% M a g i c k T r a n s v e r s e I m a g e % 11786% % 11787% % 11788% % 11789%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11790% 11791% MagickTransverseImage() creates a horizontal mirror image by reflecting the 11792% pixels around the central y-axis while rotating them 270-degrees. 11793% 11794% The format of the MagickTransverseImage method is: 11795% 11796% MagickBooleanType MagickTransverseImage(MagickWand *wand) 11797% 11798% A description of each parameter follows: 11799% 11800% o wand: the magick wand. 11801% 11802*/ 11803WandExport MagickBooleanType MagickTransverseImage(MagickWand *wand) 11804{ 11805 Image 11806 *transverse_image; 11807 11808 assert(wand != (MagickWand *) NULL); 11809 assert(wand->signature == WandSignature); 11810 if (IfMagickTrue(wand->debug)) 11811 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11812 if (wand->images == (Image *) NULL) 11813 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11814 transverse_image=TransverseImage(wand->images,wand->exception); 11815 if (transverse_image == (Image *) NULL) 11816 return(MagickFalse); 11817 ReplaceImageInList(&wand->images,transverse_image); 11818 return(MagickTrue); 11819} 11820 11821/* 11822%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11823% % 11824% % 11825% % 11826% M a g i c k T r i m I m a g e % 11827% % 11828% % 11829% % 11830%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11831% 11832% MagickTrimImage() remove edges that are the background color from the image. 11833% 11834% The format of the MagickTrimImage method is: 11835% 11836% MagickBooleanType MagickTrimImage(MagickWand *wand,const double fuzz) 11837% 11838% A description of each parameter follows: 11839% 11840% o wand: the magick wand. 11841% 11842% o fuzz: By default target must match a particular pixel color 11843% exactly. However, in many cases two colors may differ by a small amount. 11844% The fuzz member of image defines how much tolerance is acceptable to 11845% consider two colors as the same. For example, set fuzz to 10 and the 11846% color red at intensities of 100 and 102 respectively are now interpreted 11847% as the same color for the purposes of the floodfill. 11848% 11849*/ 11850WandExport MagickBooleanType MagickTrimImage(MagickWand *wand,const double fuzz) 11851{ 11852 Image 11853 *trim_image; 11854 11855 assert(wand != (MagickWand *) NULL); 11856 assert(wand->signature == WandSignature); 11857 if (IfMagickTrue(wand->debug)) 11858 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11859 if (wand->images == (Image *) NULL) 11860 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11861 wand->images->fuzz=fuzz; 11862 trim_image=TrimImage(wand->images,wand->exception); 11863 if (trim_image == (Image *) NULL) 11864 return(MagickFalse); 11865 ReplaceImageInList(&wand->images,trim_image); 11866 return(MagickTrue); 11867} 11868 11869/* 11870%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11871% % 11872% % 11873% % 11874% M a g i c k U n i q u e I m a g e C o l o r s % 11875% % 11876% % 11877% % 11878%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11879% 11880% MagickUniqueImageColors() discards all but one of any pixel color. 11881% 11882% The format of the MagickUniqueImageColors method is: 11883% 11884% MagickBooleanType MagickUniqueImageColors(MagickWand *wand) 11885% 11886% A description of each parameter follows: 11887% 11888% o wand: the magick wand. 11889% 11890*/ 11891WandExport MagickBooleanType MagickUniqueImageColors(MagickWand *wand) 11892{ 11893 Image 11894 *unique_image; 11895 11896 assert(wand != (MagickWand *) NULL); 11897 assert(wand->signature == WandSignature); 11898 if (IfMagickTrue(wand->debug)) 11899 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11900 if (wand->images == (Image *) NULL) 11901 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11902 unique_image=UniqueImageColors(wand->images,wand->exception); 11903 if (unique_image == (Image *) NULL) 11904 return(MagickFalse); 11905 ReplaceImageInList(&wand->images,unique_image); 11906 return(MagickTrue); 11907} 11908 11909/* 11910%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11911% % 11912% % 11913% % 11914% M a g i c k U n s h a r p M a s k I m a g e % 11915% % 11916% % 11917% % 11918%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11919% 11920% MagickUnsharpMaskImage() sharpens an image. We convolve the image with a 11921% Gaussian operator of the given radius and standard deviation (sigma). 11922% For reasonable results, radius should be larger than sigma. Use a radius 11923% of 0 and UnsharpMaskImage() selects a suitable radius for you. 11924% 11925% The format of the MagickUnsharpMaskImage method is: 11926% 11927% MagickBooleanType MagickUnsharpMaskImage(MagickWand *wand, 11928% const double radius,const double sigma,const double gain) 11929% 11930% A description of each parameter follows: 11931% 11932% o wand: the magick wand. 11933% 11934% o radius: the radius of the Gaussian, in pixels, not counting the center 11935% pixel. 11936% 11937% o sigma: the standard deviation of the Gaussian, in pixels. 11938% 11939% o gain: the percentage of the difference between the original and the 11940% blur image that is added back into the original. 11941% 11942*/ 11943WandExport MagickBooleanType MagickUnsharpMaskImage(MagickWand *wand, 11944 const double radius,const double sigma,const double gain) 11945{ 11946 Image 11947 *unsharp_image; 11948 11949 assert(wand != (MagickWand *) NULL); 11950 assert(wand->signature == WandSignature); 11951 if (IfMagickTrue(wand->debug)) 11952 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 11953 if (wand->images == (Image *) NULL) 11954 ThrowWandException(WandError,"ContainsNoImages",wand->name); 11955 unsharp_image=UnsharpMaskImage(wand->images,radius,sigma,gain, 11956 wand->exception); 11957 if (unsharp_image == (Image *) NULL) 11958 return(MagickFalse); 11959 ReplaceImageInList(&wand->images,unsharp_image); 11960 return(MagickTrue); 11961} 11962 11963/* 11964%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11965% % 11966% % 11967% % 11968% M a g i c k V i g n e t t e I m a g e % 11969% % 11970% % 11971% % 11972%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11973% 11974% MagickVignetteImage() softens the edges of the image in vignette style. 11975% 11976% The format of the MagickVignetteImage method is: 11977% 11978% MagickBooleanType MagickVignetteImage(MagickWand *wand, 11979% const double radius,const double sigma,const ssize_t x, 11980% const ssize_t y) 11981% 11982% A description of each parameter follows: 11983% 11984% o wand: the magick wand. 11985% 11986% o radius: the radius. 11987% 11988% o sigma: the sigma. 11989% 11990% o x, y: Define the x and y ellipse offset. 11991% 11992*/ 11993WandExport MagickBooleanType MagickVignetteImage(MagickWand *wand, 11994 const double radius,const double sigma,const ssize_t x,const ssize_t y) 11995{ 11996 Image 11997 *vignette_image; 11998 11999 assert(wand != (MagickWand *) NULL); 12000 assert(wand->signature == WandSignature); 12001 if (IfMagickTrue(wand->debug)) 12002 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 12003 if (wand->images == (Image *) NULL) 12004 ThrowWandException(WandError,"ContainsNoImages",wand->name); 12005 vignette_image=VignetteImage(wand->images,radius,sigma,x,y,wand->exception); 12006 if (vignette_image == (Image *) NULL) 12007 return(MagickFalse); 12008 ReplaceImageInList(&wand->images,vignette_image); 12009 return(MagickTrue); 12010} 12011 12012/* 12013%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12014% % 12015% % 12016% % 12017% M a g i c k W a v e I m a g e % 12018% % 12019% % 12020% % 12021%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12022% 12023% MagickWaveImage() creates a "ripple" effect in the image by shifting 12024% the pixels vertically along a sine wave whose amplitude and wavelength 12025% is specified by the given parameters. 12026% 12027% The format of the MagickWaveImage method is: 12028% 12029% MagickBooleanType MagickWaveImage(MagickWand *wand, 12030% const double amplitude,const double wave_length, 12031% const PixelInterpolateMethod method) 12032% 12033% A description of each parameter follows: 12034% 12035% o wand: the magick wand. 12036% 12037% o amplitude, wave_length: Define the amplitude and wave length of the 12038% sine wave. 12039% 12040% o method: the pixel interpolation method. 12041% 12042*/ 12043WandExport MagickBooleanType MagickWaveImage(MagickWand *wand, 12044 const double amplitude,const double wave_length, 12045 const PixelInterpolateMethod method) 12046{ 12047 Image 12048 *wave_image; 12049 12050 assert(wand != (MagickWand *) NULL); 12051 assert(wand->signature == WandSignature); 12052 if (IfMagickTrue(wand->debug)) 12053 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 12054 if (wand->images == (Image *) NULL) 12055 ThrowWandException(WandError,"ContainsNoImages",wand->name); 12056 wave_image=WaveImage(wand->images,amplitude,wave_length,method, 12057 wand->exception); 12058 if (wave_image == (Image *) NULL) 12059 return(MagickFalse); 12060 ReplaceImageInList(&wand->images,wave_image); 12061 return(MagickTrue); 12062} 12063 12064/* 12065%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12066% % 12067% % 12068% % 12069% 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 % 12070% % 12071% % 12072% % 12073%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12074% 12075% MagickWhiteThresholdImage() is like ThresholdImage() but force all pixels 12076% above the threshold into white while leaving all pixels below the threshold 12077% unchanged. 12078% 12079% The format of the MagickWhiteThresholdImage method is: 12080% 12081% MagickBooleanType MagickWhiteThresholdImage(MagickWand *wand, 12082% const PixelWand *threshold) 12083% 12084% A description of each parameter follows: 12085% 12086% o wand: the magick wand. 12087% 12088% o threshold: the pixel wand. 12089% 12090*/ 12091WandExport MagickBooleanType MagickWhiteThresholdImage(MagickWand *wand, 12092 const PixelWand *threshold) 12093{ 12094 char 12095 thresholds[MaxTextExtent]; 12096 12097 assert(wand != (MagickWand *) NULL); 12098 assert(wand->signature == WandSignature); 12099 if (IfMagickTrue(wand->debug)) 12100 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 12101 if (wand->images == (Image *) NULL) 12102 ThrowWandException(WandError,"ContainsNoImages",wand->name); 12103 (void) FormatLocaleString(thresholds,MaxTextExtent, 12104 QuantumFormat "," QuantumFormat "," QuantumFormat "," QuantumFormat, 12105 PixelGetRedQuantum(threshold),PixelGetGreenQuantum(threshold), 12106 PixelGetBlueQuantum(threshold),PixelGetAlphaQuantum(threshold)); 12107 return(WhiteThresholdImage(wand->images,thresholds,wand->exception)); 12108} 12109 12110/* 12111%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12112% % 12113% % 12114% % 12115% M a g i c k W r i t e I m a g e % 12116% % 12117% % 12118% % 12119%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12120% 12121% MagickWriteImage() writes an image to the specified filename. If the 12122% filename parameter is NULL, the image is written to the filename set 12123% by MagickReadImage() or MagickSetImageFilename(). 12124% 12125% The format of the MagickWriteImage method is: 12126% 12127% MagickBooleanType MagickWriteImage(MagickWand *wand, 12128% const char *filename) 12129% 12130% A description of each parameter follows: 12131% 12132% o wand: the magick wand. 12133% 12134% o filename: the image filename. 12135% 12136% 12137*/ 12138WandExport MagickBooleanType MagickWriteImage(MagickWand *wand, 12139 const char *filename) 12140{ 12141 Image 12142 *image; 12143 12144 ImageInfo 12145 *write_info; 12146 12147 MagickBooleanType 12148 status; 12149 12150 assert(wand != (MagickWand *) NULL); 12151 assert(wand->signature == WandSignature); 12152 if (IfMagickTrue(wand->debug)) 12153 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 12154 if (wand->images == (Image *) NULL) 12155 ThrowWandException(WandError,"ContainsNoImages",wand->name); 12156 if (filename != (const char *) NULL) 12157 (void) CopyMagickString(wand->images->filename,filename,MaxTextExtent); 12158 image=CloneImage(wand->images,0,0,MagickTrue,wand->exception); 12159 if (image == (Image *) NULL) 12160 return(MagickFalse); 12161 write_info=CloneImageInfo(wand->image_info); 12162 write_info->adjoin=MagickTrue; 12163 status=WriteImage(write_info,image,wand->exception); 12164 image=DestroyImage(image); 12165 write_info=DestroyImageInfo(write_info); 12166 return(status); 12167} 12168 12169/* 12170%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12171% % 12172% % 12173% % 12174% M a g i c k W r i t e I m a g e F i l e % 12175% % 12176% % 12177% % 12178%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12179% 12180% MagickWriteImageFile() writes an image to an open file descriptor. 12181% 12182% The format of the MagickWriteImageFile method is: 12183% 12184% MagickBooleanType MagickWriteImageFile(MagickWand *wand,FILE *file) 12185% 12186% A description of each parameter follows: 12187% 12188% o wand: the magick wand. 12189% 12190% o file: the file descriptor. 12191% 12192*/ 12193WandExport MagickBooleanType MagickWriteImageFile(MagickWand *wand,FILE *file) 12194{ 12195 Image 12196 *image; 12197 12198 ImageInfo 12199 *write_info; 12200 12201 MagickBooleanType 12202 status; 12203 12204 assert(wand != (MagickWand *) NULL); 12205 assert(wand->signature == WandSignature); 12206 assert(file != (FILE *) NULL); 12207 if (IfMagickTrue(wand->debug)) 12208 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 12209 if (wand->images == (Image *) NULL) 12210 ThrowWandException(WandError,"ContainsNoImages",wand->name); 12211 image=CloneImage(wand->images,0,0,MagickTrue,wand->exception); 12212 if (image == (Image *) NULL) 12213 return(MagickFalse); 12214 write_info=CloneImageInfo(wand->image_info); 12215 SetImageInfoFile(write_info,file); 12216 write_info->adjoin=MagickTrue; 12217 status=WriteImage(write_info,image,wand->exception); 12218 write_info=DestroyImageInfo(write_info); 12219 image=DestroyImage(image); 12220 return(status); 12221} 12222 12223/* 12224%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12225% % 12226% % 12227% % 12228% M a g i c k W r i t e I m a g e s % 12229% % 12230% % 12231% % 12232%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12233% 12234% MagickWriteImages() writes an image or image sequence. 12235% 12236% The format of the MagickWriteImages method is: 12237% 12238% MagickBooleanType MagickWriteImages(MagickWand *wand, 12239% const char *filename,const MagickBooleanType adjoin) 12240% 12241% A description of each parameter follows: 12242% 12243% o wand: the magick wand. 12244% 12245% o filename: the image filename. 12246% 12247% o adjoin: join images into a single multi-image file. 12248% 12249*/ 12250WandExport MagickBooleanType MagickWriteImages(MagickWand *wand, 12251 const char *filename,const MagickBooleanType adjoin) 12252{ 12253 ImageInfo 12254 *write_info; 12255 12256 MagickBooleanType 12257 status; 12258 12259 assert(wand != (MagickWand *) NULL); 12260 assert(wand->signature == WandSignature); 12261 if (IfMagickTrue(wand->debug)) 12262 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 12263 if (wand->images == (Image *) NULL) 12264 ThrowWandException(WandError,"ContainsNoImages",wand->name); 12265 write_info=CloneImageInfo(wand->image_info); 12266 write_info->adjoin=adjoin; 12267 status=WriteImages(write_info,wand->images,filename,wand->exception); 12268 write_info=DestroyImageInfo(write_info); 12269 return(status); 12270} 12271 12272/* 12273%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12274% % 12275% % 12276% % 12277% M a g i c k W r i t e I m a g e s F i l e % 12278% % 12279% % 12280% % 12281%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12282% 12283% MagickWriteImagesFile() writes an image sequence to an open file descriptor. 12284% 12285% The format of the MagickWriteImagesFile method is: 12286% 12287% MagickBooleanType MagickWriteImagesFile(MagickWand *wand,FILE *file) 12288% 12289% A description of each parameter follows: 12290% 12291% o wand: the magick wand. 12292% 12293% o file: the file descriptor. 12294% 12295*/ 12296WandExport MagickBooleanType MagickWriteImagesFile(MagickWand *wand,FILE *file) 12297{ 12298 ImageInfo 12299 *write_info; 12300 12301 MagickBooleanType 12302 status; 12303 12304 assert(wand != (MagickWand *) NULL); 12305 assert(wand->signature == WandSignature); 12306 if (IfMagickTrue(wand->debug)) 12307 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 12308 if (wand->images == (Image *) NULL) 12309 ThrowWandException(WandError,"ContainsNoImages",wand->name); 12310 write_info=CloneImageInfo(wand->image_info); 12311 SetImageInfoFile(write_info,file); 12312 write_info->adjoin=MagickTrue; 12313 status=WriteImages(write_info,wand->images,(const char *) NULL, 12314 wand->exception); 12315 write_info=DestroyImageInfo(write_info); 12316 return(status); 12317} 12318