1 /*
2   Copyright 1999-2019 ImageMagick Studio LLC, a non-profit organization
3   dedicated to making software imaging solutions freely available.
4 
5   You may not use this file except in compliance with the License.  You may
6   obtain a copy of the License at
7 
8     https://imagemagick.org/script/license.php
9 
10   Unless required by applicable law or agreed to in writing, software
11   distributed under the License is distributed on an "AS IS" BASIS,
12   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   See the License for the specific language governing permissions and
14   limitations under the License.
15 
16   MagickCore image geometry methods.
17 */
18 #ifndef MAGICKCORE_GEOMETRY_H
19 #define MAGICKCORE_GEOMETRY_H
20 
21 #if defined(__cplusplus) || defined(c_plusplus)
22 extern "C" {
23 #endif
24 
25 typedef enum
26 {
27 #undef NoValue
28   NoValue = 0x0000,
29 #undef XValue
30   XValue = 0x0001,
31   XiValue = 0x0001,
32 #undef YValue
33   YValue = 0x0002,
34   PsiValue = 0x0002,
35 #undef WidthValue
36   WidthValue = 0x0004,
37   RhoValue = 0x0004,
38 #undef HeightValue
39   HeightValue = 0x0008,
40   SigmaValue = 0x0008,
41   ChiValue = 0x0010,
42   XiNegative = 0x0020,
43 #undef XNegative
44   XNegative = 0x0020,
45   PsiNegative = 0x0040,
46 #undef YNegative
47   YNegative = 0x0040,
48   ChiNegative = 0x0080,
49   PercentValue = 0x1000,    /* '%'  percentage of something */
50   AspectValue = 0x2000,     /* '!'  resize no-aspect - special use flag */
51   NormalizeValue = 0x2000,  /* '!'  ScaleKernelValue() in morphology.c */
52   LessValue = 0x4000,       /* '<'  resize smaller - special use flag */
53   GreaterValue = 0x8000,    /* '>'  resize larger - spacial use flag */
54   MinimumValue = 0x10000,   /* '^'  special handling needed */
55   CorrelateNormalizeValue = 0x10000, /* '^' see ScaleKernelValue() */
56   AreaValue = 0x20000,      /* '@'  resize to area - special use flag */
57   DecimalValue = 0x40000,   /* '.'  floating point numbers found */
58   SeparatorValue = 0x80000, /* 'x'  separator found  */
59   AspectRatioValue = 0x100000,    /* '~'  special handling needed  */
60 #undef AllValues
61   AllValues = 0x7fffffff
62 } GeometryFlags;
63 
64 #if defined(ForgetGravity)
65 #undef ForgetGravity
66 #undef NorthWestGravity
67 #undef NorthGravity
68 #undef NorthEastGravity
69 #undef WestGravity
70 #undef CenterGravity
71 #undef EastGravity
72 #undef SouthWestGravity
73 #undef SouthGravity
74 #undef SouthEastGravity
75 #endif
76 
77 typedef enum
78 {
79   UndefinedGravity,
80   ForgetGravity = 0,
81   NorthWestGravity = 1,
82   NorthGravity = 2,
83   NorthEastGravity = 3,
84   WestGravity = 4,
85   CenterGravity = 5,
86   EastGravity = 6,
87   SouthWestGravity = 7,
88   SouthGravity = 8,
89   SouthEastGravity = 9
90 } GravityType;
91 
92 typedef struct _AffineMatrix
93 {
94   double
95     sx,
96     rx,
97     ry,
98     sy,
99     tx,
100     ty;
101 } AffineMatrix;
102 
103 typedef struct _GeometryInfo
104 {
105   double
106     rho,
107     sigma,
108     xi,
109     psi,
110     chi;
111 } GeometryInfo;
112 
113 typedef struct _OffsetInfo
114 {
115   ssize_t
116     x,
117     y;
118 } OffsetInfo;
119 
120 typedef struct _PointInfo
121 {
122   double
123     x,
124     y;
125 } PointInfo;
126 
127 typedef struct _RectangleInfo
128 {
129   size_t
130     width,
131     height;
132 
133   ssize_t
134     x,
135     y;
136 } RectangleInfo;
137 
138 extern MagickExport char
139   *GetPageGeometry(const char *);
140 
141 extern MagickExport MagickBooleanType
142   IsGeometry(const char *),
143   IsSceneGeometry(const char *,const MagickBooleanType);
144 
145 extern MagickExport MagickStatusType
146   GetGeometry(const char *,ssize_t *,ssize_t *,size_t *,size_t *),
147   ParseAbsoluteGeometry(const char *,RectangleInfo *),
148   ParseAffineGeometry(const char *,AffineMatrix *,ExceptionInfo *),
149   ParseGeometry(const char *,GeometryInfo *),
150   ParseGravityGeometry(const Image *,const char *,RectangleInfo *,
151     ExceptionInfo *),
152   ParseMetaGeometry(const char *,ssize_t *,ssize_t *,size_t *,size_t *),
153   ParsePageGeometry(const Image *,const char *,RectangleInfo *,ExceptionInfo *),
154   ParseRegionGeometry(const Image *,const char *,RectangleInfo *,
155     ExceptionInfo *);
156 
157 extern MagickExport void
158   GravityAdjustGeometry(const size_t,const size_t,const GravityType,
159     RectangleInfo *),
160   SetGeometry(const Image *,RectangleInfo *),
161   SetGeometryInfo(GeometryInfo *);
162 
163 #if defined(__cplusplus) || defined(c_plusplus)
164 }
165 #endif
166 
167 #endif
168