Home | History | Annotate | Download | only in MagickCore
      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