1 // This may look like C code, but it is really -*- C++ -*-
2 //
3 // Copyright Bob Friesenhahn, 1999, 2000, 2001, 2002, 2003
4 // Copyright Dirk Lemstra 2014-2016
5 //
6 // Definition of Options
7 //
8 // Options which may be applied to an image. These options are the
9 // equivalent of options supplied to ImageMagick utilities.
10 //
11 // This is an internal implementation class and is not part of the
12 // Magick++ API
13 //
14 
15 #if !defined(Magick_Options_header)
16 #define Magick_Options_header
17 
18 #include "Magick++/Include.h"
19 #include <string>
20 #include "Magick++/Color.h"
21 #include "Magick++/Geometry.h"
22 #include "Magick++/Drawable.h"
23 
24 namespace Magick
25 {
26   class Image;
27 
28   class Options
29   {
30   public:
31 
32     // Default constructor
33     Options(void);
34 
35     // Copy constructor
36     Options(const Options& options_);
37 
38     // Destructor
39     ~Options();
40 
41     // Join images into a single multi-image file
42     void adjoin(const bool flag_);
43     bool adjoin(void) const;
44 
45     // Transparent color
46     void matteColor(const Color &matteColor_);
47     Color matteColor(void) const;
48 
49     // Image background color
50     void backgroundColor(const Color &color_);
51     Color backgroundColor(void) const;
52 
53     // Name of texture image to tile onto the image background
54     void backgroundTexture(const std::string &backgroundTexture_);
55     std::string backgroundTexture(void) const;
56 
57     // Image border color
58     void borderColor(const Color &color_);
59     Color borderColor(void) const;
60 
61     // Text bounding-box base color (default none)
62     void boxColor(const Color &boxColor_);
63     Color boxColor(void) const;
64 
65     // Colors within this distance are considered equal
66     void colorFuzz(const double fuzz_);
67     double colorFuzz(void) const;
68 
69     // Image colorspace scheme
70     void colorspaceType(const ColorspaceType colorspace_);
71     ColorspaceType colorspaceType(void) const;
72 
73     // Compression type ( NoCompression, BZipCompression,
74     // FaxCompression, JPEGCompression, LZWCompression,
75     // RLECompression, or ZipCompression )
76     void compressType(const CompressionType compressType_);
77     CompressionType compressType(void) const;
78 
79     // Enable printing of debug messages from ImageMagick
80     void debug(const bool flag_);
81     bool debug(void) const;
82 
83     // Vertical and horizontal resolution in pixels of the image
84     void density(const Point &density_);
85     Point density(void) const;
86 
87     // Image depth (8 or 16)
88     void depth(const size_t depth_);
89     size_t depth(void) const;
90 
91     // Endianness (little like Intel or big like SPARC) for image
92     // formats which support endian-specific options.
93     void endian(const EndianType endian_);
94     EndianType endian(void) const;
95 
96     // Image filename to read or write
97     void file(FILE *file_);
98     FILE *file(void) const;
99 
100     // Image filename to read or write
101     void fileName(const std::string &fileName_);
102     std::string fileName(void) const;
103 
104     // Color to use when filling drawn objects
105     void fillColor(const Color &fillColor_);
106     Color fillColor(void) const;
107 
108     // Fill pattern
109     void fillPattern(const MagickCore::Image *fillPattern_);
110     const MagickCore::Image *fillPattern(void) const;
111 
112     // Rule to use when filling drawn objects
113     void fillRule(const FillRule &fillRule_);
114     FillRule fillRule(void) const;
115 
116     // Font name
117     void font(const std::string &font_);
118     std::string font(void) const;
119 
120     // Font name
121     void fontFamily(const std::string &family_);
122     std::string fontFamily(void) const;
123 
124     // Font point size
125     void fontPointsize(const double pointSize_);
126     double fontPointsize(void) const;
127 
128     // Font style
129     void fontStyle(const StyleType style_);
130     StyleType fontStyle(void) const;
131 
132     // Font weight
133     void fontWeight(const size_t weight_);
134     size_t fontWeight(void) const;
135 
136     std::string format(void) const;
137 
138     // Image interlace scheme
139     void interlaceType(const InterlaceType interlace_);
140     InterlaceType interlaceType(void) const;
141 
142    // Image format to write or read
143     void magick(const std::string &magick_);
144     std::string magick(void) const;
145 
146    // Write as a monochrome image
147     void monochrome(const bool monochromeFlag_);
148     bool monochrome(void) const;
149 
150     // Preferred size and location of an image canvas.
151     void page(const Geometry &pageSize_);
152     Geometry page(void) const;
153 
154     // Desired image quality factor
155     void quality(const size_t quality_);
156     size_t quality(void) const;
157 
158     // Maximum number of colors to quantize to
159     void quantizeColors(const size_t colors_);
160     size_t quantizeColors(void) const;
161 
162     // Colorspace to quantize in.
163     void quantizeColorSpace(const ColorspaceType colorSpace_);
164     ColorspaceType quantizeColorSpace(void) const;
165 
166     // Dither image during quantization.
167     void quantizeDither(const bool ditherFlag_);
168     bool quantizeDither(void) const;
169 
170     // Dither method
171     void quantizeDitherMethod(const DitherMethod ditherMethod_);
172     DitherMethod quantizeDitherMethod(void) const;
173 
174     // Quantization tree-depth
175     void quantizeTreeDepth(const size_t treeDepth_);
176     size_t quantizeTreeDepth(void) const;
177 
178     // Suppress all warning messages. Error messages are still reported.
179     void quiet(const bool quiet_);
180     bool quiet(void) const;
181 
182     // Units of resolution to interpret density
183     void resolutionUnits(const ResolutionType resolutionUnits_);
184     ResolutionType resolutionUnits(void) const;
185 
186     // Image sampling factor
187     void samplingFactor(const std::string &samplingFactor_);
188     std::string samplingFactor(void) const;
189 
190     // Image size (required for raw formats)
191     void size(const Geometry &geometry_);
192     Geometry size(void) const;
193 
194     // enabled/disable stroke anti-aliasing
195     void strokeAntiAlias(const bool flag_);
196     bool strokeAntiAlias(void) const ;
197 
198     // Color to use when drawing object outlines
199     void strokeColor(const Color &strokeColor_);
200     Color strokeColor(void) const;
201 
202     // Control the pattern of dashes and gaps used to stroke
203     // paths. The strokeDashArray represents a list of numbers that
204     // specify the lengths of alternating dashes and gaps in user
205     // units. If an odd number of values is provided, then the list of
206     // values is repeated to yield an even number of values.
207     void strokeDashArray(const double *strokeDashArray_);
208     const double *strokeDashArray(void) const;
209 
210     // While drawing using strokeDashArray, specify distance into the dash
211     // pattern to start the dash (default 0).
212     void strokeDashOffset(const double strokeDashOffset_);
213     double strokeDashOffset(void) const;
214 
215     // Specify the shape to be used at the end of open subpaths when
216     // they are stroked. Values of LineCap are UndefinedCap, ButtCap,
217     // RoundCap, and SquareCap.
218     void strokeLineCap(const LineCap lineCap_);
219     LineCap strokeLineCap(void) const;
220 
221     // Specify the shape to be used at the corners of paths (or other
222     // vector shapes) when they are stroked. Values of LineJoin are
223     // UndefinedJoin, MiterJoin, RoundJoin, and BevelJoin.
224     void strokeLineJoin(const LineJoin lineJoin_);
225     LineJoin strokeLineJoin(void) const;
226 
227     // Specify miter limit. When two line segments meet at a sharp
228     // angle and miter joins have been specified for 'lineJoin', it is
229     // possible for the miter to extend far beyond the thickness of
230     // the line stroking the path. The miterLimit' imposes a limit on
231     // the ratio of the miter length to the 'stroke_width'. The default
232     // value of this parameter is 4.
233     void strokeMiterLimit(const size_t miterLimit_);
234     size_t strokeMiterLimit(void) const;
235 
236     // Pattern image to use for stroked outlines
237     void strokePattern(const MagickCore::Image *strokePattern_);
238     const MagickCore::Image *strokePattern(void) const;
239 
240    // Stroke width for drawing vector objects (default one)
241     void strokeWidth(const double strokeWidth_);
242     double strokeWidth(void) const;
243 
244     void subImage(const size_t subImage_);
245     size_t subImage(void) const;
246 
247     // Sub-frame number to return
248     void subRange(const size_t subRange_);
249     size_t subRange(void) const;
250 
251     // Remove pixel aliasing
252     void textAntiAlias(const bool flag_);
253     bool textAntiAlias(void) const;
254 
255     // Render text right-to-left or left-to-right.
256     void textDirection(const DirectionType direction_);
257     DirectionType textDirection() const;
258 
259     // Annotation text encoding (e.g. "UTF-16")
260     void textEncoding(const std::string &encoding_);
261     std::string textEncoding(void) const;
262 
263     // Text gravity.
264     void textGravity(const GravityType gravity_);
265     GravityType textGravity() const;
266 
267     // Text inter-line spacing
268     void textInterlineSpacing(const double spacing_);
269     double textInterlineSpacing(void) const;
270 
271     // Text inter-word spacing
272     void textInterwordSpacing(const double spacing_);
273     double textInterwordSpacing(void) const;
274 
275     // Text inter-character kerning
276     void textKerning(const double kerning_);
277     double textKerning(void) const;
278 
279     // Text undercolor box
280     void textUnderColor(const Color &underColor_);
281     Color textUnderColor(void) const;
282 
283     // Origin of coordinate system to use when annotating with text or drawing
284     void transformOrigin(const double tx_,const double ty_);
285 
286     // Reset transformation parameters to default
287     void transformReset(void);
288 
289     // Rotation to use when annotating with text or drawing
290     void transformRotation(const double angle_);
291 
292     // Scale to use when annotating with text or drawing
293     void transformScale(const double sx_,const double sy_);
294 
295     // Skew to use in X axis when annotating with text or drawing
296     void transformSkewX(const double skewx_);
297 
298     // Skew to use in Y axis when annotating with text or drawing
299     void transformSkewY(const double skewy_);
300 
301     // Image representation type
302     void type(const ImageType type_);
303     ImageType type(void) const;
304 
305     // Return verbose information about an image, or an operation
306     void verbose(const bool verboseFlag_);
307     bool verbose(void) const;
308 
309     // X11 display name
310     void x11Display(const std::string &display_);
311     std::string x11Display(void) const;
312 
313     //
314     // Internal implementation methods.  Please do not use.
315     //
316 
317     MagickCore::DrawInfo *drawInfo(void);
318     MagickCore::ImageInfo *imageInfo(void);
319     MagickCore::QuantizeInfo *quantizeInfo(void);
320 
321     // Construct using raw structures
322     Options(const MagickCore::ImageInfo *imageInfo_,
323       const MagickCore::QuantizeInfo *quantizeInfo_,
324       const MagickCore::DrawInfo *drawInfo_);
325 
326   private:
327 
328     // Assignment not supported
329     Options& operator=(const Options&);
330 
331     void setOption(const char *name,const Color &value_);
332 
333     void setOption(const char *name,const double value_);
334 
335     MagickCore::ImageInfo    *_imageInfo;
336     MagickCore::QuantizeInfo *_quantizeInfo;
337     MagickCore::DrawInfo     *_drawInfo;
338     bool                     _quiet;
339   };
340 } // namespace Magick
341 
342 #endif // Magick_Options_header
343