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