image.h revision ad98c293cf0523cb903af90b179128714c455868
1/*
2  Copyright 1999-2011 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#if defined(__cplusplus) || defined(c_plusplus)
22extern "C" {
23#endif
24
25#include <MagickCore/color.h>
26
27#define OpaqueAlpha  ((Quantum) QuantumRange)
28#define TransparentAlpha  ((Quantum) 0UL)
29
30typedef enum
31{
32  UndefinedAlphaChannel,
33  ActivateAlphaChannel,
34  BackgroundAlphaChannel,
35  CopyAlphaChannel,
36  DeactivateAlphaChannel,
37  ExtractAlphaChannel,
38  OpaqueAlphaChannel,
39  SetAlphaChannel,
40  ShapeAlphaChannel,
41  TransparentAlphaChannel
42} AlphaChannelType;
43
44typedef enum
45{
46  UndefinedType,
47  BilevelType,
48  GrayscaleType,
49  GrayscaleMatteType,
50  PaletteType,
51  PaletteMatteType,
52  TrueColorType,
53  TrueColorMatteType,
54  ColorSeparationType,
55  ColorSeparationMatteType,
56  OptimizeType,
57  PaletteBilevelMatteType
58} ImageType;
59
60typedef enum
61{
62  UndefinedInterlace,
63  NoInterlace,
64  LineInterlace,
65  PlaneInterlace,
66  PartitionInterlace,
67  GIFInterlace,
68  JPEGInterlace,
69  PNGInterlace
70} InterlaceType;
71
72typedef enum
73{
74  UndefinedOrientation,
75  TopLeftOrientation,
76  TopRightOrientation,
77  BottomRightOrientation,
78  BottomLeftOrientation,
79  LeftTopOrientation,
80  RightTopOrientation,
81  RightBottomOrientation,
82  LeftBottomOrientation
83} OrientationType;
84
85typedef enum
86{
87  UndefinedResolution,
88  PixelsPerInchResolution,
89  PixelsPerCentimeterResolution
90} ResolutionType;
91
92typedef struct _PrimaryInfo
93{
94  double
95    x,
96    y,
97    z;
98} PrimaryInfo;
99
100typedef struct _SegmentInfo
101{
102  double
103    x1,
104    y1,
105    x2,
106    y2;
107} SegmentInfo;
108
109typedef enum
110{
111  UndefinedTransmitType,
112  FileTransmitType,
113  BlobTransmitType,
114  StreamTransmitType,
115  ImageTransmitType
116} TransmitType;
117
118typedef struct _ChromaticityInfo
119{
120  PrimaryInfo
121    red_primary,
122    green_primary,
123    blue_primary,
124    white_point;
125} ChromaticityInfo;
126
127#include "MagickCore/blob.h"
128#include "MagickCore/colorspace.h"
129#include "MagickCore/cache-view.h"
130#include "MagickCore/color.h"
131#include "MagickCore/composite.h"
132#include "MagickCore/compress.h"
133#include "MagickCore/effect.h"
134#include "MagickCore/geometry.h"
135#include "MagickCore/layer.h"
136#include "MagickCore/locale_.h"
137#include "MagickCore/monitor.h"
138#include "MagickCore/pixel.h"
139#include "MagickCore/profile.h"
140#include "MagickCore/quantum.h"
141#include "MagickCore/resample.h"
142#include "MagickCore/resize.h"
143#include "MagickCore/semaphore.h"
144#include "MagickCore/stream.h"
145#include "MagickCore/timer.h"
146
147struct _Image
148{
149  ClassType
150    storage_class;
151
152  ColorspaceType
153    colorspace;      /* colorspace of image data */
154
155  CompressionType
156    compression;     /* compression of image when read/write */
157
158  size_t
159    quality;         /* compression quality setting, meaning varies */
160
161  OrientationType
162    orientation;     /* photo orientation of image */
163
164  MagickBooleanType
165    taint,           /* has image been modified since reading */
166    matte;           /* is transparency channel defined and active */
167
168  size_t
169    columns,         /* physical size of image */
170    rows,
171    depth,           /* depth of image on read/write */
172    colors;          /* size of color table on read */
173
174  PixelPacket
175    *colormap,
176    background_color, /* current background color attribute */
177    border_color,     /* current bordercolor attribute */
178    matte_color;      /* current mattecolor attribute */
179
180  double
181    gamma;
182
183  ChromaticityInfo
184    chromaticity;
185
186  RenderingIntent
187    rendering_intent;
188
189  void
190    *profiles;
191
192  ResolutionType
193    units;          /* resolution/density  ppi or ppc */
194
195  char
196    *montage,
197    *directory,
198    *geometry;
199
200  ssize_t
201    offset;
202
203  double
204    x_resolution,   /* image resolution/density */
205    y_resolution;
206
207  RectangleInfo
208    page,           /* virtual canvas size and offset of image */
209    extract_info;
210
211  double
212    bias,           /* depreciated ? */
213    blur,
214    fuzz;           /* current color fuzz attribute */
215
216  FilterTypes
217    filter;         /* resize/distort filter to apply */
218
219  InterlaceType
220    interlace;
221
222  EndianType
223    endian;         /* raw data integer ordering on read/write */
224
225  GravityType
226    gravity;        /* Gravity attribute for positioning in image */
227
228  CompositeOperator
229    compose;        /* alpha composition method for layered images */
230
231  DisposeType
232    dispose;        /* GIF animation disposal method */
233
234  struct _Image
235    *clip_mask;
236
237  size_t
238    scene,          /* index of image in multi-image file */
239    delay;          /* Animation delay time */
240
241  ssize_t
242    ticks_per_second;  /* units for delay time, default 100 for GIF */
243
244  size_t
245    iterations,
246    total_colors;
247
248  ssize_t
249    start_loop;
250
251  PixelInterpolateMethod
252    interpolate;       /* Interpolation of color for between pixel lookups */
253
254  MagickBooleanType
255    black_point_compensation;
256
257  PixelPacket
258    transparent_color; /* color for 'transparent' color index in GIF */
259
260  struct _Image
261    *mask;
262
263  RectangleInfo
264    tile_offset;
265
266  void
267    *properties,       /* per image properities */
268    *artifacts;        /* per image sequence image artifacts */
269
270  ImageType
271    type;
272
273  MagickBooleanType
274    dither;            /* dithering on/off */
275
276  MagickSizeType
277    extent;
278
279  MagickBooleanType
280    ping;
281
282  size_t
283    number_channels,
284    number_meta_channels,
285    metacontent_extent;
286
287  MagickBooleanType
288    sync;
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    color_profile,
316    iptc_profile,
317    *generic_profile;
318
319  char
320    filename[MaxTextExtent],   /* images input filename */
321    magick_filename[MaxTextExtent],
322    magick[MaxTextExtent];
323
324  size_t
325    magick_columns,
326    magick_rows;
327
328  BlobInfo
329    *blob;
330
331  ExceptionInfo
332    exception;        /* Error handling report */
333
334  MagickBooleanType
335    debug;            /* debug output attribute */
336
337  volatile ssize_t
338    reference_count;
339
340  SemaphoreInfo
341    *semaphore;
342
343  struct _Image
344    *previous,         /* Image sequence list links */
345    *list,
346    *next;
347
348  size_t
349    signature;
350};
351
352struct _ImageInfo
353{
354  CompressionType
355    compression;
356
357  OrientationType
358    orientation;
359
360  MagickBooleanType
361    temporary,
362    adjoin,
363    affirm,
364    antialias;
365
366  char
367    *size,
368    *extract,
369    *page,
370    *scenes;
371
372  size_t
373    scene,
374    number_scenes,
375    depth;
376
377  InterlaceType
378    interlace;
379
380  EndianType
381    endian;
382
383  ResolutionType
384    units;
385
386  size_t
387    quality;
388
389  char
390    *sampling_factor,
391    *server_name,
392    *font,
393    *texture,
394    *density;
395
396  double
397    pointsize,
398    fuzz;
399
400  PixelPacket
401    background_color,
402    border_color,
403    matte_color;
404
405  MagickBooleanType
406    dither,
407    monochrome;
408
409  size_t
410    colors;
411
412  ColorspaceType
413    colorspace;
414
415  ImageType
416    type;
417
418  PreviewType
419    preview_type;
420
421  ssize_t
422    group;
423
424  MagickBooleanType
425    ping,
426    verbose;
427
428  char
429    *view,
430    *authenticate;
431
432  ChannelType
433    channel;
434
435  void
436    *options;
437
438  VirtualPixelMethod
439    virtual_pixel_method;
440
441  PixelPacket
442    transparent_color;
443
444  void
445    *profile;
446
447  MagickBooleanType
448    synchronize;
449
450  MagickProgressMonitor
451    progress_monitor;
452
453  void
454    *client_data,
455    *cache;
456
457  StreamHandler
458    stream;
459
460  FILE
461    *file;
462
463  void
464    *blob;
465
466  size_t
467    length;
468
469  char
470    magick[MaxTextExtent],
471    unique[MaxTextExtent],
472    zero[MaxTextExtent],
473    filename[MaxTextExtent];
474
475  MagickBooleanType
476    debug;
477
478  size_t
479    signature;
480};
481
482extern MagickExport const char
483  DefaultTileGeometry[],
484  DefaultTileLabel[],
485  LoadImageTag[],
486  LoadImagesTag[],
487  PSDensityGeometry[],
488  PSPageGeometry[],
489  SaveImageTag[],
490  SaveImagesTag[];
491
492extern MagickExport const double
493  DefaultResolution;
494
495extern MagickExport ExceptionType
496  CatchImageException(Image *);
497
498extern MagickExport FILE
499  *GetImageInfoFile(const ImageInfo *);
500
501extern MagickExport Image
502  *AcquireImage(const ImageInfo *),
503  *AppendImages(const Image *,const MagickBooleanType,ExceptionInfo *),
504  *CloneImage(const Image *,const size_t,const size_t,const MagickBooleanType,
505    ExceptionInfo *),
506  *CombineImages(const Image *,ExceptionInfo *),
507  *DestroyImage(Image *),
508  *GetImageClipMask(const Image *,ExceptionInfo *),
509  *GetImageMask(const Image *,ExceptionInfo *),
510  *NewMagickImage(const ImageInfo *,const size_t,const size_t,
511    const PixelInfo *),
512  *ReferenceImage(Image *),
513  *SeparateImages(const Image *,ExceptionInfo *),
514  *SmushImages(const Image *,const MagickBooleanType,const ssize_t,
515    ExceptionInfo *);
516
517extern MagickExport ImageInfo
518  *AcquireImageInfo(void),
519  *CloneImageInfo(const ImageInfo *),
520  *DestroyImageInfo(ImageInfo *);
521
522extern MagickExport MagickBooleanType
523  ClipImage(Image *,ExceptionInfo *),
524  ClipImagePath(Image *,const char *,const MagickBooleanType,ExceptionInfo *),
525  GetImageAlphaChannel(const Image *),
526  IsTaintImage(const Image *),
527  IsHighDynamicRangeImage(const Image *,ExceptionInfo *),
528  IsImageObject(const Image *),
529  ListMagickInfo(FILE *,ExceptionInfo *),
530  ModifyImage(Image **,ExceptionInfo *),
531  ResetImagePage(Image *,const char *),
532  SeparateImage(Image *),
533  SetImageAlphaChannel(Image *,const AlphaChannelType,ExceptionInfo *),
534  SetImageBackgroundColor(Image *),
535  SetImageClipMask(Image *,const Image *,ExceptionInfo *),
536  SetImageColor(Image *,const PixelInfo *),
537  SetImageExtent(Image *,const size_t,const size_t,ExceptionInfo *),
538  SetImageInfo(ImageInfo *,const unsigned int,ExceptionInfo *),
539  SetImageMask(Image *,const Image *,ExceptionInfo *),
540  SetImageOpacity(Image *,const Quantum),
541  SetImageStorageClass(Image *,const ClassType,ExceptionInfo *),
542  SetImageType(Image *,const ImageType,ExceptionInfo *),
543  StripImage(Image *),
544  SyncImage(Image *),
545  SyncImageSettings(const ImageInfo *,Image *),
546  SyncImagesSettings(ImageInfo *,Image *);
547
548extern MagickExport size_t
549  InterpretImageFilename(const ImageInfo *,Image *,const char *,int,char *);
550
551extern MagickExport ssize_t
552  GetImageReferenceCount(Image *);
553
554extern MagickExport VirtualPixelMethod
555  GetImageVirtualPixelMethod(const Image *),
556  SetImageVirtualPixelMethod(const Image *,const VirtualPixelMethod);
557
558extern MagickExport void
559  AcquireNextImage(const ImageInfo *,Image *),
560  DestroyImagePixels(Image *),
561  DisassociateImageStream(Image *),
562  GetImageException(Image *,ExceptionInfo *),
563  GetImageInfo(ImageInfo *),
564  SetImageInfoBlob(ImageInfo *,const void *,const size_t),
565  SetImageInfoFile(ImageInfo *,FILE *);
566
567#if defined(__cplusplus) || defined(c_plusplus)
568}
569#endif
570
571#endif
572