1 /*
2 
3 Boost Software License - Version 1.0 - August 17th, 2003
4 
5 Permission is hereby granted, free of charge, to any person or organization
6 obtaining a copy of the software and accompanying documentation covered by
7 this license (the "Software") to use, reproduce, display, distribute,
8 execute, and transmit the Software, and to prepare derivative works of the
9 Software, and to permit third-parties to whom the Software is furnished to
10 do so, all subject to the following:
11 
12 The copyright notices in the Software and this entire statement, including
13 the above license grant, this restriction and the following disclaimer,
14 must be included in all copies of the Software, in whole or in part, and
15 all derivative works of the Software, unless such copies or derivative
16 works are solely in the form of machine-executable object code generated by
17 a source language processor.
18 
19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22 SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23 FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25 DEALINGS IN THE SOFTWARE.
26 
27 */
28 module derelict.freeimage.types;
29 
30 import core.stdc.config,
31        core.stdc.stddef;
32 
33 // NOTE: This is the highest verison of FreeImage supported by this binding and is
34 // the version of the shared library loaded by default.
35 // Older versions back to 3.15.0 are also supported. The 3.16 shared libraries
36 // will also load and will mostly function properly, although nothing new in the
37 // 3.16 API will be available.
38 enum FREEIMAGE_MAJOR_VERSION = 3,
39      FREEIMAGE_MINOR_VERSION = 17,
40      FREEIMAGE_RELEASE_SERIAL = 0;
41 
42 enum FREEIMAGE_COLORORDER_BGR = 0,
43      FREEIMAGE_COLORORDER_RGB = 1;
44 
45 version(LittleEndian) {
46     version = FREEIMAGE_COLORORDER_BGR;
47 }
48 else {
49     version = FREEIMAGE_COLORORDER_RGB;
50 }
51 
52 struct FIBITMAP {
53     void *data;
54 }
55 
56 struct FIMULTIBITMAP {
57     void *data;
58 }
59 
60 enum {
61     FALSE = 0,
62     TRUE = 1,
63     NULL = 0,
64     SEEK_SET = 0,
65     SEEK_CUR = 1,
66     SEEK_END = 2
67 }
68 
69 alias BOOL = uint;
70 alias BYTE = ubyte;
71 alias WORD = ushort;
72 alias DWORD = c_ulong;
73 alias LONG = int;
74 
75 // Renamed from FIINT64 and FIUINT64 in 3.15.4
76 alias INT64 = long;
77 alias UINT64 = ulong;
78 
79 // Added in 3.15.3
80 alias FIINT64 = INT64;
81 alias FIUINT64 = UINT64;
82 
83 align(1) struct RGBQUAD {
84     version(FREEIMAGE_COLORORDER_BGR) {
85         BYTE rgbBlue;
86         BYTE rgbGreen;
87         BYTE rgbRed;
88     } else {
89         BYTE rgbRed;
90         BYTE rgbGreen;
91         BYTE rgbBlue;
92     }
93     BYTE rgbReserved;
94 }
95 
96 align(1) struct RGBTRIPLE {
97     version(FREEIMAGE_COLORORDER_BGR) {
98         BYTE rgbtBlue;
99         BYTE rgbtGreen;
100         BYTE rgbtRed;
101     } else {
102         BYTE rgbtRed;
103         BYTE rgbtGreen;
104         BYTE rgbtBlue;
105     }
106 }
107 
108 align(1) struct BITMAPINFOHEADER {
109     DWORD biSize;
110     LONG  biWidth;
111     LONG  biHeight;
112     WORD  biPlanes;
113     WORD  biBitCount;
114     DWORD biCompression;
115     DWORD biSizeImage;
116     LONG  biXPelsPerMeter;
117     LONG  biYPelsPerMeter;
118     DWORD biClrUsed;
119     DWORD biClrImportant;
120 }
121 
122 alias BITMAPINFOHEADER* PBITMAPINFOHEADER;
123 
124 align(1) struct BITMAPINFO {
125     BITMAPINFOHEADER bmiHeader;
126     RGBQUAD[1] bmiColors;
127 }
128 
129 alias BITMAPINFO* PBITMAPINFO;
130 
131 align(1) struct FIRGB16 {
132     WORD red;
133     WORD green;
134     WORD blue;
135 }
136 
137 align(1) struct FIRGBA16 {
138     WORD red;
139     WORD green;
140     WORD blue;
141     WORD alpha;
142 }
143 
144 align(1) struct FIRGBF {
145     float red;
146     float green;
147     float blue;
148 }
149 
150 align(1) struct FIRGBAF {
151     float red;
152     float green;
153     float blue;
154     float alpha;
155 }
156 
157 align(1) struct FICOMPLEX {
158     double r;
159     double i;
160 }
161 
162 struct FIMETADATA {
163     void* data;
164 }
165 
166 struct FITAG {
167     void* data;
168 }
169 
170 version(LittleEndian) {
171     version(FREEIMAGE_COLORORDER_BGR) {
172         enum {
173             FI_RGBA_RED           = 2,
174             FI_RGBA_GREEN         = 1,
175             FI_RGBA_BLUE          = 0,
176             FI_RGBA_ALPHA         = 3,
177             FI_RGBA_RED_MASK      = 0x00FF0000,
178             FI_RGBA_GREEN_MASK    = 0x0000FF00,
179             FI_RGBA_BLUE_MASK     = 0x000000FF,
180             FI_RGBA_ALPHA_MASK    = 0xFF000000,
181             FI_RGBA_RED_SHIFT     = 16,
182             FI_RGBA_GREEN_SHIFT   = 8,
183             FI_RGBA_BLUE_SHIFT    = 0,
184             FI_RGBA_ALPHA_SHIFT   = 24
185         }
186     } else {
187         enum
188         {
189             FI_RGBA_RED           = 0,
190             FI_RGBA_GREEN         = 1,
191             FI_RGBA_BLUE          = 2,
192             FI_RGBA_ALPHA         = 3,
193             FI_RGBA_RED_MASK      = 0x000000FF,
194             FI_RGBA_GREEN_MASK    = 0x0000FF00,
195             FI_RGBA_BLUE_MASK     = 0x00FF0000,
196             FI_RGBA_ALPHA_MASK    = 0xFF000000,
197             FI_RGBA_RED_SHIFT     = 0,
198             FI_RGBA_GREEN_SHIFT   = 8,
199             FI_RGBA_BLUE_SHIFT    = 16,
200             FI_RGBA_ALPHA_SHIFT   = 24
201         }
202     }
203 }
204 else {
205     version(FREEIMAGE_COLORORDER_BGR) {
206         enum {
207             FI_RGBA_RED           = 2,
208             FI_RGBA_GREEN         = 1,
209             FI_RGBA_BLUE          = 0,
210             FI_RGBA_ALPHA         = 3,
211             FI_RGBA_RED_MASK      = 0x0000FF00,
212             FI_RGBA_GREEN_MASK    = 0x00FF0000,
213             FI_RGBA_BLUE_MASK     = 0xFF000000,
214             FI_RGBA_ALPHA_MASK    = 0x000000FF,
215             FI_RGBA_RED_SHIFT     = 8,
216             FI_RGBA_GREEN_SHIFT   = 16,
217             FI_RGBA_BLUE_SHIFT    = 24,
218             FI_RGBA_ALPHA_SHIFT   = 0
219         }
220     }
221     else {
222         enum {
223             FI_RGBA_RED           = 0,
224             FI_RGBA_GREEN         = 1,
225             FI_RGBA_BLUE          = 2,
226             FI_RGBA_ALPHA         = 3,
227             FI_RGBA_RED_MASK      = 0xFF000000,
228             FI_RGBA_GREEN_MASK    = 0x00FF0000,
229             FI_RGBA_BLUE_MASK     = 0x0000FF00,
230             FI_RGBA_ALPHA_MASK    = 0x000000FF,
231             FI_RGBA_RED_SHIFT     = 24,
232             FI_RGBA_GREEN_SHIFT   = 16,
233             FI_RGBA_BLUE_SHIFT    = 8,
234             FI_RGBA_ALPHA_SHIFT   = 0
235         }
236     }
237 }
238 
239 enum FI_RGBA_RGB_MASK = FI_RGBA_RED_MASK | FI_RGBA_GREEN_MASK | FI_RGBA_BLUE_MASK;
240 
241 enum {
242     FI16_555_RED_MASK     = 0x7C00,
243     FI16_555_GREEN_MASK   = 0x03E0,
244     FI16_555_BLUE_MASK    = 0x001F,
245     FI16_555_RED_SHIFT    = 10,
246     FI16_555_GREEN_SHIFT  = 5,
247     FI16_555_BLUE_SHIFT   = 0,
248     FI16_565_RED_MASK     = 0xF800,
249     FI16_565_GREEN_MASK   = 0x07E0,
250     FI16_565_BLUE_MASK    = 0x001F,
251     FI16_565_RED_SHIFT    = 11,
252     FI16_565_GREEN_SHIFT  = 5,
253     FI16_565_BLUE_SHIFT   = 0
254 }
255 
256 enum {
257     FIICC_DEFAULT       = 0x00,
258     FIICC_COLOR_IS_CMYK = 0x01
259 }
260 
261 struct FIICCPROFILE {
262     WORD  flags;    // info flag
263     DWORD  size;    // profile's size measured in bytes
264     void  *data;    // points to a block of contiguous memory containing the profile
265 }
266 
267 alias int FREE_IMAGE_FORMAT;
268 enum : FREE_IMAGE_FORMAT {
269     FIF_UNKNOWN = -1,
270     FIF_BMP     = 0,
271     FIF_ICO     = 1,
272     FIF_JPEG    = 2,
273     FIF_JNG     = 3,
274     FIF_KOALA   = 4,
275     FIF_LBM     = 5,
276     FIF_IFF     = FIF_LBM,
277     FIF_MNG     = 6,
278     FIF_PBM     = 7,
279     FIF_PBMRAW  = 8,
280     FIF_PCD     = 9,
281     FIF_PCX     = 10,
282     FIF_PGM     = 11,
283     FIF_PGMRAW  = 12,
284     FIF_PNG     = 13,
285     FIF_PPM     = 14,
286     FIF_PPMRAW  = 15,
287     FIF_RAS     = 16,
288     FIF_TARGA   = 17,
289     FIF_TIFF    = 18,
290     FIF_WBMP    = 19,
291     FIF_PSD     = 20,
292     FIF_CUT     = 21,
293     FIF_XBM     = 22,
294     FIF_XPM     = 23,
295     FIF_DDS     = 24,
296     FIF_GIF     = 25,
297     FIF_HDR     = 26,
298     FIF_FAXG3   = 27,
299     FIF_SGI     = 28,
300     FIF_EXR     = 29,
301     FIF_J2K     = 30,
302     FIF_JP2     = 31,
303     FIF_PFM     = 32,
304     FIF_PICT    = 33,
305     FIF_RAW     = 34,
306     // FreeImage 3.16.0
307     FIF_WEBP    = 35,
308     FFI_JXR     = 36,
309 }
310 
311 alias int FREE_IMAGE_TYPE;
312 enum : FREE_IMAGE_TYPE {
313     FIT_UNKNOWN = 0,
314     FIT_BITMAP  = 1,
315     FIT_UINT16  = 2,
316     FIT_INT16   = 3,
317     FIT_UINT32  = 4,
318     FIT_INT32   = 5,
319     FIT_FLOAT   = 6,
320     FIT_DOUBLE  = 7,
321     FIT_COMPLEX = 8,
322     FIT_RGB16   = 9,
323     FIT_RGBA16  = 10,
324     FIT_RGBF    = 11,
325     FIT_RGBAF   = 12
326 }
327 
328 alias int FREE_IMAGE_COLOR_TYPE;
329 enum : FREE_IMAGE_COLOR_TYPE {
330     FIC_MINISWHITE = 0,
331     FIC_MINISBLACK = 1,
332     FIC_RGB        = 2,
333     FIC_PALETTE    = 3,
334     FIC_RGBALPHA   = 4,
335     FIC_CMYK       = 5
336 }
337 
338 alias int FREE_IMAGE_QUANTIZE;
339 enum : FREE_IMAGE_QUANTIZE {
340     FIQ_WUQUANT = 0,
341     FIQ_NNQUANT = 1
342 }
343 
344 alias int FREE_IMAGE_DITHER;
345 enum : FREE_IMAGE_DITHER {
346     FID_FS          = 0,
347     FID_BAYER4x4    = 1,
348     FID_BAYER8x8    = 2,
349     FID_CLUSTER6x6  = 3,
350     FID_CLUSTER8x8  = 4,
351     FID_CLUSTER16x16= 5,
352     FID_BAYER16x16  = 6
353 }
354 
355 alias int FREE_IMAGE_JPEG_OPERATION;
356 enum : FREE_IMAGE_JPEG_OPERATION
357 {
358     FIJPEG_OP_NONE          = 0,
359     FIJPEG_OP_FLIP_H        = 1,
360     FIJPEG_OP_FLIP_V        = 2,
361     FIJPEG_OP_TRANSPOSE     = 3,
362     FIJPEG_OP_TRANSVERSE    = 4,
363     FIJPEG_OP_ROTATE_90     = 5,
364     FIJPEG_OP_ROTATE_180    = 6,
365     FIJPEG_OP_ROTATE_270    = 7
366 }
367 
368 alias int FREE_IMAGE_TMO;
369 enum : FREE_IMAGE_TMO {
370     FITMO_DRAGO03    = 0,
371     FITMO_REINHARD05 = 1,
372     FITMO_FATTAL02   = 2
373 }
374 
375 alias int FREE_IMAGE_FILTER;
376 enum : FREE_IMAGE_FILTER {
377     FILTER_BOX        = 0,
378     FILTER_BICUBIC    = 1,
379     FILTER_BILINEAR   = 2,
380     FILTER_BSPLINE    = 3,
381     FILTER_CATMULLROM = 4,
382     FILTER_LANCZOS3   = 5
383 }
384 
385 alias int FREE_IMAGE_COLOR_CHANNEL;
386 enum : FREE_IMAGE_COLOR_CHANNEL
387 {
388     FICC_RGB    = 0,
389     FICC_RED    = 1,
390     FICC_GREEN  = 2,
391     FICC_BLUE   = 3,
392     FICC_ALPHA  = 4,
393     FICC_BLACK  = 5,
394     FICC_REAL   = 6,
395     FICC_IMAG   = 7,
396     FICC_MAG    = 8,
397     FICC_PHASE  = 9
398 }
399 
400 alias int FREE_IMAGE_MDTYPE;
401 enum : FREE_IMAGE_MDTYPE {
402     FIDT_NOTYPE     = 0,
403     FIDT_BYTE       = 1,
404     FIDT_ASCII      = 2,
405     FIDT_SHORT      = 3,
406     FIDT_LONG       = 4,
407     FIDT_RATIONAL   = 5,
408     FIDT_SBYTE      = 6,
409     FIDT_UNDEFINED  = 7,
410     FIDT_SSHORT     = 8,
411     FIDT_SLONG      = 9,
412     FIDT_SRATIONAL  = 10,
413     FIDT_FLOAT      = 11,
414     FIDT_DOUBLE     = 12,
415     FIDT_IFD        = 13,
416     FIDT_PALETTE    = 14,
417     // Added in 3.15.3
418     FIDT_LONG8      = 16,
419     FIDT_SLONG8     = 17,
420     FIDT_IFD8       = 18
421 }
422 
423 alias int FREE_IMAGE_MDMODEL;
424 enum : FREE_IMAGE_MDMODEL {
425     FIMD_NODATA         = -1,
426     FIMD_COMMENTS       = 0,
427     FIMD_EXIF_MAIN      = 1,
428     FIMD_EXIF_EXIF      = 2,
429     FIMD_EXIF_GPS       = 3,
430     FIMD_EXIF_MAKERNOTE = 4,
431     FIMD_EXIF_INTEROP   = 5,
432     FIMD_IPTC           = 6,
433     FIMD_XMP            = 7,
434     FIMD_GEOTIFF        = 8,
435     FIMD_ANIMATION      = 9,
436     FIMD_CUSTOM         = 10,
437     FIMD_EXIF_RAW       = 11
438 }
439 
440 alias void* fi_handle;
441 extern(System) nothrow {
442     alias FI_ReadProc = uint function(void *buffer, uint size, uint count, fi_handle handle);
443     alias FI_WriteProc = uint function(void *buffer, uint size, uint count, fi_handle handle);
444     alias FI_SeekProc = int function(fi_handle handle, c_long offset, int origin);
445     alias FI_TellProc = c_long function(fi_handle handle);
446 }
447 
448 align(1) struct FreeImageIO {
449     FI_ReadProc  read_proc;
450     FI_WriteProc write_proc;
451     FI_SeekProc  seek_proc;
452     FI_TellProc  tell_proc;
453 }
454 
455 struct FIMEMORY {
456     void *data;
457 }
458 
459 extern(C) nothrow {
460     alias FI_FormatProc = const(char)* function(char)* function();
461     alias FI_DescriptionProc = const(char)* function(char)* function();
462     alias FI_ExtensionListProc = const(char)* function(char)* function();
463     alias FI_RegExprProc = const(char)* function(char)* function();
464     alias FI_OpenProc = void* function(FreeImageIO *io, fi_handle handle, BOOL read);
465     alias FI_CloseProc = void function(FreeImageIO *io, fi_handle handle, void *data);
466     alias FI_PageCountProc = int function(FreeImageIO *io, fi_handle handle, void *data);
467     alias FI_PageCapabilityProc = int function(FreeImageIO *io, fi_handle handle, void *data);
468     alias FI_LoadProc = FIBITMAP* function(FreeImageIO *io, fi_handle handle, int page, int flags, void *data);
469     alias FI_SaveProc = BOOL function(FreeImageIO *io, FIBITMAP *dib, fi_handle handle, int page, int flags, void *data);
470     alias FI_ValidateProc = BOOL function(FreeImageIO *io, fi_handle handle);
471     alias FI_MimeProc = const(char) function(char) function();
472     alias FI_SupportsExportBPPProc = BOOL function(int bpp);
473     alias FI_SupportsExportTypeProc = BOOL function(FREE_IMAGE_TYPE type);
474     alias FI_SupportsICCProfilesProc = BOOL function();
475     alias FI_SupportsNoPixelsProc = BOOL function();
476 }
477 
478 struct Plugin {
479     FI_FormatProc format_proc;
480     FI_DescriptionProc description_proc;
481     FI_ExtensionListProc extension_proc;
482     FI_RegExprProc regexpr_proc;
483     FI_OpenProc open_proc;
484     FI_CloseProc close_proc;
485     FI_PageCountProc pagecount_proc;
486     FI_PageCapabilityProc pagecapability_proc;
487     FI_LoadProc load_proc;
488     FI_SaveProc save_proc;
489     FI_ValidateProc validate_proc;
490     FI_MimeProc mime_proc;
491     FI_SupportsExportBPPProc supports_export_bpp_proc;
492     FI_SupportsExportTypeProc supports_export_type_proc;
493     FI_SupportsICCProfilesProc supports_icc_profiles_proc;
494     FI_SupportsNoPixelsProc supports_no_pixels_proc;
495 }
496 
497 
498 extern(C) nothrow alias FI_InitProc =void function(Plugin *plugin, int format_id);
499 
500 
501 // Load / Save flag constants -----------------------------------------------
502 
503 enum {
504      FIF_LOAD_NOPIXELS   = 0x8000,
505      BMP_DEFAULT         = 0,
506      BMP_SAVE_RLE        = 1,
507      CUT_DEFAULT         = 0,
508      DDS_DEFAULT         = 0,
509      EXR_DEFAULT         = 0,
510      EXR_FLOAT           = 0x0001,
511      EXR_NONE            = 0x0002,
512      EXR_ZIP             = 0x0004,
513      EXR_PIZ             = 0x0008,
514      EXR_PXR24           = 0x0010,
515      EXR_B44             = 0x0020,
516      EXR_LC              = 0x0040,
517      FAXG3_DEFAULT       = 0,
518      GIF_DEFAULT         = 0,
519      GIF_LOAD256         = 1,
520      GIF_PLAYBACK        = 2,
521      HDR_DEFAULT         = 0,
522      ICO_DEFAULT         = 0,
523      ICO_MAKEALPHA       = 1,
524      IFF_DEFAULT         = 0,
525      J2K_DEFAULT         = 0,
526      JP2_DEFAULT         = 0,
527      JPEG_DEFAULT        = 0,
528      JPEG_FAST           = 0x0001,
529      JPEG_ACCURATE       = 0x0002,
530      JPEG_CMYK           = 0x0004,
531      JPEG_EXIFROTATE     = 0x0008,
532      JPEG_GRAYSCALE      = 0x0010, // Added in 3.15.4
533      JPEG_QUALITYSUPERB  = 0x80,
534      JPEG_QUALITYGOOD    = 0x0100,
535      JPEG_QUALITYNORMAL  = 0x0200,
536      JPEG_QUALITYAVERAGE = 0x0400,
537      JPEG_QUALITYBAD     = 0x0800,
538      JPEG_PROGRESSIVE    = 0x2000,
539 
540      JPEG_SUBSAMPLING_411 = 0x1000,
541      JPEG_SUBSAMPLING_420 = 0x4000,
542      JPEG_SUBSAMPLING_422 = 0x8000,
543      JPEG_SUBSAMPLING_444 = 0x10000,
544      JPEG_OPTIMIZE        = 0x20000,
545      JPEG_BASELINE       = 0x40000,
546      KOALA_DEFAULT       = 0,
547      LBM_DEFAULT         = 0,
548      MNG_DEFAULT         = 0,
549      PCD_DEFAULT         = 0,
550      PCD_BASE            = 1,
551      PCD_BASEDIV4        = 2,
552      PCD_BASEDIV16       = 3,
553      PCX_DEFAULT         = 0,
554      PFM_DEFAULT         = 0,
555      PICT_DEFAULT        = 0,
556      PNG_DEFAULT         = 0,
557      PNG_IGNOREGAMMA     = 1,
558      PNG_Z_BEST_SPEED    = 0x0001,
559      PNG_Z_DEFAULT_COMPRESSION = 0x0006,
560      PNG_Z_BEST_COMPRESSION    = 0x0009,
561      PNG_Z_NO_COMPRESSION      = 0x0100,
562      PNG_INTERLACED            = 0x0200,
563      PNM_DEFAULT         = 0,
564      PNM_SAVE_RAW        = 0,
565      PNM_SAVE_ASCII      = 1,
566      PSD_DEFAULT         = 0,
567      PSD_CMYK            = 1,
568      PSD_LAB             = 2,
569      RAS_DEFAULT         = 0,
570      RAW_DEFAULT         = 0,
571      RAW_PREVIEW         = 1,
572      RAW_DISPLAY         = 2,
573      RAW_HALFSIZE        = 4, // Added in 3.15.1
574      RAW_UNPROCESSED     = 8, // Added in 3.17.0
575      SGI_DEFAULT         = 0,
576      TARGA_DEFAULT       = 0,
577      TARGA_LOAD_RGB888   = 1,
578      TARGA_SAVE_RLE      = 2,
579      TIFF_DEFAULT        = 0,
580      TIFF_CMYK           = 0x0001,
581      TIFF_PACKBITS       = 0x0100,
582      TIFF_DEFLATE        = 0x0200,
583      TIFF_ADOBE_DEFLATE  = 0x0400,
584      TIFF_NONE           = 0x0800,
585      TIFF_CCITTFAX3      = 0x1000,
586      TIFF_CCITTFAX4      = 0x2000,
587      TIFF_LZW            = 0x4000,
588      TIFF_JPEG           = 0x8000,
589      TIFF_LOGLUV         = 0x10000,
590      WBMP_DEFAULT        = 0,
591      XBM_DEFAULT         = 0,
592      XPM_DEFAULT         = 0,
593      // FreeImage 3.16.0
594      WEBP_DEFAULT        = 0,
595      WEBP_LOSSLESS       = 0x100,
596      JXR_DEFAULT         = 0,
597      JXR_LOSSLESS        = 0x0064,
598      JXR_PROGRESSIVE     = 0x2000,
599  }
600 
601 enum {
602     FI_COLOR_IS_RGB_COLOR        = 0x00,
603     FI_COLOR_IS_RGBA_COLOR       = 0x01,
604     FI_COLOR_FIND_EQUAL_COLOR    = 0x02,
605     FI_COLOR_ALPHA_IS_INDEX      = 0x04,
606     FI_COLOR_PALETTE_SEARCH_MASK = (FI_COLOR_FIND_EQUAL_COLOR | FI_COLOR_ALPHA_IS_INDEX)
607 }
608 
609 // FreeImage 3.17.0
610 enum {
611     FI_RESCALE_DEFAULT          = 0x00,
612     FI_RESCALE_TRUE_COLOR       = 0x01,
613     FI_RESCALE_OMIT_METADATA    = 0x02,
614 }
615 
616 extern(C) nothrow alias FreeImage_OutputMessageFunction = void function(FREE_IMAGE_FORMAT fif, const(char)* msg);
617 extern(Windows) nothrow alias FreeImage_OutputMessageFunctionStdCall = void function(FREE_IMAGE_FORMAT fif, const(char)* msg);