9#define MAGICKCORE_IMPLEMENTATION 1
10#define MAGICK_PLUSPLUS_IMPLEMENTATION 1
12#include "Magick++/Include.h"
19#include "Magick++/Image.h"
20#include "Magick++/Functions.h"
21#include "Magick++/Pixels.h"
22#include "Magick++/Options.h"
23#include "Magick++/ImageRef.h"
24#include "Magick++/ResourceLimits.h"
28#define AbsoluteValue(x) ((x) < 0 ? -(x) : (x))
29#define MagickPI 3.14159265358979323846264338327950288419716939937510
30#define DegreesToRadians(x) (MagickPI*(x)/180.0)
31#define ThrowImageException ThrowPPException(quiet())
33MagickPPExport
const char *Magick::borderGeometryDefault=
"6x6+0+0";
34MagickPPExport
const char *Magick::frameGeometryDefault=
"25x25+6+6";
35MagickPPExport
const char *Magick::raiseGeometryDefault=
"6x6+0+0";
37MagickPPExport
int Magick::operator == (
const Magick::Image &left_,
41 return((left_.rows() == right_.rows()) &&
42 (left_.columns() == right_.columns()) &&
43 (left_.signature() == right_.signature()));
46MagickPPExport
int Magick::operator != (
const Magick::Image &left_,
49 return(!(left_ == right_));
52MagickPPExport
int Magick::operator > (
const Magick::Image &left_,
55 return(!(left_ < right_) && (left_ != right_));
58MagickPPExport
int Magick::operator < (
const Magick::Image &left_,
62 return((left_.rows() * left_.columns()) < (right_.rows() *
66MagickPPExport
int Magick::operator >= (
const Magick::Image &left_,
69 return((left_ > right_) || (left_ == right_));
72MagickPPExport
int Magick::operator <= (
const Magick::Image &left_,
75 return((left_ < right_) || (left_ == right_));
78Magick::Image::Image(
void)
79 : _imgRef(new ImageRef)
83Magick::Image::Image(
const Blob &blob_)
84 : _imgRef(new ImageRef)
101Magick::Image::Image(
const Blob &blob_,
const Geometry &size_)
102 : _imgRef(new ImageRef)
119Magick::Image::Image(
const Blob &blob_,
const Geometry &size_,
121 : _imgRef(new ImageRef)
127 read(blob_,size_,depth_);
138Magick::Image::Image(
const Blob &blob_,
const Geometry &size_,
139 const size_t depth_,
const std::string &magick_)
140 : _imgRef(new ImageRef)
146 read(blob_,size_,depth_,magick_);
157Magick::Image::Image(
const Blob &blob_,
const Geometry &size_,
158 const std::string &magick_)
159 : _imgRef(new ImageRef)
165 read(blob_,size_,magick_);
176Magick::Image::Image(
const Geometry &size_,
const Color &color_)
177 : _imgRef(new ImageRef)
180 std::string imageSpec(
"xc:");
201Magick::Image::Image(
const Image &image_)
202 : _imgRef(image_._imgRef)
204 Lock lock(&_imgRef->_mutexLock);
207 ++_imgRef->_refCount;
210Magick::Image::Image(
const Image &image_,
const Geometry &geometry_)
211 : _imgRef(new ImageRef)
223 image=CloneImage(image_.constImage(),geometry_.width(),geometry_.height(),
224 MagickTrue,exceptionInfo);
226 _imgRef->options(
new Options(*image_.constOptions()));
229 (void) CopyImagePixels(image,image_.constImage(),&geometry,&offset,
234Magick::Image::Image(
const size_t width_,
const size_t height_,
235 const std::string &map_,
const StorageType type_,
const void *pixels_)
236 : _imgRef(new ImageRef)
241 read(width_,height_,map_,type_,pixels_);
252Magick::Image::Image(
const std::string &imageSpec_)
253 : _imgRef(new ImageRef)
270Magick::Image::~Image()
276 Lock lock(&_imgRef->_mutexLock);
277 if (--_imgRef->_refCount == 0)
287Magick::Image& Magick::Image::operator=(
const Magick::Image &image_)
295 Lock lock(&image_._imgRef->_mutexLock);
296 ++image_._imgRef->_refCount;
300 Lock lock(&_imgRef->_mutexLock);
301 if (--_imgRef->_refCount == 0)
313 _imgRef=image_._imgRef;
319void Magick::Image::adjoin(
const bool flag_)
322 options()->adjoin(flag_);
325bool Magick::Image::adjoin(
void)
const
327 return(constOptions()->adjoin());
330void Magick::Image::antiAlias(
const bool flag_)
333 options()->antiAlias(flag_);
336bool Magick::Image::antiAlias(
void)
const
338 return(constOptions()->antiAlias());
341void Magick::Image::animationDelay(
const size_t delay_)
344 image()->delay=delay_;
347size_t Magick::Image::animationDelay(
void)
const
349 return(constImage()->delay);
352void Magick::Image::animationIterations(
const size_t iterations_)
355 image()->iterations=iterations_;
358size_t Magick::Image::animationIterations(
void)
const
360 return(constImage()->iterations);
363void Magick::Image::attenuate(
const double attenuate_)
366 value[MaxTextExtent];
369 FormatLocaleString(value,MaxTextExtent,
"%.20g",attenuate_);
370 (void) SetImageArtifact(image(),
"attenuate",value);
373void Magick::Image::backgroundColor(
const Color &backgroundColor_)
377 if (backgroundColor_.isValid())
378 image()->background_color=backgroundColor_;
380 image()->background_color=
Color();
382 options()->backgroundColor(backgroundColor_);
385Magick::Color Magick::Image::backgroundColor(
void)
const
387 return(constOptions()->backgroundColor());
390void Magick::Image::backgroundTexture(
const std::string &backgroundTexture_)
393 options()->backgroundTexture(backgroundTexture_);
396std::string Magick::Image::backgroundTexture(
void)
const
398 return(constOptions()->backgroundTexture());
401size_t Magick::Image::baseColumns(
void)
const
403 return(constImage()->magick_columns);
406std::string Magick::Image::baseFilename(
void)
const
408 return(std::string(constImage()->magick_filename));
411size_t Magick::Image::baseRows(
void)
const
413 return(constImage()->magick_rows);
416void Magick::Image::blackPointCompensation(
const bool flag_)
418 image()->black_point_compensation=(MagickBooleanType) flag_;
421bool Magick::Image::blackPointCompensation(
void)
const
423 return(
static_cast<bool>(constImage()->black_point_compensation));
426void Magick::Image::borderColor(
const Color &borderColor_)
430 if (borderColor_.isValid())
431 image()->border_color=borderColor_;
433 image()->border_color=
Color();
435 options()->borderColor(borderColor_);
438Magick::Color Magick::Image::borderColor(
void)
const
440 return(constOptions()->borderColor());
443Magick::Geometry Magick::Image::boundingBox(
void)
const
449 bbox=GetImageBoundingBox(constImage(),exceptionInfo);
454void Magick::Image::boxColor(
const Color &boxColor_)
457 options()->boxColor(boxColor_);
460Magick::Color Magick::Image::boxColor(
void)
const
462 return(constOptions()->boxColor());
465void Magick::Image::cacheThreshold(
const size_t threshold_)
467 ResourceLimits::memory((MagickSizeType) threshold_);
470void Magick::Image::classType(
const ClassType class_)
472 if (classType() == PseudoClass && class_ == DirectClass)
478 image()->colormap=(PixelPacket *)RelinquishMagickMemory(
480 image()->storage_class=
static_cast<MagickCore::ClassType
>(DirectClass);
482 else if (classType() == DirectClass && class_ == PseudoClass)
486 quantizeColors(MaxColormapSize);
488 image()->storage_class=
static_cast<MagickCore::ClassType
>(PseudoClass);
492void Magick::Image::clipMask(
const Magick::Image &clipMask_)
496 if (clipMask_.isValid())
497 SetImageClipMask(image(),clipMask_.constImage());
499 SetImageClipMask(image(),0);
502Magick::Image Magick::Image::clipMask(
void)
const
508 image=GetImageClipMask(constImage(),exceptionInfo);
511 if (image == (MagickCore::Image *) NULL)
512 return(Magick::Image());
514 return(Magick::Image(image));
517void Magick::Image::colorFuzz(
const double fuzz_)
521 options()->colorFuzz(fuzz_);
524double Magick::Image::colorFuzz(
void)
const
526 return(constOptions()->colorFuzz());
529void Magick::Image::colorMapSize(
const size_t entries_)
531 if (entries_ > MaxColormapSize)
532 throwExceptionExplicit(OptionError,
533 "Colormap entries must not exceed MaxColormapSize");
536 (void) AcquireImageColormap(image(),entries_);
539size_t Magick::Image::colorMapSize(
void)
const
541 if (!constImage()->colormap)
542 throwExceptionExplicit(OptionError,
"Image does not contain a colormap");
544 return(constImage()->colors);
547void Magick::Image::colorSpace(
const ColorspaceType colorSpace_)
549 if (image()->colorspace == colorSpace_)
553 TransformImageColorspace(image(),colorSpace_);
554 throwImageException();
557Magick::ColorspaceType Magick::Image::colorSpace(
void)
const
559 return(constImage()->colorspace);
562void Magick::Image::colorspaceType(
const ColorspaceType colorSpace_)
565 SetImageColorspace(image(),colorSpace_);
566 throwImageException();
567 options()->colorspaceType(colorSpace_);
570Magick::ColorspaceType Magick::Image::colorspaceType(
void)
const
572 return(constOptions()->colorspaceType());
575void Magick::Image::comment(
const std::string &comment_)
578 SetImageProperty(image(),
"Comment",NULL);
579 if (comment_.length() > 0)
580 SetImageProperty(image(),
"Comment",comment_.c_str());
581 throwImageException();
584std::string Magick::Image::comment(
void)
const
589 value=GetImageProperty(constImage(),
"Comment");
592 return(std::string(value));
594 return(std::string());
597void Magick::Image::compose(
const CompositeOperator compose_)
599 image()->compose=compose_;
602Magick::CompositeOperator Magick::Image::compose(
void)
const
604 return(constImage()->compose);
607void Magick::Image::compressType(
const CompressionType compressType_)
610 image()->compression=compressType_;
611 options()->compressType(compressType_);
614Magick::CompressionType Magick::Image::compressType(
void)
const
616 return(constImage()->compression);
619void Magick::Image::debug(
const bool flag_)
622 options()->debug(flag_);
625bool Magick::Image::debug(
void)
const
627 return(constOptions()->debug());
630void Magick::Image::density(
const Geometry &density_)
633 options()->density(density_);
634 if (density_.isValid())
636 image()->x_resolution=density_.width();
637 if (density_.height() != 0)
638 image()->y_resolution=density_.height();
640 image()->y_resolution=density_.width();
645 image()->x_resolution=0;
646 image()->y_resolution=0;
650Magick::Geometry Magick::Image::density(
void)
const
658 if (constImage()->x_resolution > 0.0)
659 x_resolution=
static_cast<ssize_t
>(constImage()->x_resolution + 0.5);
661 if (constImage()->y_resolution > 0.0)
662 y_resolution=
static_cast<ssize_t
>(constImage()->y_resolution + 0.5);
664 return(
Geometry(x_resolution,y_resolution));
667 return(constOptions()->density());
670void Magick::Image::depth(
const size_t depth_)
673 image()->depth=depth_;
674 options()->depth(depth_);
677size_t Magick::Image::depth(
void)
const
679 return(constImage()->depth);
682std::string Magick::Image::directory(
void)
const
684 if (constImage()->directory)
685 return(std::string(constImage()->directory));
687 throwExceptionExplicit(CorruptImageWarning,
688 "Image does not contain a directory");
690 return(std::string());
693void Magick::Image::endian(
const Magick::EndianType endian_)
696 options()->endian(endian_);
697 image()->endian=endian_;
700Magick::EndianType Magick::Image::endian(
void)
const
702 return(constImage()->endian);
705void Magick::Image::exifProfile(
const Magick::Blob &exifProfile_)
707 if (exifProfile_.data() != 0)
713 exif_profile=AcquireStringInfo(exifProfile_.length());
714 SetStringInfoDatum(exif_profile,(
unsigned char *) exifProfile_.data());
715 (void) SetImageProfile(image(),
"exif",exif_profile);
716 exif_profile=DestroyStringInfo(exif_profile);
720Magick::Blob Magick::Image::exifProfile(
void)
const
725 exif_profile=GetImageProfile(constImage(),
"exif");
726 if (exif_profile == (StringInfo *) NULL)
729 return(
Blob(GetStringInfoDatum(exif_profile),GetStringInfoLength(
733void Magick::Image::fileName(
const std::string &fileName_)
740 max_length=
sizeof(image()->filename)-1;
741 fileName_.copy(image()->filename,max_length);
742 if ((ssize_t) fileName_.length() > max_length)
743 image()->filename[max_length]=0;
745 image()->filename[fileName_.length()]=0;
747 options()->fileName(fileName_);
750std::string Magick::Image::fileName(
void)
const
752 return(constOptions()->fileName());
755off_t Magick::Image::fileSize(
void)
const
757 return((off_t) GetBlobSize(constImage()));
760void Magick::Image::fillColor(
const Magick::Color &fillColor_)
763 options()->fillColor(fillColor_);
766Magick::Color Magick::Image::fillColor(
void)
const
768 return(constOptions()->fillColor());
771void Magick::Image::fillRule(
const Magick::FillRule &fillRule_)
774 options()->fillRule(fillRule_);
777Magick::FillRule Magick::Image::fillRule(
void)
const
779 return(constOptions()->fillRule());
782void Magick::Image::fillPattern(
const Image &fillPattern_)
785 if(fillPattern_.isValid())
786 options()->fillPattern(fillPattern_.constImage());
788 options()->fillPattern(
static_cast<MagickCore::Image*
>(NULL));
791Magick::Image Magick::Image::fillPattern(
void)
const
794 const MagickCore::Image
800 tmpTexture=constOptions()->fillPattern();
808 image=CloneImage(tmpTexture,0,0,MagickTrue,exceptionInfo);
809 texture.replaceImage(image);
816void Magick::Image::filterType(
const Magick::FilterTypes filterType_)
819 image()->filter=filterType_;
822Magick::FilterTypes Magick::Image::filterType(
void)
const
824 return(constImage()->filter);
827void Magick::Image::font(
const std::string &font_)
830 options()->font(font_);
833std::string Magick::Image::font(
void)
const
835 return(constOptions()->font());
838void Magick::Image::fontFamily(
const std::string &family_)
841 options()->fontFamily(family_);
844std::string Magick::Image::fontFamily(
void)
const
846 return(constOptions()->fontFamily());
850void Magick::Image::fontPointsize(
const double pointSize_)
853 options()->fontPointsize(pointSize_);
856double Magick::Image::fontPointsize(
void)
const
858 return(constOptions()->fontPointsize());
861std::string Magick::Image::format(
void)
const
867 magick_info=GetMagickInfo(constImage()->magick,exceptionInfo);
870 if ((magick_info != 0) && (*magick_info->description !=
'\0'))
871 return(std::string(magick_info->description));
873 throwExceptionExplicit(CorruptImageWarning,
"Unrecognized image magick type");
874 return(std::string());
877void Magick::Image::fontStyle(
const StyleType pointSize_)
880 options()->fontStyle(pointSize_);
883Magick::StyleType Magick::Image::fontStyle(
void)
const
885 return(constOptions()->fontStyle());
888void Magick::Image::fontWeight(
const size_t weight_)
891 options()->fontWeight(weight_);
894size_t Magick::Image::fontWeight(
void)
const
896 return(constOptions()->fontWeight());
900std::string Magick::Image::formatExpression(
const std::string expression)
909 text=InterpretImageProperties(constImageInfo(),image(),expression.c_str());
910 if (text != (
char *) NULL)
912 text_string=std::string(text);
913 text=DestroyString(text);
915 throwImageException();
919double Magick::Image::gamma(
void)
const
921 return(constImage()->gamma);
924Magick::Geometry Magick::Image::geometry(
void)
const
926 if (constImage()->geometry)
927 return(
Geometry(constImage()->geometry));
929 throwExceptionExplicit(OptionWarning,
"Image does not contain a geometry");
934void Magick::Image::gifDisposeMethod(
const size_t disposeMethod_)
937 image()->dispose=(DisposeType) disposeMethod_;
940size_t Magick::Image::gifDisposeMethod(
void)
const
943 return ((
size_t) constImage()->dispose);
946void Magick::Image::highlightColor(
const Color color_)
952 artifact(
"highlight-color",value);
955void Magick::Image::iccColorProfile(
const Magick::Blob &colorProfile_)
957 profile(
"icc",colorProfile_);
960Magick::Blob Magick::Image::iccColorProfile(
void)
const
965 color_profile=GetImageProfile(constImage(),
"icc");
966 if (color_profile == (StringInfo *) NULL)
969 return(
Blob(GetStringInfoDatum(color_profile),GetStringInfoLength(
973void Magick::Image::interlaceType(
const InterlaceType interlace_)
976 image()->interlace=interlace_;
977 options()->interlaceType(interlace_);
980Magick::InterlaceType Magick::Image::interlaceType(
void)
const
982 return constImage()->interlace;
985void Magick::Image::interpolate(
const InterpolatePixelMethod interpolate_)
988 image()->interpolate=interpolate_;
991Magick::InterpolatePixelMethod Magick::Image::interpolate(
void)
const
993 return constImage()->interpolate;
996void Magick::Image::iptcProfile(
const Magick::Blob &iptcProfile_)
999 if (iptcProfile_.data() != 0)
1004 iptc_profile=AcquireStringInfo(iptcProfile_.length());
1005 SetStringInfoDatum(iptc_profile,(
unsigned char *) iptcProfile_.data());
1006 (void) SetImageProfile(image(),
"iptc",iptc_profile);
1007 iptc_profile=DestroyStringInfo(iptc_profile );
1011Magick::Blob Magick::Image::iptcProfile(
void)
const
1016 iptc_profile=GetImageProfile(constImage(),
"iptc");
1017 if (iptc_profile == (StringInfo *) NULL)
1019 return(
Blob(GetStringInfoDatum(iptc_profile),GetStringInfoLength(
1023bool Magick::Image::isOpaque(
void)
const
1029 result=IsOpaqueImage(constImage(),exceptionInfo);
1030 ThrowImageException;
1031 return(result != MagickFalse ?
true :
false);
1034void Magick::Image::isValid(
const bool isValid_)
1041 else if (!isValid())
1050bool Magick::Image::isValid(
void)
const
1052 return(rows() && columns());
1055void Magick::Image::label(
const std::string &label_)
1058 (void) SetImageProperty(image(),
"Label",NULL);
1059 if (label_.length() > 0)
1060 (void) SetImageProperty(image(),
"Label",label_.c_str());
1061 throwImageException();
1064std::string Magick::Image::label(
void)
const
1069 value=GetImageProperty(constImage(),
"Label");
1072 return(std::string(value));
1074 return(std::string());
1077void Magick::Image::lowlightColor(
const Color color_)
1083 artifact(
"lowlight-color",value);
1086void Magick::Image::magick(
const std::string &magick_)
1093 length=
sizeof(image()->magick)-1;
1094 if (magick_.length() < length)
1095 length=magick_.length();
1097 if (!magick_.empty())
1098 magick_.copy(image()->magick,length);
1099 image()->magick[length]=0;
1101 options()->magick(magick_);
1104std::string Magick::Image::magick(
void)
const
1106 if (*(constImage()->magick) !=
'\0')
1107 return(std::string(constImage()->magick));
1109 return(constOptions()->magick());
1112void Magick::Image::mask(
const Magick::Image &mask_)
1116 if (mask_.isValid())
1117 SetImageMask(image(),mask_.constImage());
1119 SetImageMask(image(),0);
1122Magick::Image Magick::Image::mask(
void)
const
1128 image=GetImageMask(constImage(),exceptionInfo);
1129 ThrowImageException;
1131 if (image == (MagickCore::Image *) NULL)
1132 return(Magick::Image());
1134 return(Magick::Image(image));
1137void Magick::Image::matte(
const bool matteFlag_)
1145 if (
bool(matteFlag_) !=
bool(constImage()->matte))
1146 SetImageOpacity(image(),OpaqueOpacity);
1148 image()->matte=(MagickBooleanType) matteFlag_;
1151bool Magick::Image::matte(
void)
const
1153 if (constImage()->matte)
1159void Magick::Image::matteColor(
const Color &matteColor_)
1163 if (matteColor_.isValid())
1165 image()->matte_color=matteColor_;
1166 options()->matteColor(matteColor_);
1172 tmpColor(
"#BDBDBD");
1174 image()->matte_color=tmpColor;
1175 options()->matteColor(tmpColor);
1179Magick::Color Magick::Image::matteColor(
void)
const
1181 return(
Color(constImage()->matte_color.red,constImage()->matte_color.green,
1182 constImage()->matte_color.blue));
1185double Magick::Image::meanErrorPerPixel(
void)
const
1187 return(constImage()->error.mean_error_per_pixel);
1190void Magick::Image::modulusDepth(
const size_t depth_)
1193 SetImageDepth(image(),depth_);
1194 options()->depth(depth_);
1197size_t Magick::Image::modulusDepth(
void)
const
1203 depth=GetImageDepth(constImage(),exceptionInfo);
1204 ThrowImageException;
1208void Magick::Image::monochrome(
const bool monochromeFlag_)
1211 options()->monochrome(monochromeFlag_);
1214bool Magick::Image::monochrome(
void)
const
1216 return(constOptions()->monochrome());
1219Magick::Geometry Magick::Image::montageGeometry(
void)
const
1221 if (constImage()->montage)
1222 return(Magick::Geometry(constImage()->montage));
1224 throwExceptionExplicit(CorruptImageWarning,
1225 "Image does not contain a montage");
1227 return(Magick::Geometry());
1230double Magick::Image::normalizedMaxError(
void)
const
1232 return(constImage()->error.normalized_maximum_error);
1235double Magick::Image::normalizedMeanError(
void)
const
1237 return (constImage()->error.normalized_mean_error);
1240void Magick::Image::orientation(
const Magick::OrientationType orientation_)
1243 image()->orientation=orientation_;
1246Magick::OrientationType Magick::Image::orientation(
void)
const
1248 return(constImage()->orientation);
1251void Magick::Image::page(
const Magick::Geometry &pageSize_)
1254 options()->page(pageSize_);
1255 image()->page=pageSize_;
1258Magick::Geometry Magick::Image::page(
void)
const
1260 return(
Geometry(constImage()->page.width,constImage()->page.height,
1261 AbsoluteValue(constImage()->page.x),AbsoluteValue(constImage()->page.y),
1262 constImage()->page.x < 0 ?
true :
false,
1263 constImage()->page.y < 0 ?
true :
false));
1266void Magick::Image::penColor(
const Color &penColor_)
1269 options()->fillColor(penColor_);
1270 options()->strokeColor(penColor_);
1273Magick::Color Magick::Image::penColor(
void)
const
1275 return(constOptions()->fillColor());
1278void Magick::Image::penTexture(
const Image &penTexture_)
1281 if(penTexture_.isValid())
1282 options()->fillPattern(penTexture_.constImage());
1284 options()->fillPattern(
static_cast<MagickCore::Image*
>(NULL));
1287Magick::Image Magick::Image::penTexture(
void)
const
1290 const MagickCore::Image
1296 tmpTexture=constOptions()->fillPattern();
1304 image=CloneImage(tmpTexture,0,0,MagickTrue,exceptionInfo);
1305 texture.replaceImage(image);
1306 ThrowImageException;
1311void Magick::Image::quality(
const size_t quality_)
1314 image()->quality=quality_;
1315 options()->quality(quality_);
1318size_t Magick::Image::quality(
void)
const
1320 return(constImage()->quality);
1323void Magick::Image::quantizeColors(
const size_t colors_)
1326 options()->quantizeColors(colors_);
1329size_t Magick::Image::quantizeColors(
void)
const
1331 return(constOptions()->quantizeColors());
1334void Magick::Image::quantizeColorSpace(
1335 const Magick::ColorspaceType colorSpace_)
1338 options()->quantizeColorSpace(colorSpace_);
1341Magick::ColorspaceType Magick::Image::quantizeColorSpace(
void)
const
1343 return(constOptions()->quantizeColorSpace());
1346void Magick::Image::quantizeDither(
const bool ditherFlag_)
1349 options()->quantizeDither(ditherFlag_);
1352bool Magick::Image::quantizeDither(
void)
const
1354 return(constOptions()->quantizeDither());
1357void Magick::Image::quantizeDitherMethod(
const DitherMethod ditherMethod_)
1360 options()->quantizeDitherMethod(ditherMethod_);
1363MagickCore::DitherMethod Magick::Image::quantizeDitherMethod(
void)
const
1365 return(constOptions()->quantizeDitherMethod());
1368void Magick::Image::quantizeTreeDepth(
const size_t treeDepth_)
1371 options()->quantizeTreeDepth(treeDepth_);
1374size_t Magick::Image::quantizeTreeDepth(
void)
const
1376 return(constOptions()->quantizeTreeDepth());
1379void Magick::Image::quiet(
const bool quiet_)
1382 options()->quiet(quiet_);
1385bool Magick::Image::quiet(
void)
const
1387 return(constOptions()->quiet());
1390void Magick::Image::renderingIntent(
1391 const Magick::RenderingIntent renderingIntent_)
1394 image()->rendering_intent=renderingIntent_;
1397Magick::RenderingIntent Magick::Image::renderingIntent(
void)
const
1399 return(
static_cast<Magick::RenderingIntent
>(
1400 constImage()->rendering_intent));
1403void Magick::Image::resolutionUnits(
1404 const Magick::ResolutionType resolutionUnits_)
1407 image()->units=resolutionUnits_;
1408 options()->resolutionUnits(resolutionUnits_);
1411Magick::ResolutionType Magick::Image::resolutionUnits(
void)
const
1413 return(
static_cast<Magick::ResolutionType
>(constImage()->units));
1416void Magick::Image::scene(
const size_t scene_)
1419 image()->scene=scene_;
1422size_t Magick::Image::scene(
void)
const
1424 return(constImage()->scene);
1427void Magick::Image::size(
const Geometry &geometry_)
1430 options()->size(geometry_);
1431 image()->rows=geometry_.height();
1432 image()->columns=geometry_.width();
1435Magick::Geometry Magick::Image::size(
void)
const
1437 return(Magick::Geometry(constImage()->columns,constImage()->rows));
1440void Magick::Image::strokeAntiAlias(
const bool flag_)
1443 options()->strokeAntiAlias(flag_);
1446bool Magick::Image::strokeAntiAlias(
void)
const
1448 return(constOptions()->strokeAntiAlias());
1451void Magick::Image::strokeColor(
const Magick::Color &strokeColor_)
1457 options()->strokeColor(strokeColor_);
1459 artifact(
"stroke",value);
1462Magick::Color Magick::Image::strokeColor(
void)
const
1464 return(constOptions()->strokeColor());
1467void Magick::Image::strokeDashArray(
const double *strokeDashArray_)
1470 options()->strokeDashArray(strokeDashArray_);
1473const double *Magick::Image::strokeDashArray(
void)
const
1475 return(constOptions()->strokeDashArray());
1478void Magick::Image::strokeDashOffset(
const double strokeDashOffset_)
1481 options()->strokeDashOffset(strokeDashOffset_);
1484double Magick::Image::strokeDashOffset(
void)
const
1486 return(constOptions()->strokeDashOffset());
1489void Magick::Image::strokeLineCap(
const Magick::LineCap lineCap_)
1492 options()->strokeLineCap(lineCap_);
1495Magick::LineCap Magick::Image::strokeLineCap(
void)
const
1497 return(constOptions()->strokeLineCap());
1500void Magick::Image::strokeLineJoin(
const Magick::LineJoin lineJoin_)
1503 options()->strokeLineJoin(lineJoin_);
1506Magick::LineJoin Magick::Image::strokeLineJoin(
void)
const
1508 return(constOptions()->strokeLineJoin());
1511void Magick::Image::strokeMiterLimit(
const size_t strokeMiterLimit_)
1514 options()->strokeMiterLimit(strokeMiterLimit_);
1517size_t Magick::Image::strokeMiterLimit(
void)
const
1519 return constOptions()->strokeMiterLimit();
1522void Magick::Image::strokePattern(
const Image &strokePattern_)
1525 if(strokePattern_.isValid())
1526 options()->strokePattern(strokePattern_.constImage());
1528 options()->strokePattern(
static_cast<MagickCore::Image*
>(NULL));
1531Magick::Image Magick::Image::strokePattern(
void)
const
1533 const MagickCore::Image
1539 tmpTexture=constOptions()->strokePattern();
1547 image=CloneImage(tmpTexture,0,0,MagickTrue,exceptionInfo);
1548 texture.replaceImage(image);
1549 ThrowImageException;
1554void Magick::Image::strokeWidth(
const double strokeWidth_)
1557 value[MaxTextExtent];
1560 options()->strokeWidth(strokeWidth_);
1561 FormatLocaleString(value,MaxTextExtent,
"%.20g",strokeWidth_);
1562 (void) SetImageArtifact(image(),
"strokewidth",value);
1565double Magick::Image::strokeWidth(
void)
const
1567 return(constOptions()->strokeWidth());
1570void Magick::Image::subImage(
const size_t subImage_)
1573 options()->subImage(subImage_);
1576size_t Magick::Image::subImage(
void)
const
1578 return(constOptions()->subImage());
1581void Magick::Image::subRange(
const size_t subRange_)
1584 options()->subRange(subRange_);
1587size_t Magick::Image::subRange(
void)
const
1589 return(constOptions()->subRange());
1592void Magick::Image::textDirection(DirectionType direction_)
1595 options()->textDirection(direction_);
1598Magick::DirectionType Magick::Image::textDirection(
void)
const
1600 return(constOptions()->textDirection());
1603void Magick::Image::textEncoding(
const std::string &encoding_)
1606 options()->textEncoding(encoding_);
1609std::string Magick::Image::textEncoding(
void)
const
1611 return(constOptions()->textEncoding());
1614void Magick::Image::textGravity(GravityType gravity_)
1617 options()->textGravity(gravity_);
1620Magick::GravityType Magick::Image::textGravity(
void)
const
1622 return(constOptions()->textGravity());
1625void Magick::Image::textInterlineSpacing(
double spacing_)
1628 options()->textInterlineSpacing(spacing_);
1631double Magick::Image::textInterlineSpacing(
void)
const
1633 return(constOptions()->textInterlineSpacing());
1636void Magick::Image::textInterwordSpacing(
double spacing_)
1639 options()->textInterwordSpacing(spacing_);
1642double Magick::Image::textInterwordSpacing(
void)
const
1644 return(constOptions()->textInterwordSpacing());
1647void Magick::Image::textKerning(
double kerning_)
1650 options()->textKerning(kerning_);
1653double Magick::Image::textKerning(
void)
const
1655 return(constOptions()->textKerning());
1658void Magick::Image::textUnderColor(
const Color &underColor_)
1661 options()->textUnderColor(underColor_);
1664Magick::Color Magick::Image::textUnderColor(
void)
const
1666 return(constOptions()->textUnderColor());
1669void Magick::Image::tileName(
const std::string &tileName_)
1672 options()->tileName(tileName_);
1675std::string Magick::Image::tileName(
void)
const
1677 return(constOptions()->tileName());
1680size_t Magick::Image::totalColors(
void)
const
1686 colors=GetNumberColors(constImage(),0,exceptionInfo);
1687 ThrowImageException;
1691void Magick::Image::transformRotation(
const double angle_)
1694 options()->transformRotation(angle_);
1697void Magick::Image::transformSkewX(
const double skewx_)
1700 options()->transformSkewX(skewx_);
1703void Magick::Image::transformSkewY(
const double skewy_)
1706 options()->transformSkewY(skewy_);
1709void Magick::Image::type(
const Magick::ImageType type_)
1712 options()->type(type_);
1713 SetImageType(image(),type_);
1716Magick::ImageType Magick::Image::type(
void)
const
1718 if (constOptions()->type() != UndefinedType)
1719 return(constOptions()->type());
1720 else if (constImage()->type != UndefinedType)
1721 return(constImage()->type);
1723 return(determineType());
1726void Magick::Image::verbose(
const bool verboseFlag_)
1729 options()->verbose(verboseFlag_);
1732bool Magick::Image::verbose(
void)
const
1734 return(constOptions()->verbose());
1737void Magick::Image::view(
const std::string &view_)
1740 options()->view(view_);
1743std::string Magick::Image::view(
void)
const
1745 return(constOptions()->view());
1748void Magick::Image::virtualPixelMethod(
1749 const VirtualPixelMethod virtual_pixel_method_)
1752 SetImageVirtualPixelMethod(image(),virtual_pixel_method_);
1753 options()->virtualPixelMethod(virtual_pixel_method_);
1756Magick::VirtualPixelMethod Magick::Image::virtualPixelMethod(
void)
const
1758 return(GetImageVirtualPixelMethod(constImage()));
1761void Magick::Image::x11Display(
const std::string &display_)
1764 options()->x11Display(display_);
1767std::string Magick::Image::x11Display(
void)
const
1769 return(constOptions()->x11Display());
1772double Magick::Image::xResolution(
void)
const
1774 return(constImage()->x_resolution);
1777double Magick::Image::yResolution(
void)
const
1779 return(constImage()->y_resolution);
1782void Magick::Image::adaptiveBlur(
const double radius_,
const double sigma_)
1788 newImage=AdaptiveBlurImage(constImage(),radius_,sigma_,exceptionInfo);
1789 replaceImage(newImage);
1790 ThrowImageException;
1793void Magick::Image::adaptiveResize(
const Geometry &geometry_)
1806 ParseMetaGeometry(
static_cast<std::string
>(geometry_).c_str(),&x,&y,&width,
1810 newImage=AdaptiveResizeImage(constImage(),width,height,exceptionInfo);
1811 replaceImage(newImage);
1812 ThrowImageException;
1815void Magick::Image::adaptiveSharpen(
const double radius_,
const double sigma_)
1821 newImage=AdaptiveSharpenImage(constImage(),radius_,sigma_,exceptionInfo);
1822 replaceImage(newImage);
1823 ThrowImageException;
1826void Magick::Image::adaptiveSharpenChannel(
const ChannelType channel_,
1827 const double radius_,
const double sigma_)
1833 newImage=AdaptiveSharpenImageChannel(constImage(),channel_,radius_,sigma_,
1835 replaceImage(newImage);
1836 ThrowImageException;
1839void Magick::Image::adaptiveThreshold(
const size_t width_,
const size_t height_,
1840 const ssize_t offset_)
1846 newImage=AdaptiveThresholdImage(constImage(),width_,height_,offset_,
1848 replaceImage(newImage);
1849 ThrowImageException;
1852void Magick::Image::addNoise(
const NoiseType noiseType_)
1858 newImage=AddNoiseImage(constImage(),noiseType_,exceptionInfo);
1859 replaceImage(newImage);
1860 ThrowImageException;
1863void Magick::Image::addNoiseChannel(
const ChannelType channel_,
1864 const NoiseType noiseType_)
1870 newImage=AddNoiseImageChannel(constImage(),channel_,noiseType_,
1872 replaceImage(newImage);
1873 ThrowImageException;
1876void Magick::Image::affineTransform(
const DrawableAffine &affine_ )
1884 _affine.sx = affine_.sx();
1885 _affine.sy = affine_.sy();
1886 _affine.rx = affine_.rx();
1887 _affine.ry = affine_.ry();
1888 _affine.tx = affine_.tx();
1889 _affine.ty = affine_.ty();
1892 newImage=AffineTransformImage(constImage(),&_affine,exceptionInfo);
1893 replaceImage(newImage);
1894 ThrowImageException;
1897void Magick::Image::alphaChannel(AlphaChannelType alphaType_)
1900 SetImageAlphaChannel(image(), alphaType_);
1901 throwImageException();
1904void Magick::Image::annotate(
const std::string &text_,
1907 annotate(text_,location_,NorthWestGravity,0.0);
1910void Magick::Image::annotate(
const std::string &text_,
1911 const Geometry &boundingArea_,
const GravityType gravity_)
1913 annotate(text_,boundingArea_,gravity_,0.0);
1916void Magick::Image::annotate(
const std::string &text_,
1917 const Geometry &boundingArea_,
const GravityType gravity_,
1918 const double degrees_)
1924 boundingArea[MaxTextExtent];
1931 drawInfo=options()->drawInfo();
1932 drawInfo->text=DestroyString(drawInfo->text);
1933 drawInfo->text=
const_cast<char *
>(text_.c_str());
1934 drawInfo->geometry=DestroyString(drawInfo->geometry);
1936 if (boundingArea_.isValid())
1938 if (boundingArea_.width() == 0 || boundingArea_.height() == 0)
1940 FormatLocaleString(boundingArea,MaxTextExtent,
"%+.20g%+.20g",
1941 (
double) boundingArea_.xOff(),(
double) boundingArea_.yOff());
1945 (void) CopyMagickString(boundingArea,
1946 std::string(boundingArea_).c_str(), MaxTextExtent);
1948 drawInfo->geometry=boundingArea;
1951 drawInfo->gravity=gravity_;
1953 oaffine=drawInfo->affine;
1954 if (degrees_ != 0.0)
1967 current=drawInfo->affine;
1968 affine.sx=cos(DegreesToRadians(fmod(degrees_,360.0)));
1969 affine.rx=sin(DegreesToRadians(fmod(degrees_,360.0)));
1970 affine.ry=(-sin(DegreesToRadians(fmod(degrees_,360.0))));
1971 affine.sy=cos(DegreesToRadians(fmod(degrees_,360.0)));
1973 drawInfo->affine.sx=current.sx*affine.sx+current.ry*affine.rx;
1974 drawInfo->affine.rx=current.rx*affine.sx+current.sy*affine.rx;
1975 drawInfo->affine.ry=current.sx*affine.ry+current.ry*affine.sy;
1976 drawInfo->affine.sy=current.rx*affine.ry+current.sy*affine.sy;
1977 drawInfo->affine.tx=current.sx*affine.tx+current.ry*affine.ty
1981 AnnotateImage(image(),drawInfo);
1984 drawInfo->affine=oaffine;
1985 drawInfo->text=(
char *) NULL;
1986 drawInfo->geometry=(
char *) NULL;
1988 throwImageException();
1991void Magick::Image::annotate(
const std::string &text_,
1992 const GravityType gravity_)
1999 drawInfo=options()->drawInfo();
2000 drawInfo->text=DestroyString(drawInfo->text);
2001 drawInfo->text=
const_cast<char *
>(text_.c_str());
2002 drawInfo->gravity=gravity_;
2004 AnnotateImage(image(),drawInfo);
2006 drawInfo->gravity=NorthWestGravity;
2007 drawInfo->text=(
char *) NULL;
2009 throwImageException();
2012void Magick::Image::artifact(
const std::string &name_,
2013 const std::string &value_)
2016 (void) SetImageArtifact(image(),name_.c_str(),value_.c_str());
2019std::string Magick::Image::artifact(
const std::string &name_)
const
2024 value=GetImageArtifact(constImage(),name_.c_str());
2026 return(std::string(value));
2027 return(std::string());
2030void Magick::Image::attribute(
const std::string name_,
const char *value_)
2033 SetImageProperty(image(),name_.c_str(),value_);
2036void Magick::Image::attribute(
const std::string name_,
const std::string value_)
2039 SetImageProperty(image(),name_.c_str(),value_.c_str());
2042std::string Magick::Image::attribute(
const std::string name_)
const
2047 value=GetImageProperty(constImage(),name_.c_str());
2050 return(std::string(value));
2052 return(std::string());
2055void Magick::Image::autoGamma(
void)
2058 (void) AutoGammaImage(image());
2059 throwImageException();
2062void Magick::Image::autoGammaChannel(
const ChannelType channel_)
2065 (void) AutoGammaImageChannel(image(),channel_);
2066 throwImageException();
2069void Magick::Image::autoLevel(
void)
2072 (void) AutoLevelImage(image());
2073 throwImageException();
2076void Magick::Image::autoLevelChannel(
const ChannelType channel_)
2079 (void) AutoLevelImageChannel(image(),channel_);
2080 throwImageException();
2083void Magick::Image::autoOrient(
void)
2088 if (image()->orientation == UndefinedOrientation ||
2089 image()->orientation == TopLeftOrientation)
2093 newImage=AutoOrientImage(constImage(),image()->orientation,exceptionInfo);
2094 replaceImage(newImage);
2095 ThrowImageException;
2098void Magick::Image::blackThreshold(
const std::string &threshold_)
2101 BlackThresholdImage(image(),threshold_.c_str());
2102 throwImageException();
2105void Magick::Image::blackThresholdChannel(
const ChannelType channel_,
2106 const std::string &threshold_)
2110 BlackThresholdImageChannel(image(),channel_,threshold_.c_str(),
2112 ThrowImageException;
2115void Magick::Image::blueShift(
const double factor_)
2121 newImage=BlueShiftImage(constImage(),factor_,exceptionInfo);
2122 replaceImage(newImage);
2123 ThrowImageException;
2127void Magick::Image::blur(
const double radius_,
const double sigma_)
2133 newImage=BlurImage(constImage(),radius_,sigma_,exceptionInfo);
2134 replaceImage(newImage);
2135 ThrowImageException;
2138void Magick::Image::blurChannel(
const ChannelType channel_,
2139 const double radius_,
const double sigma_)
2145 newImage=BlurImageChannel(constImage(),channel_,radius_,sigma_,
2147 replaceImage(newImage);
2148 ThrowImageException;
2151void Magick::Image::border(
const Geometry &geometry_)
2157 borderInfo=geometry_;
2160 newImage=BorderImage(constImage(),&borderInfo,exceptionInfo);
2161 replaceImage(newImage);
2162 ThrowImageException;
2165void Magick::Image::brightnessContrast(
const double brightness_,
2166 const double contrast_)
2169 BrightnessContrastImage(image(),brightness_,contrast_);
2170 throwImageException();
2173void Magick::Image::brightnessContrastChannel(
const ChannelType channel_,
2174 const double brightness_,
const double contrast_)
2177 BrightnessContrastImageChannel(image(),channel_,brightness_,contrast_);
2178 throwImageException();
2181void Magick::Image::cannyEdge(
const double radius_,
const double sigma_,
2182 const double lowerPercent_,
const double upperPercent_)
2189 newImage=CannyEdgeImage(constImage(),radius_,sigma_,lowerPercent_,
2190 upperPercent_,exceptionInfo);
2191 replaceImage(newImage);
2192 ThrowImageException;
2195void Magick::Image::cdl(
const std::string &cdl_)
2198 (void) ColorDecisionListImage(image(),cdl_.c_str());
2199 throwImageException();
2202void Magick::Image::channel(
const ChannelType channel_)
2205 SeparateImageChannel(image(),channel_);
2206 throwImageException();
2209void Magick::Image::channelDepth(
const ChannelType channel_,
2210 const size_t depth_)
2213 SetImageChannelDepth(image(),channel_,depth_);
2214 throwImageException();
2217size_t Magick::Image::channelDepth(
const ChannelType channel_)
2223 channel_depth=GetImageChannelDepth(constImage(), channel_,exceptionInfo);
2224 ThrowImageException;
2225 return channel_depth;
2228void Magick::Image::charcoal(
const double radius_,
const double sigma_)
2234 newImage=CharcoalImage(constImage(),radius_,sigma_,exceptionInfo);
2235 replaceImage(newImage);
2236 ThrowImageException;
2239void Magick::Image::chop(
const Geometry &geometry_)
2248 newImage=ChopImage(constImage(),&chopInfo,exceptionInfo);
2249 replaceImage(newImage);
2250 ThrowImageException;
2253void Magick::Image::chromaBluePrimary(
const double x_,
const double y_)
2256 image()->chromaticity.blue_primary.x=x_;
2257 image()->chromaticity.blue_primary.y=y_;
2260void Magick::Image::chromaBluePrimary(
double *x_,
double *y_)
const
2262 *x_=constImage()->chromaticity.blue_primary.x;
2263 *y_=constImage()->chromaticity.blue_primary.y;
2266void Magick::Image::chromaGreenPrimary(
const double x_,
const double y_)
2269 image()->chromaticity.green_primary.x=x_;
2270 image()->chromaticity.green_primary.y=y_;
2273void Magick::Image::chromaGreenPrimary(
double *x_,
double *y_)
const
2275 *x_=constImage()->chromaticity.green_primary.x;
2276 *y_=constImage()->chromaticity.green_primary.y;
2279void Magick::Image::chromaRedPrimary(
const double x_,
const double y_)
2282 image()->chromaticity.red_primary.x=x_;
2283 image()->chromaticity.red_primary.y=y_;
2286void Magick::Image::chromaRedPrimary(
double *x_,
double *y_)
const
2288 *x_=constImage()->chromaticity.red_primary.x;
2289 *y_=constImage()->chromaticity.red_primary.y;
2292void Magick::Image::chromaWhitePoint(
const double x_,
const double y_)
2295 image()->chromaticity.white_point.x=x_;
2296 image()->chromaticity.white_point.y=y_;
2299void Magick::Image::chromaWhitePoint(
double *x_,
double *y_)
const
2301 *x_=constImage()->chromaticity.white_point.x;
2302 *y_=constImage()->chromaticity.white_point.y;
2305void Magick::Image::clamp(
void)
2308 ClampImage(image());
2309 throwImageException();
2312void Magick::Image::clampChannel(
const ChannelType channel_)
2315 ClampImageChannel(image(),channel_);
2316 throwImageException();
2319void Magick::Image::clip(
void )
2323 throwImageException();
2326void Magick::Image::clipPath(
const std::string pathname_,
const bool inside_)
2329 ClipImagePath(image(),pathname_.c_str(),(MagickBooleanType) inside_);
2330 throwImageException();
2333void Magick::Image::clut(
const Image &clutImage_)
2336 ClutImage(image(),clutImage_.constImage());
2337 throwImageException();
2340void Magick::Image::clutChannel(
const ChannelType channel_,
2341 const Image &clutImage_)
2344 ClutImageChannel(image(),channel_,clutImage_.constImage());
2345 throwImageException();
2348void Magick::Image::colorize(
const unsigned int opacityRed_,
2349 const unsigned int opacityGreen_,
const unsigned int opacityBlue_,
2350 const Color &penColor_)
2353 opacity[MaxTextExtent];
2358 if (!penColor_.isValid())
2359 throwExceptionExplicit( OptionError,
"Pen color argument is invalid" );
2361 FormatLocaleString(opacity,MaxTextExtent,
"%u/%u/%u",opacityRed_,
2362 opacityGreen_,opacityBlue_);
2365 newImage=ColorizeImage(image(),opacity,penColor_,exceptionInfo);
2366 replaceImage(newImage);
2367 ThrowImageException;
2370void Magick::Image::colorize(
const unsigned int opacity_,
2371 const Color &penColor_)
2373 colorize(opacity_,opacity_,opacity_,penColor_);
2376void Magick::Image::colorMap(
const size_t index_,
const Color &color_)
2378 if (index_ > (MaxColormapSize-1) )
2379 throwExceptionExplicit(OptionError,
2380 "Colormap index must be less than MaxColormapSize");
2382 if (!color_.isValid())
2383 throwExceptionExplicit(OptionError,
"Color argument is invalid");
2388 if (colorMapSize() < (index_+1))
2389 colorMapSize(index_+1);
2392 (image()->colormap)[index_]=color_;
2395Magick::Color Magick::Image::colorMap(
const size_t index_)
const
2397 if (!constImage()->colormap)
2399 throwExceptionExplicit(OptionError,
"Image does not contain a colormap");
2403 if (index_ > constImage()->colors-1)
2404 throwExceptionExplicit(OptionError,
"Index out of range");
2406 return(
Color((constImage()->colormap)[index_]));
2409void Magick::Image::colorMatrix(
const size_t order_,
2410 const double *color_matrix_)
2420 kernel_info=AcquireKernelInfo(
"1");
2421 if (kernel_info != (KernelInfo *) NULL)
2423 kernel_info->width=order_;
2424 kernel_info->height=order_;
2425 kernel_info->values=(
double *) color_matrix_;
2426 newImage=ColorMatrixImage(constImage(),kernel_info,exceptionInfo);
2427 kernel_info->values=(
double *) NULL;
2428 kernel_info=DestroyKernelInfo(kernel_info);
2429 replaceImage(newImage);
2430 ThrowImageException;
2434bool Magick::Image::compare(
const Image &reference_)
2444 status=
static_cast<bool>(IsImagesEqual(image(),ref.constImage()));
2445 throwImageException();
2449double Magick::Image::compare(
const Image &reference_,
const MetricType metric_)
2455 GetImageDistortion(image(),reference_.constImage(),metric_,&distortion,
2457 ThrowImageException;
2461double Magick::Image::compareChannel(
const ChannelType channel_,
2462 const Image &reference_,
const MetricType metric_)
2468 GetImageChannelDistortion(image(),reference_.constImage(),channel_,metric_,
2469 &distortion,exceptionInfo);
2470 ThrowImageException;
2474Magick::Image Magick::Image::compare(
const Image &reference_,
2475 const MetricType metric_,
double *distortion)
2481 newImage=CompareImages(image(),reference_.constImage(),metric_,distortion,
2483 ThrowImageException;
2484 if (newImage == (MagickCore::Image *) NULL)
2485 return(Magick::Image());
2487 return(Magick::Image(newImage));
2490Magick::Image Magick::Image::compareChannel(
const ChannelType channel_,
2491 const Image &reference_,
const MetricType metric_,
double *distortion)
2497 newImage=CompareImageChannels(image(),reference_.constImage(),channel_,
2498 metric_,distortion,exceptionInfo);
2499 ThrowImageException;
2500 if (newImage == (MagickCore::Image *) NULL)
2501 return(Magick::Image());
2503 return(Magick::Image(newImage));
2506void Magick::Image::composite(
const Image &compositeImage_,
2507 const Geometry &offset_,
const CompositeOperator compose_)
2518 ParseMetaGeometry(
static_cast<std::string
>(offset_).c_str(),&x,&y,&width,
2521 CompositeImage(image(),compose_,compositeImage_.constImage(),x,y);
2522 throwImageException();
2525void Magick::Image::composite(
const Image &compositeImage_,
2526 const GravityType gravity_,
const CompositeOperator compose_)
2533 SetGeometry(compositeImage_.constImage(),&geometry);
2534 GravityAdjustGeometry(columns(),rows(),gravity_,&geometry);
2536 CompositeImage(image(),compose_,compositeImage_.constImage(),geometry.x,
2538 throwImageException();
2541void Magick::Image::composite(
const Image &compositeImage_,
2542 const ssize_t xOffset_,
const ssize_t yOffset_,
2543 const CompositeOperator compose_)
2549 CompositeImage(image(),compose_,compositeImage_.constImage(),xOffset_,
2551 throwImageException();
2554void Magick::Image::connectedComponents(
const size_t connectivity_)
2560 newImage=ConnectedComponentsImage(constImage(),connectivity_,exceptionInfo);
2561 replaceImage(newImage);
2562 ThrowImageException;
2565void Magick::Image::contrast(
const size_t sharpen_)
2568 ContrastImage(image(),(MagickBooleanType) sharpen_);
2569 throwImageException();
2572void Magick::Image::contrastStretch(
const double black_point_,
2573 const double white_point_)
2576 ContrastStretchImageChannel(image(),DefaultChannels,black_point_,
2578 throwImageException();
2581void Magick::Image::contrastStretchChannel(
const ChannelType channel_,
2582 const double black_point_,
const double white_point_)
2585 ContrastStretchImageChannel(image(),channel_,black_point_,white_point_);
2586 throwImageException();
2589void Magick::Image::convolve(
const size_t order_,
const double *kernel_)
2595 newImage=ConvolveImage(constImage(),order_,kernel_,exceptionInfo);
2596 replaceImage(newImage);
2597 ThrowImageException;
2600void Magick::Image::copyPixels(
const Image &source_,
const Geometry &geometry_,
2610 (void) CopyImagePixels(image(),source_.constImage(),&geometry,&offset,
2612 ThrowImageException;
2616void Magick::Image::crop(
const Geometry &geometry_)
2625 newImage=CropImage(constImage(),&cropInfo,exceptionInfo);
2626 replaceImage(newImage);
2627 ThrowImageException;
2630void Magick::Image::cycleColormap(
const ssize_t amount_)
2633 CycleColormapImage(image(),amount_);
2634 throwImageException();
2637void Magick::Image::decipher(
const std::string &passphrase_)
2641 DecipherImage(image(),passphrase_.c_str(),exceptionInfo);
2642 ThrowImageException;
2645void Magick::Image::defineSet(
const std::string &magick_,
2646 const std::string &key_,
bool flag_)
2652 definition=magick_ +
":" + key_;
2654 (void) SetImageOption(imageInfo(),definition.c_str(),
"");
2656 DeleteImageOption(imageInfo(),definition.c_str());
2659bool Magick::Image::defineSet(
const std::string &magick_,
2660 const std::string &key_)
const
2668 key=magick_ +
":" + key_;
2669 option=GetImageOption(constImageInfo(),key.c_str());
2675void Magick::Image::defineValue(
const std::string &magick_,
2676 const std::string &key_,
const std::string &value_)
2682 format=magick_ +
":" + key_;
2683 (void) SetImageOption(imageInfo(),format.c_str(),value_.c_str());
2686std::string Magick::Image::defineValue(
const std::string &magick_,
2687 const std::string &key_)
const
2695 definition=magick_ +
":" + key_;
2696 option=GetImageOption(constImageInfo(),definition.c_str());
2698 return(std::string(option));
2699 return(std::string());
2702void Magick::Image::deskew(
const double threshold_)
2708 newImage=DeskewImage(constImage(),threshold_,exceptionInfo);
2709 replaceImage(newImage);
2710 ThrowImageException;
2713void Magick::Image::despeckle(
void)
2719 newImage=DespeckleImage(constImage(),exceptionInfo);
2720 replaceImage(newImage);
2721 ThrowImageException;
2724Magick::ImageType Magick::Image::determineType(
void)
const
2730 image_type=GetImageType(constImage(),exceptionInfo);
2731 ThrowImageException;
2735void Magick::Image::display(
void)
2737 DisplayImages(imageInfo(),image());
2740void Magick::Image::distort(
const DistortImageMethod method_,
2741 const size_t number_arguments_,
const double *arguments_,
const bool bestfit_)
2747 newImage=DistortImage(constImage(),method_,number_arguments_,arguments_,
2748 bestfit_ ==
true ? MagickTrue : MagickFalse,exceptionInfo);
2749 replaceImage(newImage);
2750 ThrowImageException;
2753void Magick::Image::draw(
const Magick::Drawable &drawable_)
2760 wand=AcquireDrawingWand(options()->drawInfo(),image());
2764 drawable_.operator()(wand);
2766 if (constImage()->exception.severity == UndefinedException)
2769 wand=DestroyDrawingWand(wand);
2772 throwImageException();
2775void Magick::Image::draw(
const std::list<Magick::Drawable> &drawable_)
2782 wand=AcquireDrawingWand(options()->drawInfo(),image());
2786 for (std::list<Magick::Drawable>::const_iterator p = drawable_.begin();
2787 p != drawable_.end(); p++)
2789 p->operator()(wand);
2790 if (constImage()->exception.severity != UndefinedException)
2794 if (constImage()->exception.severity == UndefinedException)
2797 wand=DestroyDrawingWand(wand);
2800 throwImageException();
2803void Magick::Image::edge(
const double radius_)
2809 newImage=EdgeImage(constImage(),radius_,exceptionInfo);
2810 replaceImage(newImage);
2811 ThrowImageException;
2814void Magick::Image::emboss(
const double radius_,
const double sigma_)
2820 newImage=EmbossImage(constImage(),radius_,sigma_,exceptionInfo);
2821 replaceImage(newImage);
2822 ThrowImageException;
2825void Magick::Image::encipher(
const std::string &passphrase_)
2829 EncipherImage(image(),passphrase_.c_str(),exceptionInfo);
2830 ThrowImageException;
2833void Magick::Image::enhance(
void)
2839 newImage=EnhanceImage(constImage(),exceptionInfo);
2840 replaceImage(newImage);
2841 ThrowImageException;
2844void Magick::Image::equalize(
void)
2847 EqualizeImage(image());
2848 throwImageException();
2851void Magick::Image::erase(
void)
2854 (void) SetImageBackgroundColor(image());
2855 throwImageException();
2858void Magick::Image::extent(
const Geometry &geometry_)
2869 extentInfo=geometry_;
2870 extentInfo.x=geometry_.xOff();
2871 extentInfo.y=geometry_.yOff();
2872 newImage=ExtentImage(constImage(),&extentInfo,exceptionInfo);
2873 replaceImage(newImage);
2874 ThrowImageException;
2877void Magick::Image::extent(
const Geometry &geometry_,
2878 const Color &backgroundColor_)
2880 backgroundColor(backgroundColor_);
2884void Magick::Image::extent(
const Geometry &geometry_,
2885 const Color &backgroundColor_,
const GravityType gravity_)
2887 image()->gravity=gravity_;
2888 backgroundColor(backgroundColor_);
2889 extent(geometry_,gravity_);
2892void Magick::Image::extent(
const Geometry &geometry_,
2893 const GravityType gravity_)
2898 SetGeometry(image(),&geometry);
2899 geometry.width=geometry_.width();
2900 geometry.height=geometry_.height();
2901 GravityAdjustGeometry(image()->columns,image()->rows,gravity_,&geometry);
2905void Magick::Image::flip(
void)
2911 newImage=FlipImage(constImage(),exceptionInfo);
2912 replaceImage(newImage);
2913 ThrowImageException;
2916void Magick::Image::floodFillColor(
const Geometry &point_,
2917 const Magick::Color &fillColor_)
2919 floodFillColor(point_.xOff(),point_.yOff(),fillColor_,
false);
2922void Magick::Image::floodFillColor(
const Geometry &point_,
2923 const Magick::Color &fillColor_,
const bool invert_)
2925 floodFillColor(point_.xOff(),point_.yOff(),fillColor_,invert_);
2928void Magick::Image::floodFillColor(
const ssize_t x_,
const ssize_t y_,
2929 const Magick::Color &fillColor_)
2931 floodFillColor(x_,y_,fillColor_,
false);
2934void Magick::Image::floodFillColor(
const ssize_t x_,
const ssize_t y_,
2935 const Magick::Color &fillColor_,
const bool invert_)
2942 pixel=pixelColor(x_,y_);
2943 floodFill(x_,y_,(Magick::Image *)NULL,fillColor_,&pixel,invert_);
2946void Magick::Image::floodFillColor(
const Geometry &point_,
2947 const Magick::Color &fillColor_,
const Magick::Color &borderColor_)
2949 floodFillColor(point_.xOff(),point_.yOff(),fillColor_,borderColor_,
false);
2952void Magick::Image::floodFillColor(
const Geometry &point_,
2953 const Magick::Color &fillColor_,
const Magick::Color &borderColor_,
2956 floodFillColor(point_.xOff(),point_.yOff(),fillColor_,borderColor_,invert_);
2959void Magick::Image::floodFillColor(
const ssize_t x_,
const ssize_t y_,
2960 const Magick::Color &fillColor_,
const Magick::Color &borderColor_)
2962 floodFillColor(x_,y_,fillColor_,borderColor_,
false);
2965void Magick::Image::floodFillColor(
const ssize_t x_,
const ssize_t y_,
2966 const Magick::Color &fillColor_,
const Magick::Color &borderColor_,
2974 pixel=
static_cast<PixelPacket
>(borderColor_);
2975 floodFill(x_,y_,(Magick::Image *)NULL,fillColor_,&pixel,invert_);
2978void Magick::Image::floodFillOpacity(
const ssize_t x_,
const ssize_t y_,
2979 const unsigned int opacity_,
const bool invert_)
2989 GetMagickPixelPacket(constImage(),&target);
2990 pixel=
static_cast<PixelPacket
>(pixelColor(x_,y_));
2991 target.red=pixel.red;
2992 target.green=pixel.green;
2993 target.blue=pixel.blue;
2994 target.opacity=opacity_;
2995 (void) FloodfillPaintImage(image(),OpacityChannel,options()->drawInfo(),
2996 &target,x_,y_,(MagickBooleanType)invert_);
2997 throwImageException();
3000void Magick::Image::floodFillOpacity(
const ssize_t x_,
const ssize_t y_,
3001 const unsigned int opacity_,
const PaintMethod method_)
3003 floodFillOpacity(x_,y_,opacity_,method_ == FloodfillMethod ?
false :
true);
3006void Magick::Image::floodFillOpacity(const ::ssize_t x_,const ::ssize_t y_,
3007 const unsigned int opacity_,
const Color &target_,
const bool invert_)
3017 GetMagickPixelPacket(constImage(),&target);
3018 pixel=
static_cast<PixelPacket
>(target_);
3019 target.red=pixel.red;
3020 target.green=pixel.green;
3021 target.blue=pixel.blue;
3022 target.opacity=opacity_;
3023 (void) FloodfillPaintImage(image(),OpacityChannel,options()->drawInfo(),
3024 &target,x_,y_,(MagickBooleanType)invert_);
3025 throwImageException();
3028void Magick::Image::floodFillTexture(
const Magick::Geometry &point_,
3029 const Magick::Image &texture_)
3031 floodFillTexture(point_.xOff(),point_.yOff(),texture_,
false);
3034void Magick::Image::floodFillTexture(
const Magick::Geometry &point_,
3035 const Magick::Image &texture_,
const bool invert_)
3037 floodFillTexture(point_.xOff(),point_.yOff(),texture_,invert_);
3040void Magick::Image::floodFillTexture(
const ssize_t x_,
const ssize_t y_,
3041 const Magick::Image &texture_)
3043 floodFillTexture(x_,y_,texture_,
false);
3046void Magick::Image::floodFillTexture(
const ssize_t x_,
const ssize_t y_,
3047 const Magick::Image &texture_,
const bool invert_)
3054 pixel=
static_cast<PixelPacket
>(pixelColor(x_,y_));
3055 floodFill(x_,y_,&texture_,Magick::Color(),&pixel,invert_);
3058void Magick::Image::floodFillTexture(
const Magick::Geometry &point_,
3059 const Magick::Image &texture_,
const Magick::Color &borderColor_)
3061 floodFillTexture(point_.xOff(),point_.yOff(),texture_,borderColor_,
false);
3064void Magick::Image::floodFillTexture(
const Magick::Geometry &point_,
3065 const Magick::Image &texture_,
const Magick::Color &borderColor_,
3068 floodFillTexture(point_.xOff(),point_.yOff(),texture_,borderColor_,invert_);
3071void Magick::Image::floodFillTexture(
const ssize_t x_,
const ssize_t y_,
3072 const Magick::Image &texture_,
const Magick::Color &borderColor_)
3074 floodFillTexture(x_,y_,texture_,borderColor_,
false);
3077void Magick::Image::floodFillTexture(
const ssize_t x_,
const ssize_t y_,
3078 const Magick::Image &texture_,
const Magick::Color &borderColor_,
3086 pixel=
static_cast<PixelPacket
>(borderColor_);
3087 floodFill(x_,y_,&texture_,Magick::Color(),&pixel,invert_);
3090void Magick::Image::flop(
void)
3096 newImage=FlopImage(constImage(),exceptionInfo);
3097 replaceImage(newImage);
3098 ThrowImageException;
3101void Magick::Image::fontTypeMetrics(
const std::string &text_,
3107 drawInfo=options()->drawInfo();
3108 drawInfo->text=
const_cast<char *
>(text_.c_str());
3109 if (GetTypeMetrics(image(),drawInfo,&(metrics->_typeMetric)) == MagickFalse)
3110 throwImageException();
3114void Magick::Image::fontTypeMetricsMultiline(
const std::string &text_,
3120 drawInfo=options()->drawInfo();
3121 drawInfo->text=
const_cast<char *
>(text_.c_str());
3122 (void) GetMultilineTypeMetrics(image(),drawInfo,&(metrics->_typeMetric));
3126void Magick::Image::frame(
const Geometry &geometry_)
3134 info.x=
static_cast<ssize_t
>(geometry_.width());
3135 info.y=
static_cast<ssize_t
>(geometry_.height());
3136 info.width=columns() + (
static_cast<size_t>(info.x) << 1 );
3137 info.height=rows() + (
static_cast<size_t>(info.y) << 1 );
3138 info.outer_bevel=geometry_.xOff();
3139 info.inner_bevel=geometry_.yOff();
3142 newImage=FrameImage(constImage(),&info,exceptionInfo);
3143 replaceImage(newImage);
3144 ThrowImageException;
3147void Magick::Image::frame(
const size_t width_,
const size_t height_,
3148 const ssize_t innerBevel_,
const ssize_t outerBevel_)
3156 info.x=
static_cast<ssize_t
>(width_);
3157 info.y=
static_cast<ssize_t
>(height_);
3158 info.width=columns() + (
static_cast<size_t>(info.x) << 1 );
3159 info.height=rows() + (
static_cast<size_t>(info.y) << 1 );
3160 info.outer_bevel=
static_cast<ssize_t
>(outerBevel_);
3161 info.inner_bevel=
static_cast<ssize_t
>(innerBevel_);
3164 newImage=FrameImage(constImage(),&info,exceptionInfo);
3165 replaceImage(newImage);
3166 ThrowImageException;
3169void Magick::Image::fx(
const std::string expression)
3175 newImage=FxImageChannel(constImage(),DefaultChannels,expression.c_str(),
3177 replaceImage(newImage);
3178 ThrowImageException;
3181void Magick::Image::fx(
const std::string expression,
3182 const Magick::ChannelType channel)
3188 newImage=FxImageChannel(constImage(),channel,expression.c_str(),
3190 replaceImage(newImage);
3191 ThrowImageException;
3194void Magick::Image::gamma(
const double gamma_)
3197 gamma[MaxTextExtent + 1];
3199 FormatLocaleString(gamma,MaxTextExtent,
"%3.6f",gamma_);
3202 GammaImage(image(),gamma);
3205void Magick::Image::gamma(
const double gammaRed_,
const double gammaGreen_,
3206 const double gammaBlue_)
3209 gamma[MaxTextExtent + 1];
3211 FormatLocaleString(gamma,MaxTextExtent,
"%3.6f/%3.6f/%3.6f/",gammaRed_,
3212 gammaGreen_,gammaBlue_);
3215 GammaImage(image(),gamma);
3216 throwImageException();
3219void Magick::Image::gaussianBlur(
const double width_,
const double sigma_)
3225 newImage=GaussianBlurImage(constImage(),width_,sigma_,exceptionInfo);
3226 replaceImage(newImage);
3227 ThrowImageException;
3230void Magick::Image::gaussianBlurChannel(
const ChannelType channel_,
3231 const double width_,
const double sigma_)
3237 newImage=GaussianBlurImageChannel(constImage(),channel_,width_,sigma_,
3239 replaceImage(newImage);
3240 ThrowImageException;
3243const Magick::IndexPacket* Magick::Image::getConstIndexes(
void)
const
3245 const Magick::IndexPacket
3248 result=GetVirtualIndexQueue(constImage());
3250 throwImageException();
3255const Magick::PixelPacket* Magick::Image::getConstPixels(
const ssize_t x_,
3256 const ssize_t y_,
const size_t columns_,
const size_t rows_)
const
3262 result=GetVirtualPixels(constImage(),x_,y_,columns_,rows_,exceptionInfo);
3263 ThrowImageException;
3267Magick::IndexPacket *Magick::Image::getIndexes(
void)
3272 result=GetAuthenticIndexQueue(image());
3275 throwImageException();
3280Magick::PixelPacket *Magick::Image::getPixels(
const ssize_t x_,
3281 const ssize_t y_,
const size_t columns_,
const size_t rows_)
3288 result=GetAuthenticPixels(image(),x_,y_,columns_,rows_,exceptionInfo);
3289 ThrowImageException;
3293void Magick::Image::grayscale(
const PixelIntensityMethod method_)
3296 (void) GrayscaleImage(image(),method_);
3297 throwImageException();
3300void Magick::Image::haldClut(
const Image &clutImage_)
3303 (void) HaldClutImage(image(),clutImage_.constImage());
3304 throwImageException();
3307void Magick::Image::houghLine(
const size_t width_,
const size_t height_,
3308 const size_t threshold_)
3314 newImage=HoughLineImage(constImage(),width_,height_,threshold_,
3316 replaceImage(newImage);
3317 ThrowImageException;
3320void Magick::Image::implode(
const double factor_)
3326 newImage=ImplodeImage(constImage(),factor_,exceptionInfo);
3327 replaceImage(newImage);
3328 ThrowImageException;
3331void Magick::Image::inverseFourierTransform(
const Image &phase_)
3333 inverseFourierTransform(phase_,
true);
3336void Magick::Image::inverseFourierTransform(
const Image &phase_,
3337 const bool magnitude_)
3343 newImage=InverseFourierTransformImage(constImage(),phase_.constImage(),
3344 magnitude_ ==
true ? MagickTrue : MagickFalse,exceptionInfo);
3345 replaceImage(newImage);
3346 ThrowImageException;
3349void Magick::Image::kuwahara(
const double radius_,
const double sigma_)
3355 newImage=KuwaharaImage(constImage(),radius_,sigma_,exceptionInfo);
3356 replaceImage(newImage);
3357 ThrowImageException;
3360void Magick::Image::kuwaharaChannel(
const ChannelType channel_,
3361 const double radius_,
const double sigma_)
3367 newImage=KuwaharaImageChannel(constImage(),channel_,radius_,sigma_,
3369 replaceImage(newImage);
3370 ThrowImageException;
3373void Magick::Image::level(
const double black_point,
const double white_point,
3377 levels[MaxTextExtent];
3380 FormatLocaleString(levels,MaxTextExtent,
"%g,%g,%g",black_point,white_point,
3382 (void) LevelImage(image(),levels);
3383 throwImageException();
3386void Magick::Image::levelChannel(
const Magick::ChannelType channel,
3387 const double black_point,
const double white_point,
const double gamma)
3390 (void) LevelImageChannel(image(),channel,black_point,white_point,gamma);
3391 throwImageException();
3394void Magick::Image::levelColors(
const Color &blackColor_,
3395 const Color &whiteColor_,
const bool invert_)
3406 GetMagickPixelPacket(image(),&black);
3407 pixel=
static_cast<PixelPacket
>(blackColor_);
3408 black.red=pixel.red;
3409 black.green=pixel.green;
3410 black.blue=pixel.blue;
3411 black.opacity=pixel.opacity;
3413 GetMagickPixelPacket(image(),&white);
3414 pixel=
static_cast<PixelPacket
>(whiteColor_);
3415 white.red=pixel.red;
3416 white.green=pixel.green;
3417 white.blue=pixel.blue;
3418 white.opacity=pixel.opacity;
3420 (void) LevelColorsImage(image(),&black,&white,
3421 invert_ ==
true ? MagickTrue : MagickFalse);
3422 throwImageException();
3425void Magick::Image::levelColorsChannel(
const ChannelType channel_,
3426 const Color &blackColor_,
const Color &whiteColor_,
const bool invert_)
3437 GetMagickPixelPacket(image(),&black);
3438 pixel=
static_cast<PixelPacket
>(blackColor_);
3439 black.red=pixel.red;
3440 black.green=pixel.green;
3441 black.blue=pixel.blue;
3442 black.opacity=pixel.opacity;
3444 GetMagickPixelPacket(image(),&white);
3445 pixel=
static_cast<PixelPacket
>(whiteColor_);
3446 white.red=pixel.red;
3447 white.green=pixel.green;
3448 white.blue=pixel.blue;
3449 white.opacity=pixel.opacity;
3451 (void) LevelColorsImageChannel(image(),channel_,&black,&white,
3452 invert_ ==
true ? MagickTrue : MagickFalse);
3453 throwImageException();
3456void Magick::Image::levelize(
const double blackPoint_,
const double whitePoint_,
3457 const double gamma_)
3460 (void) LevelizeImage(image(),blackPoint_,whitePoint_,gamma_);
3461 throwImageException();
3464void Magick::Image::levelizeChannel(
const ChannelType channel_,
3465 const double blackPoint_,
const double whitePoint_,
const double gamma_)
3468 (void) LevelizeImageChannel(image(),channel_,blackPoint_,whitePoint_,gamma_);
3469 throwImageException();
3472void Magick::Image::linearStretch(
const double blackPoint_,
3473 const double whitePoint_)
3476 LinearStretchImage(image(),blackPoint_,whitePoint_);
3477 throwImageException();
3480void Magick::Image::liquidRescale(
const Geometry &geometry_)
3493 ParseMetaGeometry(
static_cast<std::string
>(geometry_).c_str(),&x,&y,&width,
3497 newImage=LiquidRescaleImage(constImage(),width,height,x,y,exceptionInfo);
3498 replaceImage(newImage);
3499 ThrowImageException;
3502void Magick::Image::localContrast(
const double radius_,
const double strength_)
3508 newImage=LocalContrastImage(constImage(),radius_,strength_,exceptionInfo);
3509 replaceImage(newImage);
3510 ThrowImageException;
3513void Magick::Image::magnify(
void)
3519 newImage=MagnifyImage(constImage(),exceptionInfo);
3520 replaceImage(newImage);
3521 ThrowImageException;
3524void Magick::Image::map(
const Image &mapImage_,
const bool dither_)
3527 options()->quantizeDither(dither_);
3528 RemapImage(options()->quantizeInfo(),image(),mapImage_.constImage());
3529 throwImageException();
3532void Magick::Image::matteFloodfill(
const Color &target_,
3533 const unsigned int opacity_,
const ssize_t x_,
const ssize_t y_,
3534 const Magick::PaintMethod method_)
3536 floodFillOpacity(x_,y_,opacity_,target_,
3537 method_ == FloodfillMethod ?
false :
true);
3540void Magick::Image::medianFilter(
const double radius_)
3546 newImage=StatisticImage(constImage(),MedianStatistic,(
size_t) radius_,
3547 (
size_t) radius_,exceptionInfo);
3548 replaceImage(newImage);
3549 ThrowImageException;
3552void Magick::Image::mergeLayers(
const ImageLayerMethod layerMethod_)
3558 newImage=MergeImageLayers(image(),layerMethod_,exceptionInfo);
3559 replaceImage(newImage);
3560 ThrowImageException;
3563void Magick::Image::minify(
void)
3569 newImage=MinifyImage(constImage(),exceptionInfo);
3570 replaceImage(newImage);
3571 ThrowImageException;
3574void Magick::Image::modulate(
const double brightness_,
const double saturation_,
3578 modulate[MaxTextExtent + 1];
3580 FormatLocaleString(modulate,MaxTextExtent,
"%3.6f,%3.6f,%3.6f",brightness_,
3584 ModulateImage(image(),modulate);
3585 throwImageException();
3588Magick::ImageMoments Magick::Image::moments(
void)
const
3593void Magick::Image::morphology(
const MorphologyMethod method_,
3594 const std::string kernel_,
const ssize_t iterations_)
3602 kernel=AcquireKernelInfo(kernel_.c_str());
3603 if (kernel == (KernelInfo *)NULL)
3604 throwExceptionExplicit(OptionError,
"Unable to parse kernel.");
3607 newImage=MorphologyImage(constImage(),method_,iterations_,kernel,
3609 replaceImage(newImage);
3610 kernel=DestroyKernelInfo(kernel);
3611 ThrowImageException;
3614void Magick::Image::morphology(
const MorphologyMethod method_,
3615 const KernelInfoType kernel_,
const std::string arguments_,
3616 const ssize_t iterations_)
3624 option=CommandOptionToMnemonic(MagickKernelOptions,kernel_);
3625 if (option == (
const char *)NULL)
3627 throwExceptionExplicit(OptionError,
"Unable to determine kernel type.");
3631 kernel=std::string(option);
3632 if (!arguments_.empty())
3633 kernel+=
":"+arguments_;
3635 morphology(method_,kernel,iterations_);
3638void Magick::Image::morphologyChannel(
const ChannelType channel_,
3639 const MorphologyMethod method_,
const std::string kernel_,
3640 const ssize_t iterations_)
3648 kernel=AcquireKernelInfo(kernel_.c_str());
3649 if (kernel == (KernelInfo *)NULL)
3651 throwExceptionExplicit(OptionError,
"Unable to parse kernel.");
3656 newImage=MorphologyImageChannel(constImage(),channel_,method_,iterations_,
3657 kernel,exceptionInfo);
3658 replaceImage(newImage);
3659 kernel=DestroyKernelInfo(kernel);
3660 ThrowImageException;
3663void Magick::Image::morphologyChannel(
const ChannelType channel_,
3664 const MorphologyMethod method_,
const KernelInfoType kernel_,
3665 const std::string arguments_,
const ssize_t iterations_)
3673 option=CommandOptionToMnemonic(MagickKernelOptions,kernel_);
3674 if (option == (
const char *)NULL)
3676 throwExceptionExplicit(OptionError,
"Unable to determine kernel type.");
3680 kernel=std::string(option);
3681 if (!arguments_.empty())
3682 kernel+=
":"+arguments_;
3684 morphologyChannel(channel_,method_,kernel,iterations_);
3687void Magick::Image::motionBlur(
const double radius_,
const double sigma_,
3688 const double angle_)
3694 newImage=MotionBlurImage(constImage(),radius_,sigma_,angle_,exceptionInfo);
3695 replaceImage(newImage);
3696 ThrowImageException;
3699void Magick::Image::negate(
const bool grayscale_)
3702 NegateImage(image(),(MagickBooleanType) grayscale_);
3703 throwImageException();
3706void Magick::Image::negateChannel(
const ChannelType channel_,
3707 const bool grayscale_)
3710 NegateImageChannel(image(),channel_,(MagickBooleanType) grayscale_);
3711 throwImageException();
3714void Magick::Image::normalize(
void)
3717 NormalizeImage(image());
3718 throwImageException();
3721void Magick::Image::oilPaint(
const double radius_)
3727 newImage=OilPaintImage(constImage(),radius_,exceptionInfo);
3728 replaceImage(newImage);
3729 ThrowImageException;
3732void Magick::Image::opacity(
const unsigned int opacity_)
3735 SetImageOpacity(image(),opacity_);
3737void Magick::Image::opaque(
const Color &opaqueColor_,
const Color &penColor_,
3748 if (!opaqueColor_.isValid())
3749 throwExceptionExplicit(OptionError,
"Opaque color argument is invalid");
3751 if (!penColor_.isValid())
3752 throwExceptionExplicit(OptionError,
"Pen color argument is invalid");
3754 opaqueColor=opaqueColor_;
3757 (void) QueryMagickColor(opaqueColor.c_str(),&opaque,&image()->exception);
3758 (void) QueryMagickColor(penColor.c_str(),&pen,&image()->exception);
3760 OpaquePaintImage(image(),&opaque,&pen,invert_ ? MagickTrue : MagickFalse);
3761 throwImageException();
3764void Magick::Image::orderedDither(std::string thresholdMap_)
3768 (void) OrderedPosterizeImage(image(),thresholdMap_.c_str(),exceptionInfo);
3769 ThrowImageException;
3772void Magick::Image::orderedDitherChannel(
const ChannelType channel_,
3773 std::string thresholdMap_)
3777 (void) OrderedPosterizeImageChannel(image(),channel_,thresholdMap_.c_str(),
3779 ThrowImageException;
3782void Magick::Image::perceptible(
const double epsilon_)
3785 PerceptibleImage(image(),epsilon_);
3786 throwImageException();
3789void Magick::Image::perceptibleChannel(
const ChannelType channel_,
3790 const double epsilon_)
3793 PerceptibleImageChannel(image(),channel_,epsilon_);
3794 throwImageException();
3797void Magick::Image::ping(
const Blob& blob_)
3803 newImage=PingBlob(imageInfo(),blob_.data(),blob_.length(),exceptionInfo);
3804 read(newImage,exceptionInfo);
3807void Magick::Image::ping(
const std::string &imageSpec_)
3813 options()->fileName(imageSpec_);
3814 newImage=PingImage(imageInfo(),exceptionInfo);
3815 read(newImage,exceptionInfo);
3818void Magick::Image::pixelColor(
const ssize_t x_,
const ssize_t y_,
3819 const Color &color_)
3822 if (y_ > (ssize_t) rows() || x_ > (ssize_t) columns())
3823 throwExceptionExplicit(OptionError,
"Access outside of image boundary");
3828 classType(DirectClass);
3833 *(pixels.get(x_,y_,1,1))=color_;
3838Magick::Color Magick::Image::pixelColor(
const ssize_t x_,
3839 const ssize_t y_)
const
3844 storage_class=classType();
3845 if (storage_class == DirectClass)
3850 pixel=getConstPixels(x_,y_,1,1);
3852 return(
Color(*pixel));
3854 else if (storage_class == PseudoClass)
3859 indexes=getConstIndexes();
3861 return(colorMap((
size_t) *indexes));
3867void Magick::Image::polaroid(
const std::string &caption_,
const double angle_)
3873 (void) SetImageProperty(image(),
"Caption",caption_.c_str());
3874 newImage=PolaroidImage(constImage(),options()->drawInfo(),angle_,
3876 replaceImage(newImage);
3877 ThrowImageException;
3880void Magick::Image::posterize(
const size_t levels_,
const bool dither_)
3883 PosterizeImage(image(),levels_,(MagickBooleanType) dither_);
3884 throwImageException();
3887void Magick::Image::posterizeChannel(
const ChannelType channel_,
3888 const size_t levels_,
const bool dither_)
3891 PosterizeImageChannel(image(),channel_,levels_,
3892 (MagickBooleanType) dither_);
3893 throwImageException();
3896void Magick::Image::process(std::string name_,
const ssize_t argc,
3904 status=InvokeDynamicImageFilter(name_.c_str(),&image(),argc, argv,
3905 &image()->exception);
3907 if (status ==
false)
3908 throwImageException();
3911void Magick::Image::profile(
const std::string name_,
3912 const Magick::Blob &profile_)
3918 result=ProfileImage(image(),name_.c_str(),(
unsigned char *)profile_.data(),
3919 profile_.length(),MagickTrue);
3922 throwImageException();
3925Magick::Blob Magick::Image::profile(
const std::string name_)
const
3930 profile=GetImageProfile(constImage(),name_.c_str());
3932 if (profile == (StringInfo *) NULL)
3934 return(
Blob((
void*) GetStringInfoDatum(profile),GetStringInfoLength(
3938void Magick::Image::quantize(
const bool measureError_)
3943 options()->quantizeInfo()->measure_error=MagickTrue;
3945 options()->quantizeInfo()->measure_error=MagickFalse;
3947 QuantizeImage(options()->quantizeInfo(),image());
3949 throwImageException();
3952void Magick::Image::quantumOperator(
const ChannelType channel_,
3953 const MagickEvaluateOperator operator_,
double rvalue_)
3956 EvaluateImageChannel(image(),channel_,operator_,rvalue_,exceptionInfo);
3957 ThrowImageException;
3960void Magick::Image::quantumOperator(
const ChannelType channel_,
3961 const MagickFunction function_,
const size_t number_parameters_,
3962 const double *parameters_)
3965 FunctionImageChannel(image(),channel_,function_,number_parameters_,
3966 parameters_,exceptionInfo);
3967 ThrowImageException;
3970void Magick::Image::quantumOperator(
const ssize_t x_,
const ssize_t y_,
3971 const size_t columns_,
const size_t rows_,
const ChannelType channel_,
3972 const MagickEvaluateOperator operator_,
const double rvalue_)
3981 geometry.width=columns_;
3982 geometry.height=rows_;
3985 cropImage=CropImage(image(),&geometry,exceptionInfo);
3986 EvaluateImageChannel(
cropImage,channel_,operator_,rvalue_,exceptionInfo);
3987 (void) CompositeImage(image(),image()->matte != MagickFalse ?
3988 OverCompositeOp : CopyCompositeOp,
cropImage,geometry.x, geometry.y);
3990 ThrowImageException;
3993void Magick::Image::raise(
const Geometry &geometry_,
const bool raisedFlag_)
3998 raiseInfo=geometry_;
4000 RaiseImage(image(),&raiseInfo,raisedFlag_ ==
true ?
4001 MagickTrue : MagickFalse);
4002 throwImageException();
4005void Magick::Image::randomThreshold(
const Geometry &thresholds_ )
4009 (void) RandomThresholdImage(image(),
static_cast<std::string
>(
4010 thresholds_).c_str(),exceptionInfo);
4011 ThrowImageException;
4014void Magick::Image::randomThresholdChannel(
const Geometry &thresholds_,
4015 const ChannelType channel_)
4019 (void) RandomThresholdImageChannel(image(),channel_,
static_cast<std::string
>(
4020 thresholds_).c_str(),exceptionInfo);
4021 ThrowImageException;
4024void Magick::Image::read(
const Blob &blob_)
4030 newImage=BlobToImage(imageInfo(),
static_cast<const void *
>(blob_.data()),
4031 blob_.length(),exceptionInfo);
4032 read(newImage,exceptionInfo);
4035void Magick::Image::read(
const Blob &blob_,
const Geometry &size_)
4041void Magick::Image::read(
const Blob &blob_,
const Geometry &size_,
4042 const size_t depth_)
4049void Magick::Image::read(
const Blob &blob_,
const Geometry &size_,
4050 const size_t depth_,
const std::string &magick_)
4055 fileName(magick_ +
':');
4059void Magick::Image::read(
const Blob &blob_,
const Geometry &size_,
4060 const std::string &magick_)
4064 fileName(magick_ +
':');
4068void Magick::Image::read(
const Geometry &size_,
const std::string &imageSpec_)
4074void Magick::Image::read(
const size_t width_,
const size_t height_,
4075 const std::string &map_,
const StorageType type_,
const void *pixels_)
4081 newImage=ConstituteImage(width_,height_,map_.c_str(),type_,pixels_,
4083 replaceImage(newImage);
4084 ThrowImageException;
4086 throwException(&newImage->exception,quiet());
4089void Magick::Image::read(
const std::string &imageSpec_)
4094 options()->fileName(imageSpec_);
4097 newImage=ReadImage(imageInfo(),exceptionInfo);
4098 read(newImage,exceptionInfo);
4101void Magick::Image::readPixels(
const Magick::QuantumType quantum_,
4102 const unsigned char *source_)
4108 quantum_info=AcquireQuantumInfo(imageInfo(),image());
4109 ImportQuantumPixels(image(),(MagickCore::CacheView *) NULL,quantum_info,
4110 quantum_,source_,exceptionInfo);
4111 quantum_info=DestroyQuantumInfo(quantum_info);
4112 ThrowImageException;
4115void Magick::Image::reduceNoise(
const double order_)
4121 newImage=StatisticImage(constImage(),NonpeakStatistic,(
size_t) order_,
4122 (
size_t) order_,exceptionInfo);
4123 replaceImage(newImage);
4124 ThrowImageException;
4127void Magick::Image::repage()
4131 image()->page.width = 0;
4132 image()->page.height = 0;
4133 image()->page.x = 0;
4134 image()->page.y = 0;
4137void Magick::Image::resample(
const Geometry &geometry_)
4150 ParseMetaGeometry(
static_cast<std::string
>(geometry_).c_str(),&x, &y,&width,
4154 newImage=ResampleImage(constImage(),width,height,image()->filter,1.0,
4156 replaceImage(newImage);
4157 ThrowImageException;
4160void Magick::Image::resize(
const Geometry &geometry_)
4173 ParseMetaGeometry(
static_cast<std::string
>(geometry_).c_str(),&x, &y,&width,
4177 newImage=ResizeImage(constImage(),width,height,image()->filter,1.0,
4179 replaceImage(newImage);
4180 ThrowImageException;
4183void Magick::Image::roll(
const Geometry &roll_)
4192 if (roll_.xNegative())
4194 if (roll_.yNegative())
4198 newImage=RollImage(constImage(),xOff,yOff,exceptionInfo);
4199 replaceImage(newImage);
4200 ThrowImageException;
4203void Magick::Image::roll(
const size_t columns_,
const size_t rows_)
4209 newImage=RollImage(constImage(),
static_cast<ssize_t
>(columns_),
4210 static_cast<ssize_t
>(rows_),exceptionInfo);
4211 replaceImage(newImage);
4212 ThrowImageException;
4215void Magick::Image::rotate(
const double degrees_)
4221 newImage=RotateImage(constImage(),degrees_,exceptionInfo);
4222 replaceImage(newImage);
4223 ThrowImageException;
4226void Magick::Image::rotationalBlur(
const double angle_)
4232 newImage=RotationalBlurImage(constImage(),angle_,exceptionInfo);
4233 replaceImage(newImage);
4234 ThrowImageException;
4237void Magick::Image::rotationalBlurChannel(
const ChannelType channel_,
4238 const double angle_)
4244 newImage=RotationalBlurImageChannel(constImage(),channel_,angle_,
4246 replaceImage(newImage);
4247 ThrowImageException;
4250void Magick::Image::sample(
const Geometry &geometry_)
4263 ParseMetaGeometry(
static_cast<std::string
>(geometry_).c_str(),&x,&y,&width,
4267 newImage=SampleImage(constImage(),width,height,exceptionInfo);
4268 replaceImage(newImage);
4269 ThrowImageException;
4272void Magick::Image::scale(
const Geometry &geometry_)
4285 ParseMetaGeometry(
static_cast<std::string
>(geometry_).c_str(),&x,&y,&width,
4289 newImage=ScaleImage(constImage(),width,height,exceptionInfo);
4290 replaceImage(newImage);
4291 ThrowImageException;
4294void Magick::Image::segment(
const double clusterThreshold_,
4295 const double smoothingThreshold_)
4298 SegmentImage(image(),options()->quantizeColorSpace(),
4299 (MagickBooleanType) options()->verbose(),clusterThreshold_,
4300 smoothingThreshold_);
4301 throwImageException();
4303 throwImageException();
4306void Magick::Image::selectiveBlur(
const double radius_,
const double sigma_,
4307 const double threshold_)
4313 newImage=SelectiveBlurImage(constImage(),radius_,sigma_,threshold_,
4315 replaceImage(newImage);
4316 ThrowImageException;
4319void Magick::Image::selectiveBlurChannel(
const ChannelType channel_,
4320 const double radius_,
const double sigma_,
const double threshold_)
4326 newImage=SelectiveBlurImageChannel(constImage(),channel_,radius_,sigma_,
4327 threshold_,exceptionInfo);
4328 replaceImage(newImage);
4329 ThrowImageException;
4332Magick::Image Magick::Image::separate(
const ChannelType channel_)
const
4338 image=SeparateImage(constImage(),channel_,exceptionInfo);
4339 ThrowImageException;
4340 if (image == (MagickCore::Image *) NULL)
4341 return(Magick::Image());
4343 return(Magick::Image(image));
4346void Magick::Image::sepiaTone(
const double threshold_)
4352 newImage=SepiaToneImage(constImage(),threshold_,exceptionInfo);
4353 replaceImage(newImage);
4354 ThrowImageException;
4357Magick::PixelPacket *Magick::Image::setPixels(
const ssize_t x_,
4358 const ssize_t y_,
const size_t columns_,
const size_t rows_)
4365 result=QueueAuthenticPixels(image(),x_, y_,columns_,rows_,exceptionInfo);
4366 ThrowImageException;
4370void Magick::Image::shade(
const double azimuth_,
const double elevation_,
4371 const bool colorShading_)
4377 newImage=ShadeImage(constImage(),colorShading_ ==
true ?
4378 MagickTrue : MagickFalse,azimuth_,elevation_,exceptionInfo);
4379 replaceImage(newImage);
4380 ThrowImageException;
4383void Magick::Image::shadow(
const double percent_opacity_,
const double sigma_,
4384 const ssize_t x_,
const ssize_t y_)
4390 newImage=ShadowImage(constImage(),percent_opacity_,sigma_,x_,y_,exceptionInfo);
4391 replaceImage(newImage);
4392 ThrowImageException;
4395void Magick::Image::sharpen(
const double radius_,
const double sigma_)
4401 newImage=SharpenImage(constImage(),radius_,sigma_,exceptionInfo);
4402 replaceImage(newImage);
4403 ThrowImageException;
4406void Magick::Image::sharpenChannel(
const ChannelType channel_,
4407 const double radius_,
const double sigma_)
4413 newImage=SharpenImageChannel(constImage(),channel_,radius_,sigma_,
4415 replaceImage(newImage);
4416 ThrowImageException;
4419void Magick::Image::shave(
const Geometry &geometry_)
4425 shaveInfo=geometry_;
4428 newImage=ShaveImage(constImage(),&shaveInfo,exceptionInfo);
4429 replaceImage(newImage);
4430 ThrowImageException;
4433void Magick::Image::shear(
const double xShearAngle_,
const double yShearAngle_)
4439 newImage=ShearImage(constImage(),xShearAngle_,yShearAngle_,exceptionInfo);
4440 replaceImage(newImage);
4441 ThrowImageException;
4444void Magick::Image::sigmoidalContrast(
const size_t sharpen_,
4445 const double contrast,
const double midpoint)
4448 (void) SigmoidalContrastImageChannel(image(),DefaultChannels,
4449 (MagickBooleanType) sharpen_,contrast,midpoint);
4450 throwImageException();
4453std::string Magick::Image::signature(
const bool force_)
const
4458 Lock lock(&_imgRef->_mutexLock);
4461 if (force_ || !GetImageProperty(constImage(),
"Signature") ||
4462 constImage()->taint)
4463 SignatureImage(
const_cast<MagickCore::Image *
>(constImage()));
4465 property=GetImageProperty(constImage(),
"Signature");
4467 return(std::string(property));
4470void Magick::Image::sketch(
const double radius_,
const double sigma_,
4471 const double angle_)
4477 newImage=SketchImage(constImage(),radius_,sigma_,angle_,exceptionInfo);
4478 replaceImage(newImage);
4479 ThrowImageException;
4482void Magick::Image::solarize(
const double factor_)
4485 SolarizeImage(image(),factor_);
4486 throwImageException();
4489void Magick::Image::sparseColor(
const ChannelType channel,
4490 const SparseColorMethod method,
const size_t number_arguments,
4491 const double *arguments)
4497 newImage=SparseColorImage(constImage(),channel,method,number_arguments,
4498 arguments,exceptionInfo);
4499 replaceImage(newImage);
4500 ThrowImageException;
4503void Magick::Image::splice(
const Geometry &geometry_)
4509 spliceInfo=geometry_;
4512 newImage=SpliceImage(constImage(),&spliceInfo,exceptionInfo);
4513 replaceImage(newImage);
4514 ThrowImageException;
4517void Magick::Image::splice(
const Geometry &geometry_,
4518 const Color &backgroundColor_)
4520 backgroundColor(backgroundColor_);
4524void Magick::Image::splice(
const Geometry &geometry_,
4525 const Color &backgroundColor_,
const GravityType gravity_)
4527 backgroundColor(backgroundColor_);
4528 image()->gravity=gravity_;
4532void Magick::Image::spread(
const size_t amount_)
4538 newImage=SpreadImage(constImage(),amount_,exceptionInfo);
4539 replaceImage(newImage);
4540 ThrowImageException;
4543void Magick::Image::statistics(ImageStatistics *statistics)
const
4550 (void) GetImageChannelRange(constImage(),RedChannel,&minimum,&maximum,
4552 statistics->red.minimum=minimum;
4553 statistics->red.maximum=maximum;
4554 (void) GetImageChannelMean(constImage(),RedChannel,&statistics->red.mean,
4555 &statistics->red.standard_deviation,exceptionInfo);
4556 (void) GetImageChannelKurtosis(constImage(),RedChannel,
4557 &statistics->red.kurtosis,&statistics->red.skewness,exceptionInfo);
4558 (void) GetImageChannelRange(constImage(),GreenChannel,&minimum,&maximum,
4560 statistics->green.minimum=minimum;
4561 statistics->green.maximum=maximum;
4562 (void) GetImageChannelMean(constImage(),GreenChannel,&statistics->green.mean,
4563 &statistics->green.standard_deviation,exceptionInfo);
4564 (void) GetImageChannelKurtosis(constImage(),GreenChannel,
4565 &statistics->green.kurtosis,&statistics->green.skewness,exceptionInfo);
4566 (void) GetImageChannelRange(constImage(),BlueChannel,&minimum,&maximum,
4568 statistics->blue.minimum=minimum;
4569 statistics->blue.maximum=maximum;
4570 (void) GetImageChannelMean(constImage(),BlueChannel,&statistics->blue.mean,
4571 &statistics->blue.standard_deviation,exceptionInfo);
4572 (void) GetImageChannelKurtosis(constImage(),BlueChannel,
4573 &statistics->blue.kurtosis,&statistics->blue.skewness,exceptionInfo);
4574 (void) GetImageChannelRange(constImage(),OpacityChannel,&minimum,&maximum,
4576 statistics->opacity.minimum=minimum;
4577 statistics->opacity.maximum=maximum;
4578 (void) GetImageChannelMean(constImage(),OpacityChannel,
4579 &statistics->opacity.mean,&statistics->opacity.standard_deviation,
4581 (void) GetImageChannelKurtosis(constImage(),OpacityChannel,
4582 &statistics->opacity.kurtosis,&statistics->opacity.skewness,
4584 ThrowImageException;
4587void Magick::Image::stegano(
const Image &watermark_)
4593 newImage=SteganoImage(constImage(),watermark_.constImage(),exceptionInfo);
4594 replaceImage(newImage);
4595 ThrowImageException;
4598void Magick::Image::stereo(
const Image &rightImage_)
4604 newImage=StereoImage(constImage(),rightImage_.constImage(),exceptionInfo);
4605 replaceImage(newImage);
4606 ThrowImageException;
4609void Magick::Image::strip(
void)
4612 StripImage(image());
4613 throwImageException();
4616Magick::Image Magick::Image::subImageSearch(
const Image &reference_,
4617 const MetricType metric_,
Geometry *offset_,
double *similarityMetric_,
4618 const double similarityThreshold)
4621 artifact[MaxTextExtent];
4630 (void) FormatLocaleString(artifact,MaxTextExtent,
"%g",similarityThreshold);
4631 (void) SetImageArtifact(image(),
"compare:similarity-threshold",artifact);
4634 newImage=SimilarityMetricImage(image(),reference_.constImage(),metric_,
4635 &offset,similarityMetric_,exceptionInfo);
4636 ThrowImageException;
4639 if (newImage == (MagickCore::Image *) NULL)
4640 return(Magick::Image());
4642 return(Magick::Image(newImage));
4645void Magick::Image::swirl(
const double degrees_)
4651 newImage=SwirlImage(constImage(),degrees_,exceptionInfo);
4652 replaceImage(newImage);
4653 ThrowImageException;
4656void Magick::Image::syncPixels(
void)
4659 (void) SyncAuthenticPixels(image(),exceptionInfo);
4660 ThrowImageException;
4663void Magick::Image::texture(
const Image &texture_)
4666 TextureImage(image(),texture_.constImage());
4667 throwImageException();
4670void Magick::Image::threshold(
const double threshold_)
4673 BilevelImage(image(),threshold_);
4674 throwImageException();
4677void Magick::Image::thumbnail(
const Geometry &geometry_)
4690 ParseMetaGeometry(
static_cast<std::string
>(geometry_).c_str(),&x,&y,&width,
4694 newImage=ThumbnailImage(constImage(),width,height,exceptionInfo);
4695 replaceImage(newImage);
4696 ThrowImageException;
4699void Magick::Image::tint(
const std::string opacity_)
4705 newImage=TintImage(constImage(),opacity_.c_str(),constOptions()->fillColor(),
4707 replaceImage(newImage);
4708 ThrowImageException;
4711void Magick::Image::transform(
const Geometry &imageGeometry_)
4714 TransformImage(&(image()),0,std::string(imageGeometry_).c_str());
4715 throwImageException();
4718void Magick::Image::transform(
const Geometry &imageGeometry_,
4722 TransformImage(&(image()),std::string(cropGeometry_).c_str(),
4723 std::string(imageGeometry_).c_str());
4724 throwImageException();
4727void Magick::Image::transformOrigin(
const double x_,
const double y_)
4730 options()->transformOrigin(x_,y_);
4733void Magick::Image::transformReset(
void)
4736 options()->transformReset();
4739void Magick::Image::transformScale(
const double sx_,
const double sy_)
4742 options()->transformScale(sx_,sy_);
4745void Magick::Image::transparent(
const Color &color_)
4753 if (!color_.isValid())
4754 throwExceptionExplicit(OptionError,
"Color argument is invalid");
4758 (void) QueryMagickColor(std::string(color_).c_str(),&target,
4759 &image()->exception);
4761 TransparentPaintImage(image(),&target,TransparentOpacity,MagickFalse);
4762 throwImageException();
4765void Magick::Image::transparentChroma(
const Color &colorLow_,
4766 const Color &colorHigh_)
4776 if (!colorLow_.isValid() || !colorHigh_.isValid())
4777 throwExceptionExplicit(OptionError,
"Color argument is invalid");
4780 colorHigh=colorHigh_;
4782 (void) QueryMagickColor(colorLow.c_str(),&targetLow,&image()->exception);
4783 (void) QueryMagickColor(colorHigh.c_str(),&targetHigh,&image()->exception);
4785 TransparentPaintImageChroma(image(),&targetLow,&targetHigh,
4786 TransparentOpacity,MagickFalse);
4787 throwImageException();
4790void Magick::Image::transpose(
void)
4796 newImage=TransposeImage(constImage(),exceptionInfo);
4797 replaceImage(newImage);
4798 ThrowImageException;
4801void Magick::Image::transverse(
void)
4807 newImage=TransverseImage(constImage(),exceptionInfo);
4808 replaceImage(newImage);
4809 ThrowImageException;
4812void Magick::Image::trim(
void)
4818 newImage=TrimImage(constImage(),exceptionInfo);
4819 replaceImage(newImage);
4820 ThrowImageException;
4823Magick::Image Magick::Image::uniqueColors(
void)
const
4829 image=UniqueImageColors(constImage(),exceptionInfo);
4830 ThrowImageException;
4831 if (image == (MagickCore::Image *) NULL)
4832 return(Magick::Image());
4834 return(Magick::Image(image));
4837void Magick::Image::unsharpmask(
const double radius_,
const double sigma_,
4838 const double amount_,
const double threshold_)
4844 newImage=UnsharpMaskImage(constImage(),radius_,sigma_,amount_,threshold_,
4846 replaceImage(newImage);
4847 ThrowImageException;
4850void Magick::Image::unsharpmaskChannel(
const ChannelType channel_,
4851 const double radius_,
const double sigma_,
const double amount_,
4852 const double threshold_)
4858 newImage=UnsharpMaskImageChannel(constImage(),channel_,radius_,sigma_,
4859 amount_,threshold_,exceptionInfo);
4860 replaceImage(newImage);
4861 ThrowImageException;
4864void Magick::Image::vignette(
const double radius_,
const double sigma_,
4865 const ssize_t x_,
const ssize_t y_)
4871 newImage=VignetteImage(constImage(),radius_,sigma_,x_,y_,exceptionInfo);
4872 replaceImage(newImage);
4873 ThrowImageException;
4876void Magick::Image::wave(
const double amplitude_,
const double wavelength_)
4882 newImage=WaveImage(constImage(),amplitude_,wavelength_,exceptionInfo);
4883 replaceImage(newImage);
4884 ThrowImageException;
4887void Magick::Image::waveletDenoise(
const double threshold_,
4888 const double softness_)
4894 newImage=WaveletDenoiseImage(constImage(),threshold_,softness_,
4896 replaceImage(newImage);
4897 ThrowImageException;
4900void Magick::Image::whiteThreshold(
const std::string &threshold_)
4903 WhiteThresholdImage(image(),threshold_.c_str());
4904 throwImageException();
4907void Magick::Image::whiteThresholdChannel(
const ChannelType channel_,
4908 const std::string &threshold_)
4912 WhiteThresholdImageChannel(image(),channel_,threshold_.c_str(),
4914 ThrowImageException;
4917void Magick::Image::write(
Blob *blob_)
4927 data=ImagesToBlob(constImageInfo(),image(),&length,exceptionInfo);
4929 blob_->updateNoCopy(data,length,Blob::MallocAllocator);
4931 data=RelinquishMagickMemory(data);
4932 ThrowImageException;
4933 throwImageException();
4936void Magick::Image::write(
Blob *blob_,
const std::string &magick_)
4947 data=ImagesToBlob(constImageInfo(),image(),&length,exceptionInfo);
4949 blob_->updateNoCopy(data,length,Blob::MallocAllocator);
4951 data=RelinquishMagickMemory(data);
4952 ThrowImageException;
4953 throwImageException();
4956void Magick::Image::write(
Blob *blob_,
const std::string &magick_,
4957 const size_t depth_)
4969 data=ImagesToBlob(constImageInfo(),image(),&length,exceptionInfo);
4971 blob_->updateNoCopy(data,length,Blob::MallocAllocator);
4973 data=RelinquishMagickMemory(data);
4974 ThrowImageException;
4975 throwImageException();
4978void Magick::Image::write(
const ssize_t x_,
const ssize_t y_,
4979 const size_t columns_,
const size_t rows_,
const std::string &map_,
4980 const StorageType type_,
void *pixels_)
4983 ExportImagePixels(constImage(),x_,y_,columns_,rows_,map_.c_str(),type_,
4984 pixels_,exceptionInfo);
4985 ThrowImageException;
4988void Magick::Image::write(
const std::string &imageSpec_)
4991 fileName(imageSpec_);
4992 WriteImage(constImageInfo(),image());
4993 throwImageException();
4996void Magick::Image::writePixels(
const Magick::QuantumType quantum_,
4997 unsigned char *destination_)
5002 quantum_info=AcquireQuantumInfo(imageInfo(),image());
5004 ExportQuantumPixels(constImage(),(MagickCore::CacheView *) NULL,quantum_info,
5005 quantum_,destination_,exceptionInfo);
5006 quantum_info=DestroyQuantumInfo(quantum_info);
5007 ThrowImageException;
5010void Magick::Image::zoom(
const Geometry &geometry_)
5023 ParseMetaGeometry(
static_cast<std::string
>(geometry_).c_str(),&x,&y,&width,
5027 newImage=ResizeImage(constImage(),width,height,image()->filter,image()->blur,
5029 replaceImage(newImage);
5030 ThrowImageException;
5033Magick::Image::Image(MagickCore::Image *image_)
5038MagickCore::Image *&Magick::Image::image(
void)
5040 return(_imgRef->image());
5043const MagickCore::Image *Magick::Image::constImage(
void)
const
5045 return(_imgRef->image());
5048MagickCore::ImageInfo *Magick::Image::imageInfo(
void)
5050 return(_imgRef->options()->imageInfo());
5053const MagickCore::ImageInfo *Magick::Image::constImageInfo(
void)
const
5055 return(_imgRef->options()->imageInfo());
5058Magick::Options *Magick::Image::options(
void)
5060 return(_imgRef->options());
5063const Magick::Options *Magick::Image::constOptions(
void)
const
5065 return(_imgRef->options());
5068MagickCore::QuantizeInfo *Magick::Image::quantizeInfo(
void)
5070 return(_imgRef->options()->quantizeInfo());
5073const MagickCore::QuantizeInfo *Magick::Image::constQuantizeInfo(
void)
const
5075 return(_imgRef->options()->quantizeInfo());
5078void Magick::Image::modifyImage(
void)
5081 Lock lock(&_imgRef->_mutexLock);
5082 if (_imgRef->_refCount == 1)
5087 replaceImage(CloneImage(constImage(),0,0,MagickTrue,exceptionInfo));
5088 ThrowImageException;
5092MagickCore::Image *Magick::Image::replaceImage(MagickCore::Image *replacement_)
5100 image=AcquireImage(constImageInfo());
5103 Lock lock(&_imgRef->_mutexLock);
5105 if (_imgRef->_refCount == 1)
5108 _imgRef->image(image);
5113 --_imgRef->_refCount;
5114 _imgRef=
new ImageRef(image,constOptions());
5118 return(_imgRef->_image);
5121void Magick::Image::throwImageException(
void)
const
5124 throwException(&
const_cast<MagickCore::Image*
>(constImage())->exception,
5128void Magick::Image::read(MagickCore::Image *image,
5129 MagickCore::ExceptionInfo *exceptionInfo)
5132 if (image != (MagickCore::Image *) NULL &&
5133 image->next != (MagickCore::Image *) NULL)
5140 image->next=(MagickCore::Image *) NULL;
5141 next->previous=(MagickCore::Image *) NULL;
5142 DestroyImageList(next);
5144 replaceImage(image);
5145 if (exceptionInfo->severity == MagickCore::UndefinedException &&
5146 image == (MagickCore::Image *) NULL)
5148 (void) MagickCore::DestroyExceptionInfo(exceptionInfo);
5150 throwExceptionExplicit(MagickCore::ImageWarning,
5151 "No image was loaded.");
5156 ThrowImageException;
5158 if (image != (MagickCore::Image *) NULL)
5159 throwException(&image->exception,quiet());
5162void Magick::Image::floodFill(
const ssize_t x_,
const ssize_t y_,
5163 const Magick::Image *fillPattern_,
const Magick::Color &fill_,
5164 const MagickCore::PixelPacket *target_,
const bool invert_)
5176 fillColor=options()->fillColor();
5177 fillPattern=(MagickCore::Image *)NULL;
5178 if (options()->fillPattern() != (MagickCore::Image *)NULL)
5181 fillPattern=CloneImage(options()->fillPattern(),0,0,MagickTrue,
5183 ThrowImageException;
5186 if (fillPattern_ == (Magick::Image *)NULL)
5188 options()->fillPattern((MagickCore::Image *)NULL);
5189 options()->fillColor(fill_);
5192 options()->fillPattern(fillPattern_->constImage());
5194 GetMagickPixelPacket(image(),&target);
5195 target.red=target_->red;
5196 target.green=target_->green;
5197 target.blue=target_->blue;
5199 (void) FloodfillPaintImage(image(),DefaultChannels,options()->drawInfo(),
5200 &target,
static_cast<ssize_t
>(x_),
static_cast<ssize_t
>(y_),
5201 (MagickBooleanType) invert_);
5203 options()->fillColor(fillColor);
5204 options()->fillPattern(fillPattern);
5205 throwImageException();