1 /* 2 Copyright 1999-2021 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 AlphaValue = 0x200000, /* '/' alpha */ 61 #undef AllValues 62 AllValues = 0x7fffffff 63 } GeometryFlags; 64 65 #if defined(ForgetGravity) 66 #undef ForgetGravity 67 #undef NorthWestGravity 68 #undef NorthGravity 69 #undef NorthEastGravity 70 #undef WestGravity 71 #undef CenterGravity 72 #undef EastGravity 73 #undef SouthWestGravity 74 #undef SouthGravity 75 #undef SouthEastGravity 76 #endif 77 78 typedef enum 79 { 80 UndefinedGravity, 81 ForgetGravity = 0, 82 NorthWestGravity = 1, 83 NorthGravity = 2, 84 NorthEastGravity = 3, 85 WestGravity = 4, 86 CenterGravity = 5, 87 EastGravity = 6, 88 SouthWestGravity = 7, 89 SouthGravity = 8, 90 SouthEastGravity = 9 91 } GravityType; 92 93 typedef struct _AffineMatrix 94 { 95 double 96 sx, 97 rx, 98 ry, 99 sy, 100 tx, 101 ty; 102 } AffineMatrix; 103 104 typedef struct _GeometryInfo 105 { 106 double 107 rho, 108 sigma, 109 xi, 110 psi, 111 chi; 112 } GeometryInfo; 113 114 typedef struct _OffsetInfo 115 { 116 ssize_t 117 x, 118 y; 119 } OffsetInfo; 120 121 typedef struct _PointInfo 122 { 123 double 124 x, 125 y; 126 } PointInfo; 127 128 typedef struct _RectangleInfo 129 { 130 size_t 131 width, 132 height; 133 134 ssize_t 135 x, 136 y; 137 } RectangleInfo; 138 139 extern MagickExport char 140 *GetPageGeometry(const char *); 141 142 extern MagickExport MagickBooleanType 143 IsGeometry(const char *), 144 IsSceneGeometry(const char *,const MagickBooleanType); 145 146 extern MagickExport MagickStatusType 147 GetGeometry(const char *,ssize_t *,ssize_t *,size_t *,size_t *), 148 ParseAbsoluteGeometry(const char *,RectangleInfo *), 149 ParseAffineGeometry(const char *,AffineMatrix *,ExceptionInfo *), 150 ParseGeometry(const char *,GeometryInfo *), 151 ParseGravityGeometry(const Image *,const char *,RectangleInfo *, 152 ExceptionInfo *), 153 ParseMetaGeometry(const char *,ssize_t *,ssize_t *,size_t *,size_t *), 154 ParsePageGeometry(const Image *,const char *,RectangleInfo *,ExceptionInfo *), 155 ParseRegionGeometry(const Image *,const char *,RectangleInfo *, 156 ExceptionInfo *); 157 158 extern MagickExport void 159 GravityAdjustGeometry(const size_t,const size_t,const GravityType, 160 RectangleInfo *), 161 SetGeometry(const Image *,RectangleInfo *), 162 SetGeometryInfo(GeometryInfo *); 163 164 #if defined(__cplusplus) || defined(c_plusplus) 165 } 166 #endif 167 168 #endif 169