• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 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     alpha_color,        /* current alphacolor attribute */
184     background_color,   /* current background color attribute */
185     border_color,       /* current bordercolor 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   FilterType
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[MagickPathExtent],        /* images input filename */
323     magick_filename[MagickPathExtent], /* given image filename (with read mods) */
324     magick[MagickPathExtent];          /* 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   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                         */
350 
351   struct _Image
352     *list,             /* Undo/Redo image processing list (for display) */
353     *previous,         /* Image list links */
354     *next;
355 
356   size_t
357     signature;
358 };
359 
360 /*
361   ImageInfo structure:
362     Stores an image list, as well as all global settings used by all images
363     held, -- unless overridden for that specific image.  See SyncImagesettings()
364     which maps any global setting that always overrides specific image settings.
365 */
366 struct _ImageInfo
367 {
368   CompressionType
369     compression;        /* compression method when reading/saving image */
370 
371   OrientationType
372     orientation;        /* orientation setting */
373 
374   MagickBooleanType
375     temporary,          /* image file to be deleted after read "empemeral:" */
376     adjoin,             /* save images to separate scene files */
377     affirm,
378     antialias;
379 
380   char
381     *size,              /* image generation size */
382     *extract,           /* crop/resize string on image read */
383     *page,
384     *scenes;            /* scene numbers that is to be read in */
385 
386   size_t
387     scene,              /* starting value for image save numbering */
388     number_scenes,      /* total number of images in list - for escapes */
389     depth;              /* current read/save depth of images */
390 
391   InterlaceType
392     interlace;          /* interlace for image write */
393 
394   EndianType
395     endian;             /* integer endian order for raw image data */
396 
397   ResolutionType
398     units;              /* denisty pixels/inch or pixel/cm */
399 
400   size_t
401     quality;            /* compression quality */
402 
403   char
404     *sampling_factor,   /* JPEG write sampling factor */
405     *server_name,       /* X windows server name - display/animate */
406     *font,              /* DUP for draw_info */
407     *texture,           /* montage/display background tile */
408     *density;           /* DUP for image and draw_info */
409 
410   double
411     pointsize,
412     fuzz;               /* current color fuzz attribute */
413 
414   PixelInfo
415     alpha_color,        /* alpha (frame) color */
416     background_color,   /* user set background color */
417     border_color,       /* user set border color */
418     transparent_color;  /* color for transparent index in color tables */
419                         /* NB: fill color is only needed in draw_info! */
420                         /* the same for undercolor (for font drawing) */
421 
422   MagickBooleanType
423     dither,             /* dither enable-disable */
424     monochrome;         /* read/write pcl,pdf,ps,xps as monocrome image */
425 
426   ColorspaceType
427     colorspace;
428 
429   CompositeOperator
430     compose;
431 
432   ImageType
433     type;
434 
435   MagickBooleanType
436     ping,                    /* fast read image attributes, not image data */
437     verbose;                 /* verbose output enable/disable */
438 
439   ChannelType
440     channel;
441 
442   void
443     *options;                /* splay tree of global options */
444 
445   void
446     *profile;
447 
448   MagickBooleanType
449     synchronize;
450 
451   MagickProgressMonitor
452     progress_monitor;
453 
454   void
455     *client_data,
456     *cache;
457 
458   StreamHandler
459     stream;
460 
461   FILE
462     *file;
463 
464   void
465     *blob;
466 
467   size_t
468     length;
469 
470   char
471     magick[MagickPathExtent],    /* image file format (file magick) */
472     unique[MagickPathExtent],    /* unique tempory filename - delegates */
473     filename[MagickPathExtent];  /* filename when reading/writing image */
474 
475   MagickBooleanType
476     debug;
477 
478   size_t
479     signature;
480 };
481 
482 extern MagickExport ChannelType
483   SetImageChannelMask(Image *,const ChannelType);
484 
485 extern MagickExport const char
486   DefaultTileGeometry[],
487   DefaultTileLabel[],
488   LoadImageTag[],
489   LoadImagesTag[],
490   PSDensityGeometry[],
491   PSPageGeometry[],
492   SaveImageTag[],
493   SaveImagesTag[];
494 
495 extern MagickExport const double
496   DefaultResolution;
497 
498 extern MagickExport ExceptionType
499   CatchImageException(Image *);
500 
501 extern MagickExport FILE
502   *GetImageInfoFile(const ImageInfo *);
503 
504 extern MagickExport Image
505   *AcquireImage(const ImageInfo *,ExceptionInfo *),
506   *AppendImages(const Image *,const MagickBooleanType,ExceptionInfo *),
507   *CloneImage(const Image *,const size_t,const size_t,const MagickBooleanType,
508     ExceptionInfo *),
509   *DestroyImage(Image *),
510   *GetImageMask(const Image *,const PixelMask,ExceptionInfo *),
511   *NewMagickImage(const ImageInfo *,const size_t,const size_t,const PixelInfo *,
512     ExceptionInfo *),
513   *ReferenceImage(Image *),
514   *SmushImages(const Image *,const MagickBooleanType,const ssize_t,
515     ExceptionInfo *);
516 
517 extern MagickExport ImageInfo
518   *AcquireImageInfo(void),
519   *CloneImageInfo(const ImageInfo *),
520   *DestroyImageInfo(ImageInfo *);
521 
522 extern MagickExport MagickBooleanType
523   ClipImage(Image *,ExceptionInfo *),
524   ClipImagePath(Image *,const char *,const MagickBooleanType,ExceptionInfo *),
525   CopyImagePixels(Image *,const Image *,const RectangleInfo *,
526     const OffsetInfo *,ExceptionInfo *),
527   IsTaintImage(const Image *),
528   IsHighDynamicRangeImage(const Image *,ExceptionInfo *),
529   IsImageObject(const Image *),
530   ListMagickInfo(FILE *,ExceptionInfo *),
531   ModifyImage(Image **,ExceptionInfo *),
532   ResetImagePage(Image *,const char *),
533   SetImageAlpha(Image *,const Quantum,ExceptionInfo *),
534   SetImageBackgroundColor(Image *,ExceptionInfo *),
535   SetImageColor(Image *,const PixelInfo *,ExceptionInfo *),
536   SetImageExtent(Image *,const size_t,const size_t,ExceptionInfo *),
537   SetImageInfo(ImageInfo *,const unsigned int,ExceptionInfo *),
538   SetImageMask(Image *,const PixelMask type,const Image *,ExceptionInfo *),
539   SetImageStorageClass(Image *,const ClassType,ExceptionInfo *),
540   StripImage(Image *,ExceptionInfo *),
541   SyncImage(Image *,ExceptionInfo *),
542   SyncImageSettings(const ImageInfo *,Image *,ExceptionInfo *),
543   SyncImagesSettings(ImageInfo *,Image *,ExceptionInfo *);
544 
545 extern MagickExport size_t
546   InterpretImageFilename(const ImageInfo *,Image *,const char *,int,char *,
547     ExceptionInfo *);
548 
549 extern MagickExport ssize_t
550   GetImageReferenceCount(Image *);
551 
552 extern MagickExport VirtualPixelMethod
553   GetImageVirtualPixelMethod(const Image *),
554   SetImageVirtualPixelMethod(Image *,const VirtualPixelMethod,ExceptionInfo *);
555 
556 extern MagickExport void
557   AcquireNextImage(const ImageInfo *,Image *,ExceptionInfo *),
558   DestroyImagePixels(Image *),
559   DisassociateImageStream(Image *),
560   GetImageInfo(ImageInfo *),
561   SetImageInfoBlob(ImageInfo *,const void *,const size_t),
562   SetImageInfoFile(ImageInfo *,FILE *);
563 
564 #if defined(__cplusplus) || defined(c_plusplus)
565 }
566 #endif
567 
568 #endif
569