13#define MAGICKCORE_IMPLEMENTATION 1
14#define MAGICK_PLUSPLUS_IMPLEMENTATION 1
16#include "Magick++/Include.h"
22#include "Magick++/Options.h"
23#include "Magick++/Functions.h"
24#include "Magick++/Exception.h"
26#define MagickPI 3.14159265358979323846264338327950288419716939937510
27#define DegreesToRadians(x) (MagickPI*(x)/180.0)
29Magick::Options::Options(
void)
30 : _imageInfo(static_cast<ImageInfo*>(AcquireMagickMemory(
32 _quantizeInfo(static_cast<QuantizeInfo*>(AcquireMagickMemory(
33 sizeof(QuantizeInfo)))),
34 _drawInfo(static_cast<DrawInfo*>(AcquireMagickMemory(sizeof(DrawInfo)))),
38 GetImageInfo(_imageInfo);
41 GetQuantizeInfo(_quantizeInfo);
44 GetDrawInfo(_imageInfo,_drawInfo);
47Magick::Options::Options(
const Options& options_)
48 : _imageInfo(CloneImageInfo(options_._imageInfo)),
49 _quantizeInfo(CloneQuantizeInfo(options_._quantizeInfo)),
50 _drawInfo(CloneDrawInfo(_imageInfo,options_._drawInfo)),
51 _quiet(options_._quiet)
55Magick::Options::~Options()
58 _imageInfo=DestroyImageInfo(_imageInfo);
61 _quantizeInfo=DestroyQuantizeInfo(_quantizeInfo);
64 _drawInfo=DestroyDrawInfo(_drawInfo);
67void Magick::Options::adjoin(
const bool flag_)
69 _imageInfo->adjoin=
static_cast<MagickBooleanType
>(
70 flag_ ? MagickTrue : MagickFalse);
73bool Magick::Options::adjoin(
void)
const
75 return(
static_cast<bool>(_imageInfo->adjoin));
78void Magick::Options::matteColor(
const Color &matteColor_)
80 _imageInfo->matte_color=matteColor_;
88void Magick::Options::backgroundColor(
const Color &color_)
90 _imageInfo->background_color=color_;
95 return(Color(_imageInfo->background_color));
98void Magick::Options::backgroundTexture(
const std::string &backgroundTexture_)
100 if (backgroundTexture_.length() == 0)
101 _imageInfo->texture=(
char *) RelinquishMagickMemory(_imageInfo->texture);
103 Magick::CloneString(&_imageInfo->texture,backgroundTexture_);
106std::string Magick::Options::backgroundTexture(
void)
const
108 if (_imageInfo->texture)
109 return(std::string(_imageInfo->texture));
111 return(std::string());
114void Magick::Options::borderColor(
const Color &color_)
116 _imageInfo->border_color=color_;
117 _drawInfo->border_color=color_;
122 return(Color(_imageInfo->border_color));
125void Magick::Options::boxColor(
const Color &boxColor_)
127 _drawInfo->undercolor=boxColor_;
132 return(Color(_drawInfo->undercolor));
135void Magick::Options::colorspaceType(
const ColorspaceType colorspace_)
137 _imageInfo->colorspace=colorspace_;
140Magick::ColorspaceType Magick::Options::colorspaceType(
void)
const
142 return(
static_cast<Magick::ColorspaceType
>(_imageInfo->colorspace));
145void Magick::Options::compressType(
const CompressionType compressType_)
147 _imageInfo->compression=compressType_;
150Magick::CompressionType Magick::Options::compressType(
void)
const
152 return(
static_cast<Magick::CompressionType
>(_imageInfo->compression));
155void Magick::Options::colorFuzz(
const double fuzz_)
157 _imageInfo->fuzz=fuzz_;
160double Magick::Options::colorFuzz(
void)
const
162 return(_imageInfo->fuzz);
165void Magick::Options::debug(
const bool flag_)
168 SetLogEventMask(
"All");
170 SetLogEventMask(
"None");
173bool Magick::Options::debug(
void)
const
175 if (IsEventLogging())
180void Magick::Options::density(
const Point &density_)
182 if (!density_.isValid())
183 _imageInfo->density=(
char *) RelinquishMagickMemory(_imageInfo->density);
185 CloneString(&_imageInfo->density,density_);
190 if (_imageInfo->density)
191 return(Point(_imageInfo->density));
196void Magick::Options::depth(
const size_t depth_)
198 _imageInfo->depth=depth_;
201size_t Magick::Options::depth(
void)
const
203 return(_imageInfo->depth);
206void Magick::Options::endian(
const Magick::EndianType endian_)
208 _imageInfo->endian=endian_;
211Magick::EndianType Magick::Options::endian(
void)
const
213 return(_imageInfo->endian);
216void Magick::Options::file(FILE *file_)
218 SetImageInfoFile(_imageInfo,file_);
221FILE *Magick::Options::file(
void)
const
223 return(GetImageInfoFile(_imageInfo));
226void Magick::Options::fileName(
const std::string &fileName_)
231 max_length=
sizeof(_imageInfo->filename)-1;
232 fileName_.copy(_imageInfo->filename,(
size_t) max_length);
233 if ((ssize_t) fileName_.length() > max_length)
234 _imageInfo->filename[max_length]=0;
236 _imageInfo->filename[fileName_.length()]=0;
239std::string Magick::Options::fileName(
void)
const
241 return(std::string(_imageInfo->filename));
244void Magick::Options::fillColor(
const Color &fillColor_)
246 _drawInfo->fill=fillColor_;
247 if (fillColor_ == Color())
248 fillPattern((
const MagickCore::Image*) NULL);
249 setOption(
"fill",fillColor_);
254 return(_drawInfo->fill);
257void Magick::Options::fillPattern(
const MagickCore::Image *fillPattern_)
259 if (_drawInfo->fill_pattern)
260 _drawInfo->fill_pattern=DestroyImageList(_drawInfo->fill_pattern);
265 _drawInfo->fill_pattern=CloneImage(
const_cast<MagickCore::Image*
>(
266 fillPattern_),0,0,
static_cast<MagickBooleanType
>(MagickTrue),
268 ThrowPPException(_quiet);
272const MagickCore::Image *Magick::Options::fillPattern(
void)
const
274 return(_drawInfo->fill_pattern);
277void Magick::Options::fillRule(
const FillRule &fillRule_)
279 _drawInfo->fill_rule=fillRule_;
282Magick::FillRule Magick::Options::fillRule(
void)
const
284 return(_drawInfo->fill_rule);
287void Magick::Options::font(
const std::string &font_)
289 if (font_.length() == 0)
291 _imageInfo->font=(
char *) RelinquishMagickMemory(_imageInfo->font);
292 _drawInfo->font=(
char *) RelinquishMagickMemory(_drawInfo->font);
296 Magick::CloneString(&_imageInfo->font,font_);
297 Magick::CloneString(&_drawInfo->font,font_);
301std::string Magick::Options::font(
void)
const
303 if (_imageInfo->font)
304 return(std::string(_imageInfo->font));
306 return(std::string());
309void Magick::Options::fontFamily(
const std::string &family_)
311 if (family_.length() == 0)
313 _drawInfo->family=(
char *) RelinquishMagickMemory(_drawInfo->font);
314 DestroyString(RemoveImageOption(imageInfo(),
"family"));
318 Magick::CloneString(&_drawInfo->family,family_);
319 (void) SetImageOption(imageInfo(),
"family",family_.c_str());
323std::string Magick::Options::fontFamily(
void)
const
325 if (_drawInfo->family)
326 return(std::string(_drawInfo->family));
328 return(std::string());
331void Magick::Options::fontPointsize(
const double pointSize_)
333 _imageInfo->pointsize=pointSize_;
334 _drawInfo->pointsize=pointSize_;
337double Magick::Options::fontPointsize(
void)
const
339 return(_imageInfo->pointsize);
342void Magick::Options::fontStyle(
const StyleType style_)
344 _drawInfo->style=style_;
345 (void) SetImageOption(_imageInfo,
"style",CommandOptionToMnemonic(
346 MagickStyleOptions,(ssize_t) style_));
349Magick::StyleType Magick::Options::fontStyle(
void)
const
351 return(_drawInfo->style);
354void Magick::Options::fontWeight(
const size_t weight_)
356 _drawInfo->weight=weight_;
357 setOption(
"weight",(
double) weight_);
360size_t Magick::Options::fontWeight(
void)
const
362 return(_drawInfo->weight);
365std::string Magick::Options::format(
void)
const
371 if (*_imageInfo->magick !=
'\0' )
372 magick_info = GetMagickInfo(_imageInfo->magick,exceptionInfo);
373 ThrowPPException(_quiet);
375 if ((magick_info != 0) && (*magick_info->description !=
'\0'))
376 return(std::string( magick_info->description));
378 return(std::string());
381void Magick::Options::interlaceType(
const InterlaceType interlace_)
383 _imageInfo->interlace=interlace_;
386Magick::InterlaceType Magick::Options::interlaceType(
void)
const
388 return(
static_cast<Magick::InterlaceType
>(_imageInfo->interlace));
391void Magick::Options::magick(
const std::string &magick_)
395 _imageInfo->magick[0] =
'\0';
399 FormatLocaleString(_imageInfo->filename,MagickPathExtent,
"%.1024s:",
402 SetImageInfo(_imageInfo,1,exceptionInfo);
403 ThrowPPException(_quiet);
404 if ( _imageInfo->magick[0] ==
'\0' )
405 throwExceptionExplicit(MagickCore::OptionError,
"Unrecognized image format",
409std::string Magick::Options::magick(
void)
const
411 if ( _imageInfo->magick[0] !=
'\0' )
412 return(std::string(_imageInfo->magick));
414 return(std::string());
417void Magick::Options::monochrome(
const bool monochromeFlag_)
419 _imageInfo->monochrome=(MagickBooleanType) monochromeFlag_;
422bool Magick::Options::monochrome(
void)
const
424 return(
static_cast<bool>(_imageInfo->monochrome));
427void Magick::Options::page(
const Geometry &pageSize_)
429 if (!pageSize_.isValid())
430 _imageInfo->page=(
char *) RelinquishMagickMemory(_imageInfo->page);
432 Magick::CloneString(&_imageInfo->page,pageSize_);
437 if (_imageInfo->page)
438 return(Geometry(_imageInfo->page));
443void Magick::Options::quality(
const size_t quality_)
445 _imageInfo->quality=quality_;
448size_t Magick::Options::quality(
void)
const
450 return(_imageInfo->quality);
453void Magick::Options::quantizeColors(
const size_t colors_)
455 _quantizeInfo->number_colors=colors_;
458size_t Magick::Options::quantizeColors(
void)
const
460 return(_quantizeInfo->number_colors);
463void Magick::Options::quantizeColorSpace(
const ColorspaceType colorSpace_)
465 _quantizeInfo->colorspace=colorSpace_;
468Magick::ColorspaceType Magick::Options::quantizeColorSpace(
void)
const
470 return(
static_cast<Magick::ColorspaceType
>(_quantizeInfo->colorspace));
473void Magick::Options::quantizeDither(
const bool ditherFlag_)
475 quantizeDither(ditherFlag_ ? RiemersmaDitherMethod : NoDitherMethod);
478bool Magick::Options::quantizeDither(
void)
const
480 return(
static_cast<bool>(_imageInfo->dither));
483void Magick::Options::quantizeDither(
const DitherMethod ditherMethod_)
485 _imageInfo->dither=(MagickBooleanType) (ditherMethod_ != NoDitherMethod);
486 _quantizeInfo->dither_method=ditherMethod_;
489void Magick::Options::quantizeDitherMethod(
const DitherMethod ditherMethod_)
491 _quantizeInfo->dither_method=ditherMethod_;
494MagickCore::DitherMethod Magick::Options::quantizeDitherMethod(
void)
const
496 return(_quantizeInfo->dither_method);
499void Magick::Options::quantizeTreeDepth(
const size_t treeDepth_)
501 _quantizeInfo->tree_depth=treeDepth_;
504size_t Magick::Options::quantizeTreeDepth(
void)
const
506 return(_quantizeInfo->tree_depth);
509void Magick::Options::quiet(
const bool quiet_)
514bool Magick::Options::quiet(
void)
const
519void Magick::Options::resolutionUnits(
const ResolutionType resolutionUnits_)
521 _imageInfo->units=resolutionUnits_;
524Magick::ResolutionType Magick::Options::resolutionUnits(
void)
const
526 return(_imageInfo->units);
529void Magick::Options::samplingFactor(
const std::string &samplingFactor_)
531 if (samplingFactor_.length() == 0)
532 _imageInfo->sampling_factor=(
char *) RelinquishMagickMemory(
533 _imageInfo->sampling_factor);
535 Magick::CloneString(&_imageInfo->sampling_factor,samplingFactor_);
538std::string Magick::Options::samplingFactor(
void)
const
540 if (_imageInfo->sampling_factor)
541 return(std::string(_imageInfo->sampling_factor));
543 return(std::string());
546void Magick::Options::size(
const Geometry &geometry_)
548 _imageInfo->size=(
char *) RelinquishMagickMemory(_imageInfo->size);
550 if (geometry_.isValid())
551 Magick::CloneString(&_imageInfo->size,geometry_);
556 if (_imageInfo->size)
557 return(Geometry(_imageInfo->size));
562void Magick::Options::strokeAntiAlias(
const bool flag_)
564 flag_ ? _drawInfo->stroke_antialias=MagickTrue :
565 _drawInfo->stroke_antialias=MagickFalse;
568bool Magick::Options::strokeAntiAlias(
void)
const
570 return(_drawInfo->stroke_antialias != 0 ?
true :
false);
573void Magick::Options::strokeColor(
const Color &strokeColor_)
575 _drawInfo->stroke=strokeColor_;
576 if (strokeColor_ == Color())
577 strokePattern((
const MagickCore::Image*) NULL);
578 setOption(
"stroke",strokeColor_);
583 return(_drawInfo->stroke);
586void Magick::Options::strokeDashArray(
const double *strokeDashArray_)
588 _drawInfo->dash_pattern=(
double *) RelinquishMagickMemory(
589 _drawInfo->dash_pattern);
596 for (x=0; strokeDashArray_[x]; x++) ;
598 _drawInfo->dash_pattern=
static_cast<double*
>(AcquireMagickMemory((x+1)*
600 if (!_drawInfo->dash_pattern)
601 throwExceptionExplicit(MagickCore::ResourceLimitError,
602 "Unable to allocate dash-pattern memory");
606 memcpy(_drawInfo->dash_pattern,strokeDashArray_,(x+1)*
sizeof(
double));
607 _drawInfo->dash_pattern[x]=0.0;
612const double *Magick::Options::strokeDashArray(
void)
const
614 return(_drawInfo->dash_pattern);
617void Magick::Options::strokeDashOffset(
const double strokeDashOffset_)
619 _drawInfo->dash_offset=strokeDashOffset_;
622double Magick::Options::strokeDashOffset(
void)
const
624 return(_drawInfo->dash_offset);
627void Magick::Options::strokeLineCap(
const LineCap lineCap_)
629 _drawInfo->linecap=lineCap_;
632Magick::LineCap Magick::Options::strokeLineCap(
void)
const
634 return(_drawInfo->linecap);
637void Magick::Options::strokeLineJoin(
const LineJoin lineJoin_)
639 _drawInfo->linejoin=lineJoin_;
642Magick::LineJoin Magick::Options::strokeLineJoin(
void)
const
644 return(_drawInfo->linejoin);
647void Magick::Options::strokeMiterLimit(
const size_t miterLimit_)
649 _drawInfo->miterlimit=miterLimit_;
652size_t Magick::Options::strokeMiterLimit(
void)
const
654 return(_drawInfo->miterlimit);
657void Magick::Options::strokePattern(
const MagickCore::Image *strokePattern_)
659 if (_drawInfo->stroke_pattern)
660 _drawInfo->stroke_pattern=DestroyImageList(_drawInfo->stroke_pattern);
665 _drawInfo->stroke_pattern=CloneImage(
const_cast<MagickCore::Image*
>(
666 strokePattern_),0,0,MagickTrue,exceptionInfo);
667 ThrowPPException(_quiet);
671const MagickCore::Image *Magick::Options::strokePattern(
void)
const
673 return(_drawInfo->stroke_pattern);
676void Magick::Options::strokeWidth(
const double strokeWidth_)
678 _drawInfo->stroke_width=strokeWidth_;
679 setOption(
"strokewidth",strokeWidth_);
682double Magick::Options::strokeWidth(
void)
const
684 return(_drawInfo->stroke_width);
687void Magick::Options::subImage(
const size_t subImage_)
689 _imageInfo->scene=subImage_;
692size_t Magick::Options::subImage(
void)
const
694 return(_imageInfo->scene);
697void Magick::Options::subRange(
const size_t subRange_)
699 _imageInfo->number_scenes=subRange_;
702size_t Magick::Options::subRange(
void)
const
704 return(_imageInfo->number_scenes);
707void Magick::Options::textAntiAlias(
const bool flag_)
709 _drawInfo->text_antialias=
static_cast<MagickBooleanType
>(
710 flag_ ? MagickTrue : MagickFalse);
713bool Magick::Options::textAntiAlias(
void)
const
715 return(
static_cast<bool>(_drawInfo->text_antialias));
718void Magick::Options::textDirection(
const DirectionType direction_)
720 _drawInfo->direction=direction_;
721 (void) SetImageOption(_imageInfo,
"direction",CommandOptionToMnemonic(
722 MagickDirectionOptions,(ssize_t) direction_));
725Magick::DirectionType Magick::Options::textDirection()
const
727 return(_drawInfo->direction);
730void Magick::Options::textEncoding(
const std::string &encoding_)
732 CloneString(&_drawInfo->encoding,encoding_.c_str());
733 (void) SetImageOption(imageInfo(),
"encoding",encoding_.c_str());
736std::string Magick::Options::textEncoding(
void)
const
738 if (_drawInfo->encoding && *_drawInfo->encoding)
739 return(std::string(_drawInfo->encoding));
741 return(std::string());
744void Magick::Options::textGravity(
const GravityType gravity_)
746 _drawInfo->gravity=gravity_;
747 (void) SetImageOption(_imageInfo,
"gravity",CommandOptionToMnemonic(
748 MagickGravityOptions,(ssize_t) gravity_));
751Magick::GravityType Magick::Options::textGravity()
const
753 return(_drawInfo->gravity);
756void Magick::Options::textInterlineSpacing(
const double spacing_)
758 _drawInfo->interline_spacing=spacing_;
759 setOption(
"interline-spacing",spacing_);
762double Magick::Options::textInterlineSpacing(
void)
const
764 return(_drawInfo->interline_spacing);
767void Magick::Options::textInterwordSpacing(
const double spacing_)
769 _drawInfo->interword_spacing=spacing_;
770 setOption(
"interword-spacing",spacing_);
773double Magick::Options::textInterwordSpacing(
void)
const
775 return(_drawInfo->interword_spacing);
778void Magick::Options::textKerning(
const double kerning_)
780 _drawInfo->kerning=kerning_;
781 setOption(
"kerning",kerning_);
784double Magick::Options::textKerning(
void)
const
786 return(_drawInfo->kerning);
789void Magick::Options::textUnderColor(
const Color &undercolor_)
791 _drawInfo->undercolor=undercolor_;
792 setOption(
"undercolor",undercolor_);
797 return(_drawInfo->undercolor);
800void Magick::Options::transformOrigin(
const double tx_,
const double ty_)
804 current=_drawInfo->affine;
813 _drawInfo->affine.sx=current.sx*affine.sx+current.ry*affine.rx;
814 _drawInfo->affine.rx=current.rx*affine.sx+current.sy*affine.rx;
815 _drawInfo->affine.ry=current.sx*affine.ry+current.ry*affine.sy;
816 _drawInfo->affine.sy=current.rx*affine.ry+current.sy*affine.sy;
817 _drawInfo->affine.tx=current.sx*affine.tx+current.ry*affine.ty+current.tx;
818 _drawInfo->affine.ty=current.rx*affine.tx+current.sy*affine.ty+current.ty;
821void Magick::Options::transformReset(
void)
823 _drawInfo->affine.sx=1.0;
824 _drawInfo->affine.rx=0.0;
825 _drawInfo->affine.ry=0.0;
826 _drawInfo->affine.sy=1.0;
827 _drawInfo->affine.tx=0.0;
828 _drawInfo->affine.ty=0.0;
831void Magick::Options::transformRotation(
const double angle_)
835 current=_drawInfo->affine;
837 affine.sx=cos(DegreesToRadians(fmod(angle_,360.0)));
838 affine.rx=(-sin(DegreesToRadians(fmod(angle_,360.0))));
839 affine.ry=sin(DegreesToRadians(fmod(angle_,360.0)));
840 affine.sy=cos(DegreesToRadians(fmod(angle_,360.0)));
844 _drawInfo->affine.sx=current.sx*affine.sx+current.ry*affine.rx;
845 _drawInfo->affine.rx=current.rx*affine.sx+current.sy*affine.rx;
846 _drawInfo->affine.ry=current.sx*affine.ry+current.ry*affine.sy;
847 _drawInfo->affine.sy=current.rx*affine.ry+current.sy*affine.sy;
848 _drawInfo->affine.tx=current.sx*affine.tx+current.ry*affine.ty+current.tx;
849 _drawInfo->affine.ty=current.rx*affine.tx+current.sy*affine.ty+current.ty;
852void Magick::Options::transformScale(
const double sx_,
const double sy_)
856 current=_drawInfo->affine;
865 _drawInfo->affine.sx=current.sx*affine.sx+current.ry*affine.rx;
866 _drawInfo->affine.rx=current.rx*affine.sx+current.sy*affine.rx;
867 _drawInfo->affine.ry=current.sx*affine.ry+current.ry*affine.sy;
868 _drawInfo->affine.sy=current.rx*affine.ry+current.sy*affine.sy;
869 _drawInfo->affine.tx=current.sx*affine.tx+current.ry*affine.ty+current.tx;
870 _drawInfo->affine.ty=current.rx*affine.tx+current.sy*affine.ty+current.ty;
873void Magick::Options::transformSkewX(
const double skewx_)
877 current=_drawInfo->affine;
881 affine.ry=tan(DegreesToRadians(fmod(skewx_,360.0)));
886 _drawInfo->affine.sx=current.sx*affine.sx+current.ry*affine.rx;
887 _drawInfo->affine.rx=current.rx*affine.sx+current.sy*affine.rx;
888 _drawInfo->affine.ry=current.sx*affine.ry+current.ry*affine.sy;
889 _drawInfo->affine.sy=current.rx*affine.ry+current.sy*affine.sy;
890 _drawInfo->affine.tx=current.sx*affine.tx+current.ry*affine.ty+current.tx;
891 _drawInfo->affine.ty=current.rx*affine.tx+current.sy*affine.ty+current.ty;
894void Magick::Options::transformSkewY(
const double skewy_)
898 current=_drawInfo->affine;
901 affine.rx=tan(DegreesToRadians(fmod(skewy_,360.0)));
907 _drawInfo->affine.sx=current.sx*affine.sx+current.ry*affine.rx;
908 _drawInfo->affine.rx=current.rx*affine.sx+current.sy*affine.rx;
909 _drawInfo->affine.ry=current.sx*affine.ry+current.ry*affine.sy;
910 _drawInfo->affine.sy=current.rx*affine.ry+current.sy*affine.sy;
911 _drawInfo->affine.tx=current.sx*affine.tx+current.ry*affine.ty+current.tx;
912 _drawInfo->affine.ty=current.rx*affine.tx+current.sy*affine.ty+current.ty;
915void Magick::Options::type(
const ImageType type_)
917 _imageInfo->type=type_;
920Magick::ImageType Magick::Options::type(
void)
const
922 return(_imageInfo->type);
925void Magick::Options::verbose(
const bool verboseFlag_)
927 _imageInfo->verbose=(MagickBooleanType) verboseFlag_;
930bool Magick::Options::verbose(
void)
const
932 return(
static_cast<bool>(_imageInfo->verbose));
935void Magick::Options::x11Display(
const std::string &display_)
937 if (display_.length() == 0)
938 _imageInfo->server_name=(
char *) RelinquishMagickMemory(
939 _imageInfo->server_name);
941 Magick::CloneString(&_imageInfo->server_name,display_);
944std::string Magick::Options::x11Display(
void)
const
946 if (_imageInfo->server_name)
947 return(std::string( _imageInfo->server_name));
949 return(std::string());
952MagickCore::DrawInfo *Magick::Options::drawInfo(
void)
957MagickCore::ImageInfo *Magick::Options::imageInfo(
void)
962MagickCore::QuantizeInfo *Magick::Options::quantizeInfo(
void)
964 return(_quantizeInfo);
967Magick::Options::Options(
const MagickCore::ImageInfo* imageInfo_,
968 const MagickCore::QuantizeInfo* quantizeInfo_,
969 const MagickCore::DrawInfo* drawInfo_)
970: _imageInfo((MagickCore::ImageInfo* ) NULL),
971 _quantizeInfo((MagickCore::QuantizeInfo* ) NULL),
972 _drawInfo((MagickCore::DrawInfo* ) NULL),
975 _imageInfo=CloneImageInfo(imageInfo_);
976 _quantizeInfo=CloneQuantizeInfo(quantizeInfo_);
977 _drawInfo=CloneDrawInfo(imageInfo_,drawInfo_);
980void Magick::Options::setOption(
const char *name,
const Color &value_)
986 (void) SetImageOption(imageInfo(),name,option.c_str());
989void Magick::Options::setOption(
const char *name,
const double value_)
992 option[MagickPathExtent];
994 (void) FormatLocaleString(option,MagickPathExtent,
"%.20g",value_);
995 (void) SetImageOption(_imageInfo,name,option);