49 #include "MagickWand/studio.h"
50 #include "MagickWand/MagickWand.h"
51 #include "MagickWand/magick-wand-private.h"
52 #include "MagickWand/wand.h"
53 #include "MagickWand/pixel-wand-private.h"
54 #include "MagickCore/image-private.h"
59 #define MagickWandId "MagickWand"
94 assert(wand->signature == MagickWandSignature);
95 if (wand->debug != MagickFalse)
96 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
97 clone_wand=(
MagickWand *) AcquireCriticalMemory(
sizeof(*clone_wand));
98 (void) memset(clone_wand,0,
sizeof(*clone_wand));
99 clone_wand->id=AcquireWandId();
100 (void) FormatLocaleString(clone_wand->name,MagickPathExtent,
"%s-%.20g",
101 MagickWandId,(
double) clone_wand->id);
102 clone_wand->exception=AcquireExceptionInfo();
103 InheritException(clone_wand->exception,wand->exception);
104 clone_wand->image_info=CloneImageInfo(wand->image_info);
105 clone_wand->images=images;
106 clone_wand->debug=IsEventLogging();
107 clone_wand->signature=MagickWandSignature;
108 if (clone_wand->debug != MagickFalse)
109 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",clone_wand->name);
135 WandExport Image *GetImageFromMagickWand(
const MagickWand *wand)
138 assert(wand->signature == MagickWandSignature);
139 if (wand->debug != MagickFalse)
140 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
141 if (wand->images == (Image *) NULL)
143 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
144 "ContainsNoImages",
"`%s'",wand->name);
145 return((Image *) NULL);
147 return(wand->images);
183 WandExport MagickBooleanType MagickAdaptiveBlurImage(
MagickWand *wand,
184 const double radius,
const double sigma)
190 assert(wand->signature == MagickWandSignature);
191 if (wand->debug != MagickFalse)
192 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
193 if (wand->images == (Image *) NULL)
194 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
195 sharp_image=AdaptiveBlurImage(wand->images,radius,sigma,wand->exception);
196 if (sharp_image == (Image *) NULL)
198 ReplaceImageInList(&wand->images,sharp_image);
228 WandExport MagickBooleanType MagickAdaptiveResizeImage(
MagickWand *wand,
229 const size_t columns,
const size_t rows)
235 assert(wand->signature == MagickWandSignature);
236 if (wand->debug != MagickFalse)
237 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
238 if (wand->images == (Image *) NULL)
239 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
240 resize_image=AdaptiveResizeImage(wand->images,columns,rows,wand->exception);
241 if (resize_image == (Image *) NULL)
243 ReplaceImageInList(&wand->images,resize_image);
280 WandExport MagickBooleanType MagickAdaptiveSharpenImage(
MagickWand *wand,
281 const double radius,
const double sigma)
287 assert(wand->signature == MagickWandSignature);
288 if (wand->debug != MagickFalse)
289 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
290 if (wand->images == (Image *) NULL)
291 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
292 sharp_image=AdaptiveSharpenImage(wand->images,radius,sigma,wand->exception);
293 if (sharp_image == (Image *) NULL)
295 ReplaceImageInList(&wand->images,sharp_image);
331 WandExport MagickBooleanType MagickAdaptiveThresholdImage(
MagickWand *wand,
332 const size_t width,
const size_t height,
const double bias)
338 assert(wand->signature == MagickWandSignature);
339 if (wand->debug != MagickFalse)
340 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
341 if (wand->images == (Image *) NULL)
342 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
343 threshold_image=AdaptiveThresholdImage(wand->images,width,height,bias,
345 if (threshold_image == (Image *) NULL)
347 ReplaceImageInList(&wand->images,threshold_image);
390 static inline MagickBooleanType InsertImageInWand(
MagickWand *wand,
393 if (wand->images == (Image *) NULL)
398 if (wand->insert_before != MagickFalse)
399 wand->images=GetFirstImageInList(images);
401 wand->images=GetLastImageInList(images);
405 if ((wand->insert_before != MagickFalse) &&
406 (wand->images->previous == (Image *) NULL))
408 PrependImageToList(&wand->images,images);
409 wand->images=GetFirstImageInList(images);
417 if (wand->images->next == (Image *) NULL)
422 InsertImageInList(&wand->images,images);
423 wand->images=GetLastImageInList(images);
429 InsertImageInList(&wand->images,images);
433 WandExport MagickBooleanType MagickAddImage(
MagickWand *wand,
440 assert(wand->signature == MagickWandSignature);
441 if (wand->debug != MagickFalse)
442 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
444 assert(add_wand->signature == MagickWandSignature);
445 if (add_wand->images == (Image *) NULL)
446 ThrowWandException(WandError,
"ContainsNoImages",add_wand->name);
450 images=CloneImageList(add_wand->images,wand->exception);
451 if (images == (Image *) NULL)
453 return(InsertImageInWand(wand,images));
484 WandExport MagickBooleanType MagickAddNoiseImage(
MagickWand *wand,
485 const NoiseType noise_type,
const double attenuate)
491 assert(wand->signature == MagickWandSignature);
492 if (wand->debug != MagickFalse)
493 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
494 if (wand->images == (Image *) NULL)
495 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
496 noise_image=AddNoiseImage(wand->images,noise_type,attenuate,wand->exception);
497 if (noise_image == (Image *) NULL)
499 ReplaceImageInList(&wand->images,noise_image);
529 WandExport MagickBooleanType MagickAffineTransformImage(
MagickWand *wand,
539 assert(wand->signature == MagickWandSignature);
540 if (wand->debug != MagickFalse)
541 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
542 if (wand->images == (Image *) NULL)
543 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
544 draw_info=PeekDrawingWand(drawing_wand);
545 if (draw_info == (DrawInfo *) NULL)
547 affine_image=AffineTransformImage(wand->images,&draw_info->affine,
549 draw_info=DestroyDrawInfo(draw_info);
550 if (affine_image == (Image *) NULL)
552 ReplaceImageInList(&wand->images,affine_image);
590 WandExport MagickBooleanType MagickAnnotateImage(
MagickWand *wand,
591 const DrawingWand *drawing_wand,
const double x,
const double y,
592 const double angle,
const char *text)
595 geometry[MagickPathExtent];
604 assert(wand->signature == MagickWandSignature);
605 if (wand->debug != MagickFalse)
606 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
607 if (wand->images == (Image *) NULL)
608 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
609 draw_info=PeekDrawingWand(drawing_wand);
610 if (draw_info == (DrawInfo *) NULL)
612 (void) CloneString(&draw_info->text,text);
613 (void) FormatLocaleString(geometry,MagickPathExtent,
"%+g%+g",x,y);
614 draw_info->affine.sx=cos((
double) DegreesToRadians(fmod(angle,360.0)));
615 draw_info->affine.rx=sin((
double) DegreesToRadians(fmod(angle,360.0)));
616 draw_info->affine.ry=(-sin((
double) DegreesToRadians(fmod(angle,360.0))));
617 draw_info->affine.sy=cos((
double) DegreesToRadians(fmod(angle,360.0)));
618 (void) CloneString(&draw_info->geometry,geometry);
619 status=AnnotateImage(wand->images,draw_info,wand->exception);
620 draw_info=DestroyDrawInfo(draw_info);
649 WandExport MagickBooleanType MagickAnimateImages(
MagickWand *wand,
650 const char *server_name)
656 assert(wand->signature == MagickWandSignature);
657 if (wand->debug != MagickFalse)
658 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
659 (void) CloneString(&wand->image_info->server_name,server_name);
660 status=AnimateImages(wand->image_info,wand->images,wand->exception);
697 const MagickBooleanType stack)
703 assert(wand->signature == MagickWandSignature);
704 if (wand->debug != MagickFalse)
705 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
706 if (wand->images == (Image *) NULL)
708 append_image=AppendImages(wand->images,stack,wand->exception);
709 if (append_image == (Image *) NULL)
711 return(CloneMagickWandFromImages(wand,append_image));
737 WandExport MagickBooleanType MagickAutoGammaImage(
MagickWand *wand)
743 assert(wand->signature == MagickWandSignature);
744 if (wand->debug != MagickFalse)
745 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
746 if (wand->images == (Image *) NULL)
747 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
748 status=AutoGammaImage(wand->images,wand->exception);
775 WandExport MagickBooleanType MagickAutoLevelImage(
MagickWand *wand)
781 assert(wand->signature == MagickWandSignature);
782 if (wand->debug != MagickFalse)
783 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
784 if (wand->images == (Image *) NULL)
785 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
786 status=AutoLevelImage(wand->images,wand->exception);
813 WandExport MagickBooleanType MagickAutoOrientImage(
MagickWand *wand)
820 assert(wand->signature == MagickWandSignature);
821 if (wand->debug != MagickFalse)
822 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
823 if (wand->images == (Image *) NULL)
824 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
825 orient_image=AutoOrientImage(wand->images,wand->images->orientation,
827 if (orient_image == (Image *) NULL)
829 ReplaceImageInList(&wand->images,orient_image);
860 WandExport MagickBooleanType MagickAutoThresholdImage(
MagickWand *wand,
861 const AutoThresholdMethod method)
864 assert(wand->signature == MagickWandSignature);
865 if (wand->debug != MagickFalse)
866 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
867 if (wand->images == (Image *) NULL)
868 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
869 return(AutoThresholdImage(wand->images,method,wand->exception));
918 WandExport MagickBooleanType MagickBilateralBlurImage(
MagickWand *wand,
919 const double radius,
const double sigma,
const double intensity_sigma,
920 const double spatial_sigma)
926 assert(wand->signature == MagickWandSignature);
927 if (wand->debug != MagickFalse)
928 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
929 if (wand->images == (Image *) NULL)
930 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
931 blur_image=BilateralBlurImage(wand->images,radius,sigma,intensity_sigma,
932 spatial_sigma,wand->exception);
933 if (blur_image == (Image *) NULL)
935 ReplaceImageInList(&wand->images,blur_image);
966 WandExport MagickBooleanType MagickBlackThresholdImage(
MagickWand *wand,
970 thresholds[MagickPathExtent];
973 assert(wand->signature == MagickWandSignature);
974 if (wand->debug != MagickFalse)
975 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
976 if (wand->images == (Image *) NULL)
977 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
978 (void) FormatLocaleString(thresholds,MagickPathExtent,
979 QuantumFormat
"," QuantumFormat
"," QuantumFormat
"," QuantumFormat,
980 PixelGetRedQuantum(threshold),PixelGetGreenQuantum(threshold),
981 PixelGetBlueQuantum(threshold),PixelGetAlphaQuantum(threshold));
982 return(BlackThresholdImage(wand->images,thresholds,wand->exception));
1011 WandExport MagickBooleanType MagickBlueShiftImage(
MagickWand *wand,
1012 const double factor)
1018 assert(wand->signature == MagickWandSignature);
1019 if (wand->debug != MagickFalse)
1020 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
1021 if (wand->images == (Image *) NULL)
1022 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
1023 shift_image=BlueShiftImage(wand->images,factor,wand->exception);
1024 if (shift_image == (Image *) NULL)
1025 return(MagickFalse);
1026 ReplaceImageInList(&wand->images,shift_image);
1061 WandExport MagickBooleanType MagickBlurImage(
MagickWand *wand,
1062 const double radius,
const double sigma)
1068 assert(wand->signature == MagickWandSignature);
1069 if (wand->debug != MagickFalse)
1070 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
1071 if (wand->images == (Image *) NULL)
1072 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
1073 blur_image=BlurImage(wand->images,radius,sigma,wand->exception);
1074 if (blur_image == (Image *) NULL)
1075 return(MagickFalse);
1076 ReplaceImageInList(&wand->images,blur_image);
1113 WandExport MagickBooleanType MagickBorderImage(
MagickWand *wand,
1114 const PixelWand *bordercolor,
const size_t width,
const size_t height,
1115 const CompositeOperator compose)
1124 assert(wand->signature == MagickWandSignature);
1125 if (wand->debug != MagickFalse)
1126 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
1127 if (wand->images == (Image *) NULL)
1128 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
1129 border_info.width=width;
1130 border_info.height=height;
1133 PixelGetQuantumPacket(bordercolor,&wand->images->border_color);
1134 border_image=BorderImage(wand->images,&border_info,compose,wand->exception);
1135 if (border_image == (Image *) NULL)
1136 return(MagickFalse);
1137 ReplaceImageInList(&wand->images,border_image);
1171 WandExport MagickBooleanType MagickBrightnessContrastImage(
1172 MagickWand *wand,
const double brightness,
const double contrast)
1178 assert(wand->signature == MagickWandSignature);
1179 if (wand->debug != MagickFalse)
1180 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
1181 if (wand->images == (Image *) NULL)
1182 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
1183 status=BrightnessContrastImage(wand->images,brightness,contrast,
1221 WandExport MagickBooleanType MagickCannyEdgeImage(
MagickWand *wand,
1222 const double radius,
const double sigma,
const double lower_percent,
1223 const double upper_percent)
1229 assert(wand->signature == MagickWandSignature);
1230 if (wand->debug != MagickFalse)
1231 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
1232 if (wand->images == (Image *) NULL)
1233 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
1234 edge_image=CannyEdgeImage(wand->images,radius,sigma,lower_percent,
1235 upper_percent,wand->exception);
1236 if (edge_image == (Image *) NULL)
1237 return(MagickFalse);
1238 ReplaceImageInList(&wand->images,edge_image);
1280 const char *expression)
1286 assert(wand->signature == MagickWandSignature);
1287 if (wand->debug != MagickFalse)
1288 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
1289 if (wand->images == (Image *) NULL)
1291 fx_image=ChannelFxImage(wand->images,expression,wand->exception);
1292 if (fx_image == (Image *) NULL)
1294 return(CloneMagickWandFromImages(wand,fx_image));
1325 WandExport MagickBooleanType MagickCharcoalImage(
MagickWand *wand,
1326 const double radius,
const double sigma)
1332 assert(wand->signature == MagickWandSignature);
1333 if (wand->debug != MagickFalse)
1334 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
1335 if (wand->images == (Image *) NULL)
1336 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
1337 charcoal_image=CharcoalImage(wand->images,radius,sigma,wand->exception);
1338 if (charcoal_image == (Image *) NULL)
1339 return(MagickFalse);
1340 ReplaceImageInList(&wand->images,charcoal_image);
1378 WandExport MagickBooleanType MagickChopImage(
MagickWand *wand,
1379 const size_t width,
const size_t height,
const ssize_t x,
1389 assert(wand->signature == MagickWandSignature);
1390 if (wand->debug != MagickFalse)
1391 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
1392 if (wand->images == (Image *) NULL)
1393 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
1398 chop_image=ChopImage(wand->images,&chop,wand->exception);
1399 if (chop_image == (Image *) NULL)
1400 return(MagickFalse);
1401 ReplaceImageInList(&wand->images,chop_image);
1440 WandExport MagickBooleanType MagickCLAHEImage(
MagickWand *wand,
1441 const size_t width,
const size_t height,
const double number_bins,
1442 const double clip_limit)
1448 assert(wand->signature == MagickWandSignature);
1449 if (wand->debug != MagickFalse)
1450 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
1451 if (wand->images == (Image *) NULL)
1452 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
1453 status=CLAHEImage(wand->images,width,height,(
size_t) number_bins,clip_limit,
1482 WandExport MagickBooleanType MagickClampImage(
MagickWand *wand)
1485 assert(wand->signature == MagickWandSignature);
1486 if (wand->debug != MagickFalse)
1487 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
1488 if (wand->images == (Image *) NULL)
1489 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
1490 return(ClampImage(wand->images,wand->exception));
1516 WandExport MagickBooleanType MagickClipImage(
MagickWand *wand)
1522 assert(wand->signature == MagickWandSignature);
1523 if (wand->debug != MagickFalse)
1524 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
1525 if (wand->images == (Image *) NULL)
1526 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
1527 status=ClipImage(wand->images,wand->exception);
1563 WandExport MagickBooleanType MagickClipImagePath(
MagickWand *wand,
1564 const char *pathname,
const MagickBooleanType inside)
1570 assert(wand->signature == MagickWandSignature);
1571 if (wand->debug != MagickFalse)
1572 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
1573 if (wand->images == (Image *) NULL)
1574 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
1575 status=ClipImagePath(wand->images,pathname,inside,wand->exception);
1606 WandExport MagickBooleanType MagickClutImage(
MagickWand *wand,
1607 const MagickWand *clut_wand,
const PixelInterpolateMethod method)
1613 assert(wand->signature == MagickWandSignature);
1614 if (wand->debug != MagickFalse)
1615 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
1616 if ((wand->images == (Image *) NULL) || (clut_wand->images == (Image *) NULL))
1617 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
1618 status=ClutImage(wand->images,clut_wand->images,method,wand->exception);
1655 assert(wand->signature == MagickWandSignature);
1656 if (wand->debug != MagickFalse)
1657 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
1658 if (wand->images == (Image *) NULL)
1660 coalesce_image=CoalesceImages(wand->images,wand->exception);
1661 if (coalesce_image == (Image *) NULL)
1663 return(CloneMagickWandFromImages(wand,coalesce_image));
1709 WandExport MagickBooleanType MagickColorDecisionListImage(
MagickWand *wand,
1710 const char *color_correction_collection)
1716 assert(wand->signature == MagickWandSignature);
1717 if (wand->debug != MagickFalse)
1718 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
1719 if (wand->images == (Image *) NULL)
1720 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
1721 status=ColorDecisionListImage(wand->images,color_correction_collection,
1753 WandExport MagickBooleanType MagickColorizeImage(
MagickWand *wand,
1757 percent_blend[MagickPathExtent];
1766 assert(wand->signature == MagickWandSignature);
1767 if (wand->debug != MagickFalse)
1768 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
1769 if (wand->images == (Image *) NULL)
1770 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
1771 GetPixelInfo(wand->images,&target);
1772 if (target.colorspace != CMYKColorspace)
1773 (void) FormatLocaleString(percent_blend,MagickPathExtent,
1774 "%g,%g,%g,%g",(
double) (100.0*QuantumScale*
1775 PixelGetRedQuantum(blend)),(
double) (100.0*QuantumScale*
1776 PixelGetGreenQuantum(blend)),(
double) (100.0*QuantumScale*
1777 PixelGetBlueQuantum(blend)),(
double) (100.0*QuantumScale*
1778 PixelGetAlphaQuantum(blend)));
1780 (
void) FormatLocaleString(percent_blend,MagickPathExtent,
1781 "%g,%g,%g,%g,%g",(
double) (100.0*QuantumScale*
1782 PixelGetRedQuantum(blend)),(
double) (100.0*QuantumScale*
1783 PixelGetGreenQuantum(blend)),(
double) (100.0*QuantumScale*
1784 PixelGetBlueQuantum(blend)),(
double) (100.0*QuantumScale*
1785 PixelGetBlackQuantum(blend)),(
double) (100.0*QuantumScale*
1786 PixelGetAlphaQuantum(blend)));
1787 target=PixelGetPixel(colorize);
1788 colorize_image=ColorizeImage(wand->images,percent_blend,&target,
1790 if (colorize_image == (Image *) NULL)
1791 return(MagickFalse);
1792 ReplaceImageInList(&wand->images,colorize_image);
1827 WandExport MagickBooleanType MagickColorMatrixImage(
MagickWand *wand,
1828 const KernelInfo *color_matrix)
1834 assert(wand->signature == MagickWandSignature);
1835 if (wand->debug != MagickFalse)
1836 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
1837 if (color_matrix == (
const KernelInfo *) NULL)
1838 return(MagickFalse);
1839 if (wand->images == (Image *) NULL)
1840 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
1841 color_image=ColorMatrixImage(wand->images,color_matrix,wand->exception);
1842 if (color_image == (Image *) NULL)
1843 return(MagickFalse);
1844 ReplaceImageInList(&wand->images,color_image);
1876 WandExport MagickBooleanType MagickColorThresholdImage(
MagickWand *wand,
1884 assert(wand->signature == MagickWandSignature);
1885 if (wand->debug != MagickFalse)
1886 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
1887 if (wand->images == (Image *) NULL)
1888 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
1889 PixelGetMagickColor(start_color,&start);
1890 PixelGetMagickColor(stop_color,&stop);
1891 return(ColorThresholdImage(wand->images,&start,&stop,wand->exception));
1923 const ColorspaceType colorspace)
1929 assert(wand->signature == MagickWandSignature);
1930 if (wand->debug != MagickFalse)
1931 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
1932 if (wand->images == (Image *) NULL)
1934 combine_image=CombineImages(wand->images,colorspace,wand->exception);
1935 if (combine_image == (Image *) NULL)
1937 return(CloneMagickWandFromImages(wand,combine_image));
1965 WandExport MagickBooleanType MagickCommentImage(
MagickWand *wand,
1966 const char *comment)
1972 assert(wand->signature == MagickWandSignature);
1973 if (wand->debug != MagickFalse)
1974 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
1975 if (wand->images == (Image *) NULL)
1976 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
1977 status=SetImageProperty(wand->images,
"comment",comment,wand->exception);
2009 const LayerMethod method)
2015 assert(wand->signature == MagickWandSignature);
2016 if (wand->debug != MagickFalse)
2017 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
2018 if (wand->images == (Image *) NULL)
2020 layers_image=CompareImagesLayers(wand->images,method,wand->exception);
2021 if (layers_image == (Image *) NULL)
2023 return(CloneMagickWandFromImages(wand,layers_image));
2058 const MagickWand *reference,
const MetricType metric,
double *distortion)
2065 assert(wand->signature == MagickWandSignature);
2066 if (wand->debug != MagickFalse)
2067 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
2068 if ((wand->images == (Image *) NULL) || (reference->images == (Image *) NULL))
2070 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
2071 "ContainsNoImages",
"`%s'",wand->name);
2074 compare_image=CompareImages(wand->images,reference->images,metric,distortion,
2076 if (compare_image == (Image *) NULL)
2078 return(CloneMagickWandFromImages(wand,compare_image));
2110 const ComplexOperator op)
2116 assert(wand->signature == MagickWandSignature);
2117 if (wand->debug != MagickFalse)
2118 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
2119 if (wand->images == (Image *) NULL)
2121 complex_image=ComplexImages(wand->images,op,wand->exception);
2122 if (complex_image == (Image *) NULL)
2124 return(CloneMagickWandFromImages(wand,complex_image));
2170 WandExport MagickBooleanType MagickCompositeImage(
MagickWand *wand,
2171 const MagickWand *source_wand,
const CompositeOperator compose,
2172 const MagickBooleanType clip_to_self,
const ssize_t x,
const ssize_t y)
2178 assert(wand->signature == MagickWandSignature);
2179 if (wand->debug != MagickFalse)
2180 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
2181 if ((wand->images == (Image *) NULL) ||
2182 (source_wand->images == (Image *) NULL))
2183 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
2184 status=CompositeImage(wand->images,source_wand->images,compose,clip_to_self,
2185 x,y,wand->exception);
2231 WandExport MagickBooleanType MagickCompositeImageGravity(
MagickWand *wand,
2232 const MagickWand *source_wand,
const CompositeOperator compose,
2233 const GravityType gravity)
2242 assert(wand->signature == MagickWandSignature);
2243 if (wand->debug != MagickFalse)
2244 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
2245 if ((wand->images == (Image *) NULL) ||
2246 (source_wand->images == (Image *) NULL))
2247 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
2248 SetGeometry(source_wand->images,&geometry);
2249 GravityAdjustGeometry(wand->images->columns,wand->images->rows,gravity,
2251 status=CompositeImage(wand->images,source_wand->images,compose,MagickTrue,
2252 geometry.x,geometry.y,wand->exception);
2309 WandExport MagickBooleanType MagickCompositeLayers(
MagickWand *wand,
2310 const MagickWand *source_wand,
const CompositeOperator compose,
2311 const ssize_t x,
const ssize_t y)
2317 assert(wand->signature == MagickWandSignature);
2318 if (wand->debug != MagickFalse)
2319 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
2320 if ((wand->images == (Image *) NULL) ||
2321 (source_wand->images == (Image *) NULL))
2322 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
2323 CompositeLayers(wand->images,compose,source_wand->images,x,y,wand->exception);
2358 WandExport MagickBooleanType MagickConnectedComponentsImage(
MagickWand *wand,
2359 const size_t connectivity,CCObjectInfo **objects)
2362 *connected_components_image;
2365 assert(wand->signature == MagickWandSignature);
2366 if (wand->debug != MagickFalse)
2367 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
2368 if (wand->images == (Image *) NULL)
2369 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
2370 connected_components_image=ConnectedComponentsImage(wand->images,connectivity,
2371 objects,wand->exception);
2372 if (connected_components_image == (Image *) NULL)
2373 return(MagickFalse);
2374 ReplaceImageInList(&wand->images,connected_components_image);
2406 WandExport MagickBooleanType MagickContrastImage(
MagickWand *wand,
2407 const MagickBooleanType sharpen)
2413 assert(wand->signature == MagickWandSignature);
2414 if (wand->debug != MagickFalse)
2415 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
2416 if (wand->images == (Image *) NULL)
2417 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
2418 status=ContrastImage(wand->images,sharpen,wand->exception);
2452 WandExport MagickBooleanType MagickContrastStretchImage(
MagickWand *wand,
2453 const double black_point,
const double white_point)
2459 assert(wand->signature == MagickWandSignature);
2460 if (wand->debug != MagickFalse)
2461 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
2462 if (wand->images == (Image *) NULL)
2463 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
2464 status=ContrastStretchImage(wand->images,black_point,white_point,
2494 WandExport MagickBooleanType MagickConvolveImage(
MagickWand *wand,
2495 const KernelInfo *kernel)
2501 assert(wand->signature == MagickWandSignature);
2502 if (wand->debug != MagickFalse)
2503 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
2504 if (kernel == (
const KernelInfo *) NULL)
2505 return(MagickFalse);
2506 if (wand->images == (Image *) NULL)
2507 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
2508 filter_image=ConvolveImage(wand->images,kernel,wand->exception);
2509 if (filter_image == (Image *) NULL)
2510 return(MagickFalse);
2511 ReplaceImageInList(&wand->images,filter_image);
2546 WandExport MagickBooleanType MagickCropImage(
MagickWand *wand,
2547 const size_t width,
const size_t height,
const ssize_t x,
const ssize_t y)
2556 assert(wand->signature == MagickWandSignature);
2557 if (wand->debug != MagickFalse)
2558 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
2559 if (wand->images == (Image *) NULL)
2560 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
2565 crop_image=CropImage(wand->images,&crop,wand->exception);
2566 if (crop_image == (Image *) NULL)
2567 return(MagickFalse);
2568 ReplaceImageInList(&wand->images,crop_image);
2599 WandExport MagickBooleanType MagickCycleColormapImage(
MagickWand *wand,
2600 const ssize_t displace)
2606 assert(wand->signature == MagickWandSignature);
2607 if (wand->debug != MagickFalse)
2608 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
2609 if (wand->images == (Image *) NULL)
2610 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
2611 status=CycleColormapImage(wand->images,displace,wand->exception);
2667 WandExport MagickBooleanType MagickConstituteImage(
MagickWand *wand,
2668 const size_t columns,
const size_t rows,
const char *map,
2669 const StorageType storage,
const void *pixels)
2675 assert(wand->signature == MagickWandSignature);
2676 if (wand->debug != MagickFalse)
2677 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
2678 images=ConstituteImage(columns,rows,map,storage,pixels,wand->exception);
2679 if (images == (Image *) NULL)
2680 return(MagickFalse);
2681 return(InsertImageInWand(wand,images));
2709 WandExport MagickBooleanType MagickDecipherImage(
MagickWand *wand,
2710 const char *passphrase)
2713 assert(wand->signature == MagickWandSignature);
2714 if (wand->debug != MagickFalse)
2715 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
2716 if (wand->images == (Image *) NULL)
2717 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
2718 return(DecipherImage(wand->images,passphrase,wand->exception));
2751 assert(wand->signature == MagickWandSignature);
2752 if (wand->debug != MagickFalse)
2753 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
2754 if (wand->images == (Image *) NULL)
2756 deconstruct_image=CompareImagesLayers(wand->images,CompareAnyLayer,
2758 if (deconstruct_image == (Image *) NULL)
2760 return(CloneMagickWandFromImages(wand,deconstruct_image));
2791 WandExport MagickBooleanType MagickDeskewImage(
MagickWand *wand,
2792 const double threshold)
2798 assert(wand->signature == MagickWandSignature);
2799 if (wand->debug != MagickFalse)
2800 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
2801 if (wand->images == (Image *) NULL)
2802 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
2803 sepia_image=DeskewImage(wand->images,threshold,wand->exception);
2804 if (sepia_image == (Image *) NULL)
2805 return(MagickFalse);
2806 ReplaceImageInList(&wand->images,sepia_image);
2833 WandExport MagickBooleanType MagickDespeckleImage(
MagickWand *wand)
2839 assert(wand->signature == MagickWandSignature);
2840 if (wand->debug != MagickFalse)
2841 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
2842 if (wand->images == (Image *) NULL)
2843 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
2844 despeckle_image=DespeckleImage(wand->images,wand->exception);
2845 if (despeckle_image == (Image *) NULL)
2846 return(MagickFalse);
2847 ReplaceImageInList(&wand->images,despeckle_image);
2874 WandExport Image *MagickDestroyImage(Image *image)
2876 return(DestroyImage(image));
2904 WandExport MagickBooleanType MagickDisplayImage(
MagickWand *wand,
2905 const char *server_name)
2914 assert(wand->signature == MagickWandSignature);
2915 if (wand->debug != MagickFalse)
2916 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
2917 if (wand->images == (Image *) NULL)
2918 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
2919 image=CloneImage(wand->images,0,0,MagickTrue,wand->exception);
2920 if (image == (Image *) NULL)
2921 return(MagickFalse);
2922 (void) CloneString(&wand->image_info->server_name,server_name);
2923 status=DisplayImages(wand->image_info,image,wand->exception);
2924 image=DestroyImage(image);
2953 WandExport MagickBooleanType MagickDisplayImages(
MagickWand *wand,
2954 const char *server_name)
2960 assert(wand->signature == MagickWandSignature);
2961 if (wand->debug != MagickFalse)
2962 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
2963 (void) CloneString(&wand->image_info->server_name,server_name);
2964 status=DisplayImages(wand->image_info,wand->images,wand->exception);
3028 WandExport MagickBooleanType MagickDistortImage(
MagickWand *wand,
3029 const DistortMethod method,
const size_t number_arguments,
3030 const double *arguments,
const MagickBooleanType bestfit)
3036 assert(wand->signature == MagickWandSignature);
3037 if (wand->debug != MagickFalse)
3038 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
3039 if (wand->images == (Image *) NULL)
3040 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
3041 distort_image=DistortImage(wand->images,method,number_arguments,arguments,
3042 bestfit,wand->exception);
3043 if (distort_image == (Image *) NULL)
3044 return(MagickFalse);
3045 ReplaceImageInList(&wand->images,distort_image);
3074 WandExport MagickBooleanType MagickDrawImage(
MagickWand *wand,
3087 assert(wand->signature == MagickWandSignature);
3088 if (wand->debug != MagickFalse)
3089 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
3090 if (wand->images == (Image *) NULL)
3091 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
3092 draw_info=PeekDrawingWand(drawing_wand);
3093 if ((draw_info == (DrawInfo *) NULL) ||
3094 (draw_info->primitive == (
char *) NULL))
3095 return(MagickFalse);
3096 primitive=AcquireString(draw_info->primitive);
3097 draw_info=DestroyDrawInfo(draw_info);
3098 draw_info=CloneDrawInfo(wand->image_info,(DrawInfo *) NULL);
3099 draw_info->primitive=primitive;
3100 status=DrawImage(wand->images,draw_info,wand->exception);
3101 draw_info=DestroyDrawInfo(draw_info);
3131 WandExport MagickBooleanType MagickEdgeImage(
MagickWand *wand,
3132 const double radius)
3138 assert(wand->signature == MagickWandSignature);
3139 if (wand->debug != MagickFalse)
3140 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
3141 if (wand->images == (Image *) NULL)
3142 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
3143 edge_image=EdgeImage(wand->images,radius,wand->exception);
3144 if (edge_image == (Image *) NULL)
3145 return(MagickFalse);
3146 ReplaceImageInList(&wand->images,edge_image);
3182 WandExport MagickBooleanType MagickEmbossImage(
MagickWand *wand,
3183 const double radius,
const double sigma)
3189 assert(wand->signature == MagickWandSignature);
3190 if (wand->debug != MagickFalse)
3191 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
3192 if (wand->images == (Image *) NULL)
3193 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
3194 emboss_image=EmbossImage(wand->images,radius,sigma,wand->exception);
3195 if (emboss_image == (Image *) NULL)
3196 return(MagickFalse);
3197 ReplaceImageInList(&wand->images,emboss_image);
3226 WandExport MagickBooleanType MagickEncipherImage(
MagickWand *wand,
3227 const char *passphrase)
3230 assert(wand->signature == MagickWandSignature);
3231 if (wand->debug != MagickFalse)
3232 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
3233 if (wand->images == (Image *) NULL)
3234 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
3235 return(EncipherImage(wand->images,passphrase,wand->exception));
3261 WandExport MagickBooleanType MagickEnhanceImage(
MagickWand *wand)
3267 assert(wand->signature == MagickWandSignature);
3268 if (wand->debug != MagickFalse)
3269 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
3270 if (wand->images == (Image *) NULL)
3271 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
3272 enhance_image=EnhanceImage(wand->images,wand->exception);
3273 if (enhance_image == (Image *) NULL)
3274 return(MagickFalse);
3275 ReplaceImageInList(&wand->images,enhance_image);
3303 WandExport MagickBooleanType MagickEqualizeImage(
MagickWand *wand)
3309 assert(wand->signature == MagickWandSignature);
3310 if (wand->debug != MagickFalse)
3311 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
3312 if (wand->images == (Image *) NULL)
3313 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
3314 status=EqualizeImage(wand->images,wand->exception);
3352 const MagickEvaluateOperator op)
3358 assert(wand->signature == MagickWandSignature);
3359 if (wand->debug != MagickFalse)
3360 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
3361 if (wand->images == (Image *) NULL)
3363 evaluate_image=EvaluateImages(wand->images,op,wand->exception);
3364 if (evaluate_image == (Image *) NULL)
3366 return(CloneMagickWandFromImages(wand,evaluate_image));
3369 WandExport MagickBooleanType MagickEvaluateImage(
MagickWand *wand,
3370 const MagickEvaluateOperator op,
const double value)
3376 assert(wand->signature == MagickWandSignature);
3377 if (wand->debug != MagickFalse)
3378 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
3379 if (wand->images == (Image *) NULL)
3380 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
3381 status=EvaluateImage(wand->images,op,value,wand->exception);
3436 WandExport MagickBooleanType MagickExportImagePixels(
MagickWand *wand,
3437 const ssize_t x,
const ssize_t y,
const size_t columns,
3438 const size_t rows,
const char *map,
const StorageType storage,
3445 assert(wand->signature == MagickWandSignature);
3446 if (wand->debug != MagickFalse)
3447 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
3448 if (wand->images == (Image *) NULL)
3449 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
3450 status=ExportImagePixels(wand->images,x,y,columns,rows,map,
3451 storage,pixels,wand->exception);
3488 WandExport MagickBooleanType MagickExtentImage(
MagickWand *wand,
3489 const size_t width,
const size_t height,
const ssize_t x,
const ssize_t y)
3498 assert(wand->signature == MagickWandSignature);
3499 if (wand->debug != MagickFalse)
3500 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
3501 if (wand->images == (Image *) NULL)
3502 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
3504 extent.height=height;
3507 extent_image=ExtentImage(wand->images,&extent,wand->exception);
3508 if (extent_image == (Image *) NULL)
3509 return(MagickFalse);
3510 ReplaceImageInList(&wand->images,extent_image);
3537 WandExport MagickBooleanType MagickFlipImage(
MagickWand *wand)
3543 assert(wand->signature == MagickWandSignature);
3544 if (wand->debug != MagickFalse)
3545 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
3546 if (wand->images == (Image *) NULL)
3547 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
3548 flip_image=FlipImage(wand->images,wand->exception);
3549 if (flip_image == (Image *) NULL)
3550 return(MagickFalse);
3551 ReplaceImageInList(&wand->images,flip_image);
3597 WandExport MagickBooleanType MagickFloodfillPaintImage(
MagickWand *wand,
3599 const ssize_t x,
const ssize_t y,
const MagickBooleanType invert)
3611 assert(wand->signature == MagickWandSignature);
3612 if (wand->debug != MagickFalse)
3613 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
3614 if (wand->images == (Image *) NULL)
3615 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
3616 draw_info=CloneDrawInfo(wand->image_info,(DrawInfo *) NULL);
3617 PixelGetQuantumPacket(fill,&draw_info->fill);
3618 (void) GetOneVirtualPixelInfo(wand->images,TileVirtualPixelMethod,x %
3619 wand->images->columns,y % wand->images->rows,&target,wand->exception);
3621 PixelGetMagickColor(bordercolor,&target);
3622 wand->images->fuzz=fuzz;
3623 status=FloodfillPaintImage(wand->images,draw_info,&target,x,y,invert,
3625 draw_info=DestroyDrawInfo(draw_info);
3652 WandExport MagickBooleanType MagickFlopImage(
MagickWand *wand)
3658 assert(wand->signature == MagickWandSignature);
3659 if (wand->debug != MagickFalse)
3660 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
3661 if (wand->images == (Image *) NULL)
3662 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
3663 flop_image=FlopImage(wand->images,wand->exception);
3664 if (flop_image == (Image *) NULL)
3665 return(MagickFalse);
3666 ReplaceImageInList(&wand->images,flop_image);
3698 WandExport MagickBooleanType MagickForwardFourierTransformImage(
3699 MagickWand *wand,
const MagickBooleanType magnitude)
3705 assert(wand->signature == MagickWandSignature);
3706 if (wand->debug != MagickFalse)
3707 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
3708 if (wand->images == (Image *) NULL)
3709 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
3710 forward_image=ForwardFourierTransformImage(wand->images,magnitude,
3712 if (forward_image == (Image *) NULL)
3713 return(MagickFalse);
3714 ReplaceImageInList(&wand->images,forward_image);
3758 WandExport MagickBooleanType MagickFrameImage(
MagickWand *wand,
3759 const PixelWand *matte_color,
const size_t width,
const size_t height,
3760 const ssize_t inner_bevel,
const ssize_t outer_bevel,
3761 const CompositeOperator compose)
3770 assert(wand->signature == MagickWandSignature);
3771 if (wand->debug != MagickFalse)
3772 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
3773 if (wand->images == (Image *) NULL)
3774 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
3775 (void) memset(&frame_info,0,
sizeof(frame_info));
3776 frame_info.width=wand->images->columns+2*width;
3777 frame_info.height=wand->images->rows+2*height;
3778 frame_info.x=(ssize_t) width;
3779 frame_info.y=(ssize_t) height;
3780 frame_info.inner_bevel=inner_bevel;
3781 frame_info.outer_bevel=outer_bevel;
3782 PixelGetQuantumPacket(matte_color,&wand->images->matte_color);
3783 frame_image=FrameImage(wand->images,&frame_info,compose,wand->exception);
3784 if (frame_image == (Image *) NULL)
3785 return(MagickFalse);
3786 ReplaceImageInList(&wand->images,frame_image);
3823 WandExport MagickBooleanType MagickFunctionImage(
MagickWand *wand,
3824 const MagickFunction
function,
const size_t number_arguments,
3825 const double *arguments)
3831 assert(wand->signature == MagickWandSignature);
3832 if (wand->debug != MagickFalse)
3833 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
3834 if (wand->images == (Image *) NULL)
3835 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
3836 status=FunctionImage(wand->images,
function,number_arguments,arguments,
3871 assert(wand->signature == MagickWandSignature);
3872 if (wand->debug != MagickFalse)
3873 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
3874 if (wand->images == (Image *) NULL)
3876 fx_image=FxImage(wand->images,expression,wand->exception);
3877 if (fx_image == (Image *) NULL)
3879 return(CloneMagickWandFromImages(wand,fx_image));
3913 WandExport MagickBooleanType MagickGammaImage(
MagickWand *wand,
3920 assert(wand->signature == MagickWandSignature);
3921 if (wand->debug != MagickFalse)
3922 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
3923 if (wand->images == (Image *) NULL)
3924 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
3925 status=GammaImage(wand->images,gamma,wand->exception);
3960 WandExport MagickBooleanType MagickGaussianBlurImage(
MagickWand *wand,
3961 const double radius,
const double sigma)
3967 assert(wand->signature == MagickWandSignature);
3968 if (wand->debug != MagickFalse)
3969 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
3970 if (wand->images == (Image *) NULL)
3971 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
3972 blur_image=GaussianBlurImage(wand->images,radius,sigma,wand->exception);
3973 if (blur_image == (Image *) NULL)
3974 return(MagickFalse);
3975 ReplaceImageInList(&wand->images,blur_image);
4007 assert(wand->signature == MagickWandSignature);
4008 if (wand->debug != MagickFalse)
4009 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
4010 if (wand->images == (Image *) NULL)
4012 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
4013 "ContainsNoImages",
"`%s'",wand->name);
4016 image=CloneImage(wand->images,0,0,MagickTrue,wand->exception);
4017 if (image == (Image *) NULL)
4019 return(CloneMagickWandFromImages(wand,image));
4046 WandExport MagickBooleanType MagickGetImageAlphaChannel(
MagickWand *wand)
4049 assert(wand->signature == MagickWandSignature);
4050 if (wand->debug != MagickFalse)
4051 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
4052 if (wand->images == (Image *) NULL)
4053 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
4054 return(GetImageAlphaChannel(wand->images));
4082 const PixelMask type)
4088 assert(wand->signature == MagickWandSignature);
4089 if (wand->debug != MagickFalse)
4090 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
4091 if (wand->images == (Image *) NULL)
4093 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
4094 "ContainsNoImages",
"`%s'",wand->name);
4097 image=GetImageMask(wand->images,type,wand->exception);
4098 if (image == (Image *) NULL)
4100 return(CloneMagickWandFromImages(wand,image));
4128 WandExport MagickBooleanType MagickGetImageBackgroundColor(
MagickWand *wand,
4132 assert(wand->signature == MagickWandSignature);
4133 if (wand->debug != MagickFalse)
4134 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
4135 if (wand->images == (Image *) NULL)
4136 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
4137 PixelSetPixelColor(background_color,&wand->images->background_color);
4173 WandExport
unsigned char *MagickGetImageBlob(
MagickWand *wand,
size_t *length)
4179 assert(wand->signature == MagickWandSignature);
4180 if (wand->debug != MagickFalse)
4181 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
4182 if (wand->images == (Image *) NULL)
4184 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
4185 "ContainsNoImages",
"`%s'",wand->name);
4186 return((
unsigned char *) NULL);
4188 blob=(
unsigned char *) ImageToBlob(wand->image_info,wand->images,length,
4224 WandExport
unsigned char *MagickGetImagesBlob(
MagickWand *wand,
size_t *length)
4230 assert(wand->signature == MagickWandSignature);
4231 if (wand->debug != MagickFalse)
4232 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
4233 if (wand->images == (Image *) NULL)
4235 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
4236 "ContainsNoImages",
"`%s'",wand->name);
4237 return((
unsigned char *) NULL);
4239 blob=(
unsigned char *) ImagesToBlob(wand->image_info,GetFirstImageInList(
4240 wand->images),length,wand->exception);
4274 WandExport MagickBooleanType MagickGetImageBluePrimary(
MagickWand *wand,
4275 double *x,
double *y,
double *z)
4278 assert(wand->signature == MagickWandSignature);
4279 if (wand->debug != MagickFalse)
4280 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
4281 if (wand->images == (Image *) NULL)
4282 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
4283 *x=wand->images->chromaticity.blue_primary.x;
4284 *y=wand->images->chromaticity.blue_primary.y;
4285 *z=wand->images->chromaticity.blue_primary.z;
4314 WandExport MagickBooleanType MagickGetImageBorderColor(
MagickWand *wand,
4318 assert(wand->signature == MagickWandSignature);
4319 if (wand->debug != MagickFalse)
4320 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
4321 if (wand->images == (Image *) NULL)
4322 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
4323 PixelSetPixelColor(border_color,&wand->images->border_color);
4365 WandExport ChannelFeatures *MagickGetImageFeatures(
MagickWand *wand,
4366 const size_t distance)
4369 assert(wand->signature == MagickWandSignature);
4370 if (wand->debug != MagickFalse)
4371 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
4372 if (wand->images == (Image *) NULL)
4374 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
4375 "ContainsNoImages",
"`%s'",wand->name);
4376 return((ChannelFeatures *) NULL);
4378 return(GetImageFeatures(wand->images,distance,wand->exception));
4409 WandExport MagickBooleanType MagickGetImageKurtosis(
MagickWand *wand,
4410 double *kurtosis,
double *skewness)
4416 assert(wand->signature == MagickWandSignature);
4417 if (wand->debug != MagickFalse)
4418 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
4419 if (wand->images == (Image *) NULL)
4420 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
4421 status=GetImageKurtosis(wand->images,kurtosis,skewness,wand->exception);
4455 WandExport MagickBooleanType MagickGetImageMean(
MagickWand *wand,
double *mean,
4456 double *standard_deviation)
4462 assert(wand->signature == MagickWandSignature);
4463 if (wand->debug != MagickFalse)
4464 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
4465 if (wand->images == (Image *) NULL)
4466 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
4467 status=GetImageMean(wand->images,mean,standard_deviation,wand->exception);
4498 WandExport MagickBooleanType MagickGetImageRange(
MagickWand *wand,
4499 double *minima,
double *maxima)
4505 assert(wand->signature == MagickWandSignature);
4506 if (wand->debug != MagickFalse)
4507 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
4508 if (wand->images == (Image *) NULL)
4509 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
4510 status=GetImageRange(wand->images,minima,maxima,wand->exception);
4544 WandExport ChannelStatistics *MagickGetImageStatistics(
MagickWand *wand)
4547 assert(wand->signature == MagickWandSignature);
4548 if (wand->debug != MagickFalse)
4549 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
4550 if (wand->images == (Image *) NULL)
4552 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
4553 "ContainsNoImages",
"`%s'",wand->name);
4554 return((ChannelStatistics *) NULL);
4556 return(GetImageStatistics(wand->images,wand->exception));
4587 WandExport MagickBooleanType MagickGetImageColormapColor(
MagickWand *wand,
4591 assert(wand->signature == MagickWandSignature);
4592 if (wand->debug != MagickFalse)
4593 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
4594 if (wand->images == (Image *) NULL)
4595 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
4596 if ((wand->images->colormap == (PixelInfo *) NULL) ||
4597 (index >= wand->images->colors))
4599 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
4600 "InvalidColormapIndex",
"`%s'",wand->name);
4601 return(MagickFalse);
4603 PixelSetPixelColor(color,wand->images->colormap+index);
4629 WandExport
size_t MagickGetImageColors(
MagickWand *wand)
4632 assert(wand->signature == MagickWandSignature);
4633 if (wand->debug != MagickFalse)
4634 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
4635 if (wand->images == (Image *) NULL)
4637 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
4638 "ContainsNoImages",
"`%s'",wand->name);
4641 return(GetNumberColors(wand->images,(FILE *) NULL,wand->exception));
4666 WandExport ColorspaceType MagickGetImageColorspace(
MagickWand *wand)
4669 assert(wand->signature == MagickWandSignature);
4670 if (wand->debug != MagickFalse)
4671 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
4672 if (wand->images == (Image *) NULL)
4674 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
4675 "ContainsNoImages",
"`%s'",wand->name);
4676 return(UndefinedColorspace);
4678 return(wand->images->colorspace);
4704 WandExport CompositeOperator MagickGetImageCompose(
MagickWand *wand)
4707 assert(wand->signature == MagickWandSignature);
4708 if (wand->debug != MagickFalse)
4709 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
4710 if (wand->images == (Image *) NULL)
4712 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
4713 "ContainsNoImages",
"`%s'",wand->name);
4714 return(UndefinedCompositeOp);
4716 return(wand->images->compose);
4741 WandExport CompressionType MagickGetImageCompression(
MagickWand *wand)
4744 assert(wand->signature == MagickWandSignature);
4745 if (wand->debug != MagickFalse)
4746 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
4747 if (wand->images == (Image *) NULL)
4749 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
4750 "ContainsNoImages",
"`%s'",wand->name);
4751 return(UndefinedCompression);
4753 return(wand->images->compression);
4778 WandExport
size_t MagickGetImageCompressionQuality(
MagickWand *wand)
4781 assert(wand->signature == MagickWandSignature);
4782 if (wand->debug != MagickFalse)
4783 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
4784 if (wand->images == (Image *) NULL)
4786 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
4787 "ContainsNoImages",
"`%s'",wand->name);
4790 return(wand->images->quality);
4815 WandExport
size_t MagickGetImageDelay(
MagickWand *wand)
4818 assert(wand->signature == MagickWandSignature);
4819 if (wand->debug != MagickFalse)
4820 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
4821 if (wand->images == (Image *) NULL)
4822 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
4823 return(wand->images->delay);
4848 WandExport
size_t MagickGetImageDepth(
MagickWand *wand)
4851 assert(wand->signature == MagickWandSignature);
4852 if (wand->debug != MagickFalse)
4853 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
4854 if (wand->images == (Image *) NULL)
4855 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
4856 return(wand->images->depth);
4881 WandExport DisposeType MagickGetImageDispose(
MagickWand *wand)
4884 assert(wand->signature == MagickWandSignature);
4885 if (wand->debug != MagickFalse)
4886 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
4887 if (wand->images == (Image *) NULL)
4889 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
4890 "ContainsNoImages",
"`%s'",wand->name);
4891 return(UndefinedDispose);
4893 return((DisposeType) wand->images->dispose);
4927 WandExport MagickBooleanType MagickGetImageDistortion(
MagickWand *wand,
4928 const MagickWand *reference,
const MetricType metric,
double *distortion)
4934 assert(wand->signature == MagickWandSignature);
4935 if (wand->debug != MagickFalse)
4936 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
4937 if ((wand->images == (Image *) NULL) || (reference->images == (Image *) NULL))
4938 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
4939 status=GetImageDistortion(wand->images,reference->images,metric,distortion,
4974 WandExport
double *MagickGetImageDistortions(
MagickWand *wand,
4975 const MagickWand *reference,
const MetricType metric)
4978 *channel_distortion;
4981 assert(wand->signature == MagickWandSignature);
4982 if (wand->debug != MagickFalse)
4983 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
4985 assert(reference->signature == MagickWandSignature);
4986 if ((wand->images == (Image *) NULL) || (reference->images == (Image *) NULL))
4988 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
4989 "ContainsNoImages",
"`%s'",wand->name);
4990 return((
double *) NULL);
4992 channel_distortion=GetImageDistortions(wand->images,reference->images,
4993 metric,wand->exception);
4994 return(channel_distortion);
5019 WandExport EndianType MagickGetImageEndian(
MagickWand *wand)
5022 assert(wand->signature == MagickWandSignature);
5023 if (wand->debug != MagickFalse)
5024 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
5025 if (wand->images == (Image *) NULL)
5027 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
5028 "ContainsNoImages",
"`%s'",wand->name);
5029 return(UndefinedEndian);
5031 return(wand->images->endian);
5057 WandExport
char *MagickGetImageFilename(
MagickWand *wand)
5060 assert(wand->signature == MagickWandSignature);
5061 if (wand->debug != MagickFalse)
5062 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
5063 if (wand->images == (Image *) NULL)
5065 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
5066 "ContainsNoImages",
"`%s'",wand->name);
5067 return((
char *) NULL);
5069 return(AcquireString(wand->images->filename));
5095 WandExport
char *MagickGetImageFormat(
MagickWand *wand)
5098 assert(wand->signature == MagickWandSignature);
5099 if (wand->debug != MagickFalse)
5100 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
5101 if (wand->images == (Image *) NULL)
5103 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
5104 "ContainsNoImages",
"`%s'",wand->name);
5105 return((
char *) NULL);
5107 return(AcquireString(wand->images->magick));
5132 WandExport
double MagickGetImageFuzz(
MagickWand *wand)
5135 assert(wand->signature == MagickWandSignature);
5136 if (wand->debug != MagickFalse)
5137 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
5138 if (wand->images == (Image *) NULL)
5140 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
5141 "ContainsNoImages",
"`%s'",wand->name);
5144 return(wand->images->fuzz);
5169 WandExport
double MagickGetImageGamma(
MagickWand *wand)
5172 assert(wand->signature == MagickWandSignature);
5173 if (wand->debug != MagickFalse)
5174 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
5175 if (wand->images == (Image *) NULL)
5177 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
5178 "ContainsNoImages",
"`%s'",wand->name);
5181 return(wand->images->gamma);
5206 WandExport GravityType MagickGetImageGravity(
MagickWand *wand)
5209 assert(wand->signature == MagickWandSignature);
5210 if (wand->debug != MagickFalse)
5211 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
5212 if (wand->images == (Image *) NULL)
5214 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
5215 "ContainsNoImages",
"`%s'",wand->name);
5216 return(UndefinedGravity);
5218 return(wand->images->gravity);
5250 WandExport MagickBooleanType MagickGetImageGreenPrimary(
MagickWand *wand,
5251 double *x,
double *y,
double *z)
5254 assert(wand->signature == MagickWandSignature);
5255 if (wand->debug != MagickFalse)
5256 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
5257 if (wand->images == (Image *) NULL)
5258 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
5259 *x=wand->images->chromaticity.green_primary.x;
5260 *y=wand->images->chromaticity.green_primary.y;
5261 *z=wand->images->chromaticity.green_primary.z;
5287 WandExport
size_t MagickGetImageHeight(
MagickWand *wand)
5290 assert(wand->signature == MagickWandSignature);
5291 if (wand->debug != MagickFalse)
5292 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
5293 if (wand->images == (Image *) NULL)
5294 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
5295 return(wand->images->rows);
5326 size_t *number_colors)
5338 assert(wand->signature == MagickWandSignature);
5339 if (wand->debug != MagickFalse)
5340 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
5341 if (wand->images == (Image *) NULL)
5343 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
5344 "ContainsNoImages",
"`%s'",wand->name);
5347 histogram=GetImageHistogram(wand->images,number_colors,wand->exception);
5348 if (histogram == (PixelInfo *) NULL)
5350 pixel_wands=NewPixelWands(*number_colors);
5351 for (i=0; i < (ssize_t) *number_colors; i++)
5353 PixelSetPixelColor(pixel_wands[i],&histogram[i]);
5354 PixelSetColorCount(pixel_wands[i],(
size_t) histogram[i].count);
5356 histogram=(PixelInfo *) RelinquishMagickMemory(histogram);
5357 return(pixel_wands);
5382 WandExport InterlaceType MagickGetImageInterlaceScheme(
MagickWand *wand)
5385 assert(wand->signature == MagickWandSignature);
5386 if (wand->debug != MagickFalse)
5387 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
5388 if (wand->images == (Image *) NULL)
5390 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
5391 "ContainsNoImages",
"`%s'",wand->name);
5392 return(UndefinedInterlace);
5394 return(wand->images->interlace);
5420 WandExport PixelInterpolateMethod MagickGetImageInterpolateMethod(
5424 assert(wand->signature == MagickWandSignature);
5425 if (wand->debug != MagickFalse)
5426 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
5427 if (wand->images == (Image *) NULL)
5429 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
5430 "ContainsNoImages",
"`%s'",wand->name);
5431 return(UndefinedInterpolatePixel);
5433 return(wand->images->interpolate);
5458 WandExport
size_t MagickGetImageIterations(
MagickWand *wand)
5461 assert(wand->signature == MagickWandSignature);
5462 if (wand->debug != MagickFalse)
5463 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
5464 if (wand->images == (Image *) NULL)
5465 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
5466 return(wand->images->iterations);
5494 WandExport MagickBooleanType MagickGetImageLength(
MagickWand *wand,
5495 MagickSizeType *length)
5498 assert(wand->signature == MagickWandSignature);
5499 if (wand->debug != MagickFalse)
5500 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
5501 if (wand->images == (Image *) NULL)
5502 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
5503 *length=GetBlobSize(wand->images);
5532 WandExport MagickBooleanType MagickGetImageMatteColor(
MagickWand *wand,
5536 assert(wand->signature == MagickWandSignature);
5537 if (wand->debug != MagickFalse)
5538 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
5539 if (wand->images == (Image *)NULL)
5540 ThrowWandException(WandError,
"ContainsNoImages", wand->name);
5541 PixelSetPixelColor(matte_color,&wand->images->matte_color);
5567 WandExport OrientationType MagickGetImageOrientation(
MagickWand *wand)
5570 assert(wand->signature == MagickWandSignature);
5571 if (wand->debug != MagickFalse)
5572 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
5573 if (wand->images == (Image *) NULL)
5575 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
5576 "ContainsNoImages",
"`%s'",wand->name);
5577 return(UndefinedOrientation);
5579 return(wand->images->orientation);
5613 WandExport MagickBooleanType MagickGetImagePage(
MagickWand *wand,
5614 size_t *width,
size_t *height,ssize_t *x,ssize_t *y)
5617 assert(wand->signature == MagickWandSignature);
5618 if (wand->debug != MagickFalse)
5619 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
5620 if (wand->images == (Image *) NULL)
5621 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
5622 *width=wand->images->page.width;
5623 *height=wand->images->page.height;
5624 *x=wand->images->page.x;
5625 *y=wand->images->page.y;
5656 WandExport MagickBooleanType MagickGetImagePixelColor(
MagickWand *wand,
5657 const ssize_t x,
const ssize_t y,
PixelWand *color)
5666 assert(wand->signature == MagickWandSignature);
5667 if (wand->debug != MagickFalse)
5668 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
5669 if (wand->images == (Image *) NULL)
5670 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
5671 image_view=AcquireVirtualCacheView(wand->images,wand->exception);
5672 p=GetCacheViewVirtualPixels(image_view,x,y,1,1,wand->exception);
5673 if (p == (
const Quantum *) NULL)
5675 image_view=DestroyCacheView(image_view);
5676 return(MagickFalse);
5678 PixelSetQuantumPixel(wand->images,p,color);
5679 image_view=DestroyCacheView(image_view);
5712 WandExport MagickBooleanType MagickGetImageRedPrimary(
MagickWand *wand,
5713 double *x,
double *y,
double *z)
5716 assert(wand->signature == MagickWandSignature);
5717 if (wand->debug != MagickFalse)
5718 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
5719 if (wand->images == (Image *) NULL)
5720 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
5721 *x=wand->images->chromaticity.red_primary.x;
5722 *y=wand->images->chromaticity.red_primary.y;
5723 *z=wand->images->chromaticity.red_primary.z;
5761 const size_t width,
const size_t height,
const ssize_t x,
5771 assert(wand->signature == MagickWandSignature);
5772 if (wand->debug != MagickFalse)
5773 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
5774 if (wand->images == (Image *) NULL)
5777 region.height=height;
5780 region_image=CropImage(wand->images,®ion,wand->exception);
5781 if (region_image == (Image *) NULL)
5783 return(CloneMagickWandFromImages(wand,region_image));
5808 WandExport RenderingIntent MagickGetImageRenderingIntent(
MagickWand *wand)
5811 assert(wand->signature == MagickWandSignature);
5812 if (wand->debug != MagickFalse)
5813 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
5814 if (wand->images == (Image *) NULL)
5816 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
5817 "ContainsNoImages",
"`%s'",wand->name);
5818 return(UndefinedIntent);
5820 return((RenderingIntent) wand->images->rendering_intent);
5850 WandExport MagickBooleanType MagickGetImageResolution(
MagickWand *wand,
5851 double *x,
double *y)
5854 assert(wand->signature == MagickWandSignature);
5855 if (wand->debug != MagickFalse)
5856 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
5857 if (wand->images == (Image *) NULL)
5858 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
5859 *x=wand->images->resolution.x;
5860 *y=wand->images->resolution.y;
5886 WandExport
size_t MagickGetImageScene(
MagickWand *wand)
5889 assert(wand->signature == MagickWandSignature);
5890 if (wand->debug != MagickFalse)
5891 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
5892 if (wand->images == (Image *) NULL)
5893 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
5894 return(wand->images->scene);
5920 WandExport
char *MagickGetImageSignature(
MagickWand *wand)
5929 assert(wand->signature == MagickWandSignature);
5930 if (wand->debug != MagickFalse)
5931 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
5932 if (wand->images == (Image *) NULL)
5934 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
5935 "ContainsNoImages",
"`%s'",wand->name);
5936 return((
char *) NULL);
5938 status=SignatureImage(wand->images,wand->exception);
5939 if (status == MagickFalse)
5940 return((
char *) NULL);
5941 value=GetImageProperty(wand->images,
"signature",wand->exception);
5942 if (value == (
const char *) NULL)
5943 return((
char *) NULL);
5944 return(AcquireString(value));
5969 WandExport
size_t MagickGetImageTicksPerSecond(
MagickWand *wand)
5972 assert(wand->signature == MagickWandSignature);
5973 if (wand->debug != MagickFalse)
5974 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
5975 if (wand->images == (Image *) NULL)
5976 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
5977 return((
size_t) wand->images->ticks_per_second);
6006 WandExport ImageType MagickGetImageType(
MagickWand *wand)
6009 assert(wand->signature == MagickWandSignature);
6010 if (wand->debug != MagickFalse)
6011 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
6012 if (wand->images == (Image *) NULL)
6014 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
6015 "ContainsNoImages",
"`%s'",wand->name);
6016 return(UndefinedType);
6018 return(GetImageType(wand->images));
6043 WandExport ResolutionType MagickGetImageUnits(
MagickWand *wand)
6046 assert(wand->signature == MagickWandSignature);
6047 if (wand->debug != MagickFalse)
6048 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
6049 if (wand->images == (Image *) NULL)
6051 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
6052 "ContainsNoImages",
"`%s'",wand->name);
6053 return(UndefinedResolution);
6055 return(wand->images->units);
6081 WandExport VirtualPixelMethod MagickGetImageVirtualPixelMethod(
MagickWand *wand)
6084 assert(wand->signature == MagickWandSignature);
6085 if (wand->debug != MagickFalse)
6086 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
6087 if (wand->images == (Image *) NULL)
6089 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
6090 "ContainsNoImages",
"`%s'",wand->name);
6091 return(UndefinedVirtualPixelMethod);
6093 return(GetImageVirtualPixelMethod(wand->images));
6125 WandExport MagickBooleanType MagickGetImageWhitePoint(
MagickWand *wand,
6126 double *x,
double *y,
double *z)
6129 assert(wand->signature == MagickWandSignature);
6130 if (wand->debug != MagickFalse)
6131 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
6132 if (wand->images == (Image *) NULL)
6133 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
6134 *x=wand->images->chromaticity.white_point.x;
6135 *y=wand->images->chromaticity.white_point.y;
6136 *z=wand->images->chromaticity.white_point.z;
6162 WandExport
size_t MagickGetImageWidth(
MagickWand *wand)
6165 assert(wand->signature == MagickWandSignature);
6166 if (wand->debug != MagickFalse)
6167 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
6168 if (wand->images == (Image *) NULL)
6169 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
6170 return(wand->images->columns);
6196 WandExport
size_t MagickGetNumberImages(
MagickWand *wand)
6199 assert(wand->signature == MagickWandSignature);
6200 if (wand->debug != MagickFalse)
6201 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
6202 return(GetImageListLength(wand->images));
6227 WandExport
double MagickGetImageTotalInkDensity(
MagickWand *wand)
6230 assert(wand->signature == MagickWandSignature);
6231 if (wand->debug != MagickFalse)
6232 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
6233 if (wand->images == (Image *) NULL)
6235 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
6236 "ContainsNoImages",
"`%s'",wand->name);
6239 return(GetImageTotalInkDensity(wand->images,wand->exception));
6271 WandExport MagickBooleanType MagickHaldClutImage(
MagickWand *wand,
6278 assert(wand->signature == MagickWandSignature);
6279 if (wand->debug != MagickFalse)
6280 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
6281 if ((wand->images == (Image *) NULL) || (hald_wand->images == (Image *) NULL))
6282 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
6283 status=HaldClutImage(wand->images,hald_wand->images,wand->exception);
6310 WandExport MagickBooleanType MagickHasNextImage(
MagickWand *wand)
6313 assert(wand->signature == MagickWandSignature);
6314 if (wand->debug != MagickFalse)
6315 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
6316 if (wand->images == (Image *) NULL)
6317 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
6318 if (GetNextImageInList(wand->images) == (Image *) NULL)
6319 return(MagickFalse);
6346 WandExport MagickBooleanType MagickHasPreviousImage(
MagickWand *wand)
6349 assert(wand->signature == MagickWandSignature);
6350 if (wand->debug != MagickFalse)
6351 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
6352 if (wand->images == (Image *) NULL)
6353 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
6354 if (GetPreviousImageInList(wand->images) == (Image *) NULL)
6355 return(MagickFalse);
6396 WandExport MagickBooleanType MagickHoughLineImage(
MagickWand *wand,
6397 const size_t width,
const size_t height,
const size_t threshold)
6403 assert(wand->signature == MagickWandSignature);
6404 if (wand->debug != MagickFalse)
6405 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
6406 if (wand->images == (Image *) NULL)
6407 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
6408 lines_image=HoughLineImage(wand->images,width,height,threshold,
6410 if (lines_image == (Image *) NULL)
6411 return(MagickFalse);
6412 ReplaceImageInList(&wand->images,lines_image);
6439 WandExport
char *MagickIdentifyImage(
MagickWand *wand)
6443 filename[MagickPathExtent];
6452 assert(wand->signature == MagickWandSignature);
6453 if (wand->debug != MagickFalse)
6454 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
6455 if (wand->images == (Image *) NULL)
6457 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
6458 "ContainsNoImages",
"`%s'",wand->name);
6459 return((
char *) NULL);
6461 description=(
char *) NULL;
6462 unique_file=AcquireUniqueFileResource(filename);
6464 if (unique_file != -1)
6465 file=fdopen(unique_file,
"wb");
6466 if ((unique_file == -1) || (file == (FILE *) NULL))
6468 (void) RelinquishUniqueFileResource(filename);
6469 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
6470 "UnableToCreateTemporaryFile",
"`%s'",wand->name);
6471 return((
char *) NULL);
6473 (void) IdentifyImage(wand->images,file,MagickTrue,wand->exception);
6474 (void) fclose(file);
6475 description=FileToString(filename,~0UL,wand->exception);
6476 (void) RelinquishUniqueFileResource(filename);
6477 return(description);
6510 WandExport ImageType MagickIdentifyImageType(
MagickWand *wand)
6513 assert(wand->signature == MagickWandSignature);
6514 if (wand->debug != MagickFalse)
6515 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
6516 if (wand->images == (Image *) NULL)
6518 (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
6519 "ContainsNoImages",
"`%s'",wand->name);
6520 return(UndefinedType);
6522 return(IdentifyImageType(wand->images,wand->exception));
6555 WandExport MagickBooleanType MagickImplodeImage(
MagickWand *wand,
6556 const double amount,
const PixelInterpolateMethod method)
6562 assert(wand->signature == MagickWandSignature);
6563 if (wand->debug != MagickFalse)
6564 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
6565 if (wand->images == (Image *) NULL)
6566 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
6567 implode_image=ImplodeImage(wand->images,amount,method,wand->exception);
6568 if (implode_image == (Image *) NULL)
6569 return(MagickFalse);
6570 ReplaceImageInList(&wand->images,implode_image);
6625 WandExport MagickBooleanType MagickImportImagePixels(
MagickWand *wand,
6626 const ssize_t x,
const ssize_t y,
const size_t columns,
const size_t rows,
6627 const char *map,
const StorageType storage,
const void *pixels)
6633 assert(wand->signature == MagickWandSignature);
6634 if (wand->debug != MagickFalse)
6635 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
6636 if (wand->images == (Image *) NULL)
6637 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
6638 status=ImportImagePixels(wand->images,x,y,columns,rows,map,storage,pixels,
6672 WandExport MagickBooleanType MagickInterpolativeResizeImage(
MagickWand *wand,
6673 const size_t columns,
const size_t rows,
const PixelInterpolateMethod method)
6679 assert(wand->signature == MagickWandSignature);
6680 if (wand->debug != MagickFalse)
6681 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
6682 if (wand->images == (Image *) NULL)
6683 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
6684 resize_image=InterpolativeResizeImage(wand->images,columns,rows,method,
6686 if (resize_image == (Image *) NULL)
6687 return(MagickFalse);
6688 ReplaceImageInList(&wand->images,resize_image);
6723 WandExport MagickBooleanType MagickInverseFourierTransformImage(
6725 const MagickBooleanType magnitude)
6733 assert(magnitude_wand != (
MagickWand *) NULL);
6734 assert(magnitude_wand->signature == MagickWandSignature);
6735 if (magnitude_wand->debug != MagickFalse)
6736 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",
6737 magnitude_wand->name);
6738 wand=magnitude_wand;
6739 if (magnitude_wand->images == (Image *) NULL)
6740 ThrowWandException(WandError,
"ContainsNoImages",
6741 magnitude_wand->name);
6743 assert(phase_wand->signature == MagickWandSignature);
6744 inverse_image=InverseFourierTransformImage(magnitude_wand->images,
6745 phase_wand->images,magnitude,wand->exception);
6746 if (inverse_image == (Image *) NULL)
6747 return(MagickFalse);
6748 ReplaceImageInList(&wand->images,inverse_image);
6783 WandExport MagickBooleanType MagickKmeansImage(
MagickWand *wand,
6784 const size_t number_colors,
const size_t max_iterations,
6785 const double tolerance)
6791 assert(wand->signature == MagickWandSignature);
6792 if (wand->debug != MagickFalse)
6793 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
6794 if (wand->images == (Image *) NULL)
6795 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
6796 status=KmeansImage(wand->images,number_colors,max_iterations,tolerance,
6828 WandExport MagickBooleanType MagickKuwaharaImage(
MagickWand *wand,
6829 const double radius,
const double sigma)
6835 assert(wand->signature == MagickWandSignature);
6836 if (wand->debug != MagickFalse)
6837 (void) LogMagickEvent(WandEvent,GetMagickModule(),
"%s",wand->name);
6838 if (wand->images == (Image *) NULL)
6839 ThrowWandException(WandError,
"ContainsNoImages",wand->name);
6840 kuwahara_image=KuwaharaImage(wand->images,radius,sigma,wand->exception);
6841 if (kuwahara_image == (Image *) NULL)
6842 return(MagickFalse);
6843 ReplaceImageInList(&wand->images,kuwahara_image);