11#define MAGICKCORE_IMPLEMENTATION 1
12#define MAGICK_PLUSPLUS_IMPLEMENTATION 1
14#include "Magick++/Include.h"
15#include "Magick++/Image.h"
16#include "Magick++/Functions.h"
17#include "Magick++/Pixels.h"
18#include "Magick++/Options.h"
19#include "Magick++/ImageRef.h"
23#define MagickPI 3.1415926535897932384626433832795028841971693993751058209749445923078164062
24#define DegreesToRadians(x) (MagickPI*(x)/180.0)
25#define ThrowImageException ThrowPPException(quiet())
27MagickPPExport
const char *Magick::borderGeometryDefault=
"6x6+0+0";
28MagickPPExport
const char *Magick::frameGeometryDefault=
"25x25+6+6";
29MagickPPExport
const char *Magick::raiseGeometryDefault=
"6x6+0+0";
31MagickPPExport
int Magick::operator == (
const Magick::Image &left_,
35 return((left_.rows() == right_.rows()) &&
36 (left_.columns() == right_.columns()) &&
37 (left_.signature() == right_.signature()));
40MagickPPExport
int Magick::operator != (
const Magick::Image &left_,
43 return(!(left_ == right_));
46MagickPPExport
int Magick::operator > (
const Magick::Image &left_,
49 return(!(left_ < right_) && (left_ != right_));
52MagickPPExport
int Magick::operator < (
const Magick::Image &left_,
56 return((left_.rows() * left_.columns()) <
57 (right_.rows() * right_.columns()));
60MagickPPExport
int Magick::operator >= (
const Magick::Image &left_,
63 return((left_ > right_) || (left_ == right_));
66MagickPPExport
int Magick::operator <= (
const Magick::Image &left_,
69 return((left_ < right_) || ( left_ == right_));
72Magick::Image::Image(
void)
73 : _imgRef(new ImageRef)
77Magick::Image::Image(
const Blob &blob_)
78 : _imgRef(new ImageRef)
95Magick::Image::Image(
const Blob &blob_,
const Geometry &size_)
96 : _imgRef(new ImageRef)
113Magick::Image::Image(
const Blob &blob_,
const Geometry &size_,
115 : _imgRef(new ImageRef)
121 read(blob_,size_,depth_);
132Magick::Image::Image(
const Blob &blob_,
const Geometry &size_,
133 const size_t depth_,
const std::string &magick_)
134 : _imgRef(new ImageRef)
140 read(blob_,size_,depth_,magick_);
151Magick::Image::Image(
const Blob &blob_,
const Geometry &size_,
152 const std::string &magick_)
153 : _imgRef(new ImageRef)
159 read(blob_,size_,magick_);
170Magick::Image::Image(
const Geometry &size_,
const Color &color_)
171 : _imgRef(new ImageRef)
174 std::string imageSpec(
"xc:");
195Magick::Image::Image(
const Image &image_)
196 : _imgRef(image_._imgRef)
201Magick::Image::Image(
const Image &image_,
const Geometry &geometry_)
202 : _imgRef(new ImageRef)
214 image=CloneImage(image_.constImage(),geometry_.width(),geometry_.height(),
215 MagickTrue,exceptionInfo);
217 _imgRef->options(
new Options(*image_.constOptions()));
220 (void) CopyImagePixels(image,image_.constImage(),&geometry,&offset,
225Magick::Image::Image(
const size_t width_,
const size_t height_,
226 const std::string &map_,
const StorageType type_,
const void *pixels_)
227 : _imgRef(new ImageRef)
232 read(width_,height_,map_.c_str(),type_,pixels_);
243Magick::Image::Image(
const std::string &imageSpec_)
244 : _imgRef(new ImageRef)
261Magick::Image::~Image()
265 if (_imgRef->decrease() == 0)
268 catch(Magick::Exception&)
272 _imgRef=(Magick::ImageRef *) NULL;
275Magick::Image& Magick::Image::operator=(
const Magick::Image &image_)
279 image_._imgRef->increase();
280 if (_imgRef->decrease() == 0)
284 _imgRef=image_._imgRef;
289void Magick::Image::adjoin(
const bool flag_)
292 options()->adjoin(flag_);
295bool Magick::Image::adjoin(
void)
const
297 return(constOptions()->adjoin());
300void Magick::Image::alpha(
const bool alphaFlag_)
309 if (
bool(alphaFlag_) !=
bool(constImage()->alpha_trait))
310 SetImageAlpha(image(),OpaqueAlpha,exceptionInfo);
313 image()->alpha_trait=alphaFlag_ ? BlendPixelTrait : UndefinedPixelTrait;
316bool Magick::Image::alpha(
void)
const
318 if (constImage()->alpha_trait == BlendPixelTrait)
324void Magick::Image::matteColor(
const Color &matteColor_)
328 if (matteColor_.isValid())
330 image()->matte_color=matteColor_;
331 options()->matteColor(matteColor_);
336 Color tmpColor(
"#BDBDBD");
337 image()->matte_color=tmpColor;
338 options()->matteColor(tmpColor);
342Magick::Color Magick::Image::matteColor(
void)
const
344 return(
Color(constImage()->matte_color));
347void Magick::Image::animationDelay(
const size_t delay_)
350 image()->delay=delay_;
353size_t Magick::Image::animationDelay(
void)
const
355 return(constImage()->delay);
358void Magick::Image::animationIterations(
const size_t iterations_)
361 image()->iterations=iterations_;
364size_t Magick::Image::animationIterations(
void)
const
366 return(constImage()->iterations);
369void Magick::Image::backgroundColor(
const Color &backgroundColor_)
373 if (backgroundColor_.isValid())
374 image()->background_color=backgroundColor_;
376 image()->background_color=
Color();
378 options()->backgroundColor(backgroundColor_);
381Magick::Color Magick::Image::backgroundColor(
void)
const
383 return(constOptions()->backgroundColor());
386void Magick::Image::backgroundTexture(
const std::string &backgroundTexture_)
389 options()->backgroundTexture(backgroundTexture_);
392std::string Magick::Image::backgroundTexture(
void)
const
394 return(constOptions()->backgroundTexture());
397size_t Magick::Image::baseColumns(
void)
const
399 return(constImage()->magick_columns);
402std::string Magick::Image::baseFilename(
void)
const
404 return(std::string(constImage()->magick_filename));
407size_t Magick::Image::baseRows(
void)
const
409 return(constImage()->magick_rows);
412void Magick::Image::blackPointCompensation(
const bool flag_)
414 image()->black_point_compensation=(MagickBooleanType) flag_;
417bool Magick::Image::blackPointCompensation(
void)
const
419 return(
static_cast<bool>(constImage()->black_point_compensation));
422void Magick::Image::borderColor(
const Color &borderColor_)
426 if (borderColor_.isValid())
427 image()->border_color=borderColor_;
429 image()->border_color=
Color();
431 options()->borderColor(borderColor_);
434Magick::Color Magick::Image::borderColor(
void)
const
436 return(constOptions()->borderColor());
439Magick::Geometry Magick::Image::boundingBox(
void)
const
445 bbox=GetImageBoundingBox(constImage(),exceptionInfo);
450void Magick::Image::boxColor(
const Color &boxColor_)
453 options()->boxColor(boxColor_);
456Magick::Color Magick::Image::boxColor(
void)
const
458 return(constOptions()->boxColor());
461void Magick::Image::channelDepth(
const ChannelType channel_,
466 GetAndSetPPChannelMask(channel_);
467 SetImageDepth(image(),depth_,exceptionInfo);
468 RestorePPChannelMask;
472size_t Magick::Image::channelDepth(
const ChannelType channel_)
478 GetAndSetPPChannelMask(channel_);
479 channel_depth=GetImageDepth(constImage(),exceptionInfo);
480 RestorePPChannelMask;
482 return(channel_depth);
485size_t Magick::Image::channels()
const
487 return(constImage()->number_channels);
490void Magick::Image::classType(
const ClassType class_)
492 if (classType() == PseudoClass && class_ == DirectClass)
498 SyncImage(image(),exceptionInfo);
500 image()->colormap=(PixelInfo *)RelinquishMagickMemory(image()->colormap);
501 image()->storage_class=
static_cast<MagickCore::ClassType
>(DirectClass);
505 if (classType() == DirectClass && class_ == PseudoClass)
509 quantizeColors(MaxColormapSize);
511 image()->storage_class=
static_cast<MagickCore::ClassType
>(PseudoClass);
515Magick::ClassType Magick::Image::classType(
void)
const
517 return static_cast<Magick::ClassType
>(constImage()->storage_class);
520void Magick::Image::colorFuzz(
const double fuzz_)
524 options()->colorFuzz(fuzz_);
527double Magick::Image::colorFuzz(
void)
const
529 return(constOptions()->colorFuzz());
532void Magick::Image::colorMapSize(
const size_t entries_)
534 if (entries_ >MaxColormapSize)
535 throwExceptionExplicit(MagickCore::OptionError,
536 "Colormap entries must not exceed MaxColormapSize");
540 (void) AcquireImageColormap(image(),entries_,exceptionInfo);
544size_t Magick::Image::colorMapSize(
void)
const
546 if (!constImage()->colormap)
547 throwExceptionExplicit(MagickCore::OptionError,
548 "Image does not contain a colormap");
550 return(constImage()->colors);
553void Magick::Image::colorSpace(
const ColorspaceType colorSpace_)
555 if (image()->colorspace == colorSpace_)
560 TransformImageColorspace(image(),colorSpace_,exceptionInfo);
564Magick::ColorspaceType Magick::Image::colorSpace(
void)
const
566 return (constImage()->colorspace);
569void Magick::Image::colorSpaceType(
const ColorspaceType colorSpace_)
573 SetImageColorspace(image(),colorSpace_,exceptionInfo);
575 options()->colorspaceType(colorSpace_);
578Magick::ColorspaceType Magick::Image::colorSpaceType(
void)
const
580 return(constOptions()->colorspaceType());
583size_t Magick::Image::columns(
void)
const
585 return(constImage()->columns);
588void Magick::Image::comment(
const std::string &comment_)
592 SetImageProperty(image(),
"Comment",NULL,exceptionInfo);
593 if (comment_.length() > 0)
594 SetImageProperty(image(),
"Comment",comment_.c_str(),exceptionInfo);
598std::string Magick::Image::comment(
void)
const
604 value=GetImageProperty(constImage(),
"Comment",exceptionInfo);
608 return(std::string(value));
610 return(std::string());
613void Magick::Image::compose(
const CompositeOperator compose_)
615 image()->compose=compose_;
618Magick::CompositeOperator Magick::Image::compose(
void)
const
620 return(constImage()->compose);
623void Magick::Image::compressType(
const CompressionType compressType_)
626 image()->compression=compressType_;
627 options()->compressType(compressType_);
630Magick::CompressionType Magick::Image::compressType(
void)
const
632 return(constImage()->compression);
635void Magick::Image::debug(
const bool flag_)
638 options()->debug(flag_);
641bool Magick::Image::debug(
void)
const
643 return(constOptions()->debug());
646void Magick::Image::density(
const Point &density_)
649 options()->density(density_);
650 if (density_.isValid())
652 image()->resolution.x=density_.x();
653 if (density_.y() != 0.0)
654 image()->resolution.y=density_.y();
656 image()->resolution.y=density_.x();
661 image()->resolution.x=0.0;
662 image()->resolution.y=0.0;
666Magick::Point Magick::Image::density(
void)
const
674 if (constImage()->resolution.x > 0.0)
675 x_resolution=constImage()->resolution.x;
677 if (constImage()->resolution.y > 0.0)
678 y_resolution=constImage()->resolution.y;
680 return(
Point(x_resolution, y_resolution));
683 return(constOptions()->density());
686void Magick::Image::depth(
const size_t depth_)
689 image()->depth=depth_;
690 options()->depth(depth_);
693size_t Magick::Image::depth(
void)
const
695 return(constImage()->depth);
698std::string Magick::Image::directory(
void)
const
700 if (constImage()->directory)
701 return(std::string(constImage()->directory));
704 throwExceptionExplicit(MagickCore::CorruptImageWarning,
705 "Image does not contain a directory");
707 return(std::string());
710void Magick::Image::endian(
const Magick::EndianType endian_)
713 options()->endian(endian_);
714 image()->endian=endian_;
717Magick::EndianType Magick::Image::endian(
void)
const
719 return(constImage()->endian);
722void Magick::Image::exifProfile(
const Magick::Blob &exifProfile_)
726 if (exifProfile_.data() != 0)
731 exif_profile=AcquireStringInfo(exifProfile_.length());
732 SetStringInfoDatum(exif_profile,(
unsigned char *) exifProfile_.data());
734 (void) SetImageProfile(image(),
"exif",exif_profile,exceptionInfo);
735 exif_profile=DestroyStringInfo(exif_profile);
740Magick::Blob Magick::Image::exifProfile(
void)
const
745 exif_profile=GetImageProfile(constImage(),
"exif");
746 if (exif_profile == (StringInfo *) NULL)
748 return(
Blob(GetStringInfoDatum(exif_profile),
749 GetStringInfoLength(exif_profile)));
752void Magick::Image::fileName(
const std::string &fileName_)
759 max_length=
sizeof(image()->filename)-1;
760 fileName_.copy(image()->filename,(
size_t) max_length);
761 if ((ssize_t) fileName_.length() > max_length)
762 image()->filename[max_length]=0;
764 image()->filename[fileName_.length()]=0;
766 options()->fileName(fileName_);
769std::string Magick::Image::fileName(
void)
const
771 return(constOptions()->fileName());
774MagickCore::MagickSizeType Magick::Image::fileSize(
void)
const
776 return(GetBlobSize(constImage()));
779void Magick::Image::fillColor(
const Magick::Color &fillColor_)
782 options()->fillColor(fillColor_);
785Magick::Color Magick::Image::fillColor(
void)
const
787 return(constOptions()->fillColor());
790void Magick::Image::fillRule(
const Magick::FillRule &fillRule_)
793 options()->fillRule(fillRule_);
796Magick::FillRule Magick::Image::fillRule(
void)
const
798 return constOptions()->fillRule();
801void Magick::Image::fillPattern(
const Image &fillPattern_)
804 if (fillPattern_.isValid())
805 options()->fillPattern(fillPattern_.constImage());
807 options()->fillPattern(
static_cast<MagickCore::Image*
>(NULL));
810Magick::Image Magick::Image::fillPattern(
void)
const
813 const MagickCore::Image
819 tmpTexture=constOptions()->fillPattern();
827 image=CloneImage(tmpTexture,0,0,MagickTrue,exceptionInfo);
828 texture.replaceImage(image);
834void Magick::Image::filterType(
const Magick::FilterType filterType_)
837 image()->filter=filterType_;
840Magick::FilterType Magick::Image::filterType(
void)
const
842 return(constImage()->filter);
845void Magick::Image::font(
const std::string &font_)
848 options()->font(font_);
851std::string Magick::Image::font(
void)
const
853 return(constOptions()->font());
856void Magick::Image::fontFamily(
const std::string &family_)
859 options()->fontFamily(family_);
862std::string Magick::Image::fontFamily(
void)
const
864 return(constOptions()->fontFamily());
867void Magick::Image::fontPointsize(
const double pointSize_)
870 options()->fontPointsize(pointSize_);
873double Magick::Image::fontPointsize(
void)
const
875 return(constOptions()->fontPointsize());
878void Magick::Image::fontStyle(
const StyleType pointSize_)
881 options()->fontStyle(pointSize_);
884Magick::StyleType Magick::Image::fontStyle(
void)
const
886 return(constOptions()->fontStyle());
889void Magick::Image::fontWeight(
const size_t weight_)
892 options()->fontWeight(weight_);
895size_t Magick::Image::fontWeight(
void)
const
897 return(constOptions()->fontWeight());
900std::string Magick::Image::format(
void)
const
906 magick_info=GetMagickInfo(constImage()->magick,exceptionInfo);
909 if ((magick_info != 0) && (*magick_info->description !=
'\0'))
910 return(std::string(magick_info->description));
913 throwExceptionExplicit(MagickCore::CorruptImageWarning,
914 "Unrecognized image magick type");
916 return(std::string());
919std::string Magick::Image::formatExpression(
const std::string expression)
929 text=InterpretImageProperties(imageInfo(),image(),expression.c_str(),
931 if (text != (
char *) NULL)
933 text_string=std::string(text);
934 text=DestroyString(text);
940double Magick::Image::gamma(
void)
const
942 return(constImage()->gamma);
945Magick::Geometry Magick::Image::geometry(
void)
const
947 if (constImage()->geometry)
948 return Geometry(constImage()->geometry);
951 throwExceptionExplicit(MagickCore::OptionWarning,
952 "Image does not contain a geometry");
957void Magick::Image::gifDisposeMethod(
958 const MagickCore::DisposeType disposeMethod_)
961 image()->dispose=disposeMethod_;
964MagickCore::DisposeType Magick::Image::gifDisposeMethod(
void)
const
966 return(constImage()->dispose);
969bool Magick::Image::hasChannel(
const PixelChannel channel)
const
971 if (GetPixelChannelTraits(constImage(),channel) == UndefinedPixelTrait)
974 if (channel == GreenPixelChannel || channel == BluePixelChannel)
975 return (GetPixelChannelOffset(constImage(),channel) == (ssize_t)channel);
980void Magick::Image::highlightColor(
const Color color_)
986 artifact(
"compare:highlight-color",value);
989void Magick::Image::iccColorProfile(
const Magick::Blob &colorProfile_)
991 profile(
"icc",colorProfile_);
994Magick::Blob Magick::Image::iccColorProfile(
void)
const
999 color_profile=GetImageProfile(constImage(),
"icc");
1000 if (color_profile == (StringInfo *) NULL)
1002 return(
Blob(GetStringInfoDatum(color_profile),GetStringInfoLength(
1006void Magick::Image::interlaceType(
const Magick::InterlaceType interlace_)
1009 image()->interlace=interlace_;
1010 options()->interlaceType(interlace_);
1013Magick::InterlaceType Magick::Image::interlaceType(
void)
const
1015 return(constImage()->interlace);
1018void Magick::Image::interpolate(
const PixelInterpolateMethod interpolate_)
1021 image()->interpolate=interpolate_;
1024Magick::PixelInterpolateMethod Magick::Image::interpolate(
void)
const
1026 return constImage()->interpolate;
1029void Magick::Image::iptcProfile(
const Magick::Blob &iptcProfile_)
1032 if (iptcProfile_.data() != 0)
1037 iptc_profile=AcquireStringInfo(iptcProfile_.length());
1038 SetStringInfoDatum(iptc_profile,(
unsigned char *) iptcProfile_.data());
1040 (void) SetImageProfile(image(),
"iptc",iptc_profile,exceptionInfo);
1041 iptc_profile=DestroyStringInfo(iptc_profile);
1042 ThrowImageException;
1046Magick::Blob Magick::Image::iptcProfile(
void)
const
1051 iptc_profile=GetImageProfile(constImage(),
"iptc");
1052 if (iptc_profile == (StringInfo *) NULL)
1054 return(
Blob(GetStringInfoDatum(iptc_profile),GetStringInfoLength(
1058bool Magick::Image::isOpaque(
void)
const
1064 result=IsImageOpaque(constImage(),exceptionInfo);
1065 ThrowImageException;
1066 return(result != MagickFalse ?
true :
false);
1069void Magick::Image::isValid(
const bool isValid_)
1076 else if (!isValid())
1085bool Magick::Image::isValid(
void)
const
1087 return rows() && columns();
1090void Magick::Image::label(
const std::string &label_)
1094 (void) SetImageProperty(image(),
"Label",NULL,exceptionInfo);
1095 if (label_.length() > 0)
1096 (void) SetImageProperty(image(),
"Label",label_.c_str(),exceptionInfo);
1097 ThrowImageException;
1100std::string Magick::Image::label(
void)
const
1106 value=GetImageProperty(constImage(),
"Label",exceptionInfo);
1107 ThrowImageException;
1110 return(std::string(value));
1112 return(std::string());
1115void Magick::Image::lowlightColor(
const Color color_)
1121 artifact(
"compare:lowlight-color",value);
1124void Magick::Image::magick(
const std::string &magick_)
1131 length=
sizeof(image()->magick)-1;
1132 if (magick_.length() < length)
1133 length=magick_.length();
1135 if (!magick_.empty())
1136 magick_.copy(image()->magick,length);
1137 image()->magick[length]=0;
1139 options()->magick(magick_);
1142std::string Magick::Image::magick(
void)
const
1144 if (*(constImage()->magick) !=
'\0')
1145 return(std::string(constImage()->magick));
1147 return(constOptions()->magick());
1150void Magick::Image::masklightColor(
const Color color_)
1156 artifact(
"compare:masklight-color",value);
1159double Magick::Image::meanErrorPerPixel(
void)
const
1161 return(constImage()->error.mean_error_per_pixel);
1164void Magick::Image::modulusDepth(
const size_t depth_)
1168 SetImageDepth(image(),depth_,exceptionInfo);
1169 ThrowImageException;
1170 options()->depth(depth_);
1173size_t Magick::Image::modulusDepth(
void)
const
1179 depth=GetImageDepth(constImage(),exceptionInfo);
1180 ThrowImageException;
1184void Magick::Image::monochrome(
const bool monochromeFlag_)
1187 options()->monochrome(monochromeFlag_);
1190bool Magick::Image::monochrome(
void)
const
1192 return(constOptions()->monochrome());
1195Magick::Geometry Magick::Image::montageGeometry(
void)
const
1197 if (constImage()->montage)
1198 return Magick::Geometry(constImage()->montage);
1201 throwExceptionExplicit(MagickCore::CorruptImageWarning,
1202 "Image does not contain a montage");
1204 return(Magick::Geometry());
1207double Magick::Image::normalizedMaxError(
void)
const
1209 return(constImage()->error.normalized_maximum_error);
1212double Magick::Image::normalizedMeanError(
void)
const
1214 return(constImage()->error.normalized_mean_error);
1217void Magick::Image::orientation(
const Magick::OrientationType orientation_)
1220 image()->orientation=orientation_;
1223Magick::OrientationType Magick::Image::orientation(
void)
const
1225 return(constImage()->orientation);
1228void Magick::Image::page(
const Magick::Geometry &pageSize_)
1231 options()->page(pageSize_);
1232 image()->page=pageSize_;
1235Magick::Geometry Magick::Image::page(
void)
const
1237 return(
Geometry(constImage()->page.width,constImage()->page.height,
1238 constImage()->page.x,constImage()->page.y));
1241void Magick::Image::quality(
const size_t quality_)
1244 image()->quality=quality_;
1245 options()->quality(quality_);
1248size_t Magick::Image::quality(
void)
const
1250 return(constImage()->quality);
1253void Magick::Image::quantizeColors(
const size_t colors_)
1256 options()->quantizeColors(colors_);
1259size_t Magick::Image::quantizeColors(
void)
const
1261 return(constOptions()->quantizeColors());
1264void Magick::Image::quantizeColorSpace(
1265 const Magick::ColorspaceType colorSpace_)
1268 options()->quantizeColorSpace(colorSpace_);
1271Magick::ColorspaceType Magick::Image::quantizeColorSpace(
void)
const
1273 return(constOptions()->quantizeColorSpace());
1276void Magick::Image::quantizeDither(
const bool ditherFlag_)
1279 options()->quantizeDither(ditherFlag_);
1282bool Magick::Image::quantizeDither(
void)
const
1284 return(constOptions()->quantizeDither());
1287void Magick::Image::quantizeDitherMethod(
const DitherMethod ditherMethod_)
1290 options()->quantizeDitherMethod(ditherMethod_);
1293MagickCore::DitherMethod Magick::Image::quantizeDitherMethod(
void)
const
1295 return(constOptions()->quantizeDitherMethod());
1298void Magick::Image::quantizeTreeDepth(
const size_t treeDepth_)
1301 options()->quantizeTreeDepth(treeDepth_);
1304size_t Magick::Image::quantizeTreeDepth()
const
1306 return(constOptions()->quantizeTreeDepth());
1309void Magick::Image::quiet(
const bool quiet_)
1312 options()->quiet(quiet_);
1315bool Magick::Image::quiet(
void)
const
1317 return(constOptions()->quiet());
1320void Magick::Image::renderingIntent(
1321 const Magick::RenderingIntent renderingIntent_)
1324 image()->rendering_intent=renderingIntent_;
1327Magick::RenderingIntent Magick::Image::renderingIntent(
void)
const
1329 return(
static_cast<Magick::RenderingIntent
>(constImage()->rendering_intent));
1332void Magick::Image::resolutionUnits(
1333 const Magick::ResolutionType resolutionUnits_)
1336 image()->units=resolutionUnits_;
1337 options()->resolutionUnits(resolutionUnits_);
1340Magick::ResolutionType Magick::Image::resolutionUnits(
void)
const
1342 return(
static_cast<Magick::ResolutionType
>(constImage()->units));
1345size_t Magick::Image::rows(
void)
const
1347 return(constImage()->rows);
1350void Magick::Image::samplingFactor(
const std::string &samplingFactor_)
1353 options()->samplingFactor(samplingFactor_);
1356std::string Magick::Image::samplingFactor(
void)
const
1358 return(constOptions()->samplingFactor());
1361void Magick::Image::scene(
const size_t scene_)
1364 image()->scene=scene_;
1367size_t Magick::Image::scene(
void)
const
1369 return(constImage()->scene);
1372void Magick::Image::size(
const Geometry &geometry_)
1375 options()->size(geometry_);
1376 image()->rows=geometry_.height();
1377 image()->columns=geometry_.width();
1380Magick::Geometry Magick::Image::size(
void)
const
1382 return(Magick::Geometry(constImage()->columns,constImage()->rows));
1385void Magick::Image::strokeAntiAlias(
const bool flag_)
1388 options()->strokeAntiAlias(flag_);
1391bool Magick::Image::strokeAntiAlias(
void)
const
1393 return(constOptions()->strokeAntiAlias());
1396void Magick::Image::strokeColor(
const Magick::Color &strokeColor_)
1402 options()->strokeColor(strokeColor_);
1404 artifact(
"stroke",value);
1407Magick::Color Magick::Image::strokeColor(
void)
const
1409 return(constOptions()->strokeColor());
1412void Magick::Image::strokeDashArray(
const double *strokeDashArray_)
1415 options()->strokeDashArray(strokeDashArray_);
1418const double* Magick::Image::strokeDashArray(
void)
const
1420 return(constOptions()->strokeDashArray());
1423void Magick::Image::strokeDashOffset(
const double strokeDashOffset_)
1426 options()->strokeDashOffset(strokeDashOffset_);
1429double Magick::Image::strokeDashOffset(
void)
const
1431 return(constOptions()->strokeDashOffset());
1434void Magick::Image::strokeLineCap(
const Magick::LineCap lineCap_)
1437 options()->strokeLineCap(lineCap_);
1440Magick::LineCap Magick::Image::strokeLineCap(
void)
const
1442 return(constOptions()->strokeLineCap());
1445void Magick::Image::strokeLineJoin(
const Magick::LineJoin lineJoin_)
1448 options()->strokeLineJoin(lineJoin_);
1451Magick::LineJoin Magick::Image::strokeLineJoin(
void)
const
1453 return(constOptions()->strokeLineJoin());
1456void Magick::Image::strokeMiterLimit(
const size_t strokeMiterLimit_)
1459 options()->strokeMiterLimit(strokeMiterLimit_);
1462size_t Magick::Image::strokeMiterLimit(
void)
const
1464 return(constOptions()->strokeMiterLimit());
1467void Magick::Image::strokePattern(
const Image &strokePattern_)
1470 if(strokePattern_.isValid())
1471 options()->strokePattern(strokePattern_.constImage());
1473 options()->strokePattern(
static_cast<MagickCore::Image*
>(NULL));
1476Magick::Image Magick::Image::strokePattern(
void)
const
1479 const MagickCore::Image
1485 tmpTexture=constOptions()->strokePattern();
1493 image=CloneImage(tmpTexture,0,0,MagickTrue,exceptionInfo);
1494 texture.replaceImage(image);
1495 ThrowImageException;
1500void Magick::Image::strokeWidth(
const double strokeWidth_)
1503 value[MagickPathExtent];
1506 options()->strokeWidth(strokeWidth_);
1507 FormatLocaleString(value,MagickPathExtent,
"%.17g",strokeWidth_);
1508 (void) SetImageArtifact(image(),
"strokewidth",value);
1511double Magick::Image::strokeWidth(
void)
const
1513 return(constOptions()->strokeWidth());
1516void Magick::Image::subImage(
const size_t subImage_)
1519 options()->subImage(subImage_);
1522size_t Magick::Image::subImage(
void)
const
1524 return(constOptions()->subImage());
1527void Magick::Image::subRange(
const size_t subRange_)
1530 options()->subRange(subRange_);
1533size_t Magick::Image::subRange(
void)
const
1535 return(constOptions()->subRange());
1538void Magick::Image::textAntiAlias(
const bool flag_)
1541 options()->textAntiAlias(flag_);
1544bool Magick::Image::textAntiAlias(
void)
const
1546 return(constOptions()->textAntiAlias());
1549void Magick::Image::textDirection(DirectionType direction_)
1552 options()->textDirection(direction_);
1555Magick::DirectionType Magick::Image::textDirection(
void)
const
1557 return(constOptions()->textDirection());
1560void Magick::Image::textEncoding(
const std::string &encoding_)
1563 options()->textEncoding(encoding_);
1566std::string Magick::Image::textEncoding(
void)
const
1568 return(constOptions()->textEncoding());
1571void Magick::Image::textGravity(GravityType gravity_)
1574 options()->textGravity(gravity_);
1577Magick::GravityType Magick::Image::textGravity(
void)
const
1579 return(constOptions()->textGravity());
1582void Magick::Image::textInterlineSpacing(
double spacing_)
1585 options()->textInterlineSpacing(spacing_);
1588double Magick::Image::textInterlineSpacing(
void)
const
1590 return(constOptions()->textInterlineSpacing());
1593void Magick::Image::textInterwordSpacing(
double spacing_)
1596 options()->textInterwordSpacing(spacing_);
1599double Magick::Image::textInterwordSpacing(
void)
const
1601 return(constOptions()->textInterwordSpacing());
1604void Magick::Image::textKerning(
double kerning_)
1607 options()->textKerning(kerning_);
1610double Magick::Image::textKerning(
void)
const
1612 return(constOptions()->textKerning());
1615void Magick::Image::textUnderColor(
const Color &underColor_)
1618 options()->textUnderColor(underColor_);
1621Magick::Color Magick::Image::textUnderColor(
void)
const
1623 return(constOptions()->textUnderColor());
1626size_t Magick::Image::totalColors(
void)
const
1632 colors=GetNumberColors(constImage(),(FILE *) NULL,exceptionInfo);
1633 ThrowImageException;
1637void Magick::Image::transformRotation(
const double angle_)
1640 options()->transformRotation(angle_);
1643void Magick::Image::transformSkewX(
const double skewx_)
1646 options()->transformSkewX(skewx_);
1649void Magick::Image::transformSkewY(
const double skewy_)
1652 options()->transformSkewY(skewy_);
1655Magick::ImageType Magick::Image::type(
void)
const
1657 if (constOptions()->type() != UndefinedType)
1658 return(constOptions()->type());
1659 return(GetImageType(constImage()));
1662void Magick::Image::type(
const Magick::ImageType type_)
1665 options()->type(type_);
1667 SetImageType(image(),type_,exceptionInfo);
1668 ThrowImageException;
1671void Magick::Image::verbose(
const bool verboseFlag_)
1674 options()->verbose(verboseFlag_);
1677bool Magick::Image::verbose(
void)
const
1679 return(constOptions()->verbose());
1682void Magick::Image::virtualPixelMethod(
1683 const VirtualPixelMethod virtualPixelMethod_)
1687 SetImageVirtualPixelMethod(image(),virtualPixelMethod_,exceptionInfo);
1688 ThrowImageException;
1691Magick::VirtualPixelMethod Magick::Image::virtualPixelMethod(
void)
const
1693 return(GetImageVirtualPixelMethod(constImage()));
1696void Magick::Image::x11Display(
const std::string &display_)
1699 options()->x11Display(display_);
1702std::string Magick::Image::x11Display(
void)
const
1704 return(constOptions()->x11Display());
1707double Magick::Image::xResolution(
void)
const
1709 return(constImage()->resolution.x);
1712double Magick::Image::yResolution(
void)
const
1714 return(constImage()->resolution.y);
1717void Magick::Image::adaptiveBlur(
const double radius_,
const double sigma_)
1723 newImage=AdaptiveBlurImage(constImage(),radius_,sigma_,exceptionInfo);
1724 replaceImage(newImage);
1725 ThrowImageException;
1728void Magick::Image::adaptiveResize(
const Geometry &geometry_)
1741 ParseMetaGeometry(
static_cast<std::string
>(geometry_).c_str(),&x,&y,&width,
1745 newImage=AdaptiveResizeImage(constImage(),width,height,exceptionInfo);
1746 replaceImage(newImage);
1747 ThrowImageException;
1750void Magick::Image::adaptiveSharpen(
const double radius_,
const double sigma_)
1756 newImage=AdaptiveSharpenImage(constImage(),radius_,sigma_,exceptionInfo);
1757 replaceImage(newImage);
1758 ThrowImageException;
1761void Magick::Image::adaptiveSharpenChannel(
const ChannelType channel_,
1762 const double radius_,
const double sigma_ )
1768 GetAndSetPPChannelMask(channel_);
1769 newImage=AdaptiveSharpenImage(constImage(),radius_,sigma_,exceptionInfo);
1770 RestorePPChannelMask;
1771 replaceImage(newImage);
1772 ThrowImageException;
1775void Magick::Image::adaptiveThreshold(
const size_t width_,
const size_t height_,
1783 newImage=AdaptiveThresholdImage(constImage(),width_,height_,bias_,
1785 replaceImage(newImage);
1786 ThrowImageException;
1789void Magick::Image::addNoise(
const NoiseType noiseType_,
const double attenuate_)
1795 newImage=AddNoiseImage(constImage(),noiseType_,attenuate_,exceptionInfo);
1796 replaceImage(newImage);
1797 ThrowImageException;
1800void Magick::Image::addNoiseChannel(
const ChannelType channel_,
1801 const NoiseType noiseType_,
const double attenuate_)
1807 GetAndSetPPChannelMask(channel_);
1808 newImage=AddNoiseImage(constImage(),noiseType_,attenuate_,exceptionInfo);
1809 RestorePPChannelMask;
1810 replaceImage(newImage);
1811 ThrowImageException;
1814void Magick::Image::affineTransform(
const DrawableAffine &affine_)
1822 _affine.sx=affine_.sx();
1823 _affine.sy=affine_.sy();
1824 _affine.rx=affine_.rx();
1825 _affine.ry=affine_.ry();
1826 _affine.tx=affine_.tx();
1827 _affine.ty=affine_.ty();
1830 newImage=AffineTransformImage(constImage(),&_affine,exceptionInfo);
1831 replaceImage(newImage);
1832 ThrowImageException;
1835void Magick::Image::alpha(
const unsigned int alpha_)
1839 SetImageAlpha(image(),(Quantum) alpha_,exceptionInfo);
1840 ThrowImageException;
1843void Magick::Image::alphaChannel(AlphaChannelOption alphaOption_)
1847 SetImageAlphaChannel(image(),alphaOption_,exceptionInfo);
1848 ThrowImageException;
1851void Magick::Image::annotate(
const std::string &text_,
1854 annotate(text_,location_,NorthWestGravity,0.0);
1857void Magick::Image::annotate(
const std::string &text_,
1858 const Geometry &boundingArea_,
const GravityType gravity_)
1860 annotate(text_,boundingArea_,gravity_,0.0);
1863void Magick::Image::annotate(
const std::string &text_,
1864 const Geometry &boundingArea_,
const GravityType gravity_,
1865 const double degrees_)
1871 boundingArea[MagickPathExtent];
1878 drawInfo=options()->drawInfo();
1879 drawInfo->text=DestroyString(drawInfo->text);
1880 drawInfo->text=
const_cast<char *
>(text_.c_str());
1881 drawInfo->geometry=DestroyString(drawInfo->geometry);
1883 if (boundingArea_.isValid())
1885 if (boundingArea_.width() == 0 || boundingArea_.height() == 0)
1887 FormatLocaleString(boundingArea,MagickPathExtent,
"%+.20g%+.20g",
1888 (
double) boundingArea_.xOff(),(
double) boundingArea_.yOff());
1892 (void) CopyMagickString(boundingArea,
1893 std::string(boundingArea_).c_str(), MagickPathExtent);
1895 drawInfo->geometry=boundingArea;
1898 drawInfo->gravity=gravity_;
1900 oaffine=drawInfo->affine;
1901 if (degrees_ != 0.0)
1914 current=drawInfo->affine;
1915 affine.sx=cos(DegreesToRadians(fmod(degrees_,360.0)));
1916 affine.rx=sin(DegreesToRadians(fmod(degrees_,360.0)));
1917 affine.ry=(-sin(DegreesToRadians(fmod(degrees_,360.0))));
1918 affine.sy=cos(DegreesToRadians(fmod(degrees_,360.0)));
1920 drawInfo->affine.sx=current.sx*affine.sx+current.ry*affine.rx;
1921 drawInfo->affine.rx=current.rx*affine.sx+current.sy*affine.rx;
1922 drawInfo->affine.ry=current.sx*affine.ry+current.ry*affine.sy;
1923 drawInfo->affine.sy=current.rx*affine.ry+current.sy*affine.sy;
1924 drawInfo->affine.tx=current.sx*affine.tx+current.ry*affine.ty
1929 AnnotateImage(image(),drawInfo,exceptionInfo);
1932 drawInfo->affine=oaffine;
1933 drawInfo->text=(
char *) NULL;
1934 drawInfo->geometry=(
char *) NULL;
1936 ThrowImageException;
1939void Magick::Image::annotate(
const std::string &text_,
1940 const GravityType gravity_)
1947 drawInfo=options()->drawInfo();
1948 drawInfo->text=DestroyString(drawInfo->text);
1949 drawInfo->text=
const_cast<char *
>(text_.c_str());
1950 drawInfo->gravity=gravity_;
1953 AnnotateImage(image(),drawInfo,exceptionInfo);
1955 drawInfo->gravity=NorthWestGravity;
1956 drawInfo->text=(
char *) NULL;
1958 ThrowImageException;
1961void Magick::Image::artifact(
const std::string &name_,
const std::string &value_)
1964 (void) SetImageArtifact(image(),name_.c_str(),value_.c_str());
1967std::string Magick::Image::artifact(
const std::string &name_)
const
1972 value=GetImageArtifact(constImage(),name_.c_str());
1974 return(std::string(value));
1975 return(std::string());
1978void Magick::Image::attribute(
const std::string name_,
const char *value_)
1982 SetImageProperty(image(),name_.c_str(),value_,exceptionInfo);
1983 ThrowImageException;
1986void Magick::Image::attribute(
const std::string name_,
const std::string value_)
1990 SetImageProperty(image(),name_.c_str(),value_.c_str(),exceptionInfo);
1991 ThrowImageException;
1994std::string Magick::Image::attribute(
const std::string name_)
const
2000 value=GetImageProperty(constImage(),name_.c_str(),exceptionInfo);
2001 ThrowImageException;
2004 return(std::string(value));
2006 return(std::string());
2009void Magick::Image::autoGamma(
void)
2013 (void) SyncImageSettings(imageInfo(),image(),exceptionInfo);
2014 (void) AutoGammaImage(image(),exceptionInfo);
2015 ThrowImageException;
2018void Magick::Image::autoGammaChannel(
const ChannelType channel_)
2022 GetAndSetPPChannelMask(channel_);
2023 (void) SyncImageSettings(imageInfo(),image(),exceptionInfo);
2024 (void) AutoGammaImage(image(),exceptionInfo);
2025 RestorePPChannelMask;
2026 ThrowImageException;
2029void Magick::Image::autoLevel(
void)
2033 (void) AutoLevelImage(image(),exceptionInfo);
2034 ThrowImageException;
2037void Magick::Image::autoLevelChannel(
const ChannelType channel_)
2041 GetAndSetPPChannelMask(channel_);
2042 (void) AutoLevelImage(image(),exceptionInfo);
2043 RestorePPChannelMask;
2044 ThrowImageException;
2047void Magick::Image::autoOrient(
void)
2052 if (image()->orientation == UndefinedOrientation ||
2053 image()->orientation == TopLeftOrientation)
2057 newImage=AutoOrientImage(constImage(),image()->orientation,exceptionInfo);
2058 replaceImage(newImage);
2059 ThrowImageException;
2062void Magick::Image::autoThreshold(
const AutoThresholdMethod method_)
2066 AutoThresholdImage(image(),method_, exceptionInfo);
2067 ThrowImageException;
2070void Magick::Image::blackThreshold(
const std::string &threshold_)
2074 BlackThresholdImage(image(),threshold_.c_str(),exceptionInfo);
2075 ThrowImageException;
2078void Magick::Image::blackThresholdChannel(
const ChannelType channel_,
2079 const std::string &threshold_)
2083 GetAndSetPPChannelMask(channel_);
2084 BlackThresholdImage(image(),threshold_.c_str(),exceptionInfo);
2085 RestorePPChannelMask;
2086 ThrowImageException;
2089void Magick::Image::blueShift(
const double factor_)
2095 newImage=BlueShiftImage(constImage(),factor_,exceptionInfo);
2096 replaceImage(newImage);
2097 ThrowImageException;
2100void Magick::Image::blur(
const double radius_,
const double sigma_)
2106 newImage=BlurImage(constImage(),radius_,sigma_,exceptionInfo);
2107 replaceImage(newImage);
2108 ThrowImageException;
2111void Magick::Image::blurChannel(
const ChannelType channel_,
2112 const double radius_,
const double sigma_)
2118 GetAndSetPPChannelMask(channel_);
2119 newImage=BlurImage(constImage(),radius_,sigma_,exceptionInfo);
2120 RestorePPChannelMask;
2121 replaceImage(newImage);
2122 ThrowImageException;
2125void Magick::Image::border(
const Geometry &geometry_)
2131 borderInfo=geometry_;
2134 newImage=BorderImage(constImage(),&borderInfo,image()->compose,
2136 replaceImage(newImage);
2137 ThrowImageException;
2140void Magick::Image::brightnessContrast(
const double brightness_,
2141 const double contrast_)
2145 BrightnessContrastImage(image(),brightness_,contrast_,exceptionInfo);
2146 ThrowImageException;
2149void Magick::Image::brightnessContrastChannel(
const ChannelType channel_,
2150 const double brightness_,
const double contrast_)
2154 GetAndSetPPChannelMask(channel_);
2155 BrightnessContrastImage(image(),brightness_,contrast_,exceptionInfo);
2156 RestorePPChannelMask;
2157 ThrowImageException;
2160void Magick::Image::cannyEdge(
const double radius_,
const double sigma_,
2161 const double lowerPercent_,
const double upperPercent_)
2168 newImage=CannyEdgeImage(constImage(),radius_,sigma_,lowerPercent_,
2169 upperPercent_,exceptionInfo);
2170 replaceImage(newImage);
2171 ThrowImageException;
2174void Magick::Image::cdl(
const std::string &cdl_)
2178 (void) ColorDecisionListImage(image(),cdl_.c_str(),exceptionInfo);
2179 ThrowImageException;
2182void Magick::Image::channel(
const ChannelType channel_)
2188 newImage=SeparateImage(constImage(),channel_,exceptionInfo);
2189 replaceImage(newImage);
2190 ThrowImageException;
2193void Magick::Image::charcoal(
const double radius_,
const double sigma_)
2199 newImage=CharcoalImage(image(),radius_,sigma_,exceptionInfo);
2200 replaceImage(newImage);
2201 ThrowImageException;
2204void Magick::Image::charcoalChannel(
const ChannelType channel_,
2205 const double radius_,
const double sigma_)
2211 GetAndSetPPChannelMask(channel_);
2212 newImage=CharcoalImage(image(),radius_,sigma_,exceptionInfo);
2213 RestorePPChannelMask;
2214 replaceImage(newImage);
2215 ThrowImageException;
2218void Magick::Image::chop(
const Geometry &geometry_)
2227 newImage=ChopImage(image(),&chopInfo,exceptionInfo);
2228 replaceImage(newImage);
2229 ThrowImageException;
2232void Magick::Image::chromaBluePrimary(
const double x_,
const double y_,
2236 image()->chromaticity.blue_primary.x=x_;
2237 image()->chromaticity.blue_primary.y=y_;
2238 image()->chromaticity.blue_primary.z=z_;
2241void Magick::Image::chromaBluePrimary(
double *x_,
double *y_,
double *z_)
const
2243 *x_=constImage()->chromaticity.blue_primary.x;
2244 *y_=constImage()->chromaticity.blue_primary.y;
2245 *z_=constImage()->chromaticity.blue_primary.z;
2248void Magick::Image::chromaGreenPrimary(
const double x_,
const double y_,
2252 image()->chromaticity.green_primary.x=x_;
2253 image()->chromaticity.green_primary.y=y_;
2254 image()->chromaticity.green_primary.z=z_;
2257void Magick::Image::chromaGreenPrimary(
double *x_,
double *y_,
double *z_)
const
2259 *x_=constImage()->chromaticity.green_primary.x;
2260 *y_=constImage()->chromaticity.green_primary.y;
2261 *z_=constImage()->chromaticity.green_primary.z;
2264void Magick::Image::chromaRedPrimary(
const double x_,
const double y_,
2268 image()->chromaticity.red_primary.x=x_;
2269 image()->chromaticity.red_primary.y=y_;
2270 image()->chromaticity.red_primary.z=z_;
2273void Magick::Image::chromaRedPrimary(
double *x_,
double *y_,
double *z_)
const
2275 *x_=constImage()->chromaticity.red_primary.x;
2276 *y_=constImage()->chromaticity.red_primary.y;
2277 *z_=constImage()->chromaticity.red_primary.z;
2280void Magick::Image::chromaWhitePoint(
const double x_,
const double y_,
2284 image()->chromaticity.white_point.x=x_;
2285 image()->chromaticity.white_point.y=y_;
2286 image()->chromaticity.white_point.z=z_;
2289void Magick::Image::chromaWhitePoint(
double *x_,
double *y_,
double *z_)
const
2291 *x_=constImage()->chromaticity.white_point.x;
2292 *y_=constImage()->chromaticity.white_point.y;
2293 *z_=constImage()->chromaticity.white_point.z;
2296void Magick::Image::clamp(
void)
2300 ClampImage(image(),exceptionInfo);
2301 ThrowImageException;
2304void Magick::Image::clampChannel(
const ChannelType channel_)
2308 GetAndSetPPChannelMask(channel_);
2309 ClampImage(image(),exceptionInfo);
2310 RestorePPChannelMask;
2311 ThrowImageException;
2314void Magick::Image::clip(
void)
2318 ClipImage(image(),exceptionInfo);
2319 ThrowImageException;
2322void Magick::Image::clipPath(
const std::string pathname_,
const bool inside_)
2326 ClipImagePath(image(),pathname_.c_str(),(MagickBooleanType) inside_,
2328 ThrowImageException;
2331void Magick::Image::clut(
const Image &clutImage_,
2332 const PixelInterpolateMethod method)
2336 ClutImage(image(),clutImage_.constImage(),method,exceptionInfo);
2337 ThrowImageException;
2340void Magick::Image::clutChannel(
const ChannelType channel_,
2341 const Image &clutImage_,
const PixelInterpolateMethod method)
2345 GetAndSetPPChannelMask(channel_);
2346 ClutImage(image(),clutImage_.constImage(),method,exceptionInfo);
2347 RestorePPChannelMask;
2348 ThrowImageException;
2351void Magick::Image::colorize(
const unsigned int alpha_,
const Color &penColor_)
2353 colorize(alpha_,alpha_,alpha_,penColor_);
2356void Magick::Image::colorize(
const unsigned int alphaRed_,
2357 const unsigned int alphaGreen_,
const unsigned int alphaBlue_,
2358 const Color &penColor_)
2361 blend[MagickPathExtent];
2369 if (!penColor_.isValid())
2370 throwExceptionExplicit(MagickCore::OptionError,
2371 "Pen color argument is invalid");
2373 FormatLocaleString(blend,MagickPathExtent,
"%u/%u/%u",alphaRed_,alphaGreen_,
2376 target=
static_cast<PixelInfo
>(penColor_);
2378 newImage=ColorizeImage(image(),blend,&target,exceptionInfo);
2379 replaceImage(newImage);
2380 ThrowImageException;
2383void Magick::Image::colorMap(
const size_t index_,
const Color &color_)
2390 if (index_ > (MaxColormapSize-1))
2391 throwExceptionExplicit(MagickCore::OptionError,
2392 "Colormap index must be less than MaxColormapSize");
2394 if (!color_.isValid())
2395 throwExceptionExplicit(MagickCore::OptionError,
2396 "Color argument is invalid");
2401 if (colorMapSize() < (index_+1))
2402 colorMapSize(index_+1);
2405 (imageptr->colormap)[index_]=color_;
2408Magick::Color Magick::Image::colorMap(
const size_t index_)
const
2410 if (!constImage()->colormap)
2412 throwExceptionExplicit(MagickCore::OptionError,
2413 "Image does not contain a colormap");
2417 if (index_ > constImage()->colors-1)
2418 throwExceptionExplicit(MagickCore::OptionError,
"Index out of range");
2420 return(Magick::Color((constImage()->colormap)[index_]));
2423void Magick::Image::colorMatrix(
const size_t order_,
2424 const double *color_matrix_)
2430 kernel_info=AcquireKernelInfo((
const char *) NULL,exceptionInfo);
2431 if (kernel_info != (KernelInfo *) NULL)
2433 kernel_info->width=order_;
2434 kernel_info->height=order_;
2435 kernel_info->values=(MagickRealType *) AcquireAlignedMemory(order_,
2436 order_*
sizeof(*kernel_info->values));
2437 if (kernel_info->values != (MagickRealType *) NULL)
2442 for (ssize_t i=0; i < (ssize_t) (order_*order_); i++)
2443 kernel_info->values[i]=color_matrix_[i];
2444 newImage=ColorMatrixImage(image(),kernel_info,exceptionInfo);
2445 replaceImage(newImage);
2447 kernel_info=DestroyKernelInfo(kernel_info);
2449 ThrowImageException;
2452bool Magick::Image::compare(
const Image &reference_)
const
2461 status=
static_cast<bool>(IsImagesEqual(constImage(),ref.constImage(),
2463 ThrowImageException;
2467double Magick::Image::compare(
const Image &reference_,
const MetricType metric_)
2473 GetImageDistortion(image(),reference_.constImage(),metric_,&distortion,
2475 ThrowImageException;
2479double Magick::Image::compareChannel(
const ChannelType channel_,
2480 const Image &reference_,
const MetricType metric_)
2486 GetAndSetPPChannelMask(channel_);
2487 GetImageDistortion(image(),reference_.constImage(),metric_,&distortion,
2489 RestorePPChannelMask;
2490 ThrowImageException;
2494Magick::Image Magick::Image::compare(
const Image &reference_,
2495 const MetricType metric_,
double *distortion)
2501 newImage=CompareImages(image(),reference_.constImage(),metric_,distortion,
2503 ThrowImageException;
2504 if (newImage == (MagickCore::Image *) NULL)
2505 return(Magick::Image());
2507 return(Magick::Image(newImage));
2510Magick::Image Magick::Image::compareChannel(
const ChannelType channel_,
2511 const Image &reference_,
const MetricType metric_,
double *distortion)
2517 GetAndSetPPChannelMask(channel_);
2518 newImage=CompareImages(image(),reference_.constImage(),metric_,distortion,
2520 RestorePPChannelMask;
2521 ThrowImageException;
2522 if (newImage == (MagickCore::Image *) NULL)
2523 return(Magick::Image());
2525 return(Magick::Image(newImage));
2528void Magick::Image::composite(
const Image &compositeImage_,
2529 const Geometry &offset_,
const CompositeOperator compose_)
2539 ParseMetaGeometry(
static_cast<std::string
>(offset_).c_str(),&x,&y,&width,
2544 CompositeImage(image(),compositeImage_.constImage(),compose_,MagickTrue,
2546 ThrowImageException;
2549void Magick::Image::composite(
const Image &compositeImage_,
2550 const GravityType gravity_,
const CompositeOperator compose_)
2556 SetGeometry(compositeImage_.constImage(),&geometry);
2557 GravityAdjustGeometry(columns(),rows(),gravity_,&geometry);
2560 CompositeImage(image(),compositeImage_.constImage(),compose_,MagickTrue,
2561 geometry.x,geometry.y,exceptionInfo);
2562 ThrowImageException;
2565void Magick::Image::composite(
const Image &compositeImage_,
2566 const ssize_t xOffset_,
const ssize_t yOffset_,
2567 const CompositeOperator compose_)
2573 CompositeImage(image(),compositeImage_.constImage(),compose_,MagickTrue,
2574 xOffset_,yOffset_,exceptionInfo);
2575 ThrowImageException;
2578void Magick::Image::connectedComponents(
const size_t connectivity_)
2584 newImage=ConnectedComponentsImage(constImage(),connectivity_,
2585 (CCObjectInfo **) NULL,exceptionInfo);
2586 replaceImage(newImage);
2587 ThrowImageException;
2590void Magick::Image::contrast(
const bool sharpen_)
2594 ContrastImage(image(),(MagickBooleanType) sharpen_,exceptionInfo);
2595 ThrowImageException;
2598void Magick::Image::contrastStretch(
const double blackPoint_,
2599 const double whitePoint_)
2603 ContrastStretchImage(image(),blackPoint_,whitePoint_,exceptionInfo);
2604 ThrowImageException;
2607void Magick::Image::contrastStretchChannel(
const ChannelType channel_,
2608 const double blackPoint_,
const double whitePoint_)
2612 GetAndSetPPChannelMask(channel_);
2613 ContrastStretchImage(image(),blackPoint_,whitePoint_,exceptionInfo);
2614 RestorePPChannelMask;
2615 ThrowImageException;
2618void Magick::Image::convolve(
const size_t order_,
const double *kernel_)
2624 kernel_info=AcquireKernelInfo((
const char *) NULL,exceptionInfo);
2625 kernel_info->width=order_;
2626 kernel_info->height=order_;
2627 kernel_info->x=(ssize_t) (order_-1)/2;
2628 kernel_info->y=(ssize_t) (order_-1)/2;
2629 kernel_info->values=(MagickRealType *) AcquireAlignedMemory(order_,
2630 order_*
sizeof(*kernel_info->values));
2631 if (kernel_info->values != (MagickRealType *) NULL)
2636 for (ssize_t i=0; i < (ssize_t) (order_*order_); i++)
2637 kernel_info->values[i]=kernel_[i];
2638 newImage=ConvolveImage(image(),kernel_info,exceptionInfo);
2639 replaceImage(newImage);
2641 kernel_info=DestroyKernelInfo(kernel_info);
2642 ThrowImageException;
2645void Magick::Image::copyPixels(
const Image &source_,
const Geometry &geometry_,
2655 (void) CopyImagePixels(image(),source_.constImage(),&geometry,&offset,
2657 ThrowImageException;
2660void Magick::Image::crop(
const Geometry &geometry_)
2669 newImage=CropImage(constImage(),&cropInfo,exceptionInfo);
2670 replaceImage(newImage);
2671 ThrowImageException;
2674void Magick::Image::cycleColormap(
const ssize_t amount_)
2678 CycleColormapImage(image(),amount_,exceptionInfo);
2679 ThrowImageException;
2682void Magick::Image::decipher(
const std::string &passphrase_)
2686 DecipherImage(image(),passphrase_.c_str(),exceptionInfo);
2687 ThrowImageException;
2690void Magick::Image::defineSet(
const std::string &magick_,
2691 const std::string &key_,
bool flag_)
2697 definition=magick_ +
":" + key_;
2699 (void) SetImageOption(imageInfo(),definition.c_str(),
"");
2701 DeleteImageOption(imageInfo(),definition.c_str());
2704bool Magick::Image::defineSet(
const std::string &magick_,
2705 const std::string &key_ )
const
2713 key=magick_ +
":" + key_;
2714 option=GetImageOption(constImageInfo(),key.c_str());
2720void Magick::Image::defineValue(
const std::string &magick_,
2721 const std::string &key_,
const std::string &value_)
2728 format=magick_ +
":" + key_;
2730 (void) SetImageOption(imageInfo(),format.c_str(),option.c_str());
2733std::string Magick::Image::defineValue(
const std::string &magick_,
2734 const std::string &key_)
const
2742 definition=magick_ +
":" + key_;
2743 option=GetImageOption(constImageInfo(),definition.c_str());
2745 return(std::string(option));
2746 return(std::string());
2749void Magick::Image::deskew(
const double threshold_)
2755 newImage=DeskewImage(constImage(),threshold_,exceptionInfo);
2756 replaceImage(newImage);
2757 ThrowImageException;
2760void Magick::Image::despeckle(
void)
2766 newImage=DespeckleImage(constImage(),exceptionInfo);
2767 replaceImage(newImage);
2768 ThrowImageException;
2771void Magick::Image::display(
void)
2774 DisplayImages(imageInfo(),image(),exceptionInfo);
2775 ThrowImageException;
2778void Magick::Image::distort(
const DistortMethod method_,
2779 const size_t numberArguments_,
const double *arguments_,
const bool bestfit_)
2785 newImage=DistortImage(constImage(), method_,numberArguments_,arguments_,
2786 bestfit_ ==
true ? MagickTrue : MagickFalse,exceptionInfo);
2787 replaceImage(newImage);
2788 ThrowImageException;
2791void Magick::Image::draw(
const Magick::Drawable &drawable_)
2798 wand=AcquireDrawingWand(options()->drawInfo(),image());
2802 drawable_.operator()(wand);
2806 ClonePPDrawException(wand);
2807 wand=DestroyDrawingWand(wand);
2808 ThrowPPDrawException(quiet());
2812void Magick::Image::draw(
const std::vector<Magick::Drawable> &drawable_)
2819 wand= AcquireDrawingWand(options()->drawInfo(),image());
2823 for (std::vector<Magick::Drawable>::const_iterator p = drawable_.begin();
2824 p != drawable_.end(); p++ )
2826 p->operator()(wand);
2827 if (DrawGetExceptionType(wand) != MagickCore::UndefinedException)
2831 if (DrawGetExceptionType(wand) == MagickCore::UndefinedException)
2834 ClonePPDrawException(wand);
2835 wand=DestroyDrawingWand(wand);
2836 ThrowPPDrawException(quiet());
2840void Magick::Image::edge(
const double radius_)
2846 newImage=EdgeImage(constImage(),radius_,exceptionInfo);
2847 replaceImage(newImage);
2848 ThrowImageException;
2851void Magick::Image::emboss(
const double radius_,
const double sigma_)
2857 newImage=EmbossImage(constImage(),radius_,sigma_,exceptionInfo);
2858 replaceImage(newImage);
2859 ThrowImageException;
2862void Magick::Image::encipher(
const std::string &passphrase_)
2866 EncipherImage(image(),passphrase_.c_str(),exceptionInfo);
2867 ThrowImageException;
2870void Magick::Image::enhance(
void)
2876 newImage=EnhanceImage(constImage(),exceptionInfo);
2877 replaceImage(newImage);
2878 ThrowImageException;
2881void Magick::Image::equalize(
void)
2885 EqualizeImage(image(),exceptionInfo);
2886 ThrowImageException;
2889void Magick::Image::erase(
void)
2893 (void) SetImageBackgroundColor(image(),exceptionInfo);
2894 ThrowImageException;
2897void Magick::Image::evaluate(
const ChannelType channel_,
2898 const MagickEvaluateOperator operator_,
double rvalue_)
2901 GetAndSetPPChannelMask(channel_);
2902 EvaluateImage(image(),operator_,rvalue_,exceptionInfo);
2903 RestorePPChannelMask;
2904 ThrowImageException;
2907void Magick::Image::evaluate(
const ChannelType channel_,
2908 const MagickFunction function_,
const size_t number_parameters_,
2909 const double *parameters_)
2912 GetAndSetPPChannelMask(channel_);
2913 FunctionImage(image(),function_,number_parameters_,parameters_,
2915 RestorePPChannelMask;
2916 ThrowImageException;
2919void Magick::Image::evaluate(
const ChannelType channel_,
const ssize_t x_,
2920 const ssize_t y_,
const size_t columns_,
const size_t rows_,
2921 const MagickEvaluateOperator operator_,
const double rvalue_)
2929 geometry.width = columns_;
2930 geometry.height = rows_;
2935 cropImage=CropImage(image(),&geometry,exceptionInfo);
2936 GetAndSetPPChannelMask(channel_);
2937 EvaluateImage(
cropImage,operator_,rvalue_,exceptionInfo);
2938 RestorePPChannelMask;
2939 (void) CompositeImage(image(),
cropImage,image()->alpha_trait ==
2940 BlendPixelTrait ? OverCompositeOp : CopyCompositeOp,MagickFalse,
2941 geometry.x,geometry.y,exceptionInfo );
2943 ThrowImageException;
2946void Magick::Image::extent(
const Geometry &geometry_ )
2952 extentInfo=geometry_;
2955 extentInfo.x=geometry_.xOff();
2956 extentInfo.y=geometry_.yOff();
2958 newImage=ExtentImage(image(),&extentInfo,exceptionInfo);
2959 replaceImage(newImage);
2960 ThrowImageException;
2963void Magick::Image::extent(
const Geometry &geometry_,
2964 const Color &backgroundColor_)
2966 backgroundColor(backgroundColor_);
2970void Magick::Image::extent(
const Geometry &geometry_,
2971 const Color &backgroundColor_,
const GravityType gravity_)
2973 backgroundColor(backgroundColor_);
2974 extent(geometry_,gravity_);
2977void Magick::Image::extent(
const Geometry &geometry_,
2978 const GravityType gravity_)
2983 SetGeometry(image(),&geometry);
2984 geometry.width=geometry_.width();
2985 geometry.height=geometry_.height();
2986 GravityAdjustGeometry(image()->columns,image()->rows,gravity_,&geometry);
2990void Magick::Image::flip(
void)
2996 newImage=FlipImage(constImage(),exceptionInfo);
2997 replaceImage(newImage);
2998 ThrowImageException;
3001void Magick::Image::floodFillAlpha(
const ssize_t x_,
const ssize_t y_,
3002 const unsigned int alpha_,
const bool invert_)
3009 target=
static_cast<PixelInfo
>(pixelColor(x_,y_));
3010 target.alpha=alpha_;
3012 GetAndSetPPChannelMask(AlphaChannel);
3013 FloodfillPaintImage(image(),options()->drawInfo(),&target,x_,y_,
3014 (MagickBooleanType)invert_,exceptionInfo);
3015 RestorePPChannelMask;
3016 ThrowImageException;
3019void Magick::Image::floodFillAlpha(
const ssize_t x_,
const ssize_t y_,
3020 const unsigned int alpha_,
const Color &target_,
const bool invert_)
3027 target=
static_cast<PixelInfo
>(target_);
3028 target.alpha=alpha_;
3030 GetAndSetPPChannelMask(AlphaChannel);
3031 FloodfillPaintImage(image(),options()->drawInfo(),&target,x_,y_,
3032 (MagickBooleanType)invert_,exceptionInfo);
3033 RestorePPChannelMask;
3034 ThrowImageException;
3037void Magick::Image::floodFillColor(
const Geometry &point_,
3038 const Magick::Color &fillColor_,
const bool invert_)
3040 floodFillColor(point_.xOff(),point_.yOff(),fillColor_,invert_);
3043void Magick::Image::floodFillColor(
const ssize_t x_,
const ssize_t y_,
3044 const Magick::Color &fillColor_,
const bool invert_)
3051 pixel=
static_cast<PixelInfo
>(pixelColor(x_,y_));
3052 floodFill(x_,y_,(Magick::Image *)NULL,fillColor_,&pixel,invert_);
3055void Magick::Image::floodFillColor(
const Geometry &point_,
3056 const Magick::Color &fillColor_,
const Magick::Color &borderColor_,
3059 floodFillColor(point_.xOff(),point_.yOff(),fillColor_,borderColor_,invert_);
3062void Magick::Image::floodFillColor(
const ssize_t x_,
const ssize_t y_,
3063 const Magick::Color &fillColor_,
const Magick::Color &borderColor_,
3071 pixel=
static_cast<PixelInfo
>(borderColor_);
3072 floodFill(x_,y_,(Magick::Image *)NULL,fillColor_,&pixel,invert_);
3075void Magick::Image::floodFillTexture(
const Magick::Geometry &point_,
3076 const Magick::Image &texture_,
const bool invert_)
3078 floodFillTexture(point_.xOff(),point_.yOff(),texture_,invert_);
3081void Magick::Image::floodFillTexture(
const ssize_t x_,
const ssize_t y_,
3082 const Magick::Image &texture_,
const bool invert_)
3089 pixel=
static_cast<PixelInfo
>(pixelColor(x_,y_));
3090 floodFill(x_,y_,&texture_,Magick::Color(),&pixel,invert_);
3093void Magick::Image::floodFillTexture(
const Magick::Geometry &point_,
3094 const Magick::Image &texture_,
const Magick::Color &borderColor_,
3097 floodFillTexture(point_.xOff(),point_.yOff(),texture_,borderColor_,invert_);
3100void Magick::Image::floodFillTexture(
const ssize_t x_,
const ssize_t y_,
3101 const Magick::Image &texture_,
const Magick::Color &borderColor_,
3109 pixel=
static_cast<PixelInfo
>(borderColor_);
3110 floodFill(x_,y_,&texture_,Magick::Color(),&pixel,invert_);
3113void Magick::Image::flop(
void)
3119 newImage=FlopImage(constImage(),exceptionInfo);
3120 replaceImage(newImage);
3121 ThrowImageException;
3124void Magick::Image::fontTypeMetrics(
const std::string &text_,
3130 drawInfo=options()->drawInfo();
3131 drawInfo->text=DestroyString(drawInfo->text);
3132 drawInfo->text=
const_cast<char *
>(text_.c_str());
3134 GetTypeMetrics(image(),drawInfo,&(metrics->_typeMetric),exceptionInfo);
3135 drawInfo->text=(
char *) NULL;
3136 ThrowImageException;
3139void Magick::Image::fontTypeMetricsMultiline(
const std::string &text_,
3145 drawInfo=options()->drawInfo();
3146 drawInfo->text=DestroyString(drawInfo->text);
3147 drawInfo->text=
const_cast<char *
>(text_.c_str());
3149 (void) GetMultilineTypeMetrics(image(),drawInfo,&(metrics->_typeMetric),
3151 drawInfo->text=(
char *) NULL;
3152 ThrowImageException;
3155void Magick::Image::frame(
const Geometry &geometry_)
3163 info.x=
static_cast<ssize_t
>(geometry_.width());
3164 info.y=
static_cast<ssize_t
>(geometry_.height());
3165 info.width=columns() + (
static_cast<size_t>(info.x) << 1);
3166 info.height=rows() + (
static_cast<size_t>(info.y) << 1);
3167 info.outer_bevel=geometry_.xOff();
3168 info.inner_bevel=geometry_.yOff();
3171 newImage=FrameImage(constImage(),&info,image()->compose,exceptionInfo);
3172 replaceImage(newImage);
3173 ThrowImageException;
3176void Magick::Image::frame(
const size_t width_,
const size_t height_,
3177 const ssize_t innerBevel_,
const ssize_t outerBevel_)
3185 info.x=
static_cast<ssize_t
>(width_);
3186 info.y=
static_cast<ssize_t
>(height_);
3187 info.width=columns() + (
static_cast<size_t>(info.x) << 1);
3188 info.height=rows() + (
static_cast<size_t>(info.y) << 1);
3189 info.outer_bevel=
static_cast<ssize_t
>(outerBevel_);
3190 info.inner_bevel=
static_cast<ssize_t
>(innerBevel_);
3193 newImage=FrameImage(constImage(),&info,image()->compose,exceptionInfo);
3194 replaceImage(newImage);
3195 ThrowImageException;
3198void Magick::Image::fx(
const std::string expression_)
3204 newImage=FxImage(constImage(),expression_.c_str(),exceptionInfo);
3205 replaceImage(newImage);
3206 ThrowImageException;
3209void Magick::Image::fx(
const std::string expression_,
3210 const Magick::ChannelType channel_)
3216 GetAndSetPPChannelMask(channel_);
3217 newImage=FxImage(constImage(),expression_.c_str(),exceptionInfo);
3218 RestorePPChannelMask;
3219 replaceImage(newImage);
3220 ThrowImageException;
3223void Magick::Image::gamma(
const double gamma_)
3227 GammaImage(image(),gamma_,exceptionInfo);
3228 ThrowImageException;
3231void Magick::Image::gamma(
const double gammaRed_,
const double gammaGreen_,
3232 const double gammaBlue_)
3236 GetAndSetPPChannelMask(RedChannel);
3237 (void) GammaImage(image(),gammaRed_,exceptionInfo);
3238 SetPPChannelMask(GreenChannel);
3239 (void) GammaImage(image(),gammaGreen_,exceptionInfo);
3240 SetPPChannelMask(BlueChannel);
3241 (void) GammaImage(image(),gammaBlue_,exceptionInfo);
3242 RestorePPChannelMask;
3243 ThrowImageException;
3246void Magick::Image::gaussianBlur(
const double radius_,
const double sigma_)
3252 newImage=GaussianBlurImage(constImage(),radius_,sigma_,exceptionInfo);
3253 replaceImage(newImage);
3254 ThrowImageException;
3257void Magick::Image::gaussianBlurChannel(
const ChannelType channel_,
3258 const double radius_,
const double sigma_)
3264 GetAndSetPPChannelMask(channel_);
3265 newImage=GaussianBlurImage(constImage(),radius_,sigma_,exceptionInfo);
3266 RestorePPChannelMask;
3267 replaceImage(newImage);
3268 ThrowImageException;
3271const Magick::Quantum *Magick::Image::getConstPixels(
const ssize_t x_,
3272 const ssize_t y_,
const size_t columns_,
const size_t rows_)
const
3278 p=GetVirtualPixels(constImage(),x_, y_,columns_, rows_,exceptionInfo);
3279 ThrowImageException;
3283const void *Magick::Image::getConstMetacontent(
void)
const
3288 result=GetVirtualMetacontent(constImage());
3291 throwExceptionExplicit(MagickCore::OptionError,
3292 "Unable to retrieve meta content.");
3297void *Magick::Image::getMetacontent(
void )
3302 result=GetAuthenticMetacontent(image());
3305 throwExceptionExplicit(MagickCore::OptionError,
3306 "Unable to retrieve meta content.");
3311Magick::Quantum *Magick::Image::getPixels(
const ssize_t x_,
const ssize_t y_,
3312 const size_t columns_,
const size_t rows_)
3319 result=GetAuthenticPixels(image(),x_, y_,columns_,rows_,exceptionInfo);
3320 ThrowImageException;
3325void Magick::Image::grayscale(
const PixelIntensityMethod method_)
3329 (void) GrayscaleImage(image(),method_,exceptionInfo);
3330 ThrowImageException;
3333void Magick::Image::haldClut(
const Image &clutImage_)
3337 (void) HaldClutImage(image(),clutImage_.constImage(),exceptionInfo);
3338 ThrowImageException;
3341void Magick::Image::houghLine(
const size_t width_,
const size_t height_,
3342 const size_t threshold_)
3348 newImage=HoughLineImage(constImage(),width_,height_,threshold_,
3350 replaceImage(newImage);
3351 ThrowImageException;
3354Magick::ImageType Magick::Image::identifyType(
void)
const
3360 image_type=IdentifyImageType(constImage(),exceptionInfo);
3361 ThrowImageException;
3365void Magick::Image::implode(
const double factor_)
3371 newImage=ImplodeImage(constImage(),factor_,image()->interpolate,
3373 replaceImage(newImage);
3374 ThrowImageException;
3377void Magick::Image::inverseFourierTransform(
const Image &phase_)
3379 inverseFourierTransform(phase_,
true);
3382void Magick::Image::inverseFourierTransform(
const Image &phase_,
3383 const bool magnitude_)
3389 newImage=InverseFourierTransformImage(constImage(),phase_.constImage(),
3390 magnitude_ ==
true ? MagickTrue : MagickFalse,exceptionInfo);
3391 replaceImage(newImage);
3392 ThrowImageException;
3395void Magick::Image::kuwahara(
const double radius_,
const double sigma_)
3401 newImage=KuwaharaImage(constImage(),radius_,sigma_,exceptionInfo);
3402 replaceImage(newImage);
3403 ThrowImageException;
3406void Magick::Image::kuwaharaChannel(
const ChannelType channel_,
3407 const double radius_,
const double sigma_)
3413 GetAndSetPPChannelMask(channel_);
3414 newImage=KuwaharaImage(constImage(),radius_,sigma_,exceptionInfo);
3415 replaceImage(newImage);
3416 RestorePPChannelMask;
3417 ThrowImageException;
3420void Magick::Image::level(
const double blackPoint_,
const double whitePoint_,
3421 const double gamma_)
3425 (void) LevelImage(image(),blackPoint_,whitePoint_,gamma_,exceptionInfo);
3426 ThrowImageException;
3429void Magick::Image::levelChannel(
const ChannelType channel_,
3430 const double blackPoint_,
const double whitePoint_,
const double gamma_)
3434 GetAndSetPPChannelMask(channel_);
3435 (void) LevelImage(image(),blackPoint_,whitePoint_,gamma_,exceptionInfo);
3436 RestorePPChannelMask;
3437 ThrowImageException;
3440void Magick::Image::levelColors(
const Color &blackColor_,
3441 const Color &whiteColor_,
const bool invert_)
3449 black=
static_cast<PixelInfo
>(blackColor_);
3450 white=
static_cast<PixelInfo
>(whiteColor_);
3452 (void) LevelImageColors(image(),&black,&white,invert_ ==
true ?
3453 MagickTrue : MagickFalse,exceptionInfo);
3454 ThrowImageException;
3457void Magick::Image::levelColorsChannel(
const ChannelType channel_,
3458 const Color &blackColor_,
const Color &whiteColor_,
const bool invert_)
3466 black=
static_cast<PixelInfo
>(blackColor_);
3467 white=
static_cast<PixelInfo
>(whiteColor_);
3469 GetAndSetPPChannelMask(channel_);
3470 (void) LevelImageColors(image(),&black,&white,invert_ ==
true ?
3471 MagickTrue : MagickFalse,exceptionInfo);
3472 RestorePPChannelMask;
3473 ThrowImageException;
3476void Magick::Image::levelize(
const double blackPoint_,
const double whitePoint_,
3477 const double gamma_)
3481 (void) LevelizeImage(image(),blackPoint_,whitePoint_,gamma_,exceptionInfo);
3482 ThrowImageException;
3485void Magick::Image::levelizeChannel(
const ChannelType channel_,
3486 const double blackPoint_,
const double whitePoint_,
const double gamma_)
3490 GetAndSetPPChannelMask(channel_);
3491 (void) LevelizeImage(image(),blackPoint_,whitePoint_,gamma_,exceptionInfo);
3492 RestorePPChannelMask;
3493 ThrowImageException;
3496void Magick::Image::linearStretch(
const double blackPoint_,
3497 const double whitePoint_)
3501 LinearStretchImage(image(),blackPoint_,whitePoint_,exceptionInfo);
3502 ThrowImageException;
3505void Magick::Image::liquidRescale(
const Geometry &geometry_)
3518 ParseMetaGeometry(
static_cast<std::string
>(geometry_).c_str(),&x,&y,&width,
3522 newImage=LiquidRescaleImage(image(),width,height,(
double) x,(
double) y,exceptionInfo);
3523 replaceImage(newImage);
3524 ThrowImageException;
3527void Magick::Image::localContrast(
const double radius_,
const double strength_)
3533 newImage=LocalContrastImage(constImage(),radius_,strength_,exceptionInfo);
3534 replaceImage(newImage);
3535 ThrowImageException;
3538void Magick::Image::localContrastChannel(
const ChannelType channel_,
3539 const double radius_,
const double strength_)
3545 GetAndSetPPChannelMask(channel_);
3546 newImage=LocalContrastImage(constImage(),radius_,strength_,exceptionInfo);
3547 RestorePPChannelMask;
3548 replaceImage(newImage);
3549 ThrowImageException;
3552void Magick::Image::magnify(
void)
3558 newImage=MagnifyImage(constImage(),exceptionInfo);
3559 replaceImage(newImage);
3560 ThrowImageException;
3563void Magick::Image::map(
const Image &mapImage_,
const bool dither_)
3565 map(mapImage_, dither_ ? RiemersmaDitherMethod : NoDitherMethod);
3568void Magick::Image::map(
const Image &mapImage_,
const DitherMethod ditherMethod_)
3572 options()->quantizeDither(ditherMethod_);
3573 RemapImage(options()->quantizeInfo(),image(),mapImage_.constImage(),
3575 ThrowImageException;
3578void Magick::Image::meanShift(
const size_t width_,
const size_t height_,
3579 const double color_distance_)
3585 newImage=MeanShiftImage(constImage(),width_,height_,color_distance_,
3587 replaceImage(newImage);
3588 ThrowImageException;
3591void Magick::Image::medianFilter(
const double radius_)
3597 newImage=StatisticImage(image(),MedianStatistic,(
size_t) radius_,
3598 (
size_t) radius_,exceptionInfo);
3599 replaceImage(newImage);
3600 ThrowImageException;
3603void Magick::Image::minify(
void)
3609 newImage=MinifyImage(constImage(),exceptionInfo);
3610 replaceImage(newImage);
3611 ThrowImageException;
3614void Magick::Image::modulate(
const double brightness_,
const double saturation_,
3618 modulate[MagickPathExtent + 1];
3620 FormatLocaleString(modulate,MagickPathExtent,
"%3.6f,%3.6f,%3.6f",brightness_,
3625 ModulateImage(image(),modulate,exceptionInfo);
3626 ThrowImageException;
3629Magick::ImageMoments Magick::Image::moments(
void)
const
3634void Magick::Image::morphology(
const MorphologyMethod method_,
3635 const std::string kernel_,
const ssize_t iterations_)
3644 kernel=AcquireKernelInfo(kernel_.c_str(),exceptionInfo);
3645 if (kernel == (KernelInfo *) NULL)
3646 throwExceptionExplicit(MagickCore::OptionError,
"Unable to parse kernel.");
3647 newImage=MorphologyImage(constImage(),method_,iterations_,kernel,
3649 replaceImage(newImage);
3650 kernel=DestroyKernelInfo(kernel);
3651 ThrowImageException;
3654void Magick::Image::morphology(
const MorphologyMethod method_,
3655 const KernelInfoType kernel_,
const std::string arguments_,
3656 const ssize_t iterations_)
3664 option=CommandOptionToMnemonic(MagickKernelOptions,kernel_);
3665 if (option == (
const char *)NULL)
3667 throwExceptionExplicit(MagickCore::OptionError,
3668 "Unable to determine kernel type.");
3671 kernel=std::string(option);
3672 if (!arguments_.empty())
3673 kernel+=
":"+arguments_;
3675 morphology(method_,kernel,iterations_);
3678void Magick::Image::morphologyChannel(
const ChannelType channel_,
3679 const MorphologyMethod method_,
const std::string kernel_,
3680 const ssize_t iterations_)
3690 kernel=AcquireKernelInfo(kernel_.c_str(),exceptionInfo);
3691 if (kernel == (KernelInfo *)NULL)
3693 throwExceptionExplicit(MagickCore::OptionError,
3694 "Unable to parse kernel.");
3697 GetAndSetPPChannelMask(channel_);
3698 newImage=MorphologyImage(constImage(),method_,iterations_,kernel,
3700 RestorePPChannelMask;
3701 replaceImage(newImage);
3702 kernel=DestroyKernelInfo(kernel);
3703 ThrowImageException;
3706void Magick::Image::morphologyChannel(
const ChannelType channel_,
3707 const MorphologyMethod method_,
const KernelInfoType kernel_,
3708 const std::string arguments_,
const ssize_t iterations_)
3716 option=CommandOptionToMnemonic(MagickKernelOptions,kernel_);
3717 if (option == (
const char *)NULL)
3719 throwExceptionExplicit(MagickCore::OptionError,
3720 "Unable to determine kernel type.");
3724 kernel=std::string(option);
3725 if (!arguments_.empty())
3726 kernel+=
":"+arguments_;
3728 morphologyChannel(channel_,method_,kernel,iterations_);
3731void Magick::Image::motionBlur(
const double radius_,
const double sigma_,
3732 const double angle_)
3738 newImage=MotionBlurImage(constImage(),radius_,sigma_,angle_,exceptionInfo);
3739 replaceImage(newImage);
3740 ThrowImageException;
3743void Magick::Image::negate(
const bool grayscale_)
3747 NegateImage(image(),(MagickBooleanType) grayscale_,exceptionInfo);
3748 ThrowImageException;
3751void Magick::Image::negateChannel(
const ChannelType channel_,
3752 const bool grayscale_)
3756 GetAndSetPPChannelMask(channel_);
3757 NegateImage(image(),(MagickBooleanType) grayscale_,exceptionInfo);
3758 RestorePPChannelMask;
3759 ThrowImageException;
3762void Magick::Image::normalize(
void)
3766 NormalizeImage(image(),exceptionInfo);
3767 ThrowImageException;
3770void Magick::Image::oilPaint(
const double radius_,
const double sigma_)
3776 newImage=OilPaintImage(constImage(),radius_,sigma_,exceptionInfo);
3777 replaceImage(newImage);
3778 ThrowImageException;
3781void Magick::Image::opaque(
const Color &opaqueColor_,
const Color &penColor_,
3792 if (!opaqueColor_.isValid())
3793 throwExceptionExplicit(MagickCore::OptionError,
3794 "Opaque color argument is invalid");
3796 if (!penColor_.isValid())
3797 throwExceptionExplicit(MagickCore::OptionError,
3798 "Pen color argument is invalid");
3801 opaqueColor=opaqueColor_;
3805 (void) QueryColorCompliance(opaqueColor.c_str(),AllCompliance,&opaque,
3807 (void) QueryColorCompliance(penColor.c_str(),AllCompliance,&pen,
3809 OpaquePaintImage(image(),&opaque,&pen,invert_ ? MagickTrue : MagickFalse,
3811 ThrowImageException;
3814void Magick::Image::orderedDither(std::string thresholdMap_)
3818 (void) OrderedDitherImage(image(),thresholdMap_.c_str(),exceptionInfo);
3819 ThrowImageException;
3822void Magick::Image::orderedDitherChannel(
const ChannelType channel_,
3823 std::string thresholdMap_)
3827 GetAndSetPPChannelMask(channel_);
3828 (void)OrderedDitherImage(image(),thresholdMap_.c_str(),exceptionInfo);
3829 RestorePPChannelMask;
3830 ThrowImageException;
3833void Magick::Image::perceptible(
const double epsilon_)
3837 PerceptibleImage(image(),epsilon_,exceptionInfo);
3838 ThrowImageException;
3841void Magick::Image::perceptibleChannel(
const ChannelType channel_,
3842 const double epsilon_)
3846 GetAndSetPPChannelMask(channel_);
3847 PerceptibleImage(image(),epsilon_,exceptionInfo);
3848 RestorePPChannelMask;
3849 ThrowImageException;
3852 Magick::ImagePerceptualHash Magick::Image::perceptualHash()
const
3857void Magick::Image::ping(
const std::string &imageSpec_)
3863 options()->fileName(imageSpec_);
3864 newImage=PingImage(imageInfo(),exceptionInfo);
3865 read(newImage,exceptionInfo);
3868void Magick::Image::ping(
const Blob& blob_)
3874 newImage=PingBlob(imageInfo(),blob_.data(),blob_.length(),exceptionInfo);
3875 read(newImage,exceptionInfo);
3878void Magick::Image::pixelColor(
const ssize_t x_,
const ssize_t y_,
3879 const Color &color_)
3888 if (y_ > (ssize_t) rows() || x_ > (ssize_t) columns())
3889 throwExceptionExplicit(MagickCore::OptionError,
3890 "Access outside of image boundary");
3895 classType(DirectClass );
3900 pixel=pixels.get(x_, y_, 1, 1 );
3902 MagickCore::SetPixelViaPixelInfo(constImage(),&packet,pixel);
3907Magick::Color Magick::Image::pixelColor(
const ssize_t x_,
3908 const ssize_t y_)
const
3913 pixel=getConstPixels(x_,y_,1,1);
3919 MagickCore::GetPixelInfoPixel(constImage(),pixel,&packet);
3920 return(
Color(packet));
3926void Magick::Image::polaroid(
const std::string &caption_,
const double angle_,
3927 const PixelInterpolateMethod method_)
3933 newImage=PolaroidImage(constImage(),options()->drawInfo(),caption_.c_str(),
3934 angle_,method_,exceptionInfo);
3935 replaceImage(newImage);
3936 ThrowImageException;
3939void Magick::Image::posterize(
const size_t levels_,
const DitherMethod method_)
3943 PosterizeImage(image(),levels_,method_,exceptionInfo);
3944 ThrowImageException;
3947void Magick::Image::posterizeChannel(
const ChannelType channel_,
3948 const size_t levels_,
const DitherMethod method_)
3952 GetAndSetPPChannelMask(channel_);
3953 PosterizeImage(image(),levels_,method_,exceptionInfo);
3954 RestorePPChannelMask;
3955 ThrowImageException;
3958void Magick::Image::process(std::string name_,
const ssize_t argc,
3964 (void) InvokeDynamicImageFilter(name_.c_str(),&image(),(
int) argc,argv,
3966 ThrowImageException;
3969void Magick::Image::profile(
const std::string name_,
3970 const Magick::Blob &profile_)
3974 (void) ProfileImage(image(),name_.c_str(),(
unsigned char *)profile_.data(),
3975 profile_.length(),exceptionInfo);
3976 ThrowImageException;
3979Magick::Blob Magick::Image::profile(
const std::string name_)
const
3984 profile=GetImageProfile(constImage(),name_.c_str());
3986 if (profile == (StringInfo *) NULL)
3988 return(
Blob((
void*) GetStringInfoDatum(profile),GetStringInfoLength(
3992void Magick::Image::quantize(
const bool measureError_)
3997 options()->quantizeInfo()->measure_error=MagickTrue;
3999 options()->quantizeInfo()->measure_error=MagickFalse;
4002 QuantizeImage(options()->quantizeInfo(),image(),exceptionInfo);
4003 ThrowImageException;
4006void Magick::Image::raise(
const Geometry &geometry_,
const bool raisedFlag_)
4009 raiseInfo=geometry_;
4013 RaiseImage(image(),&raiseInfo,raisedFlag_ ==
true ? MagickTrue : MagickFalse,
4015 ThrowImageException;
4018void Magick::Image::randomThreshold(
const double low_,
const double high_)
4021 (void) RandomThresholdImage(image(),low_,high_,exceptionInfo);
4022 ThrowImageException;
4025void Magick::Image::randomThresholdChannel(
const ChannelType channel_,
4026 const double low_,
const double high_)
4030 GetAndSetPPChannelMask(channel_);
4031 (void) RandomThresholdImage(image(),low_,high_,exceptionInfo);
4032 RestorePPChannelMask;
4033 ThrowImageException;
4036void Magick::Image::read(
const Blob &blob_)
4042 newImage=BlobToImage(imageInfo(),
static_cast<const void *
>(blob_.data()),
4043 blob_.length(),exceptionInfo);
4044 read(newImage,exceptionInfo);
4047void Magick::Image::read(
const Blob &blob_,
const Geometry &size_)
4053void Magick::Image::read(
const Blob &blob_,
const Geometry &size_,
4054 const size_t depth_)
4061void Magick::Image::read(
const Blob &blob_,
const Geometry &size_,
4062 const size_t depth_,
const std::string &magick_)
4068 fileName(magick_ +
':');
4072void Magick::Image::read(
const Blob &blob_,
const Geometry &size_,
4073 const std::string &magick_)
4078 fileName(magick_ +
':');
4082void Magick::Image::read(
const Geometry &size_,
const std::string &imageSpec_)
4088void Magick::Image::read(
const size_t width_,
const size_t height_,
4089 const std::string &map_,
const StorageType type_,
const void *pixels_)
4095 newImage=ConstituteImage(width_,height_,map_.c_str(),type_, pixels_,
4097 replaceImage(newImage);
4098 ThrowImageException;
4101void Magick::Image::read(
const std::string &imageSpec_)
4107 options()->fileName(imageSpec_);
4108 newImage=ReadImage(imageInfo(),exceptionInfo);
4109 read(newImage,exceptionInfo);
4112void Magick::Image::readMask(
const Magick::Image &mask_)
4114 mask(mask_,ReadPixelMask);
4117Magick::Image Magick::Image::readMask(
void)
const
4119 return(mask(ReadPixelMask));
4122void Magick::Image::readPixels(
const Magick::QuantumType quantum_,
4123 const unsigned char *source_)
4128 quantum_info=AcquireQuantumInfo(imageInfo(),image());
4130 ImportQuantumPixels(image(),(MagickCore::CacheView *) NULL,quantum_info,
4131 quantum_,source_,exceptionInfo);
4132 quantum_info=DestroyQuantumInfo(quantum_info);
4133 ThrowImageException;
4136void Magick::Image::reduceNoise(
void)
4141void Magick::Image::reduceNoise(
const size_t order_)
4147 newImage=StatisticImage(constImage(),NonpeakStatistic,order_,
4148 order_,exceptionInfo);
4149 replaceImage(newImage);
4150 ThrowImageException;
4153void Magick::Image::repage()
4157 image()->page.width = 0;
4158 image()->page.height = 0;
4159 image()->page.x = 0;
4160 image()->page.y = 0;
4163void Magick::Image::resample(
const Point &density_)
4169 newImage=ResampleImage(constImage(),density_.x(),density_.y(),
4170 image()->filter,exceptionInfo);
4171 replaceImage(newImage);
4172 ThrowImageException;
4175void Magick::Image::resize(
const Geometry &geometry_)
4190 ParseMetaGeometry(
static_cast<std::string
>(geometry_).c_str(),&x,&y,&width,
4194 newImage=ResizeImage(constImage(),width,height,image()->filter,
4196 replaceImage(newImage);
4197 ThrowImageException;
4200void Magick::Image::roll(
const Geometry &roll_)
4206 newImage=RollImage(constImage(),roll_.xOff(),roll_.yOff(),exceptionInfo);
4207 replaceImage(newImage);
4208 ThrowImageException;
4211void Magick::Image::roll(
const ssize_t columns_,
const ssize_t rows_)
4217 newImage=RollImage(constImage(),columns_, rows_,exceptionInfo);
4218 replaceImage(newImage);
4219 ThrowImageException;
4222void Magick::Image::rotate(
const double degrees_)
4228 newImage=RotateImage(constImage(),degrees_,exceptionInfo);
4229 replaceImage(newImage);
4230 ThrowImageException;
4233void Magick::Image::rotationalBlur(
const double angle_)
4239 newImage=RotationalBlurImage(constImage(),angle_,exceptionInfo);
4240 replaceImage(newImage);
4241 ThrowImageException;
4244void Magick::Image::rotationalBlurChannel(
const ChannelType channel_,
4245 const double angle_)
4251 GetAndSetPPChannelMask(channel_);
4252 newImage=RotationalBlurImage(constImage(),angle_,exceptionInfo);
4253 RestorePPChannelMask;
4254 replaceImage(newImage);
4255 ThrowImageException;
4258void Magick::Image::sample(
const Geometry &geometry_)
4271 ParseMetaGeometry(
static_cast<std::string
>(geometry_).c_str(),&x,&y,&width,
4275 newImage=SampleImage(constImage(),width,height,exceptionInfo);
4276 replaceImage(newImage);
4277 ThrowImageException;
4280void Magick::Image::scale(
const Geometry &geometry_)
4293 ParseMetaGeometry(
static_cast<std::string
>(geometry_).c_str(),&x,&y,&width,
4297 newImage=ScaleImage(constImage(),width,height,exceptionInfo);
4298 replaceImage(newImage);
4299 ThrowImageException;
4302void Magick::Image::segment(
const double clusterThreshold_,
4303 const double smoothingThreshold_)
4307 SegmentImage(image(),options()->quantizeColorSpace(),
4308 (MagickBooleanType) options()->verbose(),clusterThreshold_,
4309 smoothingThreshold_,exceptionInfo);
4310 SyncImage(image(),exceptionInfo);
4311 ThrowImageException;
4314void Magick::Image::selectiveBlur(
const double radius_,
const double sigma_,
4315 const double threshold_)
4321 newImage=SelectiveBlurImage(constImage(),radius_,sigma_,threshold_,
4323 replaceImage(newImage);
4324 ThrowImageException;
4327void Magick::Image::selectiveBlurChannel(
const ChannelType channel_,
4328 const double radius_,
const double sigma_,
const double threshold_)
4334 GetAndSetPPChannelMask(channel_);
4335 newImage=SelectiveBlurImage(constImage(),radius_,sigma_,threshold_,
4337 RestorePPChannelMask;
4338 replaceImage(newImage);
4339 ThrowImageException;
4342Magick::Image Magick::Image::separate(
const ChannelType channel_)
const
4348 image=SeparateImage(constImage(),channel_,exceptionInfo);
4349 ThrowImageException;
4350 if (image == (MagickCore::Image *) NULL)
4351 return(Magick::Image());
4353 return(Magick::Image(image));
4356void Magick::Image::sepiaTone(
const double threshold_)
4362 newImage=SepiaToneImage(constImage(),threshold_,exceptionInfo);
4363 replaceImage(newImage);
4364 ThrowImageException;
4367bool Magick::Image::setColorMetric(
const Image &reference_)
4377 status=
static_cast<bool>(SetImageColorMetric(image(),ref.constImage(),
4379 ThrowImageException;
4383Magick::Quantum *Magick::Image::setPixels(
const ssize_t x_,
const ssize_t y_,
4384 const size_t columns_,
const size_t rows_)
4391 result=QueueAuthenticPixels(image(),x_,y_,columns_,rows_,exceptionInfo);
4392 ThrowImageException;
4396void Magick::Image::shade(
const double azimuth_,
const double elevation_,
4397 const bool colorShading_)
4403 newImage=ShadeImage(constImage(),colorShading_ ==
true ?
4404 MagickTrue : MagickFalse,azimuth_,elevation_,exceptionInfo);
4405 replaceImage(newImage);
4406 ThrowImageException;
4409void Magick::Image::shadow(
const double percent_opacity_,
const double sigma_,
4410 const ssize_t x_,
const ssize_t y_)
4416 newImage=ShadowImage(constImage(),percent_opacity_, sigma_,x_, y_,
4418 replaceImage(newImage);
4419 ThrowImageException;
4422void Magick::Image::sharpen(
const double radius_,
const double sigma_)
4428 newImage=SharpenImage(constImage(),radius_,sigma_,exceptionInfo);
4429 replaceImage(newImage);
4430 ThrowImageException;
4433void Magick::Image::sharpenChannel(
const ChannelType channel_,
4434 const double radius_,
const double sigma_)
4440 GetAndSetPPChannelMask(channel_);
4441 newImage=SharpenImage(constImage(),radius_,sigma_,exceptionInfo);
4442 RestorePPChannelMask;
4443 replaceImage(newImage);
4444 ThrowImageException;
4447void Magick::Image::shave(
const Geometry &geometry_)
4453 shaveInfo=geometry_;
4456 newImage=ShaveImage(constImage(),&shaveInfo,exceptionInfo);
4457 replaceImage(newImage);
4458 ThrowImageException;
4461void Magick::Image::shear(
const double xShearAngle_,
const double yShearAngle_)
4467 newImage=ShearImage(constImage(),xShearAngle_,yShearAngle_,exceptionInfo);
4468 replaceImage(newImage);
4469 ThrowImageException;
4472void Magick::Image::sigmoidalContrast(
const bool sharpen_,
4473 const double contrast,
const double midpoint)
4477 (void) SigmoidalContrastImage(image(),(MagickBooleanType) sharpen_,contrast,
4478 midpoint,exceptionInfo);
4479 ThrowImageException;
4482std::string Magick::Image::signature(
const bool force_)
const
4484 return(_imgRef->signature(force_));
4487void Magick::Image::sketch(
const double radius_,
const double sigma_,
4488 const double angle_)
4494 newImage=SketchImage(constImage(),radius_,sigma_,angle_,exceptionInfo);
4495 replaceImage(newImage);
4496 ThrowImageException;
4499void Magick::Image::solarize(
const double factor_)
4503 SolarizeImage(image(),factor_,exceptionInfo);
4504 ThrowImageException;
4507void Magick::Image::sparseColor(
const ChannelType channel_,
4508 const SparseColorMethod method_,
const size_t numberArguments_,
4509 const double *arguments_)
4515 GetAndSetPPChannelMask(channel_);
4516 newImage=SparseColorImage(constImage(),method_,numberArguments_,arguments_,
4518 RestorePPChannelMask;
4519 replaceImage(newImage);
4520 ThrowImageException;
4523void Magick::Image::splice(
const Geometry &geometry_)
4529 spliceInfo=geometry_;
4532 newImage=SpliceImage(constImage(),&spliceInfo,exceptionInfo);
4533 replaceImage(newImage);
4534 ThrowImageException;
4537void Magick::Image::splice(
const Geometry &geometry_,
4538 const Color &backgroundColor_)
4540 backgroundColor(backgroundColor_);
4544void Magick::Image::splice(
const Geometry &geometry_,
4545 const Color &backgroundColor_,
const GravityType gravity_)
4547 backgroundColor(backgroundColor_);
4548 image()->gravity=gravity_;
4552void Magick::Image::spread(
const double amount_)
4558 newImage=SpreadImage(constImage(),image()->interpolate,amount_,exceptionInfo);
4559 replaceImage(newImage);
4560 ThrowImageException;
4563Magick::ImageStatistics Magick::Image::statistics()
const
4568void Magick::Image::stegano(
const Image &watermark_)
4574 newImage=SteganoImage(constImage(),watermark_.constImage(),exceptionInfo);
4575 replaceImage(newImage);
4576 ThrowImageException;
4579void Magick::Image::stereo(
const Image &rightImage_)
4585 newImage=StereoImage(constImage(),rightImage_.constImage(),exceptionInfo);
4586 replaceImage(newImage);
4587 ThrowImageException;
4590void Magick::Image::strip(
void)
4594 StripImage(image(),exceptionInfo);
4595 ThrowImageException;
4598Magick::Image Magick::Image::subImageSearch(
const Image &reference_,
4599 const MetricType metric_,
Geometry *offset_,
double *similarityMetric_,
4600 const double similarityThreshold)
4609 newImage=SimilarityImage(image(),reference_.constImage(),metric_,
4610 similarityThreshold,&offset,similarityMetric_,exceptionInfo);
4611 ThrowImageException;
4614 if (newImage == (MagickCore::Image *) NULL)
4615 return(Magick::Image());
4617 return(Magick::Image(newImage));
4620void Magick::Image::swirl(
const double degrees_)
4626 newImage=SwirlImage(constImage(),degrees_,image()->interpolate,
4628 replaceImage(newImage);
4629 ThrowImageException;
4632void Magick::Image::syncPixels(
void)
4635 (void) SyncAuthenticPixels(image(),exceptionInfo);
4636 ThrowImageException;
4639void Magick::Image::texture(
const Image &texture_)
4643 TextureImage(image(),texture_.constImage(),exceptionInfo);
4644 ThrowImageException;
4647void Magick::Image::threshold(
const double threshold_)
4651 BilevelImage(image(),threshold_,exceptionInfo);
4652 ThrowImageException;
4655void Magick::Image::thumbnail(
const Geometry &geometry_)
4668 ParseMetaGeometry(
static_cast<std::string
>(geometry_).c_str(),&x,&y,&width,
4672 newImage=ThumbnailImage(constImage(),width,height,exceptionInfo);
4673 replaceImage(newImage);
4674 ThrowImageException;
4677void Magick::Image::tint(
const std::string opacity_)
4686 color=
static_cast<PixelInfo
>(constOptions()->fillColor());
4687 newImage=TintImage(constImage(),opacity_.c_str(),&color,exceptionInfo);
4688 replaceImage(newImage);
4689 ThrowImageException;
4692void Magick::Image::transformOrigin(
const double x_,
const double y_)
4695 options()->transformOrigin(x_,y_);
4698void Magick::Image::transformReset(
void)
4701 options()->transformReset();
4704void Magick::Image::transformScale(
const double sx_,
const double sy_)
4707 options()->transformScale(sx_,sy_);
4710void Magick::Image::transparent(
const Color &color_,
const bool inverse_)
4718 if (!color_.isValid())
4719 throwExceptionExplicit(MagickCore::OptionError,
4720 "Color argument is invalid");
4724 (void) QueryColorCompliance(color.c_str(),AllCompliance,&target,
4727 TransparentPaintImage(image(),&target,TransparentAlpha,
4728 inverse_ ==
true ? MagickTrue : MagickFalse,exceptionInfo);
4729 ThrowImageException;
4732void Magick::Image::transparentChroma(
const Color &colorLow_,
4733 const Color &colorHigh_)
4743 if (!colorLow_.isValid() || !colorHigh_.isValid())
4744 throwExceptionExplicit(MagickCore::OptionError,
4745 "Color argument is invalid");
4748 colorHigh=colorHigh_;
4751 (void) QueryColorCompliance(colorLow.c_str(),AllCompliance,&targetLow,
4753 (void) QueryColorCompliance(colorHigh.c_str(),AllCompliance,&targetHigh,
4756 TransparentPaintImageChroma(image(),&targetLow,&targetHigh,TransparentAlpha,
4757 MagickFalse,exceptionInfo);
4758 ThrowImageException;
4761void Magick::Image::transpose(
void)
4767 newImage=TransposeImage(constImage(),exceptionInfo);
4768 replaceImage(newImage);
4769 ThrowImageException;
4772void Magick::Image::transverse(
void)
4778 newImage=TransverseImage(constImage(),exceptionInfo);
4779 replaceImage(newImage);
4780 ThrowImageException;
4783void Magick::Image::trim(
void)
4789 newImage=TrimImage(constImage(),exceptionInfo);
4790 replaceImage(newImage);
4791 ThrowImageException;
4794Magick::Image Magick::Image::uniqueColors(
void)
const
4800 image=UniqueImageColors(constImage(),exceptionInfo);
4801 ThrowImageException;
4802 if (image == (MagickCore::Image *) NULL)
4803 return(Magick::Image());
4805 return(Magick::Image(image));
4808void Magick::Image::unsharpmask(
const double radius_,
const double sigma_,
4809 const double amount_,
const double threshold_)
4815 newImage=UnsharpMaskImage(constImage(),radius_,sigma_,amount_,threshold_,
4817 replaceImage(newImage);
4818 ThrowImageException;
4821void Magick::Image::unsharpmaskChannel(
const ChannelType channel_,
4822 const double radius_,
const double sigma_,
const double amount_,
4823 const double threshold_)
4829 GetAndSetPPChannelMask(channel_);
4830 newImage=UnsharpMaskImage(constImage(),radius_,sigma_,amount_,threshold_,
4832 RestorePPChannelMask;
4833 replaceImage(newImage);
4834 ThrowImageException;
4837void Magick::Image::vignette(
const double radius_,
const double sigma_,
4838 const ssize_t x_,
const ssize_t y_)
4844 newImage=VignetteImage(constImage(),radius_,sigma_,x_,y_,exceptionInfo);
4845 replaceImage(newImage);
4846 ThrowImageException;
4849void Magick::Image::wave(
const double amplitude_,
const double wavelength_)
4855 newImage=WaveImage(constImage(),amplitude_,wavelength_,image()->interpolate,
4857 replaceImage(newImage);
4858 ThrowImageException;
4861void Magick::Image::waveletDenoise(
const double threshold_,
4862 const double softness_)
4868 newImage=WaveletDenoiseImage(constImage(),threshold_,softness_,
4870 replaceImage(newImage);
4871 ThrowImageException;
4874void Magick::Image::whiteThreshold(
const std::string &threshold_)
4878 WhiteThresholdImage(image(),threshold_.c_str(),exceptionInfo);
4879 ThrowImageException;
4882void Magick::Image::whiteThresholdChannel(
const ChannelType channel_,
4883 const std::string &threshold_)
4887 GetAndSetPPChannelMask(channel_);
4888 WhiteThresholdImage(image(),threshold_.c_str(),exceptionInfo);
4889 RestorePPChannelMask;
4890 ThrowImageException;
4893void Magick::Image::write(
Blob *blob_)
4903 data=ImagesToBlob(constImageInfo(),image(),&length,exceptionInfo);
4905 blob_->updateNoCopy(data,length,Blob::MallocAllocator);
4907 data=RelinquishMagickMemory(data);
4908 ThrowImageException;
4911void Magick::Image::write(
Blob *blob_,
const std::string &magick_)
4922 data=ImagesToBlob(constImageInfo(),image(),&length,exceptionInfo);
4924 blob_->updateNoCopy(data,length,Blob::MallocAllocator);
4926 data=RelinquishMagickMemory(data);
4927 ThrowImageException;
4930void Magick::Image::write(
Blob *blob_,
const std::string &magick_,
4931 const size_t depth_)
4943 data=ImagesToBlob(constImageInfo(),image(),&length,exceptionInfo);
4945 blob_->updateNoCopy(data,length,Blob::MallocAllocator);
4947 data=RelinquishMagickMemory(data);
4948 ThrowImageException;
4951void Magick::Image::write(
const ssize_t x_,
const ssize_t y_,
4952 const size_t columns_,
const size_t rows_,
const std::string &map_,
4953 const StorageType type_,
void *pixels_)
4956 ExportImagePixels(image(),x_,y_,columns_,rows_,map_.c_str(),type_,pixels_,
4958 ThrowImageException;
4961void Magick::Image::write(
const std::string &imageSpec_)
4964 fileName(imageSpec_);
4966 WriteImage(constImageInfo(),image(),exceptionInfo);
4967 ThrowImageException;
4970void Magick::Image::writeMask(
const Magick::Image &mask_)
4972 mask(mask_,WritePixelMask);
4975Magick::Image Magick::Image::writeMask(
void)
const
4977 return(mask(WritePixelMask));
4980void Magick::Image::writePixels(
const Magick::QuantumType quantum_,
4981 unsigned char *destination_)
4986 quantum_info=AcquireQuantumInfo(imageInfo(),image());
4988 ExportQuantumPixels(image(),(MagickCore::CacheView *) NULL,quantum_info,
4989 quantum_,destination_, exceptionInfo);
4990 quantum_info=DestroyQuantumInfo(quantum_info);
4991 ThrowImageException;
4994void Magick::Image::zoom(
const Geometry &geometry_)
5007 ParseMetaGeometry(
static_cast<std::string
>(geometry_).c_str(),&x,&y,&width,
5011 newImage=ResizeImage(constImage(),width,height,image()->filter,exceptionInfo);
5012 replaceImage(newImage);
5013 ThrowImageException;
5016Magick::Image::Image(MagickCore::Image *image_)
5021MagickCore::Image *&Magick::Image::image(
void)
5023 return(_imgRef->image());
5026const MagickCore::Image *Magick::Image::constImage(
void)
const
5028 return(_imgRef->image());
5031MagickCore::ImageInfo *Magick::Image::imageInfo(
void)
5033 return(_imgRef->options()->imageInfo());
5036const MagickCore::ImageInfo *Magick::Image::constImageInfo(
void)
const
5038 return(_imgRef->options()->imageInfo());
5041Magick::Options *Magick::Image::options(
void)
5043 return(_imgRef->options());
5046const Magick::Options *Magick::Image::constOptions(
void)
const
5048 return(_imgRef->options());
5051MagickCore::QuantizeInfo *Magick::Image::quantizeInfo(
void)
5053 return(_imgRef->options()->quantizeInfo());
5056const MagickCore::QuantizeInfo *Magick::Image::constQuantizeInfo(
void)
const
5058 return(_imgRef->options()->quantizeInfo());
5061void Magick::Image::modifyImage(
void)
5063 if (!_imgRef->isShared())
5067 replaceImage(CloneImage(image(),0,0,MagickTrue,exceptionInfo));
5068 ThrowImageException;
5071MagickCore::Image *Magick::Image::replaceImage(MagickCore::Image *replacement_)
5081 image=AcquireImage(constImageInfo(),exceptionInfo);
5082 ThrowImageException;
5085 _imgRef=ImageRef::replaceImage(_imgRef,image);
5089void Magick::Image::read(MagickCore::Image *image,
5090 MagickCore::ExceptionInfo *exceptionInfo)
5093 if (image != (MagickCore::Image *) NULL &&
5094 image->next != (MagickCore::Image *) NULL)
5101 image->next=(MagickCore::Image *) NULL;
5102 next->previous=(MagickCore::Image *) NULL;
5103 DestroyImageList(next);
5105 replaceImage(image);
5106 if (exceptionInfo->severity == MagickCore::UndefinedException &&
5107 image == (MagickCore::Image *) NULL)
5109 (void) MagickCore::DestroyExceptionInfo(exceptionInfo);
5111 throwExceptionExplicit(MagickCore::ImageWarning,
5112 "No image was loaded.");
5115 ThrowImageException;
5118void Magick::Image::floodFill(
const ssize_t x_,
const ssize_t y_,
5119 const Magick::Image *fillPattern_,
const Magick::Color &fill_,
5120 const MagickCore::PixelInfo *target_,
const bool invert_)
5129 fillColor=options()->fillColor();
5130 fillPattern=(MagickCore::Image *)NULL;
5131 if (options()->fillPattern() != (MagickCore::Image *)NULL)
5134 fillPattern=CloneImage(options()->fillPattern(),0,0,MagickTrue,
5136 ThrowImageException;
5139 if (fillPattern_ == (Magick::Image *)NULL)
5141 options()->fillPattern((MagickCore::Image *)NULL);
5142 options()->fillColor(fill_);
5145 options()->fillPattern(fillPattern_->constImage());
5148 (void) FloodfillPaintImage(image(),options()->drawInfo(),
5149 target_,
static_cast<ssize_t
>(x_),
static_cast<ssize_t
>(y_),
5150 (MagickBooleanType) invert_,exceptionInfo);
5152 options()->fillColor(fillColor);
5153 options()->fillPattern(fillPattern);
5154 ThrowImageException;
5157void Magick::Image::mask(
const Magick::Image &mask_,
const PixelMask type)
5162 if (mask_.isValid())
5163 SetImageMask(image(),type,mask_.constImage(),exceptionInfo);
5165 SetImageMask(image(),type,(MagickCore::Image *) NULL,exceptionInfo);
5166 ThrowImageException;
5169Magick::Image Magick::Image::mask(
const PixelMask type)
const
5175 image = GetImageMask(constImage(),type,exceptionInfo);
5176 ThrowImageException;
5178 if (image == (MagickCore::Image *) NULL)
5179 return(Magick::Image());
5181 return(Magick::Image(image));