📄 freeimage.pas
字号:
unit FreeImage;
// ==========================================================
// Delphi wrapper for FreeImage 3
//
// Design and implementation by
// - Simon Beavis
// - Peter Bystr鰉
// - Anatoliy Pulyaevskiy (xvel84@rambler.ru)
//
// This file is part of FreeImage 3
//
// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY
// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE
// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED
// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT
// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY
// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL
// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER
// THIS DISCLAIMER.
//
// Use at your own risk!
// ==========================================================
interface
uses Windows;
{$MINENUMSIZE 4} // Make sure enums are stored as an integer to be compatible with C/C++
const
FIDLL = 'FreeImage.dll';
// --------------------------------------------------------------------------
// Bitmap types -------------------------------------------------------------
// --------------------------------------------------------------------------
type
FIBITMAP = record
data : Pointer;
end;
PFIBITMAP = ^FIBITMAP;
FIMULTIBITMAP = record
data : Pointer;
end;
PFIMULTIBITMAP = ^FIMULTIBITMAP;
// --------------------------------------------------------------------------
// Indexes for byte arrays, masks and shifts for treating pixels as words ---
// These coincide with the order of RGBQUAD and RGBTRIPLE -------------------
// Little Endian (x86 / MS Windows, Linux) : BGR(A) order -------------------
// --------------------------------------------------------------------------
const
FI_RGBA_RED = 2;
FI_RGBA_GREEN = 1;
FI_RGBA_BLUE = 0;
FI_RGBA_ALPHA = 3;
FI_RGBA_RED_MASK = $00FF0000;
FI_RGBA_GREEN_MASK = $0000FF00;
FI_RGBA_BLUE_MASK = $000000FF;
FI_RGBA_ALPHA_MASK = $FF000000;
FI_RGBA_RED_SHIFT = 16;
FI_RGBA_GREEN_SHIFT = 8;
FI_RGBA_BLUE_SHIFT = 0;
FI_RGBA_ALPHA_SHIFT = 24;
// --------------------------------------------------------------------------
// The 16bit macros only include masks and shifts, --------------------------
// since each color element is not byte aligned -----------------------------
// --------------------------------------------------------------------------
const
FI16_555_RED_MASK = $7C00;
FI16_555_GREEN_MASK = $03E0;
FI16_555_BLUE_MASK = $001F;
FI16_555_RED_SHIFT = 10;
FI16_555_GREEN_SHIFT = 5;
FI16_555_BLUE_SHIFT = 0;
FI16_565_RED_MASK = $F800;
FI16_565_GREEN_MASK = $07E0;
FI16_565_BLUE_MASK = $001F;
FI16_565_RED_SHIFT = 11;
FI16_565_GREEN_SHIFT = 5;
FI16_565_BLUE_SHIFT = 0;
// --------------------------------------------------------------------------
// ICC profile support ------------------------------------------------------
// --------------------------------------------------------------------------
const
FIICC_DEFAULT = $0;
FIICC_COLOR_IS_CMYK = $1;
type
FIICCPROFILE = record
flags : WORD; // info flag
size : DWORD; // profile's size measured in bytes
data : Pointer; // points to a block of contiguous memory containing the profile
end;
PFIICCPROFILE = ^FIICCPROFILE;
// --------------------------------------------------------------------------
// Important enums ----------------------------------------------------------
// --------------------------------------------------------------------------
type
FREE_IMAGE_FORMAT = type Integer;
FREE_IMAGE_TYPE = type Integer;
FREE_IMAGE_COLOR_TYPE = type Integer;
FREE_IMAGE_QUANTIZE = type Integer;
FREE_IMAGE_DITHER = type Integer;
FREE_IMAGE_FILTER = type Integer;
FREE_IMAGE_COLOR_CHANNEL = type Integer;
FREE_IMAGE_MDTYPE = type Integer;
FREE_IMAGE_MDMODEL = type Integer;
FREE_IMAGE_JPEG_OPERATION = type Integer;
FREE_IMAGE_TMO = type Integer;
const
// I/O image format identifiers.
FIF_UNKNOWN = FREE_IMAGE_FORMAT(-1);
FIF_BMP = FREE_IMAGE_FORMAT(0);
FIF_ICO = FREE_IMAGE_FORMAT(1);
FIF_JPEG = FREE_IMAGE_FORMAT(2);
FIF_JNG = FREE_IMAGE_FORMAT(3);
FIF_KOALA = FREE_IMAGE_FORMAT(4);
FIF_LBM = FREE_IMAGE_FORMAT(5);
FIF_IFF = FIF_LBM;
FIF_MNG = FREE_IMAGE_FORMAT(6);
FIF_PBM = FREE_IMAGE_FORMAT(7);
FIF_PBMRAW = FREE_IMAGE_FORMAT(8);
FIF_PCD = FREE_IMAGE_FORMAT(9);
FIF_PCX = FREE_IMAGE_FORMAT(10);
FIF_PGM = FREE_IMAGE_FORMAT(11);
FIF_PGMRAW = FREE_IMAGE_FORMAT(12);
FIF_PNG = FREE_IMAGE_FORMAT(13);
FIF_PPM = FREE_IMAGE_FORMAT(14);
FIF_PPMRAW = FREE_IMAGE_FORMAT(15);
FIF_RAS = FREE_IMAGE_FORMAT(16);
FIF_TARGA = FREE_IMAGE_FORMAT(17);
FIF_TIFF = FREE_IMAGE_FORMAT(18);
FIF_WBMP = FREE_IMAGE_FORMAT(19);
FIF_PSD = FREE_IMAGE_FORMAT(20);
FIF_CUT = FREE_IMAGE_FORMAT(21);
FIF_XBM = FREE_IMAGE_FORMAT(22);
FIF_XPM = FREE_IMAGE_FORMAT(23);
FIF_DDS = FREE_IMAGE_FORMAT(24);
FIF_GIF = FREE_IMAGE_FORMAT(25);
FIF_HDR = FREE_IMAGE_FORMAT(26);
FIF_FAXG3 = FREE_IMAGE_FORMAT(27);
FIF_SGI = FREE_IMAGE_FORMAT(28);
// Image type used in FreeImage.
FIT_UNKNOWN = FREE_IMAGE_TYPE(0); // unknown type
FIT_BITMAP = FREE_IMAGE_TYPE(1); // standard image: 1-, 4-, 8-, 16-, 24-, 32-bit
FIT_UINT16 = FREE_IMAGE_TYPE(2); // array of unsigned short: unsigned 16-bit
FIT_INT16 = FREE_IMAGE_TYPE(3); // array of short: signed 16-bit
FIT_UINT32 = FREE_IMAGE_TYPE(4); // array of unsigned long: unsigned 32-bit
FIT_INT32 = FREE_IMAGE_TYPE(5); // array of long: signed 32-bit
FIT_FLOAT = FREE_IMAGE_TYPE(6); // array of float: 32-bit IEEE floating point
FIT_DOUBLE = FREE_IMAGE_TYPE(7); // array of double: 64-bit IEEE floating point
FIT_COMPLEX = FREE_IMAGE_TYPE(8); // array of FICOMPLEX: 2 x 64-bit IEEE floating point
FIT_RGB16 = FREE_IMAGE_TYPE(9); // 48-bit RGB image: 3 x 16-bit
FIT_RGBA16 = FREE_IMAGE_TYPE(10); // 64-bit RGBA image: 4 x 16-bit
FIT_RGBF = FREE_IMAGE_TYPE(11); // 96-bit RGB float image: 3 x 32-bit IEEE floating point
FIT_RGBAF = FREE_IMAGE_TYPE(12); // 128-bit RGBA float image: 4 x 32-bit IEEE floating point
// Image color type used in FreeImage.
FIC_MINISWHITE = FREE_IMAGE_COLOR_TYPE(0); // min value is white
FIC_MINISBLACK = FREE_IMAGE_COLOR_TYPE(1); // min value is black
FIC_RGB = FREE_IMAGE_COLOR_TYPE(2); // RGB color model
FIC_PALETTE = FREE_IMAGE_COLOR_TYPE(3); // color map indexed
FIC_RGBALPHA = FREE_IMAGE_COLOR_TYPE(4); // RGB color model with alpha channel
FIC_CMYK = FREE_IMAGE_COLOR_TYPE(5); // CMYK color model
// Color quantization algorithms. Constants used in FreeImage_ColorQuantize.
FIQ_WUQUANT = FREE_IMAGE_QUANTIZE(0); // Xiaolin Wu color quantization algorithm
FIQ_NNQUANT = FREE_IMAGE_QUANTIZE(1); // NeuQuant neural-net quantization algorithm by Anthony Dekker
// Dithering algorithms. Constants used FreeImage_Dither.
FID_FS = FREE_IMAGE_DITHER(0); // Floyd & Steinberg error diffusion
FID_BAYER4x4 = FREE_IMAGE_DITHER(1); // Bayer ordered dispersed dot dithering (order 2 dithering matrix)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -