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 methods.
     17 */
     18 #ifndef MAGICKCORE_IMAGE_H
     19 #define MAGICKCORE_IMAGE_H
     20 
     21 #if defined(__cplusplus) || defined(c_plusplus)
     22 extern "C" {
     23 #endif
     24 
     25 #define OpaqueAlpha  ((Quantum) QuantumRange)
     26 #define TransparentAlpha  ((Quantum) 0)
     27 
     28 typedef enum
     29 {
     30   UndefinedAlphaChannel,
     31   ActivateAlphaChannel,
     32   AssociateAlphaChannel,
     33   BackgroundAlphaChannel,
     34   CopyAlphaChannel,
     35   DeactivateAlphaChannel,
     36   DiscreteAlphaChannel,
     37   DisassociateAlphaChannel,
     38   ExtractAlphaChannel,
     39   OffAlphaChannel,
     40   OnAlphaChannel,
     41   OpaqueAlphaChannel,
     42   RemoveAlphaChannel,
     43   SetAlphaChannel,
     44   ShapeAlphaChannel,
     45   TransparentAlphaChannel
     46 } AlphaChannelOption;
     47 
     48 typedef enum
     49 {
     50   UndefinedType,
     51   BilevelType,
     52   GrayscaleType,
     53   GrayscaleAlphaType,
     54   PaletteType,
     55   PaletteAlphaType,
     56   TrueColorType,
     57   TrueColorAlphaType,
     58   ColorSeparationType,
     59   ColorSeparationAlphaType,
     60   OptimizeType,
     61   PaletteBilevelAlphaType
     62 } ImageType;
     63 
     64 typedef enum
     65 {
     66   UndefinedInterlace,
     67   NoInterlace,
     68   LineInterlace,
     69   PlaneInterlace,
     70   PartitionInterlace,
     71   GIFInterlace,
     72   JPEGInterlace,
     73   PNGInterlace
     74 } InterlaceType;
     75 
     76 typedef enum
     77 {
     78   UndefinedOrientation,
     79   TopLeftOrientation,
     80   TopRightOrientation,
     81   BottomRightOrientation,
     82   BottomLeftOrientation,
     83   LeftTopOrientation,
     84   RightTopOrientation,
     85   RightBottomOrientation,
     86   LeftBottomOrientation
     87 } OrientationType;
     88 
     89 typedef enum
     90 {
     91   UndefinedResolution,
     92   PixelsPerInchResolution,
     93   PixelsPerCentimeterResolution
     94 } ResolutionType;
     95 
     96 typedef struct _PrimaryInfo
     97 {
     98   double
     99     x,
    100     y,
    101     z;
    102 } PrimaryInfo;
    103 
    104 typedef struct _SegmentInfo
    105 {
    106   double
    107     x1,
    108     y1,
    109     x2,
    110     y2;
    111 } SegmentInfo;
    112 
    113 typedef enum
    114 {
    115   UndefinedTransmitType,
    116   FileTransmitType,
    117   BlobTransmitType,
    118   StreamTransmitType,
    119   ImageTransmitType
    120 } TransmitType;
    121 
    122 typedef struct _ChromaticityInfo
    123 {
    124   PrimaryInfo
    125     red_primary,
    126     green_primary,
    127     blue_primary,
    128     white_point;
    129 } ChromaticityInfo;
    130 
    131 #include "MagickCore/blob.h"
    132 #include "MagickCore/colorspace.h"
    133 #include "MagickCore/cache-view.h"
    134 #include "MagickCore/color.h"
    135 #include "MagickCore/composite.h"
    136 #include "MagickCore/compress.h"
    137 #include "MagickCore/effect.h"
    138 #include "MagickCore/geometry.h"
    139 #include "MagickCore/layer.h"
    140 #include "MagickCore/locale_.h"
    141 #include "MagickCore/monitor.h"
    142 #include "MagickCore/pixel.h"
    143 #include "MagickCore/profile.h"
    144 #include "MagickCore/quantum.h"
    145 #include "MagickCore/resample.h"
    146 #include "MagickCore/resize.h"
    147 #include "MagickCore/semaphore.h"
    148 #include "MagickCore/stream.h"
    149 #include "MagickCore/timer.h"
    150 
    151 struct _Image
    152 {
    153   ClassType
    154     storage_class;
    155 
    156   ColorspaceType
    157     colorspace;         /* colorspace of image data */
    158 
    159   CompressionType
    160     compression;        /* compression of image when read/write */
    161 
    162   size_t
    163     quality;            /* compression quality setting, meaning varies */
    164 
    165   OrientationType
    166     orientation;        /* photo orientation of image */
    167 
    168   MagickBooleanType
    169     taint;              /* has image been modified since reading */
    170 
    171   size_t
    172     columns,            /* physical size of image */
    173     rows,
    174     depth,              /* depth of image on read/write */
    175     colors;             /* Size of color table, or actual color count */
    176                         /* Only valid if image is not DirectClass */
    177 
    178   PixelInfo
    179     *colormap,
    180     alpha_color,        /* deprecated */
    181     background_color,   /* current background color attribute */
    182     border_color,       /* current bordercolor attribute */
    183     transparent_color;  /* color for 'transparent' color index in GIF */
    184 
    185   double
    186     gamma;
    187 
    188   ChromaticityInfo
    189     chromaticity;
    190 
    191   RenderingIntent
    192     rendering_intent;
    193 
    194   void
    195     *profiles;
    196 
    197   ResolutionType
    198     units;          /* resolution/density  ppi or ppc */
    199 
    200   char
    201     *montage,
    202     *directory,
    203     *geometry;
    204 
    205   ssize_t
    206     offset;         /* ??? */
    207 
    208   PointInfo
    209     resolution;     /* image resolution/density */
    210 
    211   RectangleInfo
    212     page,           /* virtual canvas size and offset of image */
    213     extract_info;
    214 
    215   double
    216     fuzz;           /* current color fuzz attribute - move to image_info */
    217 
    218   FilterType
    219     filter;         /* resize/distort filter to apply */
    220 
    221   PixelIntensityMethod
    222     intensity;      /* method to generate an intensity value from a pixel */
    223 
    224   InterlaceType
    225     interlace;
    226 
    227   EndianType
    228     endian;         /* raw data integer ordering on read/write */
    229 
    230   GravityType
    231     gravity;        /* Gravity attribute for positioning in image */
    232 
    233   CompositeOperator
    234     compose;        /* alpha composition method for layered images */
    235 
    236   DisposeType
    237     dispose;        /* GIF animation disposal method */
    238 
    239   size_t
    240     scene,          /* index of image in multi-image file */
    241     delay,          /* Animation delay time */
    242     duration;       /* Total animation duration sum(delay*iterations) */
    243 
    244   ssize_t
    245     ticks_per_second;  /* units for delay time, default 100 for GIF */
    246 
    247   size_t
    248     iterations,        /* number of interations for GIF animations */
    249     total_colors;
    250 
    251   ssize_t
    252     start_loop;        /* ??? */
    253 
    254   PixelInterpolateMethod
    255     interpolate;       /* Interpolation of color for between pixel lookups */
    256 
    257   MagickBooleanType
    258     black_point_compensation;
    259 
    260   RectangleInfo
    261     tile_offset;
    262 
    263   ImageType
    264     type;
    265 
    266   MagickBooleanType
    267     dither;            /* dithering on/off */
    268 
    269   MagickSizeType
    270     extent;            /* Size of image read from disk */
    271 
    272   MagickBooleanType
    273     ping;              /* no image data read, just attributes */
    274 
    275   MagickBooleanType
    276     read_mask,
    277     write_mask;
    278 
    279   PixelTrait
    280     alpha_trait;       /* is transparency channel defined and active */
    281 
    282   size_t
    283     number_channels,
    284     number_meta_channels,
    285     metacontent_extent;
    286 
    287   ChannelType
    288     channel_mask;
    289 
    290   PixelChannelMap
    291     *channel_map;
    292 
    293   void
    294     *cache;
    295 
    296   ErrorInfo
    297     error;
    298 
    299   TimerInfo
    300     timer;
    301 
    302   MagickProgressMonitor
    303     progress_monitor;
    304 
    305   void
    306     *client_data;
    307 
    308   Ascii85Info
    309     *ascii85;
    310 
    311   ProfileInfo
    312     *generic_profile;
    313 
    314   void
    315     *properties,       /* general settings, to save with image */
    316     *artifacts;        /* general operational/coder settings, not saved */
    317 
    318   char
    319     filename[MagickPathExtent],        /* images input filename */
    320     magick_filename[MagickPathExtent], /* given image filename (with read mods) */
    321     magick[MagickPathExtent];          /* images file format (file magic) */
    322 
    323   size_t
    324     magick_columns,     /* size of image when read/created */
    325     magick_rows;
    326 
    327   BlobInfo
    328     *blob;             /* image file as in-memory string of 'extent' */
    329 
    330   time_t
    331     timestamp;
    332 
    333   MagickBooleanType
    334     debug;             /* debug output attribute */
    335 
    336   volatile ssize_t
    337     reference_count;   /* image data sharing memory management */
    338 
    339   SemaphoreInfo
    340     *semaphore;
    341 
    342   struct _ImageInfo
    343     *image_info;       /* (Optional) Image belongs to this ImageInfo 'list'
    344                         * For access to 'global options' when no per-image
    345                         * attribute, properity, or artifact has been set.
    346                         */
    347 
    348   struct _Image
    349     *list,             /* Undo/Redo image processing list (for display) */
    350     *previous,         /* Image list links */
    351     *next;
    352 
    353   size_t
    354     signature;
    355 
    356   PixelInfo
    357     matte_color;        /* current mattecolor attribute */
    358 
    359   MagickBooleanType
    360     composite_mask;
    361 
    362   PixelTrait
    363     mask_trait;       /* apply the clip or composite mask */
    364 
    365   ChannelType
    366     channels;
    367 };
    368 
    369 /*
    370   ImageInfo structure:
    371     Stores an image list, as well as all global settings used by all images
    372     held, -- unless overridden for that specific image.  See SyncImagesettings()
    373     which maps any global setting that always overrides specific image settings.
    374 */
    375 struct _ImageInfo
    376 {
    377   CompressionType
    378     compression;        /* compression method when reading/saving image */
    379 
    380   OrientationType
    381     orientation;        /* orientation setting */
    382 
    383   MagickBooleanType
    384     temporary,          /* image file to be deleted after read "empemeral:" */
    385     adjoin,             /* save images to separate scene files */
    386     affirm,
    387     antialias;
    388 
    389   char
    390     *size,              /* image generation size */
    391     *extract,           /* crop/resize string on image read */
    392     *page,
    393     *scenes;            /* scene numbers that is to be read in */
    394 
    395   size_t
    396     scene,              /* starting value for image save numbering */
    397     number_scenes,      /* total number of images in list - for escapes */
    398     depth;              /* current read/save depth of images */
    399 
    400   InterlaceType
    401     interlace;          /* interlace for image write */
    402 
    403   EndianType
    404     endian;             /* integer endian order for raw image data */
    405 
    406   ResolutionType
    407     units;              /* denisty pixels/inch or pixel/cm */
    408 
    409   size_t
    410     quality;            /* compression quality */
    411 
    412   char
    413     *sampling_factor,   /* JPEG write sampling factor */
    414     *server_name,       /* X windows server name - display/animate */
    415     *font,              /* DUP for draw_info */
    416     *texture,           /* montage/display background tile */
    417     *density;           /* DUP for image and draw_info */
    418 
    419   double
    420     pointsize,
    421     fuzz;               /* current color fuzz attribute */
    422 
    423   PixelInfo
    424     alpha_color,        /* deprecated */
    425     background_color,   /* user set background color */
    426     border_color,       /* user set border color */
    427     transparent_color;  /* color for transparent index in color tables */
    428                         /* NB: fill color is only needed in draw_info! */
    429                         /* the same for undercolor (for font drawing) */
    430 
    431   MagickBooleanType
    432     dither,             /* dither enable-disable */
    433     monochrome;         /* read/write pcl,pdf,ps,xps as monocrome image */
    434 
    435   ColorspaceType
    436     colorspace;
    437 
    438   CompositeOperator
    439     compose;
    440 
    441   ImageType
    442     type;
    443 
    444   MagickBooleanType
    445     ping,                    /* fast read image attributes, not image data */
    446     verbose;                 /* verbose output enable/disable */
    447 
    448   ChannelType
    449     channel;
    450 
    451   void
    452     *options;                /* splay tree of global options */
    453 
    454   void
    455     *profile;
    456 
    457   MagickBooleanType
    458     synchronize;
    459 
    460   MagickProgressMonitor
    461     progress_monitor;
    462 
    463   void
    464     *client_data,
    465     *cache;
    466 
    467   StreamHandler
    468     stream;
    469 
    470   FILE
    471     *file;
    472 
    473   void
    474     *blob;
    475 
    476   size_t
    477     length;
    478 
    479   char
    480     magick[MagickPathExtent],    /* image file format (file magick) */
    481     unique[MagickPathExtent],    /* unique tempory filename - delegates */
    482     filename[MagickPathExtent];  /* filename when reading/writing image */
    483 
    484   MagickBooleanType
    485     debug;
    486 
    487   size_t
    488     signature;
    489 
    490   CustomStreamInfo
    491     *custom_stream;
    492 
    493   PixelInfo
    494     matte_color;        /* matte (frame) color */
    495 };
    496 
    497 extern MagickExport ChannelType
    498   SetImageChannelMask(Image *,const ChannelType);
    499 
    500 extern MagickExport const char
    501   DefaultTileGeometry[],
    502   DefaultTileLabel[],
    503   LoadImageTag[],
    504   LoadImagesTag[],
    505   PSDensityGeometry[],
    506   PSPageGeometry[],
    507   SaveImageTag[],
    508   SaveImagesTag[];
    509 
    510 extern MagickExport const double
    511   DefaultResolution;
    512 
    513 extern MagickExport ExceptionType
    514   CatchImageException(Image *);
    515 
    516 extern MagickExport FILE
    517   *GetImageInfoFile(const ImageInfo *);
    518 
    519 extern MagickExport Image
    520   *AcquireImage(const ImageInfo *,ExceptionInfo *),
    521   *AppendImages(const Image *,const MagickBooleanType,ExceptionInfo *),
    522   *CloneImage(const Image *,const size_t,const size_t,const MagickBooleanType,
    523     ExceptionInfo *),
    524   *DestroyImage(Image *),
    525   *GetImageMask(const Image *,const PixelMask,ExceptionInfo *),
    526   *NewMagickImage(const ImageInfo *,const size_t,const size_t,const PixelInfo *,
    527     ExceptionInfo *),
    528   *ReferenceImage(Image *),
    529   *SmushImages(const Image *,const MagickBooleanType,const ssize_t,
    530     ExceptionInfo *);
    531 
    532 extern MagickExport ImageInfo
    533   *AcquireImageInfo(void),
    534   *CloneImageInfo(const ImageInfo *),
    535   *DestroyImageInfo(ImageInfo *);
    536 
    537 extern MagickExport MagickBooleanType
    538   ClipImage(Image *,ExceptionInfo *),
    539   ClipImagePath(Image *,const char *,const MagickBooleanType,ExceptionInfo *),
    540   CopyImagePixels(Image *,const Image *,const RectangleInfo *,
    541     const OffsetInfo *,ExceptionInfo *),
    542   IsTaintImage(const Image *),
    543   IsHighDynamicRangeImage(const Image *,ExceptionInfo *),
    544   IsImageObject(const Image *),
    545   ListMagickInfo(FILE *,ExceptionInfo *),
    546   ModifyImage(Image **,ExceptionInfo *),
    547   ResetImagePage(Image *,const char *),
    548   ResetImagePixels(Image *,ExceptionInfo *),
    549   SetImageAlpha(Image *,const Quantum,ExceptionInfo *),
    550   SetImageBackgroundColor(Image *,ExceptionInfo *),
    551   SetImageColor(Image *,const PixelInfo *,ExceptionInfo *),
    552   SetImageExtent(Image *,const size_t,const size_t,ExceptionInfo *),
    553   SetImageInfo(ImageInfo *,const unsigned int,ExceptionInfo *),
    554   SetImageMask(Image *,const PixelMask type,const Image *,ExceptionInfo *),
    555   SetImageRegionMask(Image *,const PixelMask type,const RectangleInfo *,
    556     ExceptionInfo *),
    557   SetImageStorageClass(Image *,const ClassType,ExceptionInfo *),
    558   StripImage(Image *,ExceptionInfo *),
    559   SyncImage(Image *,ExceptionInfo *),
    560   SyncImageSettings(const ImageInfo *,Image *,ExceptionInfo *),
    561   SyncImagesSettings(ImageInfo *,Image *,ExceptionInfo *);
    562 
    563 extern MagickExport size_t
    564   InterpretImageFilename(const ImageInfo *,Image *,const char *,int,char *,
    565     ExceptionInfo *);
    566 
    567 extern MagickExport ssize_t
    568   GetImageReferenceCount(Image *);
    569 
    570 extern MagickExport VirtualPixelMethod
    571   GetImageVirtualPixelMethod(const Image *),
    572   SetImageVirtualPixelMethod(Image *,const VirtualPixelMethod,ExceptionInfo *);
    573 
    574 extern MagickExport void
    575   AcquireNextImage(const ImageInfo *,Image *,ExceptionInfo *),
    576   DestroyImagePixels(Image *),
    577   DisassociateImageStream(Image *),
    578   GetImageInfo(ImageInfo *),
    579   SetImageInfoBlob(ImageInfo *,const void *,const size_t),
    580   SetImageInfoFile(ImageInfo *,FILE *),
    581   SetImageInfoCustomStream(ImageInfo *,CustomStreamInfo *);
    582 
    583 #if defined(__cplusplus) || defined(c_plusplus)
    584 }
    585 #endif
    586 
    587 #endif
    588