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