FreeImagePlus  - FreeImage 3.15.1
FreeImage.h
1 // ==========================================================
2 // FreeImage 3
3 //
4 // Design and implementation by
5 // - Floris van den Berg (flvdberg@wxs.nl)
6 // - HervĂ© Drolon (drolon@infonie.fr)
7 //
8 // Contributors:
9 // - see changes log named 'Whatsnew.txt', see header of each .h and .cpp file
10 //
11 // This file is part of FreeImage 3
12 //
13 // COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY
14 // OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
15 // THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE
16 // OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED
17 // CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT
18 // THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY
19 // SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL
20 // PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER
21 // THIS DISCLAIMER.
22 //
23 // Use at your own risk!
24 // ==========================================================
25 
26 #ifndef FREEIMAGE_H
27 #define FREEIMAGE_H
28 
29 // Version information ------------------------------------------------------
30 
31 #define FREEIMAGE_MAJOR_VERSION 3
32 #define FREEIMAGE_MINOR_VERSION 17
33 #define FREEIMAGE_RELEASE_SERIAL 0
34 
35 // Compiler options ---------------------------------------------------------
36 
37 #include <wchar.h> // needed for UNICODE functions
38 
39 #if defined(FREEIMAGE_LIB)
40  #define DLL_API
41  #define DLL_CALLCONV
42 #else
43  #if defined(_WIN32) || defined(__WIN32__)
44  #define DLL_CALLCONV __stdcall
45  // The following ifdef block is the standard way of creating macros which make exporting
46  // from a DLL simpler. All files within this DLL are compiled with the FREEIMAGE_EXPORTS
47  // symbol defined on the command line. this symbol should not be defined on any project
48  // that uses this DLL. This way any other project whose source files include this file see
49  // DLL_API functions as being imported from a DLL, wheras this DLL sees symbols
50  // defined with this macro as being exported.
51  #ifdef FREEIMAGE_EXPORTS
52  #define DLL_API __declspec(dllexport)
53  #else
54  #define DLL_API __declspec(dllimport)
55  #endif // FREEIMAGE_EXPORTS
56  #else
57  // try the gcc visibility support (see http://gcc.gnu.org/wiki/Visibility)
58  #if defined(__GNUC__) && ((__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
59  #ifndef GCC_HASCLASSVISIBILITY
60  #define GCC_HASCLASSVISIBILITY
61  #endif
62  #endif // __GNUC__
63  #define DLL_CALLCONV
64  #if defined(GCC_HASCLASSVISIBILITY)
65  #define DLL_API __attribute__ ((visibility("default")))
66  #else
67  #define DLL_API
68  #endif
69  #endif // WIN32 / !WIN32
70 #endif // FREEIMAGE_LIB
71 
72 // Endianness:
73 // Some versions of gcc may have BYTE_ORDER or __BYTE_ORDER defined.
74 // If your big endian system isn't being detected, add an OS specific check
75 // or define any of FREEIMAGE_BIGENDIAN and FREEIMAGE_LITTLEENDIAN directly
76 // to specify the desired endianness.
77 #if (!defined(FREEIMAGE_BIGENDIAN) && !defined(FREEIMAGE_LITTLEENDIAN))
78  #if (defined(BYTE_ORDER) && BYTE_ORDER==BIG_ENDIAN) || (defined(__BYTE_ORDER) && __BYTE_ORDER==__BIG_ENDIAN) || defined(__BIG_ENDIAN__)
79  #define FREEIMAGE_BIGENDIAN
80  #endif // BYTE_ORDER
81 #endif // !FREEIMAGE_[BIG|LITTLE]ENDIAN
82 
83 // Color-Order:
84 // The specified order of color components red, green and blue affects 24-
85 // and 32-bit images of type FIT_BITMAP as well as the colors that are part
86 // of a color palette. All other images always use RGB order. By default,
87 // color order is coupled to endianness:
88 // little-endian -> BGR
89 // big-endian -> RGB
90 // However, you can always define FREEIMAGE_COLORORDER to any of the known
91 // orders FREEIMAGE_COLORORDER_BGR (0) and FREEIMAGE_COLORORDER_RGB (1) to
92 // specify your preferred color order.
93 #define FREEIMAGE_COLORORDER_BGR 0
94 #define FREEIMAGE_COLORORDER_RGB 1
95 #if (!defined(FREEIMAGE_COLORORDER)) || ((FREEIMAGE_COLORORDER != FREEIMAGE_COLORORDER_BGR) && (FREEIMAGE_COLORORDER != FREEIMAGE_COLORORDER_RGB))
96  #if defined(FREEIMAGE_BIGENDIAN)
97  #define FREEIMAGE_COLORORDER FREEIMAGE_COLORORDER_RGB
98  #else
99  #define FREEIMAGE_COLORORDER FREEIMAGE_COLORORDER_BGR
100  #endif // FREEIMAGE_BIGENDIAN
101 #endif // FREEIMAGE_COLORORDER
102 
103 // Ensure 4-byte enums if we're using Borland C++ compilers
104 #if defined(__BORLANDC__)
105 #pragma option push -b
106 #endif
107 
108 // For C compatibility --------------------------------------------------------
109 
110 #ifdef __cplusplus
111 #define FI_DEFAULT(x) = x
112 #define FI_ENUM(x) enum x
113 #define FI_STRUCT(x) struct x
114 #else
115 #define FI_DEFAULT(x)
116 #define FI_ENUM(x) typedef int x; enum x
117 #define FI_STRUCT(x) typedef struct x x; struct x
118 #endif
119 
120 // Bitmap types -------------------------------------------------------------
121 
122 FI_STRUCT (FIBITMAP) { void *data; };
123 FI_STRUCT (FIMULTIBITMAP) { void *data; };
124 
125 // Types used in the library (directly copied from Windows) -----------------
126 
127 #if defined(__MINGW32__) && defined(_WINDOWS_H)
128 #define _WINDOWS_ // prevent a bug in MinGW32
129 #endif // __MINGW32__
130 
131 #ifndef _WINDOWS_
132 #define _WINDOWS_
133 
134 #ifndef FALSE
135 #define FALSE 0
136 #endif
137 #ifndef TRUE
138 #define TRUE 1
139 #endif
140 #ifndef NULL
141 #define NULL 0
142 #endif
143 
144 #ifndef SEEK_SET
145 #define SEEK_SET 0
146 #define SEEK_CUR 1
147 #define SEEK_END 2
148 #endif
149 
150 #ifndef _MSC_VER
151 // define portable types for 32-bit / 64-bit OS
152 #include <inttypes.h>
153 typedef int32_t BOOL;
154 typedef uint8_t BYTE;
155 typedef uint16_t WORD;
156 typedef uint32_t DWORD;
157 typedef int32_t LONG;
158 // Disable these, they conflict with the (wrong) ones of libraw
159 #if 0
160 typedef int64_t INT64;
161 typedef uint64_t UINT64;
162 #endif
163 #else
164 // MS is not C99 ISO compliant
165 typedef long BOOL;
166 typedef unsigned char BYTE;
167 typedef unsigned short WORD;
168 typedef unsigned long DWORD;
169 typedef long LONG;
170 typedef signed __int64 INT64;
171 typedef unsigned __int64 UINT64;
172 #endif // _MSC_VER
173 
174 #if (defined(_WIN32) || defined(__WIN32__))
175 #pragma pack(push, 1)
176 #else
177 #pragma pack(1)
178 #endif // WIN32
179 
180 typedef struct tagRGBQUAD {
181 #if FREEIMAGE_COLORORDER == FREEIMAGE_COLORORDER_BGR
182  BYTE rgbBlue;
183  BYTE rgbGreen;
184  BYTE rgbRed;
185 #else
186  BYTE rgbRed;
187  BYTE rgbGreen;
188  BYTE rgbBlue;
189 #endif // FREEIMAGE_COLORORDER
190  BYTE rgbReserved;
191 } RGBQUAD;
192 
193 typedef struct tagRGBTRIPLE {
194 #if FREEIMAGE_COLORORDER == FREEIMAGE_COLORORDER_BGR
195  BYTE rgbtBlue;
196  BYTE rgbtGreen;
197  BYTE rgbtRed;
198 #else
199  BYTE rgbtRed;
200  BYTE rgbtGreen;
201  BYTE rgbtBlue;
202 #endif // FREEIMAGE_COLORORDER
203 } RGBTRIPLE;
204 
205 #if (defined(_WIN32) || defined(__WIN32__))
206 #pragma pack(pop)
207 #else
208 #pragma pack()
209 #endif // WIN32
210 
211 typedef struct tagBITMAPINFOHEADER{
212  DWORD biSize;
213  LONG biWidth;
214  LONG biHeight;
215  WORD biPlanes;
216  WORD biBitCount;
217  DWORD biCompression;
218  DWORD biSizeImage;
219  LONG biXPelsPerMeter;
220  LONG biYPelsPerMeter;
221  DWORD biClrUsed;
222  DWORD biClrImportant;
224 
225 typedef struct tagBITMAPINFO {
226  BITMAPINFOHEADER bmiHeader;
227  RGBQUAD bmiColors[1];
229 
230 #endif // _WINDOWS_
231 
232 // Types used in the library (specific to FreeImage) ------------------------
233 
234 #if (defined(_WIN32) || defined(__WIN32__))
235 #pragma pack(push, 1)
236 #else
237 #pragma pack(1)
238 #endif // WIN32
239 
242 typedef struct tagFIRGB16 {
243  WORD red;
244  WORD green;
245  WORD blue;
246 } FIRGB16;
247 
250 typedef struct tagFIRGBA16 {
251  WORD red;
252  WORD green;
253  WORD blue;
254  WORD alpha;
255 } FIRGBA16;
256 
259 typedef struct tagFIRGBF {
260  float red;
261  float green;
262  float blue;
263 } FIRGBF;
264 
267 typedef struct tagFIRGBAF {
268  float red;
269  float green;
270  float blue;
271  float alpha;
272 } FIRGBAF;
273 
276 typedef struct tagFICOMPLEX {
278  double r;
280  double i;
281 } FICOMPLEX;
282 
283 #if (defined(_WIN32) || defined(__WIN32__))
284 #pragma pack(pop)
285 #else
286 #pragma pack()
287 #endif // WIN32
288 
289 // Indexes for byte arrays, masks and shifts for treating pixels as words ---
290 // These coincide with the order of RGBQUAD and RGBTRIPLE -------------------
291 
292 #ifndef FREEIMAGE_BIGENDIAN
293 #if FREEIMAGE_COLORORDER == FREEIMAGE_COLORORDER_BGR
294 // Little Endian (x86 / MS Windows, Linux) : BGR(A) order
295 #define FI_RGBA_RED 2
296 #define FI_RGBA_GREEN 1
297 #define FI_RGBA_BLUE 0
298 #define FI_RGBA_ALPHA 3
299 #define FI_RGBA_RED_MASK 0x00FF0000
300 #define FI_RGBA_GREEN_MASK 0x0000FF00
301 #define FI_RGBA_BLUE_MASK 0x000000FF
302 #define FI_RGBA_ALPHA_MASK 0xFF000000
303 #define FI_RGBA_RED_SHIFT 16
304 #define FI_RGBA_GREEN_SHIFT 8
305 #define FI_RGBA_BLUE_SHIFT 0
306 #define FI_RGBA_ALPHA_SHIFT 24
307 #else
308 // Little Endian (x86 / MaxOSX) : RGB(A) order
309 #define FI_RGBA_RED 0
310 #define FI_RGBA_GREEN 1
311 #define FI_RGBA_BLUE 2
312 #define FI_RGBA_ALPHA 3
313 #define FI_RGBA_RED_MASK 0x000000FF
314 #define FI_RGBA_GREEN_MASK 0x0000FF00
315 #define FI_RGBA_BLUE_MASK 0x00FF0000
316 #define FI_RGBA_ALPHA_MASK 0xFF000000
317 #define FI_RGBA_RED_SHIFT 0
318 #define FI_RGBA_GREEN_SHIFT 8
319 #define FI_RGBA_BLUE_SHIFT 16
320 #define FI_RGBA_ALPHA_SHIFT 24
321 #endif // FREEIMAGE_COLORORDER
322 #else
323 #if FREEIMAGE_COLORORDER == FREEIMAGE_COLORORDER_BGR
324 // Big Endian (PPC / none) : BGR(A) order
325 #define FI_RGBA_RED 2
326 #define FI_RGBA_GREEN 1
327 #define FI_RGBA_BLUE 0
328 #define FI_RGBA_ALPHA 3
329 #define FI_RGBA_RED_MASK 0x0000FF00
330 #define FI_RGBA_GREEN_MASK 0x00FF0000
331 #define FI_RGBA_BLUE_MASK 0xFF000000
332 #define FI_RGBA_ALPHA_MASK 0x000000FF
333 #define FI_RGBA_RED_SHIFT 8
334 #define FI_RGBA_GREEN_SHIFT 16
335 #define FI_RGBA_BLUE_SHIFT 24
336 #define FI_RGBA_ALPHA_SHIFT 0
337 #else
338 // Big Endian (PPC / Linux, MaxOSX) : RGB(A) order
339 #define FI_RGBA_RED 0
340 #define FI_RGBA_GREEN 1
341 #define FI_RGBA_BLUE 2
342 #define FI_RGBA_ALPHA 3
343 #define FI_RGBA_RED_MASK 0xFF000000
344 #define FI_RGBA_GREEN_MASK 0x00FF0000
345 #define FI_RGBA_BLUE_MASK 0x0000FF00
346 #define FI_RGBA_ALPHA_MASK 0x000000FF
347 #define FI_RGBA_RED_SHIFT 24
348 #define FI_RGBA_GREEN_SHIFT 16
349 #define FI_RGBA_BLUE_SHIFT 8
350 #define FI_RGBA_ALPHA_SHIFT 0
351 #endif // FREEIMAGE_COLORORDER
352 #endif // FREEIMAGE_BIGENDIAN
353 
354 #define FI_RGBA_RGB_MASK (FI_RGBA_RED_MASK|FI_RGBA_GREEN_MASK|FI_RGBA_BLUE_MASK)
355 
356 // The 16bit macros only include masks and shifts, since each color element is not byte aligned
357 
358 #define FI16_555_RED_MASK 0x7C00
359 #define FI16_555_GREEN_MASK 0x03E0
360 #define FI16_555_BLUE_MASK 0x001F
361 #define FI16_555_RED_SHIFT 10
362 #define FI16_555_GREEN_SHIFT 5
363 #define FI16_555_BLUE_SHIFT 0
364 #define FI16_565_RED_MASK 0xF800
365 #define FI16_565_GREEN_MASK 0x07E0
366 #define FI16_565_BLUE_MASK 0x001F
367 #define FI16_565_RED_SHIFT 11
368 #define FI16_565_GREEN_SHIFT 5
369 #define FI16_565_BLUE_SHIFT 0
370 
371 // ICC profile support ------------------------------------------------------
372 
373 #define FIICC_DEFAULT 0x00
374 #define FIICC_COLOR_IS_CMYK 0x01
375 
376 FI_STRUCT (FIICCPROFILE) {
377  WORD flags;
378  DWORD size;
379  void *data;
380 };
381 
382 // Important enums ----------------------------------------------------------
383 
386 FI_ENUM(FREE_IMAGE_FORMAT) {
387  FIF_UNKNOWN = -1,
388  FIF_BMP = 0,
389  FIF_ICO = 1,
390  FIF_JPEG = 2,
391  FIF_JNG = 3,
392  FIF_KOALA = 4,
393  FIF_LBM = 5,
394  FIF_IFF = FIF_LBM,
395  FIF_MNG = 6,
396  FIF_PBM = 7,
397  FIF_PBMRAW = 8,
398  FIF_PCD = 9,
399  FIF_PCX = 10,
400  FIF_PGM = 11,
401  FIF_PGMRAW = 12,
402  FIF_PNG = 13,
403  FIF_PPM = 14,
404  FIF_PPMRAW = 15,
405  FIF_RAS = 16,
406  FIF_TARGA = 17,
407  FIF_TIFF = 18,
408  FIF_WBMP = 19,
409  FIF_PSD = 20,
410  FIF_CUT = 21,
411  FIF_XBM = 22,
412  FIF_XPM = 23,
413  FIF_DDS = 24,
414  FIF_GIF = 25,
415  FIF_HDR = 26,
416 /* The G3 fax format plugin is deliberately disabled in the Fedora build of
417  FreeImage as it requires that FreeImage uses a private copy of libtiff
418  which is a no no because of security reasons. */
419 #if 0
420  FIF_FAXG3 = 27,
421 #endif
422  FIF_SGI = 28,
423  FIF_EXR = 29,
424  FIF_J2K = 30,
425  FIF_JP2 = 31,
426  FIF_PFM = 32,
427  FIF_PICT = 33,
428  FIF_RAW = 34,
429  FIF_WEBP = 35,
430  FIF_JXR = 36
431 };
432 
435 FI_ENUM(FREE_IMAGE_TYPE) {
436  FIT_UNKNOWN = 0,
437  FIT_BITMAP = 1,
438  FIT_UINT16 = 2,
439  FIT_INT16 = 3,
440  FIT_UINT32 = 4,
441  FIT_INT32 = 5,
442  FIT_FLOAT = 6,
443  FIT_DOUBLE = 7,
444  FIT_COMPLEX = 8,
445  FIT_RGB16 = 9,
446  FIT_RGBA16 = 10,
447  FIT_RGBF = 11,
448  FIT_RGBAF = 12
449 };
450 
453 FI_ENUM(FREE_IMAGE_COLOR_TYPE) {
454  FIC_MINISWHITE = 0,
455  FIC_MINISBLACK = 1,
456  FIC_RGB = 2,
457  FIC_PALETTE = 3,
458  FIC_RGBALPHA = 4,
459  FIC_CMYK = 5
460 };
461 
465 FI_ENUM(FREE_IMAGE_QUANTIZE) {
466  FIQ_WUQUANT = 0,
467  FIQ_NNQUANT = 1,
468  FIQ_LFPQUANT = 2
469 };
470 
474 FI_ENUM(FREE_IMAGE_DITHER) {
475  FID_FS = 0,
476  FID_BAYER4x4 = 1,
477  FID_BAYER8x8 = 2,
478  FID_CLUSTER6x6 = 3,
479  FID_CLUSTER8x8 = 4,
480  FID_CLUSTER16x16= 5,
481  FID_BAYER16x16 = 6
482 };
483 
484 /* The FreeImage_JPEGTransform functions are deliberately disabled in the
485  Fedora build of FreeImage as they require that FreeImage uses a private copy
486  of libjpeg which is a no no because of security reasons. */
487 #if 0
488 
491 FI_ENUM(FREE_IMAGE_JPEG_OPERATION) {
492  FIJPEG_OP_NONE = 0,
493  FIJPEG_OP_FLIP_H = 1,
494  FIJPEG_OP_FLIP_V = 2,
495  FIJPEG_OP_TRANSPOSE = 3,
496  FIJPEG_OP_TRANSVERSE = 4,
497  FIJPEG_OP_ROTATE_90 = 5,
498  FIJPEG_OP_ROTATE_180 = 6,
499  FIJPEG_OP_ROTATE_270 = 7
500 };
501 #endif
502 
506 FI_ENUM(FREE_IMAGE_TMO) {
507  FITMO_DRAGO03 = 0,
508  FITMO_REINHARD05 = 1,
509  FITMO_FATTAL02 = 2
510 };
511 
515 FI_ENUM(FREE_IMAGE_FILTER) {
516  FILTER_BOX = 0,
517  FILTER_BICUBIC = 1,
518  FILTER_BILINEAR = 2,
519  FILTER_BSPLINE = 3,
520  FILTER_CATMULLROM = 4,
521  FILTER_LANCZOS3 = 5
522 };
523 
527 FI_ENUM(FREE_IMAGE_COLOR_CHANNEL) {
528  FICC_RGB = 0,
529  FICC_RED = 1,
530  FICC_GREEN = 2,
531  FICC_BLUE = 3,
532  FICC_ALPHA = 4,
533  FICC_BLACK = 5,
534  FICC_REAL = 6,
535  FICC_IMAG = 7,
536  FICC_MAG = 8,
537  FICC_PHASE = 9
538 };
539 
540 // Metadata support ---------------------------------------------------------
541 
547 FI_ENUM(FREE_IMAGE_MDTYPE) {
548  FIDT_NOTYPE = 0,
549  FIDT_BYTE = 1,
550  FIDT_ASCII = 2,
551  FIDT_SHORT = 3,
552  FIDT_LONG = 4,
553  FIDT_RATIONAL = 5,
554  FIDT_SBYTE = 6,
555  FIDT_UNDEFINED = 7,
556  FIDT_SSHORT = 8,
557  FIDT_SLONG = 9,
558  FIDT_SRATIONAL = 10,
559  FIDT_FLOAT = 11,
560  FIDT_DOUBLE = 12,
561  FIDT_IFD = 13,
562  FIDT_PALETTE = 14,
563  FIDT_LONG8 = 16,
564  FIDT_SLONG8 = 17,
565  FIDT_IFD8 = 18
566 };
567 
571 FI_ENUM(FREE_IMAGE_MDMODEL) {
572  FIMD_NODATA = -1,
573  FIMD_COMMENTS = 0,
574  FIMD_EXIF_MAIN = 1,
575  FIMD_EXIF_EXIF = 2,
576  FIMD_EXIF_GPS = 3,
577  FIMD_EXIF_MAKERNOTE = 4,
578  FIMD_EXIF_INTEROP = 5,
579  FIMD_IPTC = 6,
580  FIMD_XMP = 7,
581  FIMD_GEOTIFF = 8,
582  FIMD_ANIMATION = 9,
583  FIMD_CUSTOM = 10,
584  FIMD_EXIF_RAW = 11
585 };
586 
590 FI_STRUCT (FIMETADATA) { void *data; };
591 
595 FI_STRUCT (FITAG) { void *data; };
596 
597 // File IO routines ---------------------------------------------------------
598 
599 #ifndef FREEIMAGE_IO
600 #define FREEIMAGE_IO
601 
602 typedef void* fi_handle;
603 typedef unsigned (DLL_CALLCONV *FI_ReadProc) (void *buffer, unsigned size, unsigned count, fi_handle handle);
604 typedef unsigned (DLL_CALLCONV *FI_WriteProc) (void *buffer, unsigned size, unsigned count, fi_handle handle);
605 typedef int (DLL_CALLCONV *FI_SeekProc) (fi_handle handle, long offset, int origin);
606 typedef long (DLL_CALLCONV *FI_TellProc) (fi_handle handle);
607 
608 #if (defined(_WIN32) || defined(__WIN32__))
609 #pragma pack(push, 1)
610 #else
611 #pragma pack(1)
612 #endif // WIN32
613 
614 FI_STRUCT(FreeImageIO) {
615  FI_ReadProc read_proc;
616  FI_WriteProc write_proc;
617  FI_SeekProc seek_proc;
618  FI_TellProc tell_proc;
619 };
620 
621 #if (defined(_WIN32) || defined(__WIN32__))
622 #pragma pack(pop)
623 #else
624 #pragma pack()
625 #endif // WIN32
626 
630 FI_STRUCT (FIMEMORY) { void *data; };
631 
632 #endif // FREEIMAGE_IO
633 
634 // Plugin routines ----------------------------------------------------------
635 
636 #ifndef PLUGINS
637 #define PLUGINS
638 
639 typedef const char *(DLL_CALLCONV *FI_FormatProc)(void);
640 typedef const char *(DLL_CALLCONV *FI_DescriptionProc)(void);
641 typedef const char *(DLL_CALLCONV *FI_ExtensionListProc)(void);
642 typedef const char *(DLL_CALLCONV *FI_RegExprProc)(void);
643 typedef void *(DLL_CALLCONV *FI_OpenProc)(FreeImageIO *io, fi_handle handle, BOOL read);
644 typedef void (DLL_CALLCONV *FI_CloseProc)(FreeImageIO *io, fi_handle handle, void *data);
645 typedef int (DLL_CALLCONV *FI_PageCountProc)(FreeImageIO *io, fi_handle handle, void *data);
646 typedef int (DLL_CALLCONV *FI_PageCapabilityProc)(FreeImageIO *io, fi_handle handle, void *data);
647 typedef FIBITMAP *(DLL_CALLCONV *FI_LoadProc)(FreeImageIO *io, fi_handle handle, int page, int flags, void *data);
648 typedef BOOL (DLL_CALLCONV *FI_SaveProc)(FreeImageIO *io, FIBITMAP *dib, fi_handle handle, int page, int flags, void *data);
649 typedef BOOL (DLL_CALLCONV *FI_ValidateProc)(FreeImageIO *io, fi_handle handle);
650 typedef const char *(DLL_CALLCONV *FI_MimeProc)(void);
651 typedef BOOL (DLL_CALLCONV *FI_SupportsExportBPPProc)(int bpp);
652 typedef BOOL (DLL_CALLCONV *FI_SupportsExportTypeProc)(FREE_IMAGE_TYPE type);
653 typedef BOOL (DLL_CALLCONV *FI_SupportsICCProfilesProc)(void);
654 typedef BOOL (DLL_CALLCONV *FI_SupportsNoPixelsProc)(void);
655 
656 FI_STRUCT (Plugin) {
657  FI_FormatProc format_proc;
658  FI_DescriptionProc description_proc;
659  FI_ExtensionListProc extension_proc;
660  FI_RegExprProc regexpr_proc;
661  FI_OpenProc open_proc;
662  FI_CloseProc close_proc;
663  FI_PageCountProc pagecount_proc;
664  FI_PageCapabilityProc pagecapability_proc;
665  FI_LoadProc load_proc;
666  FI_SaveProc save_proc;
667  FI_ValidateProc validate_proc;
668  FI_MimeProc mime_proc;
669  FI_SupportsExportBPPProc supports_export_bpp_proc;
670  FI_SupportsExportTypeProc supports_export_type_proc;
671  FI_SupportsICCProfilesProc supports_icc_profiles_proc;
672  FI_SupportsNoPixelsProc supports_no_pixels_proc;
673 };
674 
675 typedef void (DLL_CALLCONV *FI_InitProc)(Plugin *plugin, int format_id);
676 
677 #endif // PLUGINS
678 
679 
680 // Load / Save flag constants -----------------------------------------------
681 
682 #define FIF_LOAD_NOPIXELS 0x8000
683 
684 #define BMP_DEFAULT 0
685 #define BMP_SAVE_RLE 1
686 #define CUT_DEFAULT 0
687 #define DDS_DEFAULT 0
688 #define EXR_DEFAULT 0
689 #define EXR_FLOAT 0x0001
690 #define EXR_NONE 0x0002
691 #define EXR_ZIP 0x0004
692 #define EXR_PIZ 0x0008
693 #define EXR_PXR24 0x0010
694 #define EXR_B44 0x0020
695 #define EXR_LC 0x0040
696 #define FAXG3_DEFAULT 0
697 #define GIF_DEFAULT 0
698 #define GIF_LOAD256 1
699 #define GIF_PLAYBACK 2
700 #define HDR_DEFAULT 0
701 #define ICO_DEFAULT 0
702 #define ICO_MAKEALPHA 1
703 #define IFF_DEFAULT 0
704 #define J2K_DEFAULT 0
705 #define JP2_DEFAULT 0
706 #define JPEG_DEFAULT 0
707 #define JPEG_FAST 0x0001
708 #define JPEG_ACCURATE 0x0002
709 #define JPEG_CMYK 0x0004
710 #define JPEG_EXIFROTATE 0x0008
711 #define JPEG_GREYSCALE 0x0010
712 #define JPEG_QUALITYSUPERB 0x80
713 #define JPEG_QUALITYGOOD 0x0100
714 #define JPEG_QUALITYNORMAL 0x0200
715 #define JPEG_QUALITYAVERAGE 0x0400
716 #define JPEG_QUALITYBAD 0x0800
717 #define JPEG_PROGRESSIVE 0x2000
718 #define JPEG_SUBSAMPLING_411 0x1000
719 #define JPEG_SUBSAMPLING_420 0x4000
720 #define JPEG_SUBSAMPLING_422 0x8000
721 #define JPEG_SUBSAMPLING_444 0x10000
722 #define JPEG_OPTIMIZE 0x20000
723 #define JPEG_BASELINE 0x40000
724 #define KOALA_DEFAULT 0
725 #define LBM_DEFAULT 0
726 #define MNG_DEFAULT 0
727 #define PCD_DEFAULT 0
728 #define PCD_BASE 1
729 #define PCD_BASEDIV4 2
730 #define PCD_BASEDIV16 3
731 #define PCX_DEFAULT 0
732 #define PFM_DEFAULT 0
733 #define PICT_DEFAULT 0
734 #define PNG_DEFAULT 0
735 #define PNG_IGNOREGAMMA 1
736 #define PNG_Z_BEST_SPEED 0x0001
737 #define PNG_Z_DEFAULT_COMPRESSION 0x0006
738 #define PNG_Z_BEST_COMPRESSION 0x0009
739 #define PNG_Z_NO_COMPRESSION 0x0100
740 #define PNG_INTERLACED 0x0200
741 #define PNM_DEFAULT 0
742 #define PNM_SAVE_RAW 0
743 #define PNM_SAVE_ASCII 1
744 #define PSD_DEFAULT 0
745 #define PSD_CMYK 1
746 #define PSD_LAB 2
747 #define RAS_DEFAULT 0
748 #define RAW_DEFAULT 0
749 #define RAW_PREVIEW 1
750 #define RAW_DISPLAY 2
751 #define RAW_HALFSIZE 4
752 #define RAW_UNPROCESSED 8
753 #define SGI_DEFAULT 0
754 #define TARGA_DEFAULT 0
755 #define TARGA_LOAD_RGB888 1
756 #define TARGA_SAVE_RLE 2
757 #define TIFF_DEFAULT 0
758 #define TIFF_CMYK 0x0001
759 #define TIFF_PACKBITS 0x0100
760 #define TIFF_DEFLATE 0x0200
761 #define TIFF_ADOBE_DEFLATE 0x0400
762 #define TIFF_NONE 0x0800
763 #define TIFF_CCITTFAX3 0x1000
764 #define TIFF_CCITTFAX4 0x2000
765 #define TIFF_LZW 0x4000
766 #define TIFF_JPEG 0x8000
767 #define TIFF_LOGLUV 0x10000
768 #define WBMP_DEFAULT 0
769 #define XBM_DEFAULT 0
770 #define XPM_DEFAULT 0
771 #define WEBP_DEFAULT 0
772 #define WEBP_LOSSLESS 0x100
773 #define JXR_DEFAULT 0
774 #define JXR_LOSSLESS 0x0064
775 #define JXR_PROGRESSIVE 0x2000
776 
777 // Background filling options ---------------------------------------------------------
778 // Constants used in FreeImage_FillBackground and FreeImage_EnlargeCanvas
779 
780 #define FI_COLOR_IS_RGB_COLOR 0x00
781 #define FI_COLOR_IS_RGBA_COLOR 0x01
782 #define FI_COLOR_FIND_EQUAL_COLOR 0x02
783 #define FI_COLOR_ALPHA_IS_INDEX 0x04
784 #define FI_COLOR_PALETTE_SEARCH_MASK (FI_COLOR_FIND_EQUAL_COLOR | FI_COLOR_ALPHA_IS_INDEX) // No color lookup is performed
785 
786 // RescaleEx options ---------------------------------------------------------
787 // Constants used in FreeImage_RescaleEx
788 
789 #define FI_RESCALE_DEFAULT 0x00
790 #define FI_RESCALE_TRUE_COLOR 0x01
791 #define FI_RESCALE_OMIT_METADATA 0x02
792 
793 
794 #ifdef __cplusplus
795 extern "C" {
796 #endif
797 
798 // Init / Error routines ----------------------------------------------------
799 
800 DLL_API void DLL_CALLCONV FreeImage_Initialise(BOOL load_local_plugins_only FI_DEFAULT(FALSE));
801 DLL_API void DLL_CALLCONV FreeImage_DeInitialise(void);
802 
803 // Version routines ---------------------------------------------------------
804 
805 DLL_API const char *DLL_CALLCONV FreeImage_GetVersion(void);
806 DLL_API const char *DLL_CALLCONV FreeImage_GetCopyrightMessage(void);
807 
808 // Message output functions -------------------------------------------------
809 
810 typedef void (*FreeImage_OutputMessageFunction)(FREE_IMAGE_FORMAT fif, const char *msg);
811 typedef void (DLL_CALLCONV *FreeImage_OutputMessageFunctionStdCall)(FREE_IMAGE_FORMAT fif, const char *msg);
812 
813 DLL_API void DLL_CALLCONV FreeImage_SetOutputMessageStdCall(FreeImage_OutputMessageFunctionStdCall omf);
814 DLL_API void DLL_CALLCONV FreeImage_SetOutputMessage(FreeImage_OutputMessageFunction omf);
815 DLL_API void DLL_CALLCONV FreeImage_OutputMessageProc(int fif, const char *fmt, ...);
816 
817 // Allocate / Clone / Unload routines ---------------------------------------
818 
819 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Allocate(int width, int height, int bpp, unsigned red_mask FI_DEFAULT(0), unsigned green_mask FI_DEFAULT(0), unsigned blue_mask FI_DEFAULT(0));
820 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_AllocateT(FREE_IMAGE_TYPE type, int width, int height, int bpp FI_DEFAULT(8), unsigned red_mask FI_DEFAULT(0), unsigned green_mask FI_DEFAULT(0), unsigned blue_mask FI_DEFAULT(0));
821 DLL_API FIBITMAP * DLL_CALLCONV FreeImage_Clone(FIBITMAP *dib);
822 DLL_API void DLL_CALLCONV FreeImage_Unload(FIBITMAP *dib);
823 
824 // Header loading routines
825 DLL_API BOOL DLL_CALLCONV FreeImage_HasPixels(FIBITMAP *dib);
826 
827 // Load / Save routines -----------------------------------------------------
828 
829 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Load(FREE_IMAGE_FORMAT fif, const char *filename, int flags FI_DEFAULT(0));
830 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_LoadU(FREE_IMAGE_FORMAT fif, const wchar_t *filename, int flags FI_DEFAULT(0));
831 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_LoadFromHandle(FREE_IMAGE_FORMAT fif, FreeImageIO *io, fi_handle handle, int flags FI_DEFAULT(0));
832 DLL_API BOOL DLL_CALLCONV FreeImage_Save(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, const char *filename, int flags FI_DEFAULT(0));
833 DLL_API BOOL DLL_CALLCONV FreeImage_SaveU(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, const wchar_t *filename, int flags FI_DEFAULT(0));
834 DLL_API BOOL DLL_CALLCONV FreeImage_SaveToHandle(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, FreeImageIO *io, fi_handle handle, int flags FI_DEFAULT(0));
835 
836 // Memory I/O stream routines -----------------------------------------------
837 
838 DLL_API FIMEMORY *DLL_CALLCONV FreeImage_OpenMemory(BYTE *data FI_DEFAULT(0), DWORD size_in_bytes FI_DEFAULT(0));
839 DLL_API void DLL_CALLCONV FreeImage_CloseMemory(FIMEMORY *stream);
840 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_LoadFromMemory(FREE_IMAGE_FORMAT fif, FIMEMORY *stream, int flags FI_DEFAULT(0));
841 DLL_API BOOL DLL_CALLCONV FreeImage_SaveToMemory(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, FIMEMORY *stream, int flags FI_DEFAULT(0));
842 DLL_API long DLL_CALLCONV FreeImage_TellMemory(FIMEMORY *stream);
843 DLL_API BOOL DLL_CALLCONV FreeImage_SeekMemory(FIMEMORY *stream, long offset, int origin);
844 DLL_API BOOL DLL_CALLCONV FreeImage_AcquireMemory(FIMEMORY *stream, BYTE **data, DWORD *size_in_bytes);
845 DLL_API unsigned DLL_CALLCONV FreeImage_ReadMemory(void *buffer, unsigned size, unsigned count, FIMEMORY *stream);
846 DLL_API unsigned DLL_CALLCONV FreeImage_WriteMemory(const void *buffer, unsigned size, unsigned count, FIMEMORY *stream);
847 
848 DLL_API FIMULTIBITMAP *DLL_CALLCONV FreeImage_LoadMultiBitmapFromMemory(FREE_IMAGE_FORMAT fif, FIMEMORY *stream, int flags FI_DEFAULT(0));
849 DLL_API BOOL DLL_CALLCONV FreeImage_SaveMultiBitmapToMemory(FREE_IMAGE_FORMAT fif, FIMULTIBITMAP *bitmap, FIMEMORY *stream, int flags);
850 
851 // Plugin Interface ---------------------------------------------------------
852 
853 DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_RegisterLocalPlugin(FI_InitProc proc_address, const char *format FI_DEFAULT(0), const char *description FI_DEFAULT(0), const char *extension FI_DEFAULT(0), const char *regexpr FI_DEFAULT(0));
854 DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_RegisterExternalPlugin(const char *path, const char *format FI_DEFAULT(0), const char *description FI_DEFAULT(0), const char *extension FI_DEFAULT(0), const char *regexpr FI_DEFAULT(0));
855 DLL_API int DLL_CALLCONV FreeImage_GetFIFCount(void);
856 DLL_API int DLL_CALLCONV FreeImage_SetPluginEnabled(FREE_IMAGE_FORMAT fif, BOOL enable);
857 DLL_API int DLL_CALLCONV FreeImage_IsPluginEnabled(FREE_IMAGE_FORMAT fif);
858 DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFIFFromFormat(const char *format);
859 DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFIFFromMime(const char *mime);
860 DLL_API const char *DLL_CALLCONV FreeImage_GetFormatFromFIF(FREE_IMAGE_FORMAT fif);
861 DLL_API const char *DLL_CALLCONV FreeImage_GetFIFExtensionList(FREE_IMAGE_FORMAT fif);
862 DLL_API const char *DLL_CALLCONV FreeImage_GetFIFDescription(FREE_IMAGE_FORMAT fif);
863 DLL_API const char *DLL_CALLCONV FreeImage_GetFIFRegExpr(FREE_IMAGE_FORMAT fif);
864 DLL_API const char *DLL_CALLCONV FreeImage_GetFIFMimeType(FREE_IMAGE_FORMAT fif);
865 DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFIFFromFilename(const char *filename);
866 DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFIFFromFilenameU(const wchar_t *filename);
867 DLL_API BOOL DLL_CALLCONV FreeImage_FIFSupportsReading(FREE_IMAGE_FORMAT fif);
868 DLL_API BOOL DLL_CALLCONV FreeImage_FIFSupportsWriting(FREE_IMAGE_FORMAT fif);
869 DLL_API BOOL DLL_CALLCONV FreeImage_FIFSupportsExportBPP(FREE_IMAGE_FORMAT fif, int bpp);
870 DLL_API BOOL DLL_CALLCONV FreeImage_FIFSupportsExportType(FREE_IMAGE_FORMAT fif, FREE_IMAGE_TYPE type);
871 DLL_API BOOL DLL_CALLCONV FreeImage_FIFSupportsICCProfiles(FREE_IMAGE_FORMAT fif);
872 DLL_API BOOL DLL_CALLCONV FreeImage_FIFSupportsNoPixels(FREE_IMAGE_FORMAT fif);
873 
874 // Multipaging interface ----------------------------------------------------
875 
876 DLL_API FIMULTIBITMAP * DLL_CALLCONV FreeImage_OpenMultiBitmap(FREE_IMAGE_FORMAT fif, const char *filename, BOOL create_new, BOOL read_only, BOOL keep_cache_in_memory FI_DEFAULT(FALSE), int flags FI_DEFAULT(0));
877 DLL_API FIMULTIBITMAP * DLL_CALLCONV FreeImage_OpenMultiBitmapFromHandle(FREE_IMAGE_FORMAT fif, FreeImageIO *io, fi_handle handle, int flags FI_DEFAULT(0));
878 DLL_API BOOL DLL_CALLCONV FreeImage_SaveMultiBitmapToHandle(FREE_IMAGE_FORMAT fif, FIMULTIBITMAP *bitmap, FreeImageIO *io, fi_handle handle, int flags FI_DEFAULT(0));
879 DLL_API BOOL DLL_CALLCONV FreeImage_CloseMultiBitmap(FIMULTIBITMAP *bitmap, int flags FI_DEFAULT(0));
880 DLL_API int DLL_CALLCONV FreeImage_GetPageCount(FIMULTIBITMAP *bitmap);
881 DLL_API void DLL_CALLCONV FreeImage_AppendPage(FIMULTIBITMAP *bitmap, FIBITMAP *data);
882 DLL_API void DLL_CALLCONV FreeImage_InsertPage(FIMULTIBITMAP *bitmap, int page, FIBITMAP *data);
883 DLL_API void DLL_CALLCONV FreeImage_DeletePage(FIMULTIBITMAP *bitmap, int page);
884 DLL_API FIBITMAP * DLL_CALLCONV FreeImage_LockPage(FIMULTIBITMAP *bitmap, int page);
885 DLL_API void DLL_CALLCONV FreeImage_UnlockPage(FIMULTIBITMAP *bitmap, FIBITMAP *data, BOOL changed);
886 DLL_API BOOL DLL_CALLCONV FreeImage_MovePage(FIMULTIBITMAP *bitmap, int target, int source);
887 DLL_API BOOL DLL_CALLCONV FreeImage_GetLockedPageNumbers(FIMULTIBITMAP *bitmap, int *pages, int *count);
888 
889 // Filetype request routines ------------------------------------------------
890 
891 DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFileType(const char *filename, int size FI_DEFAULT(0));
892 DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFileTypeU(const wchar_t *filename, int size FI_DEFAULT(0));
893 DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFileTypeFromHandle(FreeImageIO *io, fi_handle handle, int size FI_DEFAULT(0));
894 DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFileTypeFromMemory(FIMEMORY *stream, int size FI_DEFAULT(0));
895 
896 // Image type request routine -----------------------------------------------
897 
898 DLL_API FREE_IMAGE_TYPE DLL_CALLCONV FreeImage_GetImageType(FIBITMAP *dib);
899 
900 // FreeImage helper routines ------------------------------------------------
901 
902 DLL_API BOOL DLL_CALLCONV FreeImage_IsLittleEndian(void);
903 DLL_API BOOL DLL_CALLCONV FreeImage_LookupX11Color(const char *szColor, BYTE *nRed, BYTE *nGreen, BYTE *nBlue);
904 DLL_API BOOL DLL_CALLCONV FreeImage_LookupSVGColor(const char *szColor, BYTE *nRed, BYTE *nGreen, BYTE *nBlue);
905 
906 // Pixel access routines ----------------------------------------------------
907 
908 DLL_API BYTE *DLL_CALLCONV FreeImage_GetBits(FIBITMAP *dib);
909 DLL_API BYTE *DLL_CALLCONV FreeImage_GetScanLine(FIBITMAP *dib, int scanline);
910 
911 DLL_API BOOL DLL_CALLCONV FreeImage_GetPixelIndex(FIBITMAP *dib, unsigned x, unsigned y, BYTE *value);
912 DLL_API BOOL DLL_CALLCONV FreeImage_GetPixelColor(FIBITMAP *dib, unsigned x, unsigned y, RGBQUAD *value);
913 DLL_API BOOL DLL_CALLCONV FreeImage_SetPixelIndex(FIBITMAP *dib, unsigned x, unsigned y, BYTE *value);
914 DLL_API BOOL DLL_CALLCONV FreeImage_SetPixelColor(FIBITMAP *dib, unsigned x, unsigned y, RGBQUAD *value);
915 
916 // DIB info routines --------------------------------------------------------
917 
918 DLL_API unsigned DLL_CALLCONV FreeImage_GetColorsUsed(FIBITMAP *dib);
919 DLL_API unsigned DLL_CALLCONV FreeImage_GetBPP(FIBITMAP *dib);
920 DLL_API unsigned DLL_CALLCONV FreeImage_GetWidth(FIBITMAP *dib);
921 DLL_API unsigned DLL_CALLCONV FreeImage_GetHeight(FIBITMAP *dib);
922 DLL_API unsigned DLL_CALLCONV FreeImage_GetLine(FIBITMAP *dib);
923 DLL_API unsigned DLL_CALLCONV FreeImage_GetPitch(FIBITMAP *dib);
924 DLL_API unsigned DLL_CALLCONV FreeImage_GetDIBSize(FIBITMAP *dib);
925 DLL_API unsigned DLL_CALLCONV FreeImage_GetMemorySize(FIBITMAP *dib);
926 DLL_API RGBQUAD *DLL_CALLCONV FreeImage_GetPalette(FIBITMAP *dib);
927 
928 DLL_API unsigned DLL_CALLCONV FreeImage_GetDotsPerMeterX(FIBITMAP *dib);
929 DLL_API unsigned DLL_CALLCONV FreeImage_GetDotsPerMeterY(FIBITMAP *dib);
930 DLL_API void DLL_CALLCONV FreeImage_SetDotsPerMeterX(FIBITMAP *dib, unsigned res);
931 DLL_API void DLL_CALLCONV FreeImage_SetDotsPerMeterY(FIBITMAP *dib, unsigned res);
932 
933 DLL_API BITMAPINFOHEADER *DLL_CALLCONV FreeImage_GetInfoHeader(FIBITMAP *dib);
934 DLL_API BITMAPINFO *DLL_CALLCONV FreeImage_GetInfo(FIBITMAP *dib);
935 DLL_API FREE_IMAGE_COLOR_TYPE DLL_CALLCONV FreeImage_GetColorType(FIBITMAP *dib);
936 
937 DLL_API unsigned DLL_CALLCONV FreeImage_GetRedMask(FIBITMAP *dib);
938 DLL_API unsigned DLL_CALLCONV FreeImage_GetGreenMask(FIBITMAP *dib);
939 DLL_API unsigned DLL_CALLCONV FreeImage_GetBlueMask(FIBITMAP *dib);
940 
941 DLL_API unsigned DLL_CALLCONV FreeImage_GetTransparencyCount(FIBITMAP *dib);
942 DLL_API BYTE * DLL_CALLCONV FreeImage_GetTransparencyTable(FIBITMAP *dib);
943 DLL_API void DLL_CALLCONV FreeImage_SetTransparent(FIBITMAP *dib, BOOL enabled);
944 DLL_API void DLL_CALLCONV FreeImage_SetTransparencyTable(FIBITMAP *dib, BYTE *table, int count);
945 DLL_API BOOL DLL_CALLCONV FreeImage_IsTransparent(FIBITMAP *dib);
946 DLL_API void DLL_CALLCONV FreeImage_SetTransparentIndex(FIBITMAP *dib, int index);
947 DLL_API int DLL_CALLCONV FreeImage_GetTransparentIndex(FIBITMAP *dib);
948 
949 DLL_API BOOL DLL_CALLCONV FreeImage_HasBackgroundColor(FIBITMAP *dib);
950 DLL_API BOOL DLL_CALLCONV FreeImage_GetBackgroundColor(FIBITMAP *dib, RGBQUAD *bkcolor);
951 DLL_API BOOL DLL_CALLCONV FreeImage_SetBackgroundColor(FIBITMAP *dib, RGBQUAD *bkcolor);
952 
953 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_GetThumbnail(FIBITMAP *dib);
954 DLL_API BOOL DLL_CALLCONV FreeImage_SetThumbnail(FIBITMAP *dib, FIBITMAP *thumbnail);
955 
956 // ICC profile routines -----------------------------------------------------
957 
958 DLL_API FIICCPROFILE *DLL_CALLCONV FreeImage_GetICCProfile(FIBITMAP *dib);
959 DLL_API FIICCPROFILE *DLL_CALLCONV FreeImage_CreateICCProfile(FIBITMAP *dib, void *data, long size);
960 DLL_API void DLL_CALLCONV FreeImage_DestroyICCProfile(FIBITMAP *dib);
961 
962 // Line conversion routines -------------------------------------------------
963 
964 DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To4(BYTE *target, BYTE *source, int width_in_pixels);
965 DLL_API void DLL_CALLCONV FreeImage_ConvertLine8To4(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette);
966 DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To4_555(BYTE *target, BYTE *source, int width_in_pixels);
967 DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To4_565(BYTE *target, BYTE *source, int width_in_pixels);
968 DLL_API void DLL_CALLCONV FreeImage_ConvertLine24To4(BYTE *target, BYTE *source, int width_in_pixels);
969 DLL_API void DLL_CALLCONV FreeImage_ConvertLine32To4(BYTE *target, BYTE *source, int width_in_pixels);
970 DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To8(BYTE *target, BYTE *source, int width_in_pixels);
971 DLL_API void DLL_CALLCONV FreeImage_ConvertLine4To8(BYTE *target, BYTE *source, int width_in_pixels);
972 DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To8_555(BYTE *target, BYTE *source, int width_in_pixels);
973 DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To8_565(BYTE *target, BYTE *source, int width_in_pixels);
974 DLL_API void DLL_CALLCONV FreeImage_ConvertLine24To8(BYTE *target, BYTE *source, int width_in_pixels);
975 DLL_API void DLL_CALLCONV FreeImage_ConvertLine32To8(BYTE *target, BYTE *source, int width_in_pixels);
976 DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To16_555(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette);
977 DLL_API void DLL_CALLCONV FreeImage_ConvertLine4To16_555(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette);
978 DLL_API void DLL_CALLCONV FreeImage_ConvertLine8To16_555(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette);
979 DLL_API void DLL_CALLCONV FreeImage_ConvertLine16_565_To16_555(BYTE *target, BYTE *source, int width_in_pixels);
980 DLL_API void DLL_CALLCONV FreeImage_ConvertLine24To16_555(BYTE *target, BYTE *source, int width_in_pixels);
981 DLL_API void DLL_CALLCONV FreeImage_ConvertLine32To16_555(BYTE *target, BYTE *source, int width_in_pixels);
982 DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To16_565(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette);
983 DLL_API void DLL_CALLCONV FreeImage_ConvertLine4To16_565(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette);
984 DLL_API void DLL_CALLCONV FreeImage_ConvertLine8To16_565(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette);
985 DLL_API void DLL_CALLCONV FreeImage_ConvertLine16_555_To16_565(BYTE *target, BYTE *source, int width_in_pixels);
986 DLL_API void DLL_CALLCONV FreeImage_ConvertLine24To16_565(BYTE *target, BYTE *source, int width_in_pixels);
987 DLL_API void DLL_CALLCONV FreeImage_ConvertLine32To16_565(BYTE *target, BYTE *source, int width_in_pixels);
988 DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To24(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette);
989 DLL_API void DLL_CALLCONV FreeImage_ConvertLine4To24(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette);
990 DLL_API void DLL_CALLCONV FreeImage_ConvertLine8To24(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette);
991 DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To24_555(BYTE *target, BYTE *source, int width_in_pixels);
992 DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To24_565(BYTE *target, BYTE *source, int width_in_pixels);
993 DLL_API void DLL_CALLCONV FreeImage_ConvertLine32To24(BYTE *target, BYTE *source, int width_in_pixels);
994 DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To32(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette);
995 DLL_API void DLL_CALLCONV FreeImage_ConvertLine4To32(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette);
996 DLL_API void DLL_CALLCONV FreeImage_ConvertLine8To32(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette);
997 DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To32_555(BYTE *target, BYTE *source, int width_in_pixels);
998 DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To32_565(BYTE *target, BYTE *source, int width_in_pixels);
999 DLL_API void DLL_CALLCONV FreeImage_ConvertLine24To32(BYTE *target, BYTE *source, int width_in_pixels);
1000 
1001 // Smart conversion routines ------------------------------------------------
1002 
1003 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo4Bits(FIBITMAP *dib);
1004 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo8Bits(FIBITMAP *dib);
1005 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToGreyscale(FIBITMAP *dib);
1006 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo16Bits555(FIBITMAP *dib);
1007 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo16Bits565(FIBITMAP *dib);
1008 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo24Bits(FIBITMAP *dib);
1009 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo32Bits(FIBITMAP *dib);
1010 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ColorQuantize(FIBITMAP *dib, FREE_IMAGE_QUANTIZE quantize);
1011 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ColorQuantizeEx(FIBITMAP *dib, FREE_IMAGE_QUANTIZE quantize FI_DEFAULT(FIQ_WUQUANT), int PaletteSize FI_DEFAULT(256), int ReserveSize FI_DEFAULT(0), RGBQUAD *ReservePalette FI_DEFAULT(NULL));
1012 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Threshold(FIBITMAP *dib, BYTE T);
1013 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Dither(FIBITMAP *dib, FREE_IMAGE_DITHER algorithm);
1014 
1015 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertFromRawBits(BYTE *bits, int width, int height, int pitch, unsigned bpp, unsigned red_mask, unsigned green_mask, unsigned blue_mask, BOOL topdown FI_DEFAULT(FALSE));
1016 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertFromRawBitsEx(BOOL copySource, BYTE *bits, FREE_IMAGE_TYPE type, int width, int height, int pitch, unsigned bpp, unsigned red_mask, unsigned green_mask, unsigned blue_mask, BOOL topdown FI_DEFAULT(FALSE));
1017 DLL_API void DLL_CALLCONV FreeImage_ConvertToRawBits(BYTE *bits, FIBITMAP *dib, int pitch, unsigned bpp, unsigned red_mask, unsigned green_mask, unsigned blue_mask, BOOL topdown FI_DEFAULT(FALSE));
1018 
1019 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToFloat(FIBITMAP *dib);
1020 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToRGBF(FIBITMAP *dib);
1021 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToRGBAF(FIBITMAP *dib);
1022 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToUINT16(FIBITMAP *dib);
1023 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToRGB16(FIBITMAP *dib);
1024 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToRGBA16(FIBITMAP *dib);
1025 
1026 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToStandardType(FIBITMAP *src, BOOL scale_linear FI_DEFAULT(TRUE));
1027 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToType(FIBITMAP *src, FREE_IMAGE_TYPE dst_type, BOOL scale_linear FI_DEFAULT(TRUE));
1028 
1029 // Tone mapping operators ---------------------------------------------------
1030 
1031 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ToneMapping(FIBITMAP *dib, FREE_IMAGE_TMO tmo, double first_param FI_DEFAULT(0), double second_param FI_DEFAULT(0));
1032 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_TmoDrago03(FIBITMAP *src, double gamma FI_DEFAULT(2.2), double exposure FI_DEFAULT(0));
1033 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_TmoReinhard05(FIBITMAP *src, double intensity FI_DEFAULT(0), double contrast FI_DEFAULT(0));
1034 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_TmoReinhard05Ex(FIBITMAP *src, double intensity FI_DEFAULT(0), double contrast FI_DEFAULT(0), double adaptation FI_DEFAULT(1), double color_correction FI_DEFAULT(0));
1035 
1036 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_TmoFattal02(FIBITMAP *src, double color_saturation FI_DEFAULT(0.5), double attenuation FI_DEFAULT(0.85));
1037 
1038 // ZLib interface -----------------------------------------------------------
1039 
1040 DLL_API DWORD DLL_CALLCONV FreeImage_ZLibCompress(BYTE *target, DWORD target_size, BYTE *source, DWORD source_size);
1041 DLL_API DWORD DLL_CALLCONV FreeImage_ZLibUncompress(BYTE *target, DWORD target_size, BYTE *source, DWORD source_size);
1042 DLL_API DWORD DLL_CALLCONV FreeImage_ZLibGZip(BYTE *target, DWORD target_size, BYTE *source, DWORD source_size);
1043 DLL_API DWORD DLL_CALLCONV FreeImage_ZLibGUnzip(BYTE *target, DWORD target_size, BYTE *source, DWORD source_size);
1044 DLL_API DWORD DLL_CALLCONV FreeImage_ZLibCRC32(DWORD crc, BYTE *source, DWORD source_size);
1045 
1046 // --------------------------------------------------------------------------
1047 // Metadata routines
1048 // --------------------------------------------------------------------------
1049 
1050 // tag creation / destruction
1051 DLL_API FITAG *DLL_CALLCONV FreeImage_CreateTag(void);
1052 DLL_API void DLL_CALLCONV FreeImage_DeleteTag(FITAG *tag);
1053 DLL_API FITAG *DLL_CALLCONV FreeImage_CloneTag(FITAG *tag);
1054 
1055 // tag getters and setters
1056 DLL_API const char *DLL_CALLCONV FreeImage_GetTagKey(FITAG *tag);
1057 DLL_API const char *DLL_CALLCONV FreeImage_GetTagDescription(FITAG *tag);
1058 DLL_API WORD DLL_CALLCONV FreeImage_GetTagID(FITAG *tag);
1059 DLL_API FREE_IMAGE_MDTYPE DLL_CALLCONV FreeImage_GetTagType(FITAG *tag);
1060 DLL_API DWORD DLL_CALLCONV FreeImage_GetTagCount(FITAG *tag);
1061 DLL_API DWORD DLL_CALLCONV FreeImage_GetTagLength(FITAG *tag);
1062 DLL_API const void *DLL_CALLCONV FreeImage_GetTagValue(FITAG *tag);
1063 
1064 DLL_API BOOL DLL_CALLCONV FreeImage_SetTagKey(FITAG *tag, const char *key);
1065 DLL_API BOOL DLL_CALLCONV FreeImage_SetTagDescription(FITAG *tag, const char *description);
1066 DLL_API BOOL DLL_CALLCONV FreeImage_SetTagID(FITAG *tag, WORD id);
1067 DLL_API BOOL DLL_CALLCONV FreeImage_SetTagType(FITAG *tag, FREE_IMAGE_MDTYPE type);
1068 DLL_API BOOL DLL_CALLCONV FreeImage_SetTagCount(FITAG *tag, DWORD count);
1069 DLL_API BOOL DLL_CALLCONV FreeImage_SetTagLength(FITAG *tag, DWORD length);
1070 DLL_API BOOL DLL_CALLCONV FreeImage_SetTagValue(FITAG *tag, const void *value);
1071 
1072 // iterator
1073 DLL_API FIMETADATA *DLL_CALLCONV FreeImage_FindFirstMetadata(FREE_IMAGE_MDMODEL model, FIBITMAP *dib, FITAG **tag);
1074 DLL_API BOOL DLL_CALLCONV FreeImage_FindNextMetadata(FIMETADATA *mdhandle, FITAG **tag);
1075 DLL_API void DLL_CALLCONV FreeImage_FindCloseMetadata(FIMETADATA *mdhandle);
1076 
1077 // metadata setter and getter
1078 DLL_API BOOL DLL_CALLCONV FreeImage_SetMetadata(FREE_IMAGE_MDMODEL model, FIBITMAP *dib, const char *key, FITAG *tag);
1079 DLL_API BOOL DLL_CALLCONV FreeImage_GetMetadata(FREE_IMAGE_MDMODEL model, FIBITMAP *dib, const char *key, FITAG **tag);
1080 DLL_API BOOL DLL_CALLCONV FreeImage_SetMetadataKeyValue(FREE_IMAGE_MDMODEL model, FIBITMAP *dib, const char *key, const char *value);
1081 
1082 // helpers
1083 DLL_API unsigned DLL_CALLCONV FreeImage_GetMetadataCount(FREE_IMAGE_MDMODEL model, FIBITMAP *dib);
1084 DLL_API BOOL DLL_CALLCONV FreeImage_CloneMetadata(FIBITMAP *dst, FIBITMAP *src);
1085 
1086 // tag to C string conversion
1087 DLL_API const char* DLL_CALLCONV FreeImage_TagToString(FREE_IMAGE_MDMODEL model, FITAG *tag, char *Make FI_DEFAULT(NULL));
1088 
1089 // --------------------------------------------------------------------------
1090 // JPEG lossless transformation routines
1091 // --------------------------------------------------------------------------
1092 /* The FreeImage_JPEGTransform functions are deliberately disabled in the
1093 + Fedora build of FreeImage as they require that FreeImage uses a private copy
1094 + of libjpeg which is a no no because of security reasons. */
1095 #if 0
1096 DLL_API BOOL DLL_CALLCONV FreeImage_JPEGTransform(const char *src_file, const char *dst_file, FREE_IMAGE_JPEG_OPERATION operation, BOOL perfect FI_DEFAULT(TRUE));
1097 DLL_API BOOL DLL_CALLCONV FreeImage_JPEGTransformU(const wchar_t *src_file, const wchar_t *dst_file, FREE_IMAGE_JPEG_OPERATION operation, BOOL perfect FI_DEFAULT(TRUE));
1098 DLL_API BOOL DLL_CALLCONV FreeImage_JPEGCrop(const char *src_file, const char *dst_file, int left, int top, int right, int bottom);
1099 DLL_API BOOL DLL_CALLCONV FreeImage_JPEGCropU(const wchar_t *src_file, const wchar_t *dst_file, int left, int top, int right, int bottom);
1100 DLL_API BOOL DLL_CALLCONV FreeImage_JPEGTransformFromHandle(FreeImageIO* src_io, fi_handle src_handle, FreeImageIO* dst_io, fi_handle dst_handle, FREE_IMAGE_JPEG_OPERATION operation, int* left, int* top, int* right, int* bottom, BOOL perfect FI_DEFAULT(TRUE));
1101 DLL_API BOOL DLL_CALLCONV FreeImage_JPEGTransformCombined(const char *src_file, const char *dst_file, FREE_IMAGE_JPEG_OPERATION operation, int* left, int* top, int* right, int* bottom, BOOL perfect FI_DEFAULT(TRUE));
1102 DLL_API BOOL DLL_CALLCONV FreeImage_JPEGTransformCombinedU(const wchar_t *src_file, const wchar_t *dst_file, FREE_IMAGE_JPEG_OPERATION operation, int* left, int* top, int* right, int* bottom, BOOL perfect FI_DEFAULT(TRUE));
1103 DLL_API BOOL DLL_CALLCONV FreeImage_JPEGTransformCombinedFromMemory(FIMEMORY* src_stream, FIMEMORY* dst_stream, FREE_IMAGE_JPEG_OPERATION operation, int* left, int* top, int* right, int* bottom, BOOL perfect FI_DEFAULT(TRUE));
1104 #endif
1105 
1106 
1107 // --------------------------------------------------------------------------
1108 // Image manipulation toolkit
1109 // --------------------------------------------------------------------------
1110 
1111 // rotation and flipping
1113 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_RotateClassic(FIBITMAP *dib, double angle);
1114 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Rotate(FIBITMAP *dib, double angle, const void *bkcolor FI_DEFAULT(NULL));
1115 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_RotateEx(FIBITMAP *dib, double angle, double x_shift, double y_shift, double x_origin, double y_origin, BOOL use_mask);
1116 DLL_API BOOL DLL_CALLCONV FreeImage_FlipHorizontal(FIBITMAP *dib);
1117 DLL_API BOOL DLL_CALLCONV FreeImage_FlipVertical(FIBITMAP *dib);
1118 
1119 // upsampling / downsampling
1120 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Rescale(FIBITMAP *dib, int dst_width, int dst_height, FREE_IMAGE_FILTER filter FI_DEFAULT(FILTER_CATMULLROM));
1121 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_MakeThumbnail(FIBITMAP *dib, int max_pixel_size, BOOL convert FI_DEFAULT(TRUE));
1122 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_RescaleRect(FIBITMAP *dib, int dst_width, int dst_height, int left, int top, int right, int bottom, FREE_IMAGE_FILTER filter FI_DEFAULT(FILTER_CATMULLROM), unsigned flags FI_DEFAULT(0));
1123 
1124 // color manipulation routines (point operations)
1125 DLL_API BOOL DLL_CALLCONV FreeImage_AdjustCurve(FIBITMAP *dib, BYTE *LUT, FREE_IMAGE_COLOR_CHANNEL channel);
1126 DLL_API BOOL DLL_CALLCONV FreeImage_AdjustGamma(FIBITMAP *dib, double gamma);
1127 DLL_API BOOL DLL_CALLCONV FreeImage_AdjustBrightness(FIBITMAP *dib, double percentage);
1128 DLL_API BOOL DLL_CALLCONV FreeImage_AdjustContrast(FIBITMAP *dib, double percentage);
1129 DLL_API BOOL DLL_CALLCONV FreeImage_Invert(FIBITMAP *dib);
1130 DLL_API BOOL DLL_CALLCONV FreeImage_GetHistogram(FIBITMAP *dib, DWORD *histo, FREE_IMAGE_COLOR_CHANNEL channel FI_DEFAULT(FICC_BLACK));
1131 DLL_API int DLL_CALLCONV FreeImage_GetAdjustColorsLookupTable(BYTE *LUT, double brightness, double contrast, double gamma, BOOL invert);
1132 DLL_API BOOL DLL_CALLCONV FreeImage_AdjustColors(FIBITMAP *dib, double brightness, double contrast, double gamma, BOOL invert FI_DEFAULT(FALSE));
1133 DLL_API unsigned DLL_CALLCONV FreeImage_ApplyColorMapping(FIBITMAP *dib, RGBQUAD *srccolors, RGBQUAD *dstcolors, unsigned count, BOOL ignore_alpha, BOOL swap);
1134 DLL_API unsigned DLL_CALLCONV FreeImage_SwapColors(FIBITMAP *dib, RGBQUAD *color_a, RGBQUAD *color_b, BOOL ignore_alpha);
1135 DLL_API unsigned DLL_CALLCONV FreeImage_ApplyPaletteIndexMapping(FIBITMAP *dib, BYTE *srcindices, BYTE *dstindices, unsigned count, BOOL swap);
1136 DLL_API unsigned DLL_CALLCONV FreeImage_SwapPaletteIndices(FIBITMAP *dib, BYTE *index_a, BYTE *index_b);
1137 
1138 // channel processing routines
1139 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_GetChannel(FIBITMAP *dib, FREE_IMAGE_COLOR_CHANNEL channel);
1140 DLL_API BOOL DLL_CALLCONV FreeImage_SetChannel(FIBITMAP *dst, FIBITMAP *src, FREE_IMAGE_COLOR_CHANNEL channel);
1141 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_GetComplexChannel(FIBITMAP *src, FREE_IMAGE_COLOR_CHANNEL channel);
1142 DLL_API BOOL DLL_CALLCONV FreeImage_SetComplexChannel(FIBITMAP *dst, FIBITMAP *src, FREE_IMAGE_COLOR_CHANNEL channel);
1143 
1144 // copy / paste / composite routines
1145 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Copy(FIBITMAP *dib, int left, int top, int right, int bottom);
1146 DLL_API BOOL DLL_CALLCONV FreeImage_Paste(FIBITMAP *dst, FIBITMAP *src, int left, int top, int alpha);
1147 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_CreateView(FIBITMAP *dib, unsigned left, unsigned top, unsigned right, unsigned bottom);
1148 
1149 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Composite(FIBITMAP *fg, BOOL useFileBkg FI_DEFAULT(FALSE), RGBQUAD *appBkColor FI_DEFAULT(NULL), FIBITMAP *bg FI_DEFAULT(NULL));
1150 DLL_API BOOL DLL_CALLCONV FreeImage_PreMultiplyWithAlpha(FIBITMAP *dib);
1151 
1152 // background filling routines
1153 DLL_API BOOL DLL_CALLCONV FreeImage_FillBackground(FIBITMAP *dib, const void *color, int options FI_DEFAULT(0));
1154 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_EnlargeCanvas(FIBITMAP *src, int left, int top, int right, int bottom, const void *color, int options FI_DEFAULT(0));
1155 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_AllocateEx(int width, int height, int bpp, const RGBQUAD *color, int options FI_DEFAULT(0), const RGBQUAD *palette FI_DEFAULT(NULL), unsigned red_mask FI_DEFAULT(0), unsigned green_mask FI_DEFAULT(0), unsigned blue_mask FI_DEFAULT(0));
1156 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_AllocateExT(FREE_IMAGE_TYPE type, int width, int height, int bpp, const void *color, int options FI_DEFAULT(0), const RGBQUAD *palette FI_DEFAULT(NULL), unsigned red_mask FI_DEFAULT(0), unsigned green_mask FI_DEFAULT(0), unsigned blue_mask FI_DEFAULT(0));
1157 
1158 // miscellaneous algorithms
1159 DLL_API FIBITMAP *DLL_CALLCONV FreeImage_MultigridPoissonSolver(FIBITMAP *Laplacian, int ncycle FI_DEFAULT(3));
1160 
1161 // restore the borland-specific enum size option
1162 #if defined(__BORLANDC__)
1163 #pragma option pop
1164 #endif
1165 
1166 #ifdef __cplusplus
1167 }
1168 #endif
1169 
1170 #endif // FREEIMAGE_H
Data structure for COMPLEX type (complex number)
Definition: FreeImage.h:276
double r
real part
Definition: FreeImage.h:278
96-bit RGB Float
Definition: FreeImage.h:259
Definition: FreeImage.h:180
128-bit RGBA Float
Definition: FreeImage.h:267
64-bit RGBA
Definition: FreeImage.h:250
double i
imaginary part
Definition: FreeImage.h:280
Definition: FreeImage.h:211
48-bit RGB
Definition: FreeImage.h:242
Definition: FreeImage.h:193
Definition: FreeImage.h:225