13 #define MAGICKCORE_IMPLEMENTATION 1 14 #define MAGICK_PLUSPLUS_IMPLEMENTATION 1 26 #define MagickPI 3.14159265358979323846264338327950288419716939937510 27 #define DegreesToRadians(x) (MagickPI*(x)/180.0) 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);
48 : _imageInfo(CloneImageInfo(options_._imageInfo)),
49 _quantizeInfo(CloneQuantizeInfo(options_._quantizeInfo)),
50 _drawInfo(CloneDrawInfo(_imageInfo,options_._drawInfo)),
51 _quiet(options_._quiet)
58 _imageInfo=DestroyImageInfo(_imageInfo);
61 _quantizeInfo=DestroyQuantizeInfo(_quantizeInfo);
64 _drawInfo=DestroyDrawInfo(_drawInfo);
69 _imageInfo->adjoin=
static_cast<MagickBooleanType
>(
70 flag_ ? MagickTrue : MagickFalse);
75 return(static_cast<bool>(_imageInfo->adjoin));
80 _imageInfo->matte_color=matteColor_;
90 _imageInfo->background_color=color_;
95 return(
Color(_imageInfo->background_color));
100 if (backgroundTexture_.length() == 0)
101 _imageInfo->texture=(
char *) RelinquishMagickMemory(_imageInfo->texture);
108 if (_imageInfo->texture)
109 return(std::string(_imageInfo->texture));
111 return(std::string());
116 _imageInfo->border_color=color_;
117 _drawInfo->border_color=color_;
122 return(
Color(_imageInfo->border_color));
127 _drawInfo->undercolor=boxColor_;
132 return(
Color(_drawInfo->undercolor));
137 _imageInfo->colorspace=colorspace_;
142 return(static_cast<Magick::ColorspaceType>(_imageInfo->colorspace));
147 _imageInfo->compression=compressType_;
152 return(static_cast<Magick::CompressionType>(_imageInfo->compression));
157 _imageInfo->fuzz=fuzz_;
162 return(_imageInfo->fuzz);
168 SetLogEventMask(
"All");
170 SetLogEventMask(
"None");
175 if (IsEventLogging())
183 _imageInfo->density=(
char *) RelinquishMagickMemory(_imageInfo->density);
190 if (_imageInfo->density)
191 return(
Point(_imageInfo->density));
198 _imageInfo->depth=depth_;
203 return(_imageInfo->depth);
208 _imageInfo->endian=endian_;
213 return(_imageInfo->endian);
218 SetImageInfoFile(_imageInfo,file_);
223 return(GetImageInfoFile(_imageInfo));
231 max_length=
sizeof(_imageInfo->filename)-1;
232 fileName_.copy(_imageInfo->filename,max_length);
233 if ((ssize_t) fileName_.length() > max_length)
234 _imageInfo->filename[max_length]=0;
236 _imageInfo->filename[fileName_.length()]=0;
241 return(std::string(_imageInfo->filename));
246 _drawInfo->fill=fillColor_;
247 if (fillColor_ ==
Color())
249 setOption(
"fill",fillColor_);
254 return(_drawInfo->fill);
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),
274 return(_drawInfo->fill_pattern);
279 _drawInfo->fill_rule=fillRule_;
284 return(_drawInfo->fill_rule);
289 if (font_.length() == 0)
291 _imageInfo->font=(
char *) RelinquishMagickMemory(_imageInfo->font);
292 _drawInfo->font=(
char *) RelinquishMagickMemory(_drawInfo->font);
303 if (_imageInfo->font)
304 return(std::string(_imageInfo->font));
306 return(std::string());
311 if (family_.length() == 0)
313 _drawInfo->family=(
char *) RelinquishMagickMemory(_drawInfo->font);
314 DestroyString(RemoveImageOption(imageInfo(),
"family"));
319 (void) SetImageOption(imageInfo(),
"family",family_.c_str());
325 if (_drawInfo->family)
326 return(std::string(_drawInfo->family));
328 return(std::string());
333 _imageInfo->pointsize=pointSize_;
334 _drawInfo->pointsize=pointSize_;
339 return(_imageInfo->pointsize);
344 _drawInfo->style=style_;
345 (void) SetImageOption(_imageInfo,
"style",CommandOptionToMnemonic(
346 MagickStyleOptions,(ssize_t) style_));
351 return(_drawInfo->style);
356 _drawInfo->weight=weight_;
357 setOption(
"weight",(
double) weight_);
362 return(_drawInfo->weight);
371 if (*_imageInfo->magick !=
'\0' )
372 magick_info = GetMagickInfo(_imageInfo->magick,exceptionInfo);
375 if ((magick_info != 0) && (*magick_info->description !=
'\0'))
376 return(std::string( magick_info->description));
378 return(std::string());
383 _imageInfo->interlace=interlace_;
388 return(static_cast<Magick::InterlaceType>(_imageInfo->interlace));
395 _imageInfo->magick[0] =
'\0';
399 FormatLocaleString(_imageInfo->filename,MagickPathExtent,
"%.1024s:",
402 SetImageInfo(_imageInfo,1,exceptionInfo);
404 if ( _imageInfo->magick[0] ==
'\0' )
411 if ( _imageInfo->magick[0] !=
'\0' )
412 return(std::string(_imageInfo->magick));
414 return(std::string());
419 _imageInfo->monochrome=(MagickBooleanType) monochromeFlag_;
424 return(static_cast<bool>(_imageInfo->monochrome));
430 _imageInfo->page=(
char *) RelinquishMagickMemory(_imageInfo->page);
437 if (_imageInfo->page)
445 _imageInfo->quality=quality_;
450 return(_imageInfo->quality);
455 _quantizeInfo->number_colors=colors_;
460 return(_quantizeInfo->number_colors);
465 _quantizeInfo->colorspace=colorSpace_;
470 return(static_cast<Magick::ColorspaceType>(_quantizeInfo->colorspace));
475 _imageInfo->dither=(MagickBooleanType) ditherFlag_;
476 _quantizeInfo->dither_method=ditherFlag_ ? RiemersmaDitherMethod :
482 return(static_cast<bool>(_imageInfo->dither));
487 _quantizeInfo->dither_method=ditherMethod_;
492 return(_quantizeInfo->dither_method);
497 _quantizeInfo->tree_depth=treeDepth_;
502 return(_quantizeInfo->tree_depth);
517 _imageInfo->units=resolutionUnits_;
522 return(_imageInfo->units);
527 if (samplingFactor_.length() == 0)
528 _imageInfo->sampling_factor=(
char *) RelinquishMagickMemory(
529 _imageInfo->sampling_factor);
536 if (_imageInfo->sampling_factor)
537 return(std::string(_imageInfo->sampling_factor));
539 return(std::string());
544 _imageInfo->size=(
char *) RelinquishMagickMemory(_imageInfo->size);
552 if (_imageInfo->size)
560 flag_ ? _drawInfo->stroke_antialias=MagickTrue :
561 _drawInfo->stroke_antialias=MagickFalse;
566 return(_drawInfo->stroke_antialias != 0 ?
true :
false);
571 _drawInfo->stroke=strokeColor_;
572 if (strokeColor_ ==
Color())
574 setOption(
"stroke",strokeColor_);
579 return(_drawInfo->stroke);
584 _drawInfo->dash_pattern=(
double *) RelinquishMagickMemory(
585 _drawInfo->dash_pattern);
592 for (x=0; strokeDashArray_[x]; x++) ;
594 _drawInfo->dash_pattern=
static_cast<double*
>(AcquireMagickMemory((x+1)*
596 if (!_drawInfo->dash_pattern)
598 "Unable to allocate dash-pattern memory");
600 memcpy(_drawInfo->dash_pattern,strokeDashArray_,(x+1)*
sizeof(
double));
601 _drawInfo->dash_pattern[x]=0.0;
607 return(_drawInfo->dash_pattern);
612 _drawInfo->dash_offset=strokeDashOffset_;
617 return(_drawInfo->dash_offset);
622 _drawInfo->linecap=lineCap_;
627 return(_drawInfo->linecap);
632 _drawInfo->linejoin=lineJoin_;
637 return(_drawInfo->linejoin);
642 _drawInfo->miterlimit=miterLimit_;
647 return(_drawInfo->miterlimit);
652 if (_drawInfo->stroke_pattern)
653 _drawInfo->stroke_pattern=DestroyImageList(_drawInfo->stroke_pattern);
658 _drawInfo->stroke_pattern=CloneImage(const_cast<MagickCore::Image*>(
659 strokePattern_),0,0,MagickTrue,exceptionInfo);
666 return(_drawInfo->stroke_pattern);
671 _drawInfo->stroke_width=strokeWidth_;
672 setOption(
"strokewidth",strokeWidth_);
677 return(_drawInfo->stroke_width);
682 _imageInfo->scene=subImage_;
687 return(_imageInfo->scene);
692 _imageInfo->number_scenes=subRange_;
697 return(_imageInfo->number_scenes);
702 _drawInfo->text_antialias=
static_cast<MagickBooleanType
>(
703 flag_ ? MagickTrue : MagickFalse);
708 return(static_cast<bool>(_drawInfo->text_antialias));
713 _drawInfo->direction=direction_;
714 (void) SetImageOption(_imageInfo,
"direction",CommandOptionToMnemonic(
715 MagickDirectionOptions,(ssize_t) direction_));
720 return(_drawInfo->direction);
725 CloneString(&_drawInfo->encoding,encoding_.c_str());
726 (void) SetImageOption(imageInfo(),
"encoding",encoding_.c_str());
731 if (_drawInfo->encoding && *_drawInfo->encoding)
732 return(std::string(_drawInfo->encoding));
734 return(std::string());
739 _drawInfo->gravity=gravity_;
740 (void) SetImageOption(_imageInfo,
"gravity",CommandOptionToMnemonic(
741 MagickGravityOptions,(ssize_t) gravity_));
746 return(_drawInfo->gravity);
751 _drawInfo->interline_spacing=spacing_;
752 setOption(
"interline-spacing",spacing_);
757 return(_drawInfo->interline_spacing);
762 _drawInfo->interword_spacing=spacing_;
763 setOption(
"interword-spacing",spacing_);
768 return(_drawInfo->interword_spacing);
773 _drawInfo->kerning=kerning_;
774 setOption(
"kerning",kerning_);
779 return(_drawInfo->kerning);
784 _drawInfo->undercolor=undercolor_;
785 setOption(
"undercolor",undercolor_);
790 return(_drawInfo->undercolor);
797 current=_drawInfo->affine;
806 _drawInfo->affine.sx=current.sx*affine.sx+current.ry*affine.rx;
807 _drawInfo->affine.rx=current.rx*affine.sx+current.sy*affine.rx;
808 _drawInfo->affine.ry=current.sx*affine.ry+current.ry*affine.sy;
809 _drawInfo->affine.sy=current.rx*affine.ry+current.sy*affine.sy;
810 _drawInfo->affine.tx=current.sx*affine.tx+current.ry*affine.ty+current.tx;
811 _drawInfo->affine.ty=current.rx*affine.tx+current.sy*affine.ty+current.ty;
816 _drawInfo->affine.sx=1.0;
817 _drawInfo->affine.rx=0.0;
818 _drawInfo->affine.ry=0.0;
819 _drawInfo->affine.sy=1.0;
820 _drawInfo->affine.tx=0.0;
821 _drawInfo->affine.ty=0.0;
828 current=_drawInfo->affine;
837 _drawInfo->affine.sx=current.sx*affine.sx+current.ry*affine.rx;
838 _drawInfo->affine.rx=current.rx*affine.sx+current.sy*affine.rx;
839 _drawInfo->affine.ry=current.sx*affine.ry+current.ry*affine.sy;
840 _drawInfo->affine.sy=current.rx*affine.ry+current.sy*affine.sy;
841 _drawInfo->affine.tx=current.sx*affine.tx+current.ry*affine.ty+current.tx;
842 _drawInfo->affine.ty=current.rx*affine.tx+current.sy*affine.ty+current.ty;
849 current=_drawInfo->affine;
858 _drawInfo->affine.sx=current.sx*affine.sx+current.ry*affine.rx;
859 _drawInfo->affine.rx=current.rx*affine.sx+current.sy*affine.rx;
860 _drawInfo->affine.ry=current.sx*affine.ry+current.ry*affine.sy;
861 _drawInfo->affine.sy=current.rx*affine.ry+current.sy*affine.sy;
862 _drawInfo->affine.tx=current.sx*affine.tx+current.ry*affine.ty+current.tx;
863 _drawInfo->affine.ty=current.rx*affine.tx+current.sy*affine.ty+current.ty;
870 current=_drawInfo->affine;
879 _drawInfo->affine.sx=current.sx*affine.sx+current.ry*affine.rx;
880 _drawInfo->affine.rx=current.rx*affine.sx+current.sy*affine.rx;
881 _drawInfo->affine.ry=current.sx*affine.ry+current.ry*affine.sy;
882 _drawInfo->affine.sy=current.rx*affine.ry+current.sy*affine.sy;
883 _drawInfo->affine.tx=current.sx*affine.tx+current.ry*affine.ty+current.tx;
884 _drawInfo->affine.ty=current.rx*affine.tx+current.sy*affine.ty+current.ty;
891 current=_drawInfo->affine;
900 _drawInfo->affine.sx=current.sx*affine.sx+current.ry*affine.rx;
901 _drawInfo->affine.rx=current.rx*affine.sx+current.sy*affine.rx;
902 _drawInfo->affine.ry=current.sx*affine.ry+current.ry*affine.sy;
903 _drawInfo->affine.sy=current.rx*affine.ry+current.sy*affine.sy;
904 _drawInfo->affine.tx=current.sx*affine.tx+current.ry*affine.ty+current.tx;
905 _drawInfo->affine.ty=current.rx*affine.tx+current.sy*affine.ty+current.ty;
910 _imageInfo->type=type_;
915 return(_imageInfo->type);
920 _imageInfo->verbose=(MagickBooleanType) verboseFlag_;
925 return(static_cast<bool>(_imageInfo->verbose));
930 if (display_.length() == 0)
931 _imageInfo->server_name=(
char *) RelinquishMagickMemory(
932 _imageInfo->server_name);
939 if (_imageInfo->server_name)
940 return(std::string( _imageInfo->server_name));
942 return(std::string());
957 return(_quantizeInfo);
961 const MagickCore::QuantizeInfo* quantizeInfo_,
962 const MagickCore::DrawInfo* drawInfo_)
964 _quantizeInfo((
MagickCore::QuantizeInfo* ) NULL),
968 _imageInfo=CloneImageInfo(imageInfo_);
969 _quantizeInfo=CloneQuantizeInfo(quantizeInfo_);
970 _drawInfo=CloneDrawInfo(imageInfo_,drawInfo_);
973 void Magick::Options::setOption(
const char *name,
const Color &value_)
979 (void) SetImageOption(imageInfo(),name,option.c_str());
982 void Magick::Options::setOption(
const char *name,
const double value_)
985 option[MagickPathExtent];
987 (void) FormatLocaleString(option,MagickPathExtent,
"%.20g",value_);
988 (void) SetImageOption(_imageInfo,name,option);
class MagickPPExport Color
size_t fontWeight(void) const
double strokeDashOffset(void) const
double textKerning(void) const
EndianType endian(void) const
Color borderColor(void) const
#define DegreesToRadians(x)
MagickCore::QuantizeInfo * quantizeInfo(void)
size_t quality(void) const
std::string font(void) const
Geometry page(void) const
bool quantizeDither(void) const
MagickCore::ImageInfo * imageInfo(void)
Point density(void) const
void transformReset(void)
void transformRotation(const double angle_)
double colorFuzz(void) const
DirectionType textDirection() const
size_t subRange(void) const
size_t strokeMiterLimit(void) const
std::string fileName(void) const
Color backgroundColor(void) const
std::string fontFamily(void) const
std::string format(void) const
std::string textEncoding(void) const
void transformScale(const double sx_, const double sy_)
const MagickCore::Image * fillPattern(void) const
Color strokeColor(void) const
class MagickPPExport Geometry
const double * strokeDashArray(void) const
size_t subImage(void) const
Color matteColor(void) const
Color fillColor(void) const
size_t quantizeTreeDepth(void) const
ColorspaceType colorspaceType(void) const
size_t quantizeColors(void) const
FillRule fillRule(void) const
LineCap strokeLineCap(void) const
MagickPPExport void throwExceptionExplicit(const MagickCore::ExceptionType severity_, const char *reason_, const char *description_=(char *) NULL)
std::string magick(void) const
double textInterlineSpacing(void) const
bool strokeAntiAlias(void) const
CompressionType compressType(void) const
ImageType type(void) const
#define ThrowPPException(quiet)
Color textUnderColor(void) const
std::string x11Display(void) const
double textInterwordSpacing(void) const
GravityType textGravity() const
std::string samplingFactor(void) const
DitherMethod quantizeDitherMethod(void) const
std::string backgroundTexture(void) const
const MagickCore::Image * strokePattern(void) const
LineJoin strokeLineJoin(void) const
void transformOrigin(const double tx_, const double ty_)
void transformSkewY(const double skewy_)
void transformSkewX(const double skewx_)
bool monochrome(void) const
MagickCore::DrawInfo * drawInfo(void)
Geometry size(void) const
MagickPPExport void CloneString(char **destination_, const std::string &source_)
class MagickPPExport Point
class MagickPPExport Image
InterlaceType interlaceType(void) const
double strokeWidth(void) const
StyleType fontStyle(void) const
void isValid(bool isValid_)
double fontPointsize(void) const
Color boxColor(void) const
ColorspaceType quantizeColorSpace(void) const
bool textAntiAlias(void) const
ResolutionType resolutionUnits(void) const