MagickCore 7.1.0
Convert, Edit, Or Compose Bitmap Images
Loading...
Searching...
No Matches
image.h
1/*
2 Copyright @ 1999 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)
22extern "C" {
23#endif
24
25#define OpaqueAlpha ((Quantum) QuantumRange)
26#define TransparentAlpha ((Quantum) 0)
27
28typedef 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
48typedef 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
64typedef enum
65{
66 UndefinedInterlace,
67 NoInterlace,
68 LineInterlace,
69 PlaneInterlace,
70 PartitionInterlace,
71 GIFInterlace,
72 JPEGInterlace,
73 PNGInterlace
74} InterlaceType;
75
76typedef enum
77{
78 UndefinedOrientation,
79 TopLeftOrientation,
80 TopRightOrientation,
81 BottomRightOrientation,
82 BottomLeftOrientation,
83 LeftTopOrientation,
84 RightTopOrientation,
85 RightBottomOrientation,
86 LeftBottomOrientation
87} OrientationType;
88
89typedef enum
90{
91 UndefinedResolution,
92 PixelsPerInchResolution,
93 PixelsPerCentimeterResolution
94} ResolutionType;
95
96typedef struct _PrimaryInfo
97{
98 double
99 x,
100 y,
101 z;
103
104typedef struct _SegmentInfo
105{
106 double
107 x1,
108 y1,
109 x2,
110 y2;
112
113typedef enum
114{
115 UndefinedTransmitType,
116 FileTransmitType,
117 BlobTransmitType,
118 StreamTransmitType,
119 ImageTransmitType
120} TransmitType;
121
122typedef struct _ChromaticityInfo
123{
125 red_primary,
126 green_primary,
127 blue_primary,
128 white_point;
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
151struct _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
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
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
209 resolution; /* image resolution/density */
210
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 interactions 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
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
291 *channel_map;
292
293 void
294 *cache;
295
297 error;
298
300 timer;
301
302 MagickProgressMonitor
303 progress_monitor;
304
305 void
306 *client_data;
307
309 *ascii85;
310
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
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
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, prosperity, 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
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*/
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 "ephemeral:" */
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; /* density pixels/inch or pixel/cm */
408
409 size_t
410 quality; /* compression quality */
411
412 char
413 *sampling_factor, /* Chroma subsampling ratio string */
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
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 monochrome 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 temporary filename - delegates */
482 filename[MagickPathExtent]; /* filename when reading/writing image */
483
484 MagickBooleanType
485 debug;
486
487 size_t
488 signature;
489
491 *custom_stream;
492
494 matte_color; /* matte (frame) color */
495};
496
497extern MagickExport ChannelType
498 SetImageChannelMask(Image *,const ChannelType);
499
500extern MagickExport ExceptionType
501 CatchImageException(Image *);
502
503extern MagickExport FILE
504 *GetImageInfoFile(const ImageInfo *);
505
506extern MagickExport Image
507 *AcquireImage(const ImageInfo *,ExceptionInfo *),
508 *AppendImages(const Image *,const MagickBooleanType,ExceptionInfo *),
509 *CloneImage(const Image *,const size_t,const size_t,const MagickBooleanType,
510 ExceptionInfo *),
511 *DestroyImage(Image *),
512 *GetImageMask(const Image *,const PixelMask,ExceptionInfo *),
513 *NewMagickImage(const ImageInfo *,const size_t,const size_t,const PixelInfo *,
514 ExceptionInfo *),
515 *ReferenceImage(Image *),
516 *SmushImages(const Image *,const MagickBooleanType,const ssize_t,
517 ExceptionInfo *);
518
519extern MagickExport ImageInfo
520 *AcquireImageInfo(void),
521 *CloneImageInfo(const ImageInfo *),
522 *DestroyImageInfo(ImageInfo *);
523
524extern MagickExport MagickBooleanType
525 ClipImage(Image *,ExceptionInfo *),
526 ClipImagePath(Image *,const char *,const MagickBooleanType,ExceptionInfo *),
527 CopyImagePixels(Image *,const Image *,const RectangleInfo *,
528 const OffsetInfo *,ExceptionInfo *),
529 IsTaintImage(const Image *),
530 IsHighDynamicRangeImage(const Image *,ExceptionInfo *),
531 IsImageObject(const Image *),
532 ListMagickInfo(FILE *,ExceptionInfo *),
533 ModifyImage(Image **,ExceptionInfo *),
534 ResetImagePage(Image *,const char *),
535 ResetImagePixels(Image *,ExceptionInfo *),
536 SetImageAlpha(Image *,const Quantum,ExceptionInfo *),
537 SetImageBackgroundColor(Image *,ExceptionInfo *),
538 SetImageColor(Image *,const PixelInfo *,ExceptionInfo *),
539 SetImageExtent(Image *,const size_t,const size_t,ExceptionInfo *),
540 SetImageInfo(ImageInfo *,const unsigned int,ExceptionInfo *),
541 SetImageMask(Image *,const PixelMask type,const Image *,ExceptionInfo *),
542 SetImageRegionMask(Image *,const PixelMask type,const RectangleInfo *,
543 ExceptionInfo *),
544 SetImageStorageClass(Image *,const ClassType,ExceptionInfo *),
545 StripImage(Image *,ExceptionInfo *),
546 SyncImage(Image *,ExceptionInfo *),
547 SyncImageSettings(const ImageInfo *,Image *,ExceptionInfo *),
548 SyncImagesSettings(ImageInfo *,Image *,ExceptionInfo *);
549
550extern MagickExport size_t
551 InterpretImageFilename(const ImageInfo *,Image *,const char *,int,char *,
552 ExceptionInfo *);
553
554extern MagickExport ssize_t
555 GetImageReferenceCount(Image *);
556
557extern MagickExport VirtualPixelMethod
558 GetImageVirtualPixelMethod(const Image *),
559 SetImageVirtualPixelMethod(Image *,const VirtualPixelMethod,ExceptionInfo *);
560
561extern MagickExport void
562 AcquireNextImage(const ImageInfo *,Image *,ExceptionInfo *),
563 DestroyImagePixels(Image *),
564 DisassociateImageStream(Image *),
565 GetImageInfo(ImageInfo *),
566 SetImageInfoBlob(ImageInfo *,const void *,const size_t),
567 SetImageInfoFile(ImageInfo *,FILE *),
568 SetImageInfoCustomStream(ImageInfo *,CustomStreamInfo *);
569
570#if defined(__cplusplus) || defined(c_plusplus)
571}
572#endif
573
574#endif
Definition: image.h:152