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