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