1 // This may look like C code, but it is really -*- C++ -*-
3 // Copyright Bob Friesenhahn, 1999, 2000, 2001, 2002, 2003
5 // Implementation of Options
7 // A wrapper around DrawInfo, ImageInfo, and QuantizeInfo
10 #define MAGICKCORE_IMPLEMENTATION 1
11 #define MAGICK_PLUSPLUS_IMPLEMENTATION 1
17 #include "Magick++/Include.h"
18 #include "Magick++/Options.h"
19 #include "Magick++/Functions.h"
20 #include "Magick++/Exception.h"
22 #define DegreesToRadians(x) (MagickPI*(x)/180.0)
25 Magick::Options::Options( void )
26 : _imageInfo(static_cast<ImageInfo*>(AcquireMagickMemory(sizeof(ImageInfo)))),
27 _quantizeInfo(static_cast<QuantizeInfo*>(AcquireMagickMemory(sizeof(QuantizeInfo)))),
28 _drawInfo(static_cast<DrawInfo*>(AcquireMagickMemory( sizeof(DrawInfo))))
30 // Initialize image info with defaults
31 GetImageInfo( _imageInfo );
33 // Initialize quantization info
34 GetQuantizeInfo( _quantizeInfo );
36 // Initialize drawing info
37 GetDrawInfo( _imageInfo, _drawInfo );
41 Magick::Options::Options( const Magick::Options& options_ )
42 : _imageInfo(CloneImageInfo( options_._imageInfo )),
43 _quantizeInfo(CloneQuantizeInfo(options_._quantizeInfo)),
44 _drawInfo(CloneDrawInfo(_imageInfo, options_._drawInfo))
48 // Construct using raw structures
49 Magick::Options::Options( const MagickCore::ImageInfo* imageInfo_,
50 const MagickCore::QuantizeInfo* quantizeInfo_,
51 const MagickCore::DrawInfo* drawInfo_ )
56 _imageInfo = CloneImageInfo(imageInfo_);
57 _quantizeInfo = CloneQuantizeInfo(quantizeInfo_);
58 _drawInfo = CloneDrawInfo(imageInfo_,drawInfo_);
62 Magick::Options::~Options()
65 _imageInfo =DestroyImageInfo( _imageInfo );
68 // Destroy quantization info
69 _quantizeInfo =DestroyQuantizeInfo( _quantizeInfo );
72 // Destroy drawing info
73 _drawInfo =DestroyDrawInfo( _drawInfo );
78 * Methods for setting image attributes
82 // Anti-alias Postscript and TrueType fonts (default true)
83 void Magick::Options::antiAlias( bool flag_ )
85 _drawInfo->text_antialias = static_cast<MagickBooleanType>
86 (flag_ ? MagickTrue : MagickFalse);
88 bool Magick::Options::antiAlias( void ) const
90 return static_cast<bool>(_drawInfo->text_antialias);
93 void Magick::Options::adjoin ( bool flag_ )
95 _imageInfo->adjoin = static_cast<MagickBooleanType>
96 (flag_ ? MagickTrue : MagickFalse);
98 bool Magick::Options::adjoin ( void ) const
100 return static_cast<bool>(_imageInfo->adjoin);
103 void Magick::Options::backgroundColor ( const Magick::Color &color_ )
105 _imageInfo->background_color = color_;
107 Magick::Color Magick::Options::backgroundColor ( void ) const
109 return Magick::Color( _imageInfo->background_color );
112 void Magick::Options::backgroundTexture ( const std::string &backgroundTexture_ )
114 if ( backgroundTexture_.length() == 0 )
115 _imageInfo->texture=(char *) RelinquishMagickMemory(_imageInfo->texture);
117 Magick::CloneString( &_imageInfo->texture, backgroundTexture_ );
119 std::string Magick::Options::backgroundTexture ( void ) const
121 if ( _imageInfo->texture )
122 return std::string( _imageInfo->texture );
124 return std::string();
127 void Magick::Options::borderColor ( const Color &color_ )
129 _imageInfo->border_color = color_;
130 _drawInfo->border_color = color_;
132 Magick::Color Magick::Options::borderColor ( void ) const
134 return Magick::Color( _imageInfo->border_color );
137 // Text bounding-box base color
138 void Magick::Options::boxColor ( const Magick::Color &boxColor_ )
140 _drawInfo->undercolor = boxColor_;
142 Magick::Color Magick::Options::boxColor ( void ) const
144 return Magick::Color( _drawInfo->undercolor );
147 void Magick::Options::colorspaceType ( Magick::ColorspaceType colorspace_ )
149 _imageInfo->colorspace = colorspace_;
151 Magick::ColorspaceType Magick::Options::colorspaceType ( void ) const
153 return static_cast<Magick::ColorspaceType>(_imageInfo->colorspace);
156 void Magick::Options::compressType ( CompressionType compressType_ )
158 _imageInfo->compression = compressType_;
160 Magick::CompressionType Magick::Options::compressType ( void ) const
162 return static_cast<Magick::CompressionType>(_imageInfo->compression);
165 void Magick::Options::colorFuzz ( double fuzz_ )
167 _imageInfo->fuzz = fuzz_;
169 double Magick::Options::colorFuzz ( void ) const
171 return _imageInfo->fuzz;
174 // Enable printing of debug messages from ImageMagick
175 void Magick::Options::debug ( bool flag_ )
179 SetLogEventMask("All");
183 SetLogEventMask("None");
186 bool Magick::Options::debug ( void ) const
188 if( IsEventLogging() )
195 void Magick::Options::density ( const Magick::Geometry &density_ )
197 if ( !density_.isValid() )
198 _imageInfo->density=(char *) RelinquishMagickMemory(_imageInfo->density);
200 Magick::CloneString( &_imageInfo->density, density_ );
202 Magick::Geometry Magick::Options::density ( void ) const
204 if ( _imageInfo->density )
205 return Geometry( _imageInfo->density );
210 void Magick::Options::depth ( size_t depth_ )
212 _imageInfo->depth = depth_;
214 size_t Magick::Options::depth ( void ) const
216 return _imageInfo->depth;
219 // Endianness (little like Intel or big like SPARC) for image
220 // formats which support endian-specific options.
221 void Magick::Options::endian ( Magick::EndianType endian_ )
223 _imageInfo->endian = endian_;
225 Magick::EndianType Magick::Options::endian ( void ) const
227 return _imageInfo->endian;
230 void Magick::Options::file ( FILE *file_ )
232 SetImageInfoFile( _imageInfo, file_ );
234 FILE *Magick::Options::file ( void ) const
236 return GetImageInfoFile( _imageInfo );
239 void Magick::Options::fileName ( const std::string &fileName_ )
241 fileName_.copy( _imageInfo->filename, MaxTextExtent-1 );
242 _imageInfo->filename[ fileName_.length() ] = 0;
244 std::string Magick::Options::fileName ( void ) const
246 return std::string( _imageInfo->filename );
249 // Color to use when drawing inside an object
250 void Magick::Options::fillColor ( const Magick::Color &fillColor_ )
252 _drawInfo->fill = fillColor_;
253 if (fillColor_ == Magick::Color())
254 fillPattern((const MagickCore::Image*) NULL);
256 Magick::Color Magick::Options::fillColor ( void ) const
258 return _drawInfo->fill;
260 // Pattern image to use when filling objects
261 void Magick::Options::fillPattern ( const MagickCore::Image *fillPattern_ )
263 if ( _drawInfo->fill_pattern )
265 DestroyImageList( _drawInfo->fill_pattern );
266 _drawInfo->fill_pattern = 0;
270 ExceptionInfo exceptionInfo;
271 GetExceptionInfo( &exceptionInfo );
272 _drawInfo->fill_pattern =
273 CloneImage( const_cast<MagickCore::Image*>(fillPattern_),
276 static_cast<MagickBooleanType>(MagickTrue),
278 throwException( exceptionInfo );
279 (void) DestroyExceptionInfo( &exceptionInfo );
282 const MagickCore::Image* Magick::Options::fillPattern ( void ) const
284 return _drawInfo->fill_pattern;
287 // Rule to use when filling drawn objects
288 void Magick::Options::fillRule ( const Magick::FillRule &fillRule_ )
290 _drawInfo->fill_rule = fillRule_;
292 Magick::FillRule Magick::Options::fillRule ( void ) const
294 return _drawInfo->fill_rule;
297 void Magick::Options::font ( const std::string &font_ )
299 if ( font_.length() == 0 )
301 _imageInfo->font=(char *) RelinquishMagickMemory(_imageInfo->font);
302 _drawInfo->font=(char *) RelinquishMagickMemory(_drawInfo->font);
306 Magick::CloneString( &_imageInfo->font, font_ );
307 Magick::CloneString( &_drawInfo->font, font_ );
310 std::string Magick::Options::font ( void ) const
312 if ( _imageInfo->font )
313 return std::string( _imageInfo->font );
315 return std::string();
318 void Magick::Options::fontPointsize ( double pointSize_ )
320 _imageInfo->pointsize = pointSize_;
321 _drawInfo->pointsize = pointSize_;
323 double Magick::Options::fontPointsize ( void ) const
325 return _imageInfo->pointsize;
328 std::string Magick::Options::format ( void ) const
330 ExceptionInfo exception;
332 const MagickInfo * magick_info = 0;
333 GetExceptionInfo(&exception);
334 if ( *_imageInfo->magick != '\0' )
335 magick_info = GetMagickInfo( _imageInfo->magick , &exception);
336 throwException( exception );
337 (void) DestroyExceptionInfo( &exception );
339 if (( magick_info != 0 ) &&
340 ( *magick_info->description != '\0' ))
341 return std::string( magick_info->description );
343 return std::string();
346 void Magick::Options::interlaceType ( Magick::InterlaceType interlace_ )
348 _imageInfo->interlace = interlace_;
350 Magick::InterlaceType Magick::Options::interlaceType ( void ) const
352 return static_cast<Magick::InterlaceType>(_imageInfo->interlace);
355 void Magick::Options::magick ( const std::string &magick_ )
357 ExceptionInfo exception;
359 FormatLocaleString( _imageInfo->filename, MaxTextExtent, "%.1024s:", magick_.c_str() );
360 GetExceptionInfo(&exception);
361 SetImageInfo( _imageInfo, 1, &exception);
362 if ( *_imageInfo->magick == '\0' )
363 throwExceptionExplicit( OptionWarning, "Unrecognized image format",
365 (void) DestroyExceptionInfo( &exception );
367 std::string Magick::Options::magick ( void ) const
369 if ( _imageInfo->magick && *_imageInfo->magick )
370 return std::string( _imageInfo->magick );
372 return std::string();
375 void Magick::Options::matteColor ( const Magick::Color &matteColor_ )
377 _imageInfo->matte_color = matteColor_;
379 Magick::Color Magick::Options::matteColor ( void ) const
381 return Magick::Color( _imageInfo->matte_color );
384 void Magick::Options::monochrome ( bool monochromeFlag_ )
386 _imageInfo->monochrome = (MagickBooleanType) monochromeFlag_;
388 bool Magick::Options::monochrome ( void ) const
390 return static_cast<bool>(_imageInfo->monochrome);
393 void Magick::Options::page ( const Magick::Geometry &pageSize_ )
395 if ( !pageSize_.isValid() )
396 _imageInfo->page=(char *) RelinquishMagickMemory(_imageInfo->page);
398 Magick::CloneString( &_imageInfo->page, pageSize_ );
400 Magick::Geometry Magick::Options::page ( void ) const
402 if ( _imageInfo->page )
403 return Geometry( _imageInfo->page );
408 void Magick::Options::quality ( size_t quality_ )
410 _imageInfo->quality = quality_;
412 size_t Magick::Options::quality ( void ) const
414 return _imageInfo->quality;
417 void Magick::Options::quantizeColors ( size_t colors_ )
419 _quantizeInfo->number_colors = colors_;
421 size_t Magick::Options::quantizeColors ( void ) const
423 return _quantizeInfo->number_colors;
426 void Magick::Options::quantizeColorSpace ( Magick::ColorspaceType colorSpace_ )
428 _quantizeInfo->colorspace = colorSpace_;
430 Magick::ColorspaceType Magick::Options::quantizeColorSpace ( void ) const
432 return static_cast<Magick::ColorspaceType>(_quantizeInfo->colorspace);
435 void Magick::Options::quantizeDither ( bool ditherFlag_ )
437 _imageInfo->dither = (MagickBooleanType) ditherFlag_;
438 _quantizeInfo->dither = (MagickBooleanType) ditherFlag_;
440 bool Magick::Options::quantizeDither ( void ) const
442 return static_cast<bool>(_imageInfo->dither);
445 void Magick::Options::quantizeTreeDepth ( size_t treeDepth_ )
447 _quantizeInfo->tree_depth = treeDepth_;
449 size_t Magick::Options::quantizeTreeDepth ( void ) const
451 return _quantizeInfo->tree_depth;
454 void Magick::Options::resolutionUnits ( Magick::ResolutionType resolutionUnits_ )
456 _imageInfo->units = resolutionUnits_;
458 Magick::ResolutionType Magick::Options::resolutionUnits ( void ) const
460 return static_cast<Magick::ResolutionType>(_imageInfo->units);
463 void Magick::Options::samplingFactor ( const std::string &samplingFactor_ )
465 if ( samplingFactor_.length() == 0 )
466 _imageInfo->sampling_factor=(char *) RelinquishMagickMemory(_imageInfo->sampling_factor);
468 Magick::CloneString( &_imageInfo->sampling_factor, samplingFactor_ );
470 std::string Magick::Options::samplingFactor ( void ) const
472 if ( _imageInfo->sampling_factor )
473 return std::string( _imageInfo->sampling_factor );
475 return std::string();
478 void Magick::Options::size ( const Geometry &geometry_ )
480 _imageInfo->size=(char *) RelinquishMagickMemory(_imageInfo->size);
482 if ( geometry_.isValid() )
483 Magick::CloneString( &_imageInfo->size, geometry_ );
485 Magick::Geometry Magick::Options::size ( void ) const
487 if ( _imageInfo->size )
488 return Geometry( _imageInfo->size );
493 void Magick::Options::strokeAntiAlias( bool flag_ )
495 flag_ ? _drawInfo->stroke_antialias=MagickTrue : _drawInfo->stroke_antialias=MagickFalse;
497 bool Magick::Options::strokeAntiAlias( void ) const
499 return (_drawInfo->stroke_antialias != 0 ? true : false);
502 // Color to use when drawing object outlines
503 void Magick::Options::strokeColor ( const Magick::Color &strokeColor_ )
505 _drawInfo->stroke = strokeColor_;
507 Magick::Color Magick::Options::strokeColor ( void ) const
509 return _drawInfo->stroke;
512 void Magick::Options::strokeDashArray ( const double* strokeDashArray_ )
514 _drawInfo->dash_pattern=(double *)
515 RelinquishMagickMemory(_drawInfo->dash_pattern);
519 // Count elements in dash array
521 for (x=0; strokeDashArray_[x]; x++) ;
523 _drawInfo->dash_pattern =
524 static_cast<double*>(AcquireMagickMemory((x+1)*sizeof(double)));
526 memcpy(_drawInfo->dash_pattern,strokeDashArray_,
527 (x+1)*sizeof(double));
530 const double* Magick::Options::strokeDashArray ( void ) const
532 return _drawInfo->dash_pattern;
535 void Magick::Options::strokeDashOffset ( double strokeDashOffset_ )
537 _drawInfo->dash_offset = strokeDashOffset_;
539 double Magick::Options::strokeDashOffset ( void ) const
541 return _drawInfo->dash_offset;
544 // Specify the shape to be used at the end of open subpaths when they
545 // are stroked. Values of LineCap are ButtCap, RoundCap, and
547 void Magick::Options::strokeLineCap ( Magick::LineCap lineCap_ )
549 _drawInfo->linecap = lineCap_;
551 Magick::LineCap Magick::Options::strokeLineCap ( void ) const
553 return _drawInfo->linecap;
556 // Specify the shape to be used at the corners of paths (or other
557 // vector shapes) when they are stroked.
558 void Magick::Options::strokeLineJoin ( Magick::LineJoin lineJoin_ )
560 _drawInfo->linejoin = lineJoin_;
562 Magick::LineJoin Magick::Options::strokeLineJoin ( void ) const
564 return _drawInfo->linejoin;
567 // miterLimit for drawing lines, circles, ellipses, etc.
568 void Magick::Options::strokeMiterLimit ( size_t miterLimit_ )
570 _drawInfo->miterlimit = miterLimit_;
572 size_t Magick::Options::strokeMiterLimit ( void ) const
574 return _drawInfo->miterlimit;
577 // Pattern image to use for stroked outlines
578 void Magick::Options::strokePattern ( const MagickCore::Image *strokePattern_ )
580 if ( _drawInfo->stroke_pattern )
582 DestroyImageList( _drawInfo->stroke_pattern );
583 _drawInfo->stroke_pattern = 0;
586 if ( strokePattern_ )
588 ExceptionInfo exceptionInfo;
589 GetExceptionInfo( &exceptionInfo );
590 _drawInfo->stroke_pattern =
591 CloneImage( const_cast<MagickCore::Image*>(strokePattern_),
596 throwException( exceptionInfo );
597 (void) DestroyExceptionInfo( &exceptionInfo );
600 const MagickCore::Image* Magick::Options::strokePattern ( void ) const
602 return _drawInfo->stroke_pattern;
605 // Stroke width for drawing lines, circles, ellipses, etc.
606 void Magick::Options::strokeWidth ( double strokeWidth_ )
608 _drawInfo->stroke_width = strokeWidth_;
610 double Magick::Options::strokeWidth ( void ) const
612 return _drawInfo->stroke_width;
615 void Magick::Options::subImage ( size_t subImage_ )
617 _imageInfo->scene = subImage_;
619 size_t Magick::Options::subImage ( void ) const
621 return _imageInfo->scene;
624 void Magick::Options::subRange ( size_t subRange_ )
626 _imageInfo->number_scenes = subRange_;
628 size_t Magick::Options::subRange ( void ) const
630 return _imageInfo->number_scenes;
633 // Annotation text encoding (e.g. "UTF-16")
634 void Magick::Options::textEncoding ( const std::string &encoding_ )
636 CloneString(&_drawInfo->encoding, encoding_.c_str());
638 std::string Magick::Options::textEncoding ( void ) const
640 if ( _drawInfo->encoding && *_drawInfo->encoding )
641 return std::string( _drawInfo->encoding );
643 return std::string();
646 // Image representation type
647 void Magick::Options::type ( const Magick::ImageType type_ )
649 _imageInfo->type = type_;
651 Magick::ImageType Magick::Options::type ( void ) const
653 return _imageInfo->type;
656 // Origin of coordinate system to use when annotating with text or drawing
657 void Magick::Options::transformOrigin ( double tx_, double ty_ )
659 AffineMatrix current = _drawInfo->affine;
671 _drawInfo->affine.sx=current.sx*affine.sx+current.ry*affine.rx;
672 _drawInfo->affine.rx=current.rx*affine.sx+current.sy*affine.rx;
673 _drawInfo->affine.ry=current.sx*affine.ry+current.ry*affine.sy;
674 _drawInfo->affine.sy=current.rx*affine.ry+current.sy*affine.sy;
675 _drawInfo->affine.tx=current.sx*affine.tx+current.ry*affine.ty+current.tx;
676 _drawInfo->affine.ty=current.rx*affine.tx+current.sy*affine.ty+current.ty;
679 // Reset transformation parameters to default
680 void Magick::Options::transformReset ( void )
682 _drawInfo->affine.sx=1.0;
683 _drawInfo->affine.rx=0.0;
684 _drawInfo->affine.ry=0.0;
685 _drawInfo->affine.sy=1.0;
686 _drawInfo->affine.tx=0.0;
687 _drawInfo->affine.ty=0.0;
690 // Rotation to use when annotating with text or drawing
691 void Magick::Options::transformRotation ( double angle_ )
693 AffineMatrix current = _drawInfo->affine;
702 affine.sx=cos(DegreesToRadians(fmod(angle_,360.0)));
703 affine.rx=(-sin(DegreesToRadians(fmod(angle_,360.0))));
704 affine.ry=sin(DegreesToRadians(fmod(angle_,360.0)));
705 affine.sy=cos(DegreesToRadians(fmod(angle_,360.0)));
707 _drawInfo->affine.sx=current.sx*affine.sx+current.ry*affine.rx;
708 _drawInfo->affine.rx=current.rx*affine.sx+current.sy*affine.rx;
709 _drawInfo->affine.ry=current.sx*affine.ry+current.ry*affine.sy;
710 _drawInfo->affine.sy=current.rx*affine.ry+current.sy*affine.sy;
711 _drawInfo->affine.tx=current.sx*affine.tx+current.ry*affine.ty+current.tx;
712 _drawInfo->affine.ty=current.rx*affine.tx+current.sy*affine.ty+current.ty;
715 // Scale to use when annotating with text or drawing
716 void Magick::Options::transformScale ( double sx_, double sy_ )
718 AffineMatrix current = _drawInfo->affine;
730 _drawInfo->affine.sx=current.sx*affine.sx+current.ry*affine.rx;
731 _drawInfo->affine.rx=current.rx*affine.sx+current.sy*affine.rx;
732 _drawInfo->affine.ry=current.sx*affine.ry+current.ry*affine.sy;
733 _drawInfo->affine.sy=current.rx*affine.ry+current.sy*affine.sy;
734 _drawInfo->affine.tx=current.sx*affine.tx+current.ry*affine.ty+current.tx;
735 _drawInfo->affine.ty=current.rx*affine.tx+current.sy*affine.ty+current.ty;
738 // Skew to use in X axis when annotating with text or drawing
739 void Magick::Options::transformSkewX ( double skewx_ )
741 AffineMatrix current = _drawInfo->affine;
751 affine.ry=tan(DegreesToRadians(fmod(skewx_,360.0)));
754 _drawInfo->affine.sx=current.sx*affine.sx+current.ry*affine.rx;
755 _drawInfo->affine.rx=current.rx*affine.sx+current.sy*affine.rx;
756 _drawInfo->affine.ry=current.sx*affine.ry+current.ry*affine.sy;
757 _drawInfo->affine.sy=current.rx*affine.ry+current.sy*affine.sy;
758 _drawInfo->affine.tx=current.sx*affine.tx+current.ry*affine.ty+current.tx;
759 _drawInfo->affine.ty=current.rx*affine.tx+current.sy*affine.ty+current.ty;
762 // Skew to use in Y axis when annotating with text or drawing
763 void Magick::Options::transformSkewY ( double skewy_ )
765 AffineMatrix current = _drawInfo->affine;
775 affine.rx=tan(DegreesToRadians(fmod(skewy_,360.0)));
778 _drawInfo->affine.sx=current.sx*affine.sx+current.ry*affine.rx;
779 _drawInfo->affine.rx=current.rx*affine.sx+current.sy*affine.rx;
780 _drawInfo->affine.ry=current.sx*affine.ry+current.ry*affine.sy;
781 _drawInfo->affine.sy=current.rx*affine.ry+current.sy*affine.sy;
782 _drawInfo->affine.tx=current.sx*affine.tx+current.ry*affine.ty+current.tx;
783 _drawInfo->affine.ty=current.rx*affine.tx+current.sy*affine.ty+current.ty;
786 void Magick::Options::verbose ( bool verboseFlag_ )
788 _imageInfo->verbose = (MagickBooleanType) verboseFlag_;
790 bool Magick::Options::verbose ( void ) const
792 return static_cast<bool>(_imageInfo->verbose);
795 void Magick::Options::virtualPixelMethod ( VirtualPixelMethod virtual_pixel_method_ )
797 _imageInfo->virtual_pixel_method = virtual_pixel_method_;
799 Magick::VirtualPixelMethod Magick::Options::virtualPixelMethod ( void ) const
801 return static_cast<Magick::VirtualPixelMethod>(_imageInfo->virtual_pixel_method);
804 void Magick::Options::view ( const std::string &view_ )
806 if ( view_.length() == 0 )
807 _imageInfo->view=(char *) RelinquishMagickMemory(_imageInfo->view);
809 Magick::CloneString( &_imageInfo->view, view_ );
811 std::string Magick::Options::view ( void ) const
813 if ( _imageInfo->view )
814 return std::string( _imageInfo->view );
816 return std::string();
819 void Magick::Options::x11Display ( const std::string &display_ )
821 if ( display_.length() == 0 )
822 _imageInfo->server_name=(char *) RelinquishMagickMemory(_imageInfo->server_name);
824 Magick::CloneString( &_imageInfo->server_name, display_ );
826 std::string Magick::Options::x11Display ( void ) const
828 if ( _imageInfo->server_name )
829 return std::string( _imageInfo->server_name );
831 return std::string();
835 // Internal implementation methods. Please do not use.
838 MagickCore::DrawInfo * Magick::Options::drawInfo( void )
843 MagickCore::ImageInfo * Magick::Options::imageInfo( void )
848 MagickCore::QuantizeInfo * Magick::Options::quantizeInfo( void )
850 return _quantizeInfo;