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