1 
2 //          Copyright 2019 - 2021 Michael D. Parker
3 // Distributed under the Boost Software License, Version 1.0.
4 //    (See accompanying file LICENSE_1_0.txt or copy at
5 //          http://www.boost.org/LICENSE_1_0.txt)
6 
7 module bindbc.freeimage.binddynamic;
8 
9 version(BindFI_Static) {}
10 else version = BindFI_Dynamic;
11 
12 version(BindFI_Dynamic):
13 
14 import core.stdc.config,
15        core.stdc.stddef;
16 
17 import bindbc.loader;
18 import bindbc.freeimage.types;
19 
20 extern(System) @nogc nothrow {
21     alias pFreeImage_Initialise = void function(BOOL load_local_plugins_only = FALSE);
22     alias pFreeImage_DeInitialise = void function();
23     alias pFreeImage_GetVersion = const(char)* function();
24     alias pFreeImage_GetCopyrightMessage = const(char)* function();
25 
26     alias pFreeImage_SetOutputMessageStdCall = void function(FreeImage_OutputMessageFunctionStdCall);
27     alias pFreeImage_SetOutputMessage = void function(FreeImage_OutputMessageFunction);
28 
29     alias pFreeImage_OutputMessageProc = void function(int,const(char)* fmt, ...);
30 
31     alias pFreeImage_Allocate = FIBITMAP* function(int,int,int,uint red_mask = 0,uint green_mask = 0,uint blue_mask = 0);
32     alias pFreeImage_AllocateT = FIBITMAP* function(FREE_IMAGE_TYPE type,int,int,int bpp = 8,uint red_mask = 0,uint green_mask = 0,uint blue_mask = 0);
33     alias pFreeImage_Clone = FIBITMAP* function(FIBITMAP*);
34     alias pFreeImage_Unload = void function(FIBITMAP*);
35 
36     alias pFreeImage_HasPixels = BOOL function(FIBITMAP*);
37 
38     alias pFreeImage_Load = FIBITMAP* function(FREE_IMAGE_FORMAT,const(char)*,int flags = 0);
39     alias pFreeImage_LoadU = FIBITMAP* function(FREE_IMAGE_FORMAT,const(wchar_t)*,int flags = 0);
40     alias pFreeImage_LoadFromHandle = FIBITMAP* function(FREE_IMAGE_FORMAT,FreeImageIO*,fi_handle,int flags = 0);
41     alias pFreeImage_Save = BOOL function(FREE_IMAGE_FORMAT,FIBITMAP*,const(char)*,int flags = 0);
42     alias pFreeImage_SaveU = BOOL function(FREE_IMAGE_FORMAT,FIBITMAP*,const(wchar_t)*,int flags = 0);
43     alias pFreeImage_SaveToHandle = BOOL function(FREE_IMAGE_FORMAT,FIBITMAP*,FreeImageIO*,fi_handle,int flags = 0);
44 
45     alias pFreeImage_OpenMemory = FIMEMORY* function(BYTE* data = null,DWORD size_in_bytes = 0);
46     alias pFreeImage_CloseMemory = void function(FIMEMORY*);
47     alias pFreeImage_LoadFromMemory = FIBITMAP* function(FREE_IMAGE_FORMAT,FIMEMORY*,int flags = 0);
48     alias pFreeImage_SaveToMemory = BOOL function(FREE_IMAGE_FORMAT,FIBITMAP*,FIMEMORY*,int flags = 0);
49     alias pFreeImage_TellMemory = c_long function(FIMEMORY*);
50     alias pFreeImage_SeekMemory = BOOL function(FIMEMORY*,c_long,int);
51     alias pFreeImage_AcquireMemory = BOOL function(FIMEMORY*,BYTE**,DWORD*);
52     alias pFreeImage_ReadMemory = uint function(void*,uint,uint,FIMEMORY*);
53     alias pFreeImage_WriteMemory = uint function(const(void*),uint,uint,FIMEMORY*);
54 
55     alias pFreeImage_LoadMultiBitmapFromMemory = FIMULTIBITMAP* function(FREE_IMAGE_FORMAT,FIMEMORY*,int flags = 0);
56     alias pFreeImage_SaveMultiBitmapToMemory = BOOL function(FREE_IMAGE_FORMAT,FIMULTIBITMAP*,FIMEMORY*,int flags);
57 
58     alias pFreeImage_RegisterLocalPlugin = FREE_IMAGE_FORMAT function(FI_InitProc proc_address,const(char)* format = null,const(char)* description = null,const(char)* extension = null,const(char)* regexpr = null);
59 
60     version(Windows) {
61         alias  pFreeImage_RegisterExternalPlugin = FREE_IMAGE_FORMAT function(const(char)* path,const(char)* format = null,const(char)* description = null,const(char)* extension = null,const(char)* regexpr = null);
62     }
63 
64     alias pFreeImage_GetFIFCount = int function();
65     alias pFreeImage_SetPluginEnabled = int function(FREE_IMAGE_FORMAT,BOOL);
66     alias pFreeImage_IsPluginEnabled = int function(FREE_IMAGE_FORMAT);
67     alias pFreeImage_GetFIFFromFormat = FREE_IMAGE_FORMAT function(const(char)*);
68     alias pFreeImage_GetFIFFromMime = FREE_IMAGE_FORMAT function(const(char)*);
69     alias pFreeImage_GetFormatFromFIF = const(char)* function(FREE_IMAGE_FORMAT);
70     alias pFreeImage_GetFIFExtensionList = const(char)* function(FREE_IMAGE_FORMAT);
71     alias pFreeImage_GetFIFDescription = const(char)* function(FREE_IMAGE_FORMAT);
72     alias pFreeImage_GetFIFRegExpr = const(char)* function(FREE_IMAGE_FORMAT);
73     alias pFreeImage_GetFIFMimeType = const(char)* function(FREE_IMAGE_FORMAT);
74     alias pFreeImage_GetFIFFromFilename = FREE_IMAGE_FORMAT function(const(char)*);
75     alias pFreeImage_GetFIFFromFilenameU = FREE_IMAGE_FORMAT function(const(wchar_t)*);
76     alias pFreeImage_FIFSupportsReading = BOOL function(FREE_IMAGE_FORMAT);
77     alias pFreeImage_FIFSupportsWriting = BOOL function(FREE_IMAGE_FORMAT);
78     alias pFreeImage_FIFSupportsExportBPP = BOOL function(FREE_IMAGE_FORMAT,int);
79     alias pFreeImage_FIFSupportsExportType = BOOL function(FREE_IMAGE_FORMAT, FREE_IMAGE_TYPE);
80     alias pFreeImage_FIFSupportsICCProfiles = BOOL function(FREE_IMAGE_FORMAT);
81     alias pFreeImage_FIFSupportsNoPixels = BOOL function(FREE_IMAGE_FORMAT);
82 
83     alias pFreeImage_OpenMultiBitmap = FIMULTIBITMAP* function(FREE_IMAGE_FORMAT,const(char)*,BOOL,BOOL,BOOL keep_cache_in_memory = FALSE,int flags = 0);
84     alias pFreeImage_OpenMultiBitmapFromHandle = FIMULTIBITMAP* function(FREE_IMAGE_FORMAT,FreeImageIO*,fi_handle,int flags = 0);
85     alias pFreeImage_SaveMultiBitmapToHandle = BOOL function(FREE_IMAGE_FORMAT, FIMULTIBITMAP* bitmap,FreeImageIO*,fi_handle,int flags = 0);
86     alias pFreeImage_CloseMultiBitmap = BOOL function(FIMULTIBITMAP*,int flags = 0);
87     alias pFreeImage_GetPageCount = int function(FIMULTIBITMAP*);
88     alias pFreeImage_AppendPage = void function(FIMULTIBITMAP*,FIBITMAP*);
89     alias pFreeImage_InsertPage = void function(FIMULTIBITMAP*,int,FIBITMAP*);
90     alias pFreeImage_DeletePage = void function(FIMULTIBITMAP*,int);
91     alias pFreeImage_LockPage = FIBITMAP* function(FIMULTIBITMAP*,int);
92     alias pFreeImage_UnlockPage = void function(FIMULTIBITMAP*,FIBITMAP*,BOOL);
93     alias pFreeImage_MovePage = BOOL function(FIMULTIBITMAP*,int,int);
94     alias pFreeImage_GetLockedPageNumbers = BOOL function(FIMULTIBITMAP*,int*,int*);
95 
96     alias pFreeImage_GetFileType = FREE_IMAGE_FORMAT function(const(char)*,int size = 0);
97     alias pFreeImage_GetFileTypeU = FREE_IMAGE_FORMAT function(const(wchar_t)*,int size = 0);
98     alias pFreeImage_GetFileTypeFromHandle = FREE_IMAGE_FORMAT function(FreeImageIO*,fi_handle,int size = 0);
99     alias pFreeImage_GetFileTypeFromMemory = FREE_IMAGE_FORMAT function(FIMEMORY*,int size = 0);
100 
101     alias pFreeImage_GetImageType = FREE_IMAGE_TYPE function(FIBITMAP*);
102 
103     alias pFreeImage_IsLittleEndian = BOOL function();
104     alias pFreeImage_LookupX11Color = BOOL function(const(char)*,BYTE*,BYTE*,BYTE*);
105     alias pFreeImage_LookupSVGColor = BOOL function(const(char)*,BYTE*,BYTE*,BYTE*);
106 
107     alias pFreeImage_GetBits = BYTE* function(FIBITMAP*);
108     alias pFreeImage_GetScanLine = BYTE* function(FIBITMAP*,int);
109 
110     alias pFreeImage_GetPixelIndex = BOOL function(FIBITMAP*,uint,uint,BYTE*);
111     alias pFreeImage_GetPixelColor = BOOL function(FIBITMAP*,uint,uint,RGBQUAD*);
112     alias pFreeImage_SetPixelIndex = BOOL function(FIBITMAP*,uint,uint,BYTE*);
113     alias pFreeImage_SetPixelColor = BOOL function(FIBITMAP*,uint,uint,RGBQUAD*);
114 
115     alias pFreeImage_GetColorsUsed = uint function(FIBITMAP*);
116     alias pFreeImage_GetBPP = uint function(FIBITMAP*);
117     alias pFreeImage_GetWidth = uint function(FIBITMAP*);
118     alias pFreeImage_GetHeight = uint function(FIBITMAP*);
119     alias pFreeImage_GetLine = uint function(FIBITMAP*);
120     alias pFreeImage_GetPitch = uint function(FIBITMAP*);
121     alias pFreeImage_GetDIBSize = uint function(FIBITMAP*);
122     alias pFreeImage_GetMemorySize = uint function(FIBITMAP*); // Added in 3.17.0
123     alias pFreeImage_GetPalette =RGBQUAD* function(FIBITMAP*);
124 
125     alias pFreeImage_GetDotsPerMeterX = uint function(FIBITMAP*);
126     alias pFreeImage_GetDotsPerMeterY = uint function(FIBITMAP*);
127     alias pFreeImage_SetDotsPerMeterX = void function(FIBITMAP*,uint);
128     alias pFreeImage_SetDotsPerMeterY = void function(FIBITMAP*,uint);
129 
130     alias pFreeImage_GetInfoHeader = BITMAPINFOHEADER* function(FIBITMAP*);
131     alias pFreeImage_GetInfo = BITMAPINFO* function(FIBITMAP*);
132     alias pFreeImage_GetColorType = FREE_IMAGE_COLOR_TYPE function(FIBITMAP*);
133 
134     alias pFreeImage_GetRedMask = uint function(FIBITMAP*);
135     alias pFreeImage_GetGreenMask = uint function(FIBITMAP*);
136     alias pFreeImage_GetBlueMask = uint function(FIBITMAP*);
137 
138     alias pFreeImage_GetTransparencyCount = uint function(FIBITMAP*);
139     alias pFreeImage_GetTransparencyTable = BYTE* function(FIBITMAP*);
140     alias pFreeImage_SetTransparent = void function(FIBITMAP*,BOOL);
141     alias pFreeImage_SetTransparencyTable = void function(FIBITMAP*,BYTE*,int);
142     alias pFreeImage_IsTransparent = BOOL function(FIBITMAP*);
143     alias pFreeImage_SetTransparentIndex = void function(FIBITMAP*,int);
144     alias pFreeImage_GetTransparentIndex = int function(FIBITMAP*);
145 
146     alias pFreeImage_HasBackgroundColor = BOOL function(FIBITMAP*);
147     alias pFreeImage_GetBackgroundColor = BOOL function(FIBITMAP*,RGBQUAD*);
148     alias pFreeImage_SetBackgroundColor = BOOL function(FIBITMAP*,RGBQUAD*);
149 
150     alias pFreeImage_GetThumbnail = FIBITMAP* function(FIBITMAP*);
151     alias pFreeImage_SetThumbnail = BOOL function(FIBITMAP*,FIBITMAP*);
152 
153     alias pFreeImage_GetICCProfile = FIICCPROFILE* function(FIBITMAP*);
154     alias pFreeImage_CreateICCProfile = FIICCPROFILE* function(FIBITMAP*,void*,c_long);
155     alias pFreeImage_DestroyICCProfile = void function(FIBITMAP*);
156 
157     alias pFreeImage_ConvertLine1To4 = void function(BYTE*,BYTE*,int);
158     alias pFreeImage_ConvertLine8To4 = void function(BYTE*,BYTE*,int,RGBQUAD*);
159     alias pFreeImage_ConvertLine16To4_555 = void function(BYTE*,BYTE*,int);
160     alias pFreeImage_ConvertLine16To4_565 = void function(BYTE*,BYTE*,int);
161     alias pFreeImage_ConvertLine24To4 = void function(BYTE*,BYTE*,int);
162     alias pFreeImage_ConvertLine32To4 = void function(BYTE*,BYTE*,int);
163     alias pFreeImage_ConvertLine1To8 = void function(BYTE*,BYTE*,int);
164     alias pFreeImage_ConvertLine4To8 = void function(BYTE*,BYTE*,int);
165     alias pFreeImage_ConvertLine16To8_555 = void function(BYTE*,BYTE*,int);
166     alias pFreeImage_ConvertLine16To8_565 = void function(BYTE*,BYTE*,int);
167     alias pFreeImage_ConvertLine24To8 = void function(BYTE*,BYTE*,int);
168     alias pFreeImage_ConvertLine32To8 = void function(BYTE*,BYTE*,int);
169     alias pFreeImage_ConvertLine1To16_555 = void function(BYTE*,BYTE*,int,RGBQUAD*);
170     alias pFreeImage_ConvertLine4To16_555 = void function(BYTE*,BYTE*,int,RGBQUAD*);
171     alias pFreeImage_ConvertLine8To16_555 = void function(BYTE*,BYTE*,int,RGBQUAD*);
172     alias pFreeImage_ConvertLine16_565_To16_555 = void function(BYTE*,BYTE*,int);
173     alias pFreeImage_ConvertLine24To16_555 = void function(BYTE*,BYTE*,int);
174     alias pFreeImage_ConvertLine32To16_555 = void function(BYTE*,BYTE*,int);
175     alias pFreeImage_ConvertLine1To16_565 = void function(BYTE*,BYTE*,int,RGBQUAD*);
176     alias pFreeImage_ConvertLine4To16_565 = void function(BYTE*,BYTE*,int,RGBQUAD*);
177     alias pFreeImage_ConvertLine8To16_565 = void function(BYTE*,BYTE*,int,RGBQUAD*);
178     alias pFreeImage_ConvertLine16_555_To16_565 = void function(BYTE*,BYTE*,int);
179     alias pFreeImage_ConvertLine24To16_565 = void function(BYTE*,BYTE*,int);
180     alias pFreeImage_ConvertLine32To16_565 = void function(BYTE*,BYTE*,int);
181     alias pFreeImage_ConvertLine1To24 = void function(BYTE*,BYTE*,int,RGBQUAD*);
182     alias pFreeImage_ConvertLine4To24 = void function(BYTE*,BYTE*,int,RGBQUAD*);
183     alias pFreeImage_ConvertLine8To24 = void function(BYTE*,BYTE*,int,RGBQUAD*);
184     alias pFreeImage_ConvertLine16To24_555 = void function(BYTE*,BYTE*,int);
185     alias pFreeImage_ConvertLine16To24_565 = void function(BYTE*,BYTE*,int);
186     alias pFreeImage_ConvertLine32To24 = void function(BYTE*,BYTE*,int);
187     alias pFreeImage_ConvertLine1To32 = void function(BYTE*,BYTE*,int,RGBQUAD*);
188     alias pFreeImage_ConvertLine4To32 = void function(BYTE*,BYTE*,int,RGBQUAD*);
189     alias pFreeImage_ConvertLine8To32 = void function(BYTE*,BYTE*,int,RGBQUAD*);
190     alias pFreeImage_ConvertLine16To32_555 = void function(BYTE*,BYTE*,int);
191     alias pFreeImage_ConvertLine16To32_565 = void function(BYTE*,BYTE*,int);
192     alias pFreeImage_ConvertLine24To32 = void function(BYTE*,BYTE*,int);
193 
194     alias pFreeImage_ConvertTo4Bits = FIBITMAP* function(FIBITMAP*);
195     alias pFreeImage_ConvertTo8Bits = FIBITMAP* function(FIBITMAP*);
196     alias pFreeImage_ConvertToGreyscale = FIBITMAP* function(FIBITMAP*);
197     alias pFreeImage_ConvertTo16Bits555 = FIBITMAP* function(FIBITMAP*);
198     alias pFreeImage_ConvertTo16Bits565 = FIBITMAP* function(FIBITMAP*);
199     alias pFreeImage_ConvertTo24Bits = FIBITMAP* function(FIBITMAP*);
200     alias pFreeImage_ConvertTo32Bits = FIBITMAP* function(FIBITMAP*);
201     alias pFreeImage_ColorQuantize = FIBITMAP* function(FIBITMAP*,FREE_IMAGE_QUANTIZE);
202     alias pFreeImage_ColorQuantizeEx = FIBITMAP* function(FIBITMAP*,FREE_IMAGE_QUANTIZE quantize = FIQ_WUQUANT,int PaletteSize = 256,int ReserveSize = 0,RGBQUAD* ReservePalette = null);
203     alias pFreeImage_Threshold = FIBITMAP* function(FIBITMAP*,BYTE);
204     alias pFreeImage_Dither = FIBITMAP* function(FIBITMAP*,FREE_IMAGE_DITHER);
205 
206     alias pFreeImage_ConvertFromRawBits = FIBITMAP* function(BYTE*,int,int,int,uint,uint,uint,uint,BOOL topdown = FALSE);
207     alias pFreeImage_ConvertFromRawBitsEx = FIBITMAP* function(BOOL,BYTE*,FREE_IMAGE_TYPE,int,int,int,uint,uint,uint,uint,BOOL topdown=FALSE);    // Added in 3.17.0
208     alias pFreeImage_ConvertToRawBits = void function(BYTE*,FIBITMAP*,int,uint,uint,uint,uint,BOOL topdown = FALSE);
209 
210     alias pFreeImage_ConvertToFloat = FIBITMAP* function(FIBITMAP*);
211     alias pFreeImage_ConvertToRGBF = FIBITMAP* function(FIBITMAP*);
212     alias pFreeImage_ConvertToRGBAF = FIBITMAP* function(FIBITMAP*);    // Added in 3.17.0
213     alias pFreeImage_ConvertToUINT16 = FIBITMAP* function(FIBITMAP*);
214     alias pFreeImage_ConvertToRGB16 = FIBITMAP* function(FIBITMAP*);
215     alias pFreeImage_ConvertToRGBA16 = FIBITMAP* function(FIBITMAP*);   // Added in 3.17.0
216 
217     alias pFreeImage_ConvertToStandardType = FIBITMAP* function(FIBITMAP*,BOOL scale_linear = TRUE);
218     alias pFreeImage_ConvertToType = FIBITMAP* function(FIBITMAP*, FREE_IMAGE_TYPE,BOOL scale_linear = TRUE);
219 
220     alias pFreeImage_ToneMapping = FIBITMAP* function(FIBITMAP*, FREE_IMAGE_TMO,double first_param = 0,double second_param = 0);
221     alias pFreeImage_TmoDrago03 = FIBITMAP* function(FIBITMAP* src,double gamma = 2.2,double exposure = 0);
222     alias pFreeImage_TmoReinhard05 = FIBITMAP* function(FIBITMAP* src,double intensity = 0,double contrast = 0);
223     alias pFreeImage_TmoReinhard05Ex = FIBITMAP* function(FIBITMAP* src,double intensity = 0,double contrast = 0,double adaptation = 1,double color_correction = 0);
224 
225     alias pFreeImage_TmoFattal02 = FIBITMAP* function(FIBITMAP* src,double color_saturation = 0.5,double attenuation = 0.85);
226 
227     alias pFreeImage_ZLibCompress =DWORD function(BYTE*,DWORD,BYTE*,DWORD);
228     alias pFreeImage_ZLibUncompress =DWORD function(BYTE*,DWORD,BYTE*,DWORD);
229     alias pFreeImage_ZLibGZip =DWORD function(BYTE*,DWORD,BYTE*,DWORD);
230     alias pFreeImage_ZLibGUnzip =DWORD function(BYTE*,DWORD,BYTE*,DWORD);
231     alias pFreeImage_ZLibCRC32 =DWORD function(DWORD,BYTE*,DWORD);
232 
233     alias pFreeImage_CreateTag = FITAG* function();
234     alias pFreeImage_DeleteTag = void function(FITAG*);
235     alias pFreeImage_CloneTag = FITAG* function(FITAG*);
236 
237     alias pFreeImage_GetTagKey = const(char)* function(FITAG*);
238     alias pFreeImage_GetTagDescription = const(char)* function(FITAG*);
239     alias pFreeImage_GetTagID = WORD function(FITAG*);
240     alias pFreeImage_GetTagType = FREE_IMAGE_MDTYPE function(FITAG*);
241     alias pFreeImage_GetTagCount =DWORD function(FITAG*);
242     alias pFreeImage_GetTagLength =DWORD function(FITAG*);
243     alias pFreeImage_GetTagValue = const(void)* function(FITAG*);
244 
245     alias pFreeImage_SetTagKey = BOOL function(FITAG*,const(char)*);
246     alias pFreeImage_SetTagDescription = BOOL function(FITAG*,const(char)*);
247     alias pFreeImage_SetTagID = BOOL function(FITAG*,WORD);
248     alias pFreeImage_SetTagType = BOOL function(FITAG*,FREE_IMAGE_MDTYPE);
249     alias pFreeImage_SetTagCount = BOOL function(FITAG*,DWORD);
250     alias pFreeImage_SetTagLength = BOOL function(FITAG*,DWORD);
251     alias pFreeImage_SetTagValue = BOOL function(FITAG*, const(void)*);
252 
253     alias pFreeImage_FindFirstMetadata = FIMETADATA* function(FREE_IMAGE_MDMODEL,FIBITMAP*,FITAG**);
254     alias pFreeImage_FindNextMetadata = BOOL function(FIMETADATA*,FITAG**);
255     alias pFreeImage_FindCloseMetadata = void function(FIMETADATA*);
256 
257     alias pFreeImage_SetMetadata = BOOL function(FREE_IMAGE_MDMODEL,FIBITMAP*,const(char)*,FITAG*);
258     alias pFreeImage_GetMetadata = BOOL function(FREE_IMAGE_MDMODEL,FIBITMAP*,const(char)*,FITAG**);
259     alias pFreeImage_SetMetadataKeyValue = BOOL function(FREE_IMAGE_MDMODEL,FIBITMAP*,const(char)*,const(char)*); // Added in 3.17.0
260 
261     alias pFreeImage_GetMetadataCount = uint function(FREE_IMAGE_MDMODEL,FIBITMAP*);
262     alias pFreeImage_CloneMetadata = BOOL function(FIBITMAP*,FIBITMAP*);
263 
264     alias pFreeImage_TagToString = const(char)* function(FREE_IMAGE_MDMODEL,FITAG*,char* Make = null);
265 
266     version(BindFI_JPEGTransform) {
267         alias pFreeImage_JPEGTransform = BOOL function(const(char)*,const(char)*, FREE_IMAGE_JPEG_OPERATION,BOOL perfect=TRUE);
268         alias pFreeImage_JPEGTransformU = BOOL function(const(wchar_t)*,const(wchar_t)*, FREE_IMAGE_JPEG_OPERATION,BOOL perfect=TRUE);
269         alias pFreeImage_JPEGCrop = BOOL function(const(char)*,const(char)*,int,int,int,int);
270         alias pFreeImage_JPEGCropU = BOOL function(const(wchar_t)*,const(wchar_t)*,int,int,int,int);
271 
272         // FreeImage 3.16.0 -- 4 functions
273         alias pFreeImage_JPEGTransformFromHandle = BOOL function(FreeImageIO*,fi_handle,FreeImageIO*,fi_handle,FREE_IMAGE_JPEG_OPERATION,int*,int*,int*,int*,BOOL perfect=TRUE);
274         alias pFreeImage_JPEGTransformCombined = BOOL function(const(char)*,const(char)*,FREE_IMAGE_JPEG_OPERATION,int*,int*,int*,int*,BOOL perfect=TRUE);
275         alias pFreeImage_JPEGTransformCombinedU = BOOL function(const(wchar_t)*,const(wchar_t)*,FREE_IMAGE_JPEG_OPERATION,int*,int*,int*,int*,BOOL perfect=TRUE);
276         alias pFreeImage_JPEGTransformCombinedFromMemory = BOOL function(FIMEMORY*,FIMEMORY*,FREE_IMAGE_JPEG_OPERATION,int*,int*,int*,int*,BOOL perfect=TRUE);
277     }
278 
279     alias pFreeImage_Rotate = FIBITMAP* function(FIBITMAP*,double, const(void*) = null);
280     alias pFreeImage_RotateEx = FIBITMAP* function(FIBITMAP*,double,double,double,double,double,BOOL);
281     alias pFreeImage_FlipHorizontal = BOOL function(FIBITMAP*);
282     alias pFreeImage_FlipVertical = BOOL function(FIBITMAP*);
283 
284     alias pFreeImage_Rescale = FIBITMAP* function(FIBITMAP*,int,int, FREE_IMAGE_FILTER);
285     alias pFreeImage_MakeThumbnail = FIBITMAP* function(FIBITMAP*,int,BOOL convert = TRUE);
286     alias pFreeImage_RescaleRect = FIBITMAP* function(FIBITMAP*,int,int,int,int,int,int,FREE_IMAGE_FILTER filter = FILTER_CATMULLROM,uint flags = 0); // Added in 3.17.0
287 
288     alias pFreeImage_AdjustCurve = BOOL function(FIBITMAP*,BYTE* LUT, FREE_IMAGE_COLOR_CHANNEL);
289     alias pFreeImage_AdjustGamma = BOOL function(FIBITMAP*,double);
290     alias pFreeImage_AdjustBrightness = BOOL function(FIBITMAP*,double);
291     alias pFreeImage_AdjustContrast = BOOL function(FIBITMAP*,double);
292     alias pFreeImage_Invert = BOOL function(FIBITMAP*);
293     alias pFreeImage_GetHistogram = BOOL function(FIBITMAP*,DWORD*, FREE_IMAGE_COLOR_CHANNEL channel = FICC_BLACK);
294     alias pFreeImage_GetAdjustColorsLookupTable = int function(BYTE* LUT,double,double,double,BOOL);
295     alias pFreeImage_AdjustColors = BOOL function(FIBITMAP*,double,double,double,BOOL invert = FALSE);
296     alias pFreeImage_ApplyColorMapping = uint function(FIBITMAP*,RGBQUAD*,RGBQUAD*,uint,BOOL,BOOL);
297     alias pFreeImage_SwapColors = uint function(FIBITMAP*,RGBQUAD*,RGBQUAD*,BOOL);
298     alias pFreeImage_ApplyPaletteIndexMapping = uint function(FIBITMAP*,BYTE*,BYTE*,uint,BOOL);
299     alias pFreeImage_SwapPaletteIndices = uint function(FIBITMAP*,BYTE*,BYTE*);
300 
301     alias pFreeImage_GetChannel = FIBITMAP* function(FIBITMAP*,FREE_IMAGE_COLOR_CHANNEL);
302     alias pFreeImage_SetChannel = BOOL function(FIBITMAP*,FIBITMAP*,FREE_IMAGE_COLOR_CHANNEL);
303     alias pFreeImage_GetComplexChannel = FIBITMAP* function(FIBITMAP*,FREE_IMAGE_COLOR_CHANNEL);
304     alias pFreeImage_SetComplexChannel = BOOL function(FIBITMAP*,FIBITMAP*,FREE_IMAGE_COLOR_CHANNEL);
305 
306     alias pFreeImage_Copy = FIBITMAP* function(FIBITMAP*,int,int,int,int);
307     alias pFreeImage_Paste = BOOL function(FIBITMAP*,FIBITMAP*,int,int,int);
308     alias pFreeImage_CreateView = FIBITMAP* function(FIBITMAP*,uint,uint,uint,uint); // Added in 3.17.0
309 
310     alias pFreeImage_Composite = FIBITMAP* function(FIBITMAP*,BOOL useFileBkg = FALSE,RGBQUAD* appBkColor = null,FIBITMAP*bg = null);
311     alias pFreeImage_PreMultiplyWithAlpha = BOOL function(FIBITMAP*);
312 
313     alias pFreeImage_FillBackground = BOOL function(FIBITMAP*, const(void*),int options = 0);
314     alias pFreeImage_EnlargeCanvas = FIBITMAP* function(FIBITMAP*,int,int,int,int,const(void*),int options = 0);
315     alias pFreeImage_AllocateEx = FIBITMAP* function(int,int,int,const(RGBQUAD)*,int options = 0,const(RGBQUAD)* palette = null,uint red_mask = 0,uint green_mask = 0,uint blue_mask = 0);
316     alias pFreeImage_AllocateExT = FIBITMAP* function(FREE_IMAGE_TYPE,int,int,int,const(void*),int options = 0,const(RGBQUAD)* palette = null,uint red_mask = 0,uint green_mask = 0,uint blue_mask = 0);
317 
318     alias pFreeImage_MultigridPoissonSolver = FIBITMAP* function(FIBITMAP*,int ncycle = 3);
319 
320     static if(fiSupport >= FISupport.fi318) {
321         alias pFreeImage_Validate = BOOL function(FREE_IMAGE_FORMAT,const(char)*);
322         alias pFreeImage_ValidateU = BOOL function(FREE_IMAGE_FORMAT,const(wchar_t)*);
323         alias pFreeImage_ValidateFromHandle = BOOL function(FREE_IMAGE_FORMAT,FreeImageIO*,fi_handle);
324         alias pFreeImage_ValidateFromMemory = BOOL function(FREE_IMAGE_FORMAT,FIMEMORY);
325         alias pFreeImage_ConvertLine1To32MapTransparency = void function(BYTE*,BYTE*,int,RGBQUAD*,BYTE*,int);
326         alias pFreeImage_ConvertLine4To32MapTransparency = void function(BYTE*,BYTE*,int,RGBQUAD*,BYTE*,int);
327         alias pFreeImage_ConvertLine8To32MapTransparency = void function(BYTE*,BYTE*,int,RGBQUAD*,BYTE*,int);
328     }
329 }
330 
331 __gshared {
332     pFreeImage_Initialise FreeImage_Initialise;
333     pFreeImage_DeInitialise FreeImage_DeInitialise;
334     pFreeImage_GetVersion FreeImage_GetVersion;
335     pFreeImage_GetCopyrightMessage FreeImage_GetCopyrightMessage;
336     pFreeImage_SetOutputMessageStdCall FreeImage_SetOutputMessageStdCall;
337     pFreeImage_SetOutputMessage FreeImage_SetOutputMessage;
338     pFreeImage_OutputMessageProc FreeImage_OutputMessageProc;
339     pFreeImage_Allocate FreeImage_Allocate;
340     pFreeImage_AllocateT FreeImage_AllocateT;
341     pFreeImage_Clone FreeImage_Clone;
342     pFreeImage_Unload FreeImage_Unload;
343     pFreeImage_HasPixels FreeImage_HasPixels;
344     pFreeImage_Load FreeImage_Load;
345     pFreeImage_LoadU FreeImage_LoadU;
346     pFreeImage_LoadFromHandle FreeImage_LoadFromHandle;
347     pFreeImage_Save FreeImage_Save;
348     pFreeImage_SaveU FreeImage_SaveU;
349     pFreeImage_SaveToHandle FreeImage_SaveToHandle;
350     pFreeImage_OpenMemory FreeImage_OpenMemory;
351     pFreeImage_CloseMemory FreeImage_CloseMemory;
352     pFreeImage_LoadFromMemory FreeImage_LoadFromMemory;
353     pFreeImage_SaveToMemory FreeImage_SaveToMemory;
354     pFreeImage_TellMemory FreeImage_TellMemory;
355     pFreeImage_SeekMemory FreeImage_SeekMemory;
356     pFreeImage_AcquireMemory FreeImage_AcquireMemory;
357     pFreeImage_ReadMemory FreeImage_ReadMemory;
358     pFreeImage_WriteMemory FreeImage_WriteMemory;
359     pFreeImage_LoadMultiBitmapFromMemory FreeImage_LoadMultiBitmapFromMemory;
360     pFreeImage_SaveMultiBitmapToMemory FreeImage_SaveMultiBitmapToMemory;
361     pFreeImage_RegisterLocalPlugin FreeImage_RegisterLocalPlugin;
362 
363     version(Windows) {
364         pFreeImage_RegisterExternalPlugin FreeImage_RegisterExternalPlugin;
365     }
366 
367     pFreeImage_GetFIFCount FreeImage_GetFIFCount;
368     pFreeImage_SetPluginEnabled FreeImage_SetPluginEnabled;
369     pFreeImage_IsPluginEnabled FreeImage_IsPluginEnabled;
370     pFreeImage_GetFIFFromFormat FreeImage_GetFIFFromFormat;
371     pFreeImage_GetFIFFromMime FreeImage_GetFIFFromMime;
372     pFreeImage_GetFormatFromFIF FreeImage_GetFormatFromFIF;
373     pFreeImage_GetFIFExtensionList FreeImage_GetFIFExtensionList;
374     pFreeImage_GetFIFDescription FreeImage_GetFIFDescription;
375     pFreeImage_GetFIFRegExpr FreeImage_GetFIFRegExpr;
376     pFreeImage_GetFIFMimeType FreeImage_GetFIFMimeType;
377     pFreeImage_GetFIFFromFilename FreeImage_GetFIFFromFilename;
378     pFreeImage_GetFIFFromFilenameU FreeImage_GetFIFFromFilenameU;
379     pFreeImage_FIFSupportsReading FreeImage_FIFSupportsReading;
380     pFreeImage_FIFSupportsWriting FreeImage_FIFSupportsWriting;
381     pFreeImage_FIFSupportsExportBPP FreeImage_FIFSupportsExportBPP;
382     pFreeImage_FIFSupportsExportType FreeImage_FIFSupportsExportType;
383     pFreeImage_FIFSupportsICCProfiles FreeImage_FIFSupportsICCProfiles;
384     pFreeImage_FIFSupportsNoPixels FreeImage_FIFSupportsNoPixels;
385     pFreeImage_OpenMultiBitmap FreeImage_OpenMultiBitmap;
386     pFreeImage_OpenMultiBitmapFromHandle FreeImage_OpenMultiBitmapFromHandle;
387     pFreeImage_SaveMultiBitmapToHandle FreeImage_SaveMultiBitmapToHandle;
388     pFreeImage_CloseMultiBitmap FreeImage_CloseMultiBitmap;
389     pFreeImage_GetPageCount FreeImage_GetPageCount;
390     pFreeImage_AppendPage FreeImage_AppendPage;
391     pFreeImage_InsertPage FreeImage_InsertPage;
392     pFreeImage_DeletePage FreeImage_DeletePage;
393     pFreeImage_LockPage FreeImage_LockPage;
394     pFreeImage_UnlockPage FreeImage_UnlockPage;
395     pFreeImage_MovePage FreeImage_MovePage;
396     pFreeImage_GetLockedPageNumbers FreeImage_GetLockedPageNumbers;
397     pFreeImage_GetFileType FreeImage_GetFileType;
398     pFreeImage_GetFileTypeU FreeImage_GetFileTypeU;
399     pFreeImage_GetFileTypeFromHandle FreeImage_GetFileTypeFromHandle;
400     pFreeImage_GetFileTypeFromMemory FreeImage_GetFileTypeFromMemory;
401     pFreeImage_GetImageType FreeImage_GetImageType;
402     pFreeImage_IsLittleEndian FreeImage_IsLittleEndian;
403     pFreeImage_LookupX11Color FreeImage_LookupX11Color;
404     pFreeImage_LookupSVGColor FreeImage_LookupSVGColor;
405     pFreeImage_GetBits FreeImage_GetBits;
406     pFreeImage_GetScanLine FreeImage_GetScanLine;
407     pFreeImage_GetPixelIndex FreeImage_GetPixelIndex;
408     pFreeImage_GetPixelColor FreeImage_GetPixelColor;
409     pFreeImage_SetPixelIndex FreeImage_SetPixelIndex;
410     pFreeImage_SetPixelColor FreeImage_SetPixelColor;
411     pFreeImage_GetColorsUsed FreeImage_GetColorsUsed;
412     pFreeImage_GetBPP FreeImage_GetBPP;
413     pFreeImage_GetWidth FreeImage_GetWidth;
414     pFreeImage_GetHeight FreeImage_GetHeight;
415     pFreeImage_GetLine FreeImage_GetLine;
416     pFreeImage_GetPitch FreeImage_GetPitch;
417     pFreeImage_GetDIBSize FreeImage_GetDIBSize;
418     pFreeImage_GetMemorySize FreeImage_GetMemorySize;
419     pFreeImage_GetPalette FreeImage_GetPalette;
420     pFreeImage_GetDotsPerMeterX FreeImage_GetDotsPerMeterX;
421     pFreeImage_GetDotsPerMeterY FreeImage_GetDotsPerMeterY;
422     pFreeImage_SetDotsPerMeterX FreeImage_SetDotsPerMeterX;
423     pFreeImage_SetDotsPerMeterY FreeImage_SetDotsPerMeterY;
424     pFreeImage_GetInfoHeader FreeImage_GetInfoHeader;
425     pFreeImage_GetInfo FreeImage_GetInfo;
426     pFreeImage_GetColorType FreeImage_GetColorType;
427     pFreeImage_GetRedMask FreeImage_GetRedMask;
428     pFreeImage_GetGreenMask FreeImage_GetGreenMask;
429     pFreeImage_GetBlueMask FreeImage_GetBlueMask;
430     pFreeImage_GetTransparencyCount FreeImage_GetTransparencyCount;
431     pFreeImage_GetTransparencyTable FreeImage_GetTransparencyTable;
432     pFreeImage_SetTransparent FreeImage_SetTransparent;
433     pFreeImage_SetTransparencyTable FreeImage_SetTransparencyTable;
434     pFreeImage_IsTransparent FreeImage_IsTransparent;
435     pFreeImage_SetTransparentIndex FreeImage_SetTransparentIndex;
436     pFreeImage_GetTransparentIndex FreeImage_GetTransparentIndex;
437     pFreeImage_HasBackgroundColor FreeImage_HasBackgroundColor;
438     pFreeImage_GetBackgroundColor FreeImage_GetBackgroundColor;
439     pFreeImage_SetBackgroundColor FreeImage_SetBackgroundColor;
440     pFreeImage_GetThumbnail FreeImage_GetThumbnail;
441     pFreeImage_SetThumbnail FreeImage_SetThumbnail;
442     pFreeImage_GetICCProfile FreeImage_GetICCProfile;
443     pFreeImage_CreateICCProfile FreeImage_CreateICCProfile;
444     pFreeImage_DestroyICCProfile FreeImage_DestroyICCProfile;
445     pFreeImage_ConvertLine1To4 FreeImage_ConvertLine1To4;
446     pFreeImage_ConvertLine8To4 FreeImage_ConvertLine8To4;
447     pFreeImage_ConvertLine16To4_555 FreeImage_ConvertLine16To4_555;
448     pFreeImage_ConvertLine16To4_565 FreeImage_ConvertLine16To4_565;
449     pFreeImage_ConvertLine24To4 FreeImage_ConvertLine24To4;
450     pFreeImage_ConvertLine32To4 FreeImage_ConvertLine32To4;
451     pFreeImage_ConvertLine1To8 FreeImage_ConvertLine1To8;
452     pFreeImage_ConvertLine4To8 FreeImage_ConvertLine4To8;
453     pFreeImage_ConvertLine16To8_555 FreeImage_ConvertLine16To8_555;
454     pFreeImage_ConvertLine16To8_565 FreeImage_ConvertLine16To8_565;
455     pFreeImage_ConvertLine24To8 FreeImage_ConvertLine24To8;
456     pFreeImage_ConvertLine32To8 FreeImage_ConvertLine32To8;
457     pFreeImage_ConvertLine1To16_555 FreeImage_ConvertLine1To16_555;
458     pFreeImage_ConvertLine4To16_555 FreeImage_ConvertLine4To16_555;
459     pFreeImage_ConvertLine8To16_555 FreeImage_ConvertLine8To16_555;
460     pFreeImage_ConvertLine16_565_To16_555 FreeImage_ConvertLine16_565_To16_555;
461     pFreeImage_ConvertLine24To16_555 FreeImage_ConvertLine24To16_555;
462     pFreeImage_ConvertLine32To16_555 FreeImage_ConvertLine32To16_555;
463     pFreeImage_ConvertLine1To16_565 FreeImage_ConvertLine1To16_565;
464     pFreeImage_ConvertLine4To16_565 FreeImage_ConvertLine4To16_565;
465     pFreeImage_ConvertLine8To16_565 FreeImage_ConvertLine8To16_565;
466     pFreeImage_ConvertLine16_555_To16_565 FreeImage_ConvertLine16_555_To16_565;
467     pFreeImage_ConvertLine24To16_565 FreeImage_ConvertLine24To16_565;
468     pFreeImage_ConvertLine32To16_565 FreeImage_ConvertLine32To16_565;
469     pFreeImage_ConvertLine1To24 FreeImage_ConvertLine1To24;
470     pFreeImage_ConvertLine4To24 FreeImage_ConvertLine4To24;
471     pFreeImage_ConvertLine8To24 FreeImage_ConvertLine8To24;
472     pFreeImage_ConvertLine16To24_555 FreeImage_ConvertLine16To24_555;
473     pFreeImage_ConvertLine16To24_565 FreeImage_ConvertLine16To24_565;
474     pFreeImage_ConvertLine32To24 FreeImage_ConvertLine32To24;
475     pFreeImage_ConvertLine1To32 FreeImage_ConvertLine1To32;
476     pFreeImage_ConvertLine4To32 FreeImage_ConvertLine4To32;
477     pFreeImage_ConvertLine8To32 FreeImage_ConvertLine8To32;
478     pFreeImage_ConvertLine16To32_555 FreeImage_ConvertLine16To32_555;
479     pFreeImage_ConvertLine16To32_565 FreeImage_ConvertLine16To32_565;
480     pFreeImage_ConvertLine24To32 FreeImage_ConvertLine24To32;
481     pFreeImage_ConvertTo4Bits FreeImage_ConvertTo4Bits;
482     pFreeImage_ConvertTo8Bits FreeImage_ConvertTo8Bits;
483     pFreeImage_ConvertToGreyscale FreeImage_ConvertToGreyscale;
484     pFreeImage_ConvertTo16Bits555 FreeImage_ConvertTo16Bits555;
485     pFreeImage_ConvertTo16Bits565 FreeImage_ConvertTo16Bits565;
486     pFreeImage_ConvertTo24Bits FreeImage_ConvertTo24Bits;
487     pFreeImage_ConvertTo32Bits FreeImage_ConvertTo32Bits;
488     pFreeImage_ColorQuantize FreeImage_ColorQuantize;
489     pFreeImage_ColorQuantizeEx FreeImage_ColorQuantizeEx;
490     pFreeImage_Threshold FreeImage_Threshold;
491     pFreeImage_Dither FreeImage_Dither;
492     pFreeImage_ConvertFromRawBits FreeImage_ConvertFromRawBits;
493     pFreeImage_ConvertFromRawBitsEx FreeImage_ConvertFromRawBitsEx;
494     pFreeImage_ConvertToRawBits FreeImage_ConvertToRawBits;
495     pFreeImage_ConvertToFloat FreeImage_ConvertToFloat;
496     pFreeImage_ConvertToRGBF FreeImage_ConvertToRGBF;
497     pFreeImage_ConvertToRGBAF FreeImage_ConvertToRGBAF;
498     pFreeImage_ConvertToUINT16 FreeImage_ConvertToUINT16;
499     pFreeImage_ConvertToRGB16 FreeImage_ConvertToRGB16;
500     pFreeImage_ConvertToRGBA16 FreeImage_ConvertToRGBA16;
501     pFreeImage_ConvertToStandardType FreeImage_ConvertToStandardType;
502     pFreeImage_ConvertToType FreeImage_ConvertToType;
503     pFreeImage_ToneMapping FreeImage_ToneMapping;
504     pFreeImage_TmoDrago03 FreeImage_TmoDrago03;
505     pFreeImage_TmoReinhard05 FreeImage_TmoReinhard05;
506     pFreeImage_TmoReinhard05Ex FreeImage_TmoReinhard05Ex;
507     pFreeImage_TmoFattal02 FreeImage_TmoFattal02;
508     pFreeImage_ZLibCompress FreeImage_ZLibCompress;
509     pFreeImage_ZLibUncompress FreeImage_ZLibUncompress;
510     pFreeImage_ZLibGZip FreeImage_ZLibGZip;
511     pFreeImage_ZLibGUnzip FreeImage_ZLibGUnzip;
512     pFreeImage_ZLibCRC32 FreeImage_ZLibCRC32;
513     pFreeImage_CreateTag FreeImage_CreateTag;
514     pFreeImage_DeleteTag FreeImage_DeleteTag;
515     pFreeImage_CloneTag FreeImage_CloneTag;
516     pFreeImage_GetTagKey FreeImage_GetTagKey;
517     pFreeImage_GetTagDescription FreeImage_GetTagDescription;
518     pFreeImage_GetTagID FreeImage_GetTagID;
519     pFreeImage_GetTagType FreeImage_GetTagType;
520     pFreeImage_GetTagCount FreeImage_GetTagCount;
521     pFreeImage_GetTagLength FreeImage_GetTagLength;
522     pFreeImage_GetTagValue FreeImage_GetTagValue;
523     pFreeImage_SetTagKey FreeImage_SetTagKey;
524     pFreeImage_SetTagDescription FreeImage_SetTagDescription;
525     pFreeImage_SetTagID FreeImage_SetTagID;
526     pFreeImage_SetTagType FreeImage_SetTagType;
527     pFreeImage_SetTagCount FreeImage_SetTagCount;
528     pFreeImage_SetTagLength FreeImage_SetTagLength;
529     pFreeImage_SetTagValue FreeImage_SetTagValue;
530     pFreeImage_FindFirstMetadata FreeImage_FindFirstMetadata;
531     pFreeImage_FindNextMetadata FreeImage_FindNextMetadata;
532     pFreeImage_FindCloseMetadata FreeImage_FindCloseMetadata;
533     pFreeImage_SetMetadata FreeImage_SetMetadata;
534     pFreeImage_GetMetadata FreeImage_GetMetadata;
535     pFreeImage_SetMetadataKeyValue FreeImage_SetMetadataKeyValue;
536     pFreeImage_GetMetadataCount FreeImage_GetMetadataCount;
537     pFreeImage_CloneMetadata FreeImage_CloneMetadata;
538     pFreeImage_TagToString FreeImage_TagToString;
539     version(BindFI_JPEGTransform) {
540         pFreeImage_JPEGTransform FreeImage_JPEGTransform;
541         pFreeImage_JPEGTransformU FreeImage_JPEGTransformU;
542         pFreeImage_JPEGCrop FreeImage_JPEGCrop;
543         pFreeImage_JPEGCropU FreeImage_JPEGCropU;
544         pFreeImage_JPEGTransformFromHandle FreeImage_JPEGTransformFromHandle;
545         pFreeImage_JPEGTransformCombined FreeImage_JPEGTransformCombined;
546         pFreeImage_JPEGTransformCombinedU FreeImage_JPEGTransformCombinedU;
547         pFreeImage_JPEGTransformCombinedFromMemory FreeImage_JPEGTransformCombinedFromMemory;
548     }
549     pFreeImage_Rotate FreeImage_Rotate;
550     pFreeImage_RotateEx FreeImage_RotateEx;
551     pFreeImage_FlipHorizontal FreeImage_FlipHorizontal;
552     pFreeImage_FlipVertical FreeImage_FlipVertical;
553     pFreeImage_Rescale FreeImage_Rescale;
554     pFreeImage_MakeThumbnail FreeImage_MakeThumbnail;
555     pFreeImage_RescaleRect FreeImage_RescaleRect;
556     pFreeImage_AdjustCurve FreeImage_AdjustCurve;
557     pFreeImage_AdjustGamma FreeImage_AdjustGamma;
558     pFreeImage_AdjustBrightness FreeImage_AdjustBrightness;
559     pFreeImage_AdjustContrast FreeImage_AdjustContrast;
560     pFreeImage_Invert FreeImage_Invert;
561     pFreeImage_GetHistogram FreeImage_GetHistogram;
562     pFreeImage_GetAdjustColorsLookupTable FreeImage_GetAdjustColorsLookupTable;
563     pFreeImage_AdjustColors FreeImage_AdjustColors;
564     pFreeImage_ApplyColorMapping FreeImage_ApplyColorMapping;
565     pFreeImage_SwapColors FreeImage_SwapColors;
566     pFreeImage_ApplyPaletteIndexMapping FreeImage_ApplyPaletteIndexMapping;
567     pFreeImage_SwapPaletteIndices FreeImage_SwapPaletteIndices;
568     pFreeImage_GetChannel FreeImage_GetChannel;
569     pFreeImage_SetChannel FreeImage_SetChannel;
570     pFreeImage_GetComplexChannel FreeImage_GetComplexChannel;
571     pFreeImage_SetComplexChannel FreeImage_SetComplexChannel;
572     pFreeImage_Copy FreeImage_Copy;
573     pFreeImage_Paste FreeImage_Paste;
574     pFreeImage_CreateView FreeImage_CreateView;
575     pFreeImage_Composite FreeImage_Composite;
576     pFreeImage_PreMultiplyWithAlpha FreeImage_PreMultiplyWithAlpha;
577     pFreeImage_FillBackground FreeImage_FillBackground;
578     pFreeImage_EnlargeCanvas FreeImage_EnlargeCanvas;
579     pFreeImage_AllocateEx FreeImage_AllocateEx;
580     pFreeImage_AllocateExT FreeImage_AllocateExT;
581     pFreeImage_MultigridPoissonSolver FreeImage_MultigridPoissonSolver;
582 
583     static if(fiSupport >= FISupport.fi318) {
584         pFreeImage_Validate FreeImage_Validate;
585         pFreeImage_ValidateU FreeImage_ValidateU;
586         pFreeImage_ValidateFromHandle FreeImage_ValidateFromHandle;
587         pFreeImage_ValidateFromMemory FreeImage_ValidateFromMemory;
588         pFreeImage_ConvertLine1To32MapTransparency FreeImage_ConvertLine1To32MapTransparency;
589         pFreeImage_ConvertLine4To32MapTransparency FreeImage_ConvertLine4To32MapTransparency;
590         pFreeImage_ConvertLine8To32MapTransparency FreeImage_ConvertLine8To32MapTransparency;
591     }
592 
593 }
594 
595 private {
596     SharedLib lib;
597     FISupport loadedVersion;
598 }
599 
600 @nogc nothrow:
601 
602 FISupport loadedFreeImageVersion() { return loadedVersion; }
603 bool isFreeImageLoaded() { return lib != invalidHandle; }
604 
605 FISupport loadFreeImage()
606 {
607     version(Windows) {
608         const(char)[][1] libNames = [
609             "FreeImage.dll"
610         ];
611     }
612     else version(OSX) {
613         const(char)[][2] libNames = [
614             "libfreeimage.dylib",
615             "libfreeimage.dylib.3"
616         ];
617     }
618     else version(Posix) {
619         const(char)[][2] libNames = [
620             "libfreeimage.so",
621             "libfreeimage.so.3"
622         ];
623     }
624     else static assert(0, "bindbc-freeimage is not yet supported on this platform.");
625 
626     FISupport ret;
627     foreach(name; libNames) {
628         ret = loadFreeImage(name.ptr);
629         if(ret != FISupport.noLibrary) break;
630     }
631     return ret;
632 }
633 
634 FISupport loadFreeImage(const(char)* libName)
635 {
636     lib = load(libName);
637     if(lib == invalidHandle) {
638         return FISupport.noLibrary;
639     }
640 
641     auto errCount = errorCount();
642     loadedVersion = FISupport.badLibrary;
643 
644     lib.bindSymbol_stdcall(FreeImage_Initialise, "FreeImage_Initialise");
645     lib.bindSymbol_stdcall(FreeImage_DeInitialise, "FreeImage_DeInitialise");
646     lib.bindSymbol_stdcall(FreeImage_GetVersion, "FreeImage_GetVersion");
647     lib.bindSymbol_stdcall(FreeImage_GetCopyrightMessage, "FreeImage_GetCopyrightMessage");
648     lib.bindSymbol_stdcall(FreeImage_SetOutputMessageStdCall, "FreeImage_SetOutputMessageStdCall");
649     lib.bindSymbol_stdcall(FreeImage_SetOutputMessage, "FreeImage_SetOutputMessage");
650 
651     // This one isn't mangled like the rest, likely because of the variable args.
652     lib.bindSymbol(cast(void**)&FreeImage_OutputMessageProc, "FreeImage_OutputMessageProc");
653 
654     lib.bindSymbol_stdcall(FreeImage_Allocate, "FreeImage_Allocate");
655     lib.bindSymbol_stdcall(FreeImage_AllocateT, "FreeImage_AllocateT");
656     lib.bindSymbol_stdcall(FreeImage_Clone, "FreeImage_Clone");
657     lib.bindSymbol_stdcall(FreeImage_Unload, "FreeImage_Unload");
658     lib.bindSymbol_stdcall(FreeImage_HasPixels, "FreeImage_HasPixels");
659     lib.bindSymbol_stdcall(FreeImage_Load, "FreeImage_Load");
660     lib.bindSymbol_stdcall(FreeImage_LoadU, "FreeImage_LoadU");
661     lib.bindSymbol_stdcall(FreeImage_LoadFromHandle, "FreeImage_LoadFromHandle");
662     lib.bindSymbol_stdcall(FreeImage_Save, "FreeImage_Save");
663     lib.bindSymbol_stdcall(FreeImage_SaveU, "FreeImage_SaveU");
664     lib.bindSymbol_stdcall(FreeImage_SaveToHandle, "FreeImage_SaveToHandle");
665     lib.bindSymbol_stdcall(FreeImage_OpenMemory, "FreeImage_OpenMemory");
666     lib.bindSymbol_stdcall(FreeImage_CloseMemory, "FreeImage_CloseMemory");
667     lib.bindSymbol_stdcall(FreeImage_LoadFromMemory, "FreeImage_LoadFromMemory");
668     lib.bindSymbol_stdcall(FreeImage_SaveToMemory, "FreeImage_SaveToMemory");
669     lib.bindSymbol_stdcall(FreeImage_TellMemory, "FreeImage_TellMemory");
670     lib.bindSymbol_stdcall(FreeImage_SeekMemory, "FreeImage_SeekMemory");
671     lib.bindSymbol_stdcall(FreeImage_AcquireMemory, "FreeImage_AcquireMemory");
672     lib.bindSymbol_stdcall(FreeImage_ReadMemory, "FreeImage_ReadMemory");
673     lib.bindSymbol_stdcall(FreeImage_WriteMemory, "FreeImage_WriteMemory");
674     lib.bindSymbol_stdcall(FreeImage_LoadMultiBitmapFromMemory, "FreeImage_LoadMultiBitmapFromMemory");
675     lib.bindSymbol_stdcall(FreeImage_SaveMultiBitmapToMemory, "FreeImage_SaveMultiBitmapToMemory");
676     lib.bindSymbol_stdcall(FreeImage_RegisterLocalPlugin, "FreeImage_RegisterLocalPlugin");
677 
678     version(Windows) {
679         lib.bindSymbol_stdcall(FreeImage_RegisterExternalPlugin, "FreeImage_RegisterExternalPlugin");
680     }
681 
682     lib.bindSymbol_stdcall(FreeImage_GetFIFCount, "FreeImage_GetFIFCount");
683     lib.bindSymbol_stdcall(FreeImage_SetPluginEnabled, "FreeImage_SetPluginEnabled");
684     lib.bindSymbol_stdcall(FreeImage_IsPluginEnabled, "FreeImage_IsPluginEnabled");
685     lib.bindSymbol_stdcall(FreeImage_GetFIFFromFormat, "FreeImage_GetFIFFromFormat");
686     lib.bindSymbol_stdcall(FreeImage_GetFIFFromMime, "FreeImage_GetFIFFromMime");
687     lib.bindSymbol_stdcall(FreeImage_GetFormatFromFIF, "FreeImage_GetFormatFromFIF");
688     lib.bindSymbol_stdcall(FreeImage_GetFIFExtensionList, "FreeImage_GetFIFExtensionList");
689     lib.bindSymbol_stdcall(FreeImage_GetFIFDescription, "FreeImage_GetFIFDescription");
690     lib.bindSymbol_stdcall(FreeImage_GetFIFRegExpr, "FreeImage_GetFIFRegExpr");
691     lib.bindSymbol_stdcall(FreeImage_GetFIFMimeType, "FreeImage_GetFIFMimeType");
692     lib.bindSymbol_stdcall(FreeImage_GetFIFFromFilename, "FreeImage_GetFIFFromFilename");
693     lib.bindSymbol_stdcall(FreeImage_GetFIFFromFilenameU, "FreeImage_GetFIFFromFilenameU");
694     lib.bindSymbol_stdcall(FreeImage_FIFSupportsReading, "FreeImage_FIFSupportsReading");
695     lib.bindSymbol_stdcall(FreeImage_FIFSupportsWriting, "FreeImage_FIFSupportsWriting");
696     lib.bindSymbol_stdcall(FreeImage_FIFSupportsExportBPP, "FreeImage_FIFSupportsExportBPP");
697     lib.bindSymbol_stdcall(FreeImage_FIFSupportsExportType, "FreeImage_FIFSupportsExportType");
698     lib.bindSymbol_stdcall(FreeImage_FIFSupportsICCProfiles, "FreeImage_FIFSupportsICCProfiles");
699     lib.bindSymbol_stdcall(FreeImage_FIFSupportsNoPixels, "FreeImage_FIFSupportsNoPixels");
700     lib.bindSymbol_stdcall(FreeImage_OpenMultiBitmap, "FreeImage_OpenMultiBitmap");
701     lib.bindSymbol_stdcall(FreeImage_OpenMultiBitmapFromHandle, "FreeImage_OpenMultiBitmapFromHandle");
702     lib.bindSymbol_stdcall(FreeImage_SaveMultiBitmapToHandle, "FreeImage_SaveMultiBitmapToHandle");
703     lib.bindSymbol_stdcall(FreeImage_CloseMultiBitmap, "FreeImage_CloseMultiBitmap");
704     lib.bindSymbol_stdcall(FreeImage_GetPageCount, "FreeImage_GetPageCount");
705     lib.bindSymbol_stdcall(FreeImage_AppendPage, "FreeImage_AppendPage");
706     lib.bindSymbol_stdcall(FreeImage_InsertPage, "FreeImage_InsertPage");
707     lib.bindSymbol_stdcall(FreeImage_DeletePage, "FreeImage_DeletePage");
708     lib.bindSymbol_stdcall(FreeImage_LockPage, "FreeImage_LockPage");
709     lib.bindSymbol_stdcall(FreeImage_UnlockPage, "FreeImage_UnlockPage");
710     lib.bindSymbol_stdcall(FreeImage_MovePage, "FreeImage_MovePage");
711     lib.bindSymbol_stdcall(FreeImage_GetLockedPageNumbers, "FreeImage_GetLockedPageNumbers");
712     lib.bindSymbol_stdcall(FreeImage_GetFileType, "FreeImage_GetFileType");
713     lib.bindSymbol_stdcall(FreeImage_GetFileTypeU, "FreeImage_GetFileTypeU");
714     lib.bindSymbol_stdcall(FreeImage_GetFileTypeFromHandle, "FreeImage_GetFileTypeFromHandle");
715     lib.bindSymbol_stdcall(FreeImage_GetFileTypeFromMemory, "FreeImage_GetFileTypeFromMemory");
716     lib.bindSymbol_stdcall(FreeImage_GetImageType, "FreeImage_GetImageType");
717     lib.bindSymbol_stdcall(FreeImage_IsLittleEndian, "FreeImage_IsLittleEndian");
718     lib.bindSymbol_stdcall(FreeImage_LookupX11Color, "FreeImage_LookupX11Color");
719     lib.bindSymbol_stdcall(FreeImage_LookupSVGColor, "FreeImage_LookupSVGColor");
720     lib.bindSymbol_stdcall(FreeImage_GetBits, "FreeImage_GetBits");
721     lib.bindSymbol_stdcall(FreeImage_GetScanLine, "FreeImage_GetScanLine");
722     lib.bindSymbol_stdcall(FreeImage_GetPixelIndex, "FreeImage_GetPixelIndex");
723     lib.bindSymbol_stdcall(FreeImage_GetPixelColor, "FreeImage_GetPixelColor");
724     lib.bindSymbol_stdcall(FreeImage_SetPixelIndex, "FreeImage_SetPixelIndex");
725     lib.bindSymbol_stdcall(FreeImage_SetPixelColor, "FreeImage_SetPixelColor");
726     lib.bindSymbol_stdcall(FreeImage_GetColorsUsed, "FreeImage_GetColorsUsed");
727     lib.bindSymbol_stdcall(FreeImage_GetBPP, "FreeImage_GetBPP");
728     lib.bindSymbol_stdcall(FreeImage_GetWidth, "FreeImage_GetWidth");
729     lib.bindSymbol_stdcall(FreeImage_GetHeight, "FreeImage_GetHeight");
730     lib.bindSymbol_stdcall(FreeImage_GetLine, "FreeImage_GetLine");
731     lib.bindSymbol_stdcall(FreeImage_GetPitch, "FreeImage_GetPitch");
732     lib.bindSymbol_stdcall(FreeImage_GetDIBSize, "FreeImage_GetDIBSize");
733     lib.bindSymbol_stdcall(FreeImage_GetMemorySize, "FreeImage_GetMemorySize");
734     lib.bindSymbol_stdcall(FreeImage_GetPalette, "FreeImage_GetPalette");
735     lib.bindSymbol_stdcall(FreeImage_GetDotsPerMeterX, "FreeImage_GetDotsPerMeterX");
736     lib.bindSymbol_stdcall(FreeImage_GetDotsPerMeterY, "FreeImage_GetDotsPerMeterY");
737     lib.bindSymbol_stdcall(FreeImage_SetDotsPerMeterX, "FreeImage_SetDotsPerMeterX");
738     lib.bindSymbol_stdcall(FreeImage_SetDotsPerMeterY, "FreeImage_SetDotsPerMeterY");
739     lib.bindSymbol_stdcall(FreeImage_GetInfoHeader, "FreeImage_GetInfoHeader");
740     lib.bindSymbol_stdcall(FreeImage_GetInfo, "FreeImage_GetInfo");
741     lib.bindSymbol_stdcall(FreeImage_GetColorType, "FreeImage_GetColorType");
742     lib.bindSymbol_stdcall(FreeImage_GetRedMask, "FreeImage_GetRedMask");
743     lib.bindSymbol_stdcall(FreeImage_GetGreenMask, "FreeImage_GetGreenMask");
744     lib.bindSymbol_stdcall(FreeImage_GetBlueMask, "FreeImage_GetBlueMask");
745     lib.bindSymbol_stdcall(FreeImage_GetTransparencyCount, "FreeImage_GetTransparencyCount");
746     lib.bindSymbol_stdcall(FreeImage_GetTransparencyTable, "FreeImage_GetTransparencyTable");
747     lib.bindSymbol_stdcall(FreeImage_SetTransparent, "FreeImage_SetTransparent");
748     lib.bindSymbol_stdcall(FreeImage_SetTransparencyTable, "FreeImage_SetTransparencyTable");
749     lib.bindSymbol_stdcall(FreeImage_IsTransparent, "FreeImage_IsTransparent");
750     lib.bindSymbol_stdcall(FreeImage_SetTransparentIndex, "FreeImage_SetTransparentIndex");
751     lib.bindSymbol_stdcall(FreeImage_GetTransparentIndex, "FreeImage_GetTransparentIndex");
752     lib.bindSymbol_stdcall(FreeImage_HasBackgroundColor, "FreeImage_HasBackgroundColor");
753     lib.bindSymbol_stdcall(FreeImage_GetBackgroundColor, "FreeImage_GetBackgroundColor");
754     lib.bindSymbol_stdcall(FreeImage_SetBackgroundColor, "FreeImage_SetBackgroundColor");
755     lib.bindSymbol_stdcall(FreeImage_GetThumbnail, "FreeImage_GetThumbnail");
756     lib.bindSymbol_stdcall(FreeImage_SetThumbnail, "FreeImage_SetThumbnail");
757     lib.bindSymbol_stdcall(FreeImage_GetICCProfile, "FreeImage_GetICCProfile");
758     lib.bindSymbol_stdcall(FreeImage_CreateICCProfile, "FreeImage_CreateICCProfile");
759     lib.bindSymbol_stdcall(FreeImage_DestroyICCProfile, "FreeImage_DestroyICCProfile");
760     lib.bindSymbol_stdcall(FreeImage_ConvertLine1To4, "FreeImage_ConvertLine1To4");
761     lib.bindSymbol_stdcall(FreeImage_ConvertLine8To4, "FreeImage_ConvertLine8To4");
762     lib.bindSymbol_stdcall(FreeImage_ConvertLine16To4_555, "FreeImage_ConvertLine16To4_555");
763     lib.bindSymbol_stdcall(FreeImage_ConvertLine16To4_565, "FreeImage_ConvertLine16To4_565");
764     lib.bindSymbol_stdcall(FreeImage_ConvertLine24To4, "FreeImage_ConvertLine24To4");
765     lib.bindSymbol_stdcall(FreeImage_ConvertLine32To4, "FreeImage_ConvertLine32To4");
766     lib.bindSymbol_stdcall(FreeImage_ConvertLine1To8, "FreeImage_ConvertLine1To8");
767     lib.bindSymbol_stdcall(FreeImage_ConvertLine4To8, "FreeImage_ConvertLine4To8");
768     lib.bindSymbol_stdcall(FreeImage_ConvertLine16To8_555, "FreeImage_ConvertLine16To8_555");
769     lib.bindSymbol_stdcall(FreeImage_ConvertLine16To8_565, "FreeImage_ConvertLine16To8_565");
770     lib.bindSymbol_stdcall(FreeImage_ConvertLine24To8, "FreeImage_ConvertLine24To8");
771     lib.bindSymbol_stdcall(FreeImage_ConvertLine32To8, "FreeImage_ConvertLine32To8");
772     lib.bindSymbol_stdcall(FreeImage_ConvertLine1To16_555, "FreeImage_ConvertLine1To16_555");
773     lib.bindSymbol_stdcall(FreeImage_ConvertLine4To16_555, "FreeImage_ConvertLine4To16_555");
774     lib.bindSymbol_stdcall(FreeImage_ConvertLine8To16_555, "FreeImage_ConvertLine8To16_555");
775     lib.bindSymbol_stdcall(FreeImage_ConvertLine16_565_To16_555, "FreeImage_ConvertLine16_565_To16_555");
776     lib.bindSymbol_stdcall(FreeImage_ConvertLine24To16_555, "FreeImage_ConvertLine24To16_555");
777     lib.bindSymbol_stdcall(FreeImage_ConvertLine32To16_555, "FreeImage_ConvertLine32To16_555");
778     lib.bindSymbol_stdcall(FreeImage_ConvertLine1To16_565, "FreeImage_ConvertLine1To16_565");
779     lib.bindSymbol_stdcall(FreeImage_ConvertLine4To16_565, "FreeImage_ConvertLine4To16_565");
780     lib.bindSymbol_stdcall(FreeImage_ConvertLine8To16_565, "FreeImage_ConvertLine8To16_565");
781     lib.bindSymbol_stdcall(FreeImage_ConvertLine16_555_To16_565, "FreeImage_ConvertLine16_555_To16_565");
782     lib.bindSymbol_stdcall(FreeImage_ConvertLine24To16_565, "FreeImage_ConvertLine24To16_565");
783     lib.bindSymbol_stdcall(FreeImage_ConvertLine32To16_565, "FreeImage_ConvertLine32To16_565");
784     lib.bindSymbol_stdcall(FreeImage_ConvertLine1To24, "FreeImage_ConvertLine1To24");
785     lib.bindSymbol_stdcall(FreeImage_ConvertLine4To24, "FreeImage_ConvertLine4To24");
786     lib.bindSymbol_stdcall(FreeImage_ConvertLine8To24, "FreeImage_ConvertLine8To24");
787     lib.bindSymbol_stdcall(FreeImage_ConvertLine16To24_555, "FreeImage_ConvertLine16To24_555");
788     lib.bindSymbol_stdcall(FreeImage_ConvertLine16To24_565, "FreeImage_ConvertLine16To24_565");
789     lib.bindSymbol_stdcall(FreeImage_ConvertLine32To24, "FreeImage_ConvertLine32To24");
790     lib.bindSymbol_stdcall(FreeImage_ConvertLine1To32, "FreeImage_ConvertLine1To32");
791     lib.bindSymbol_stdcall(FreeImage_ConvertLine4To32, "FreeImage_ConvertLine4To32");
792     lib.bindSymbol_stdcall(FreeImage_ConvertLine8To32, "FreeImage_ConvertLine8To32");
793     lib.bindSymbol_stdcall(FreeImage_ConvertLine16To32_555, "FreeImage_ConvertLine16To32_555");
794     lib.bindSymbol_stdcall(FreeImage_ConvertLine16To32_565, "FreeImage_ConvertLine16To32_565");
795     lib.bindSymbol_stdcall(FreeImage_ConvertLine24To32, "FreeImage_ConvertLine24To32");
796     lib.bindSymbol_stdcall(FreeImage_ConvertTo4Bits, "FreeImage_ConvertTo4Bits");
797     lib.bindSymbol_stdcall(FreeImage_ConvertTo8Bits, "FreeImage_ConvertTo8Bits");
798     lib.bindSymbol_stdcall(FreeImage_ConvertToGreyscale, "FreeImage_ConvertToGreyscale");
799     lib.bindSymbol_stdcall(FreeImage_ConvertTo16Bits555, "FreeImage_ConvertTo16Bits555");
800     lib.bindSymbol_stdcall(FreeImage_ConvertTo16Bits565, "FreeImage_ConvertTo16Bits565");
801     lib.bindSymbol_stdcall(FreeImage_ConvertTo24Bits, "FreeImage_ConvertTo24Bits");
802     lib.bindSymbol_stdcall(FreeImage_ConvertTo32Bits, "FreeImage_ConvertTo32Bits");
803     lib.bindSymbol_stdcall(FreeImage_ColorQuantize, "FreeImage_ColorQuantize");
804     lib.bindSymbol_stdcall(FreeImage_ColorQuantizeEx, "FreeImage_ColorQuantizeEx");
805     lib.bindSymbol_stdcall(FreeImage_Threshold, "FreeImage_Threshold");
806     lib.bindSymbol_stdcall(FreeImage_Dither, "FreeImage_Dither");
807     lib.bindSymbol_stdcall(FreeImage_ConvertFromRawBits, "FreeImage_ConvertFromRawBits");
808     lib.bindSymbol_stdcall(FreeImage_ConvertFromRawBitsEx, "FreeImage_ConvertFromRawBitsEx");
809     lib.bindSymbol_stdcall(FreeImage_ConvertToRawBits, "FreeImage_ConvertToRawBits");
810     lib.bindSymbol_stdcall(FreeImage_ConvertToFloat, "FreeImage_ConvertToFloat");
811     lib.bindSymbol_stdcall(FreeImage_ConvertToRGBF, "FreeImage_ConvertToRGBF");
812     lib.bindSymbol_stdcall(FreeImage_ConvertToRGBAF, "FreeImage_ConvertToRGBAF");
813     lib.bindSymbol_stdcall(FreeImage_ConvertToUINT16, "FreeImage_ConvertToUINT16");
814     lib.bindSymbol_stdcall(FreeImage_ConvertToRGB16, "FreeImage_ConvertToRGB16");
815     lib.bindSymbol_stdcall(FreeImage_ConvertToRGBA16, "FreeImage_ConvertToRGBA16");
816     lib.bindSymbol_stdcall(FreeImage_ConvertToStandardType, "FreeImage_ConvertToStandardType");
817     lib.bindSymbol_stdcall(FreeImage_ConvertToType, "FreeImage_ConvertToType");
818     lib.bindSymbol_stdcall(FreeImage_ToneMapping, "FreeImage_ToneMapping");
819     lib.bindSymbol_stdcall(FreeImage_TmoDrago03, "FreeImage_TmoDrago03");
820     lib.bindSymbol_stdcall(FreeImage_TmoReinhard05, "FreeImage_TmoReinhard05");
821     lib.bindSymbol_stdcall(FreeImage_TmoReinhard05Ex, "FreeImage_TmoReinhard05Ex");
822     lib.bindSymbol_stdcall(FreeImage_TmoFattal02, "FreeImage_TmoFattal02");
823     lib.bindSymbol_stdcall(FreeImage_ZLibCompress, "FreeImage_ZLibCompress");
824     lib.bindSymbol_stdcall(FreeImage_ZLibUncompress, "FreeImage_ZLibUncompress");
825     lib.bindSymbol_stdcall(FreeImage_ZLibGZip, "FreeImage_ZLibGZip");
826     lib.bindSymbol_stdcall(FreeImage_ZLibGUnzip, "FreeImage_ZLibGUnzip");
827     lib.bindSymbol_stdcall(FreeImage_ZLibCRC32, "FreeImage_ZLibCRC32");
828 
829     lib.bindSymbol_stdcall(FreeImage_CreateTag, "FreeImage_CreateTag");
830     lib.bindSymbol_stdcall(FreeImage_DeleteTag, "FreeImage_DeleteTag");
831     lib.bindSymbol_stdcall(FreeImage_CloneTag, "FreeImage_CloneTag");
832     lib.bindSymbol_stdcall(FreeImage_GetTagKey, "FreeImage_GetTagKey");
833     lib.bindSymbol_stdcall(FreeImage_GetTagDescription, "FreeImage_GetTagDescription");
834     lib.bindSymbol_stdcall(FreeImage_GetTagID, "FreeImage_GetTagID");
835     lib.bindSymbol_stdcall(FreeImage_GetTagType, "FreeImage_GetTagType");
836     lib.bindSymbol_stdcall(FreeImage_GetTagCount, "FreeImage_GetTagCount");
837     lib.bindSymbol_stdcall(FreeImage_GetTagLength, "FreeImage_GetTagLength");
838     lib.bindSymbol_stdcall(FreeImage_GetTagValue, "FreeImage_GetTagValue");
839     lib.bindSymbol_stdcall(FreeImage_SetTagKey, "FreeImage_SetTagKey");
840     lib.bindSymbol_stdcall(FreeImage_SetTagDescription, "FreeImage_SetTagDescription");
841     lib.bindSymbol_stdcall(FreeImage_SetTagID, "FreeImage_SetTagID");
842     lib.bindSymbol_stdcall(FreeImage_SetTagType, "FreeImage_SetTagType");
843     lib.bindSymbol_stdcall(FreeImage_SetTagCount, "FreeImage_SetTagCount");
844     lib.bindSymbol_stdcall(FreeImage_SetTagLength, "FreeImage_SetTagLength");
845     lib.bindSymbol_stdcall(FreeImage_SetTagValue, "FreeImage_SetTagValue");
846     lib.bindSymbol_stdcall(FreeImage_FindFirstMetadata, "FreeImage_FindFirstMetadata");
847     lib.bindSymbol_stdcall(FreeImage_FindNextMetadata, "FreeImage_FindNextMetadata");
848     lib.bindSymbol_stdcall(FreeImage_FindCloseMetadata, "FreeImage_FindCloseMetadata");
849     lib.bindSymbol_stdcall(FreeImage_SetMetadata, "FreeImage_SetMetadata");
850     lib.bindSymbol_stdcall(FreeImage_GetMetadata, "FreeImage_GetMetadata");
851     lib.bindSymbol_stdcall(FreeImage_SetMetadataKeyValue, "FreeImage_SetMetadataKeyValue");
852     lib.bindSymbol_stdcall(FreeImage_GetMetadataCount, "FreeImage_GetMetadataCount");
853     lib.bindSymbol_stdcall(FreeImage_CloneMetadata, "FreeImage_CloneMetadata");
854     lib.bindSymbol_stdcall(FreeImage_TagToString, "FreeImage_TagToString");
855 
856     version(BindFI_JPEGTransform) {
857         lib.bindSymbol_stdcall(FreeImage_JPEGTransform, "FreeImage_JPEGTransform");
858         lib.bindSymbol_stdcall(FreeImage_JPEGTransformU, "FreeImage_JPEGTransformU");
859         lib.bindSymbol_stdcall(FreeImage_JPEGCrop, "FreeImage_JPEGCrop");
860         lib.bindSymbol_stdcall(FreeImage_JPEGCropU, "FreeImage_JPEGCropU");
861         lib.bindSymbol_stdcall(FreeImage_JPEGTransformFromHandle, "FreeImage_JPEGTransformFromHandle");
862         lib.bindSymbol_stdcall(FreeImage_JPEGTransformCombined, "FreeImage_JPEGTransformCombined");
863         lib.bindSymbol_stdcall(FreeImage_JPEGTransformCombinedU, "FreeImage_JPEGTransformCombinedU");
864         lib.bindSymbol_stdcall(FreeImage_JPEGTransformCombinedFromMemory, "FreeImage_JPEGTransformCombinedFromMemory");
865     }
866     lib.bindSymbol_stdcall(FreeImage_Rotate, "FreeImage_Rotate");
867     lib.bindSymbol_stdcall(FreeImage_RotateEx, "FreeImage_RotateEx");
868     lib.bindSymbol_stdcall(FreeImage_FlipHorizontal, "FreeImage_FlipHorizontal");
869     lib.bindSymbol_stdcall(FreeImage_FlipVertical, "FreeImage_FlipVertical");
870     lib.bindSymbol_stdcall(FreeImage_Rescale, "FreeImage_Rescale");
871     lib.bindSymbol_stdcall(FreeImage_MakeThumbnail, "FreeImage_MakeThumbnail");
872     lib.bindSymbol_stdcall(FreeImage_RescaleRect, "FreeImage_RescaleRect");
873     lib.bindSymbol_stdcall(FreeImage_AdjustCurve, "FreeImage_AdjustCurve");
874     lib.bindSymbol_stdcall(FreeImage_AdjustGamma, "FreeImage_AdjustGamma");
875     lib.bindSymbol_stdcall(FreeImage_AdjustBrightness, "FreeImage_AdjustBrightness");
876     lib.bindSymbol_stdcall(FreeImage_AdjustContrast, "FreeImage_AdjustContrast");
877     lib.bindSymbol_stdcall(FreeImage_Invert, "FreeImage_Invert");
878     lib.bindSymbol_stdcall(FreeImage_GetHistogram, "FreeImage_GetHistogram");
879     lib.bindSymbol_stdcall(FreeImage_GetAdjustColorsLookupTable, "FreeImage_GetAdjustColorsLookupTable");
880     lib.bindSymbol_stdcall(FreeImage_AdjustColors, "FreeImage_AdjustColors");
881     lib.bindSymbol_stdcall(FreeImage_ApplyColorMapping, "FreeImage_ApplyColorMapping");
882     lib.bindSymbol_stdcall(FreeImage_SwapColors, "FreeImage_SwapColors");
883     lib.bindSymbol_stdcall(FreeImage_ApplyPaletteIndexMapping, "FreeImage_ApplyPaletteIndexMapping");
884     lib.bindSymbol_stdcall(FreeImage_SwapPaletteIndices, "FreeImage_SwapPaletteIndices");
885     lib.bindSymbol_stdcall(FreeImage_GetChannel, "FreeImage_GetChannel");
886     lib.bindSymbol_stdcall(FreeImage_SetChannel, "FreeImage_SetChannel");
887     lib.bindSymbol_stdcall(FreeImage_GetComplexChannel, "FreeImage_GetComplexChannel");
888     lib.bindSymbol_stdcall(FreeImage_SetComplexChannel, "FreeImage_SetComplexChannel");
889     lib.bindSymbol_stdcall(FreeImage_Copy, "FreeImage_Copy");
890     lib.bindSymbol_stdcall(FreeImage_Paste, "FreeImage_Paste");
891     lib.bindSymbol_stdcall(FreeImage_CreateView, "FreeImage_CreateView");
892     lib.bindSymbol_stdcall(FreeImage_Composite, "FreeImage_Composite");
893     lib.bindSymbol_stdcall(FreeImage_PreMultiplyWithAlpha, "FreeImage_PreMultiplyWithAlpha");
894     lib.bindSymbol_stdcall(FreeImage_FillBackground, "FreeImage_FillBackground");
895     lib.bindSymbol_stdcall(FreeImage_EnlargeCanvas, "FreeImage_EnlargeCanvas");
896     lib.bindSymbol_stdcall(FreeImage_AllocateEx, "FreeImage_AllocateEx");
897     lib.bindSymbol_stdcall(FreeImage_AllocateExT, "FreeImage_AllocateExT");
898     lib.bindSymbol_stdcall(FreeImage_MultigridPoissonSolver, "FreeImage_MultigridPoissonSolver");
899 
900     if(errorCount() != errCount) return FISupport.badLibrary;
901     else loadedVersion = FISupport.fi317;
902 
903     static if(fiSupport >= FISupport.fi318) {
904         lib.bindSymbol_stdcall(FreeImage_Validate, "FreeImage_Validate");
905         lib.bindSymbol_stdcall(FreeImage_ValidateU, "FreeImage_ValidateU");
906         lib.bindSymbol_stdcall(FreeImage_ValidateFromHandle, "FreeImage_ValidateFromHandle");
907         lib.bindSymbol_stdcall(FreeImage_ValidateFromMemory, "FreeImage_ValidateFromMemory");
908         lib.bindSymbol_stdcall(FreeImage_ConvertLine1To32MapTransparency, "FreeImage_ConvertLine1To32MapTransparency");
909         lib.bindSymbol_stdcall(FreeImage_ConvertLine4To32MapTransparency, "FreeImage_ConvertLine4To32MapTransparency");
910         lib.bindSymbol_stdcall(FreeImage_ConvertLine8To32MapTransparency, "FreeImage_ConvertLine8To32MapTransparency");
911 
912         if(errorCount() != errCount) return FISupport.badLibrary;
913         else loadedVersion = FISupport.fi318;
914     }
915 
916     return loadedVersion;
917 }