* *
* update copyright headers with new FSF postal address
* COPYING.txt -> LICENSE.txt (rest of repo to be synced)
330 lines
13 KiB
Plaintext
330 lines
13 KiB
Plaintext
/*
|
|
* FreeImage graphic library header file.
|
|
*
|
|
* Copyright 2005 Francesco Saverio Giudice <info@fsgiudice.com>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2, or (at your option)
|
|
* any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; see the file LICENSE.txt. If not, write to
|
|
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
* Boston, MA 02110-1301 USA (or visit https://www.gnu.org/licenses/).
|
|
*
|
|
* As a special exception, the Harbour Project gives permission for
|
|
* additional uses of the text contained in its release of Harbour.
|
|
*
|
|
* The exception is that, if you link the Harbour libraries with other
|
|
* files to produce an executable, this does not by itself cause the
|
|
* resulting executable to be covered by the GNU General Public License.
|
|
* Your use of that executable is in no way restricted on account of
|
|
* linking the Harbour library code into it.
|
|
*
|
|
* This exception does not however invalidate any other reasons why
|
|
* the executable file might be covered by the GNU General Public License.
|
|
*
|
|
* This exception applies only to the code released by the Harbour
|
|
* Project under the name Harbour. If you copy code from other
|
|
* Harbour Project or Free Software Foundation releases into a copy of
|
|
* Harbour, as the General Public License permits, the exception does
|
|
* not apply to the code that you add in this way. To avoid misleading
|
|
* anyone as to the status of such modified files, you must delete
|
|
* this exception notice from them.
|
|
*
|
|
* If you write modifications of your own for Harbour, it is your choice
|
|
* whether to permit this exception to apply to your modifications.
|
|
* If you do not wish that, delete this exception notice.
|
|
*
|
|
*/
|
|
|
|
#ifndef FREEIMAGE_CH
|
|
#define FREEIMAGE_CH
|
|
|
|
#ifndef FREEIMAGE_BIGENDIAN
|
|
// Little Endian (x86 / MS Windows, Linux) : BGR(A) order
|
|
#define FI_RGBA_RED 2
|
|
#define FI_RGBA_GREEN 1
|
|
#define FI_RGBA_BLUE 0
|
|
#define FI_RGBA_ALPHA 3
|
|
#define FI_RGBA_RED_MASK 0x00FF0000
|
|
#define FI_RGBA_GREEN_MASK 0x0000FF00
|
|
#define FI_RGBA_BLUE_MASK 0x000000FF
|
|
#define FI_RGBA_ALPHA_MASK 0xFF000000
|
|
#define FI_RGBA_RED_SHIFT 16
|
|
#define FI_RGBA_GREEN_SHIFT 8
|
|
#define FI_RGBA_BLUE_SHIFT 0
|
|
#define FI_RGBA_ALPHA_SHIFT 24
|
|
#else
|
|
// Big Endian (PPC / Linux, MaxOSX) : RGB(A) order
|
|
#define FI_RGBA_RED 0
|
|
#define FI_RGBA_GREEN 1
|
|
#define FI_RGBA_BLUE 2
|
|
#define FI_RGBA_ALPHA 3
|
|
#define FI_RGBA_RED_MASK 0xFF000000
|
|
#define FI_RGBA_GREEN_MASK 0x00FF0000
|
|
#define FI_RGBA_BLUE_MASK 0x0000FF00
|
|
#define FI_RGBA_ALPHA_MASK 0x000000FF
|
|
#define FI_RGBA_RED_SHIFT 24
|
|
#define FI_RGBA_GREEN_SHIFT 16
|
|
#define FI_RGBA_BLUE_SHIFT 8
|
|
#define FI_RGBA_ALPHA_SHIFT 0
|
|
#endif // FREEIMAGE_BIGENDIAN
|
|
|
|
#define FI_RGBA_RGB_MASK (FI_RGBA_RED_MASK|FI_RGBA_GREEN_MASK|FI_RGBA_BLUE_MASK)
|
|
|
|
// The 16bit macros only include masks and shifts, since each color element is not byte aligned
|
|
|
|
#define FI16_555_RED_MASK 0x7C00
|
|
#define FI16_555_GREEN_MASK 0x03E0
|
|
#define FI16_555_BLUE_MASK 0x001F
|
|
#define FI16_555_RED_SHIFT 10
|
|
#define FI16_555_GREEN_SHIFT 5
|
|
#define FI16_555_BLUE_SHIFT 0
|
|
#define FI16_565_RED_MASK 0xF800
|
|
#define FI16_565_GREEN_MASK 0x07E0
|
|
#define FI16_565_BLUE_MASK 0x001F
|
|
#define FI16_565_RED_SHIFT 11
|
|
#define FI16_565_GREEN_SHIFT 5
|
|
#define FI16_565_BLUE_SHIFT 0
|
|
|
|
/* ICC profile support */
|
|
|
|
#define FIICC_DEFAULT 0x00
|
|
#define FIICC_COLOR_IS_CMYK 0x01
|
|
|
|
/** I/O image format identifiers.
|
|
*/
|
|
//FREE_IMAGE_FORMAT
|
|
#define FIF_UNKNOWN -1
|
|
#define FIF_BMP 0
|
|
#define FIF_ICO 1
|
|
#define FIF_JPEG 2
|
|
#define FIF_JNG 3
|
|
#define FIF_KOALA 4
|
|
#define FIF_LBM 5
|
|
#define FIF_IFF FIF_LBM
|
|
#define FIF_MNG 6
|
|
#define FIF_PBM 7
|
|
#define FIF_PBMRAW 8
|
|
#define FIF_PCD 9
|
|
#define FIF_PCX 10
|
|
#define FIF_PGM 11
|
|
#define FIF_PGMRAW 12
|
|
#define FIF_PNG 13
|
|
#define FIF_PPM 14
|
|
#define FIF_PPMRAW 15
|
|
#define FIF_RAS 16
|
|
#define FIF_TARGA 17
|
|
#define FIF_TIFF 18
|
|
#define FIF_WBMP 19
|
|
#define FIF_PSD 20
|
|
#define FIF_CUT 21
|
|
#define FIF_XBM 22
|
|
#define FIF_XPM 23
|
|
#define FIF_DDS 24
|
|
#define FIF_GIF 25
|
|
#define FIF_HDR 26
|
|
|
|
|
|
/** Image type used in FreeImage.
|
|
*/
|
|
//FREE_IMAGE_TYPE
|
|
#define FIT_UNKNOWN 0 // unknown type
|
|
#define FIT_BITMAP 1 // standard image : 1-, 4-, 8-, 16-, 24-, 32-bit
|
|
#define FIT_UINT16 2 // array of unsigned short : unsigned 16-bit
|
|
#define FIT_INT16 3 // array of short : signed 16-bit
|
|
#define FIT_UINT32 4 // array of unsigned long : unsigned 32-bit
|
|
#define FIT_INT32 5 // array of long : signed 32-bit
|
|
#define FIT_FLOAT 6 // array of float : 32-bit IEEE floating point
|
|
#define FIT_DOUBLE 7 // array of double : 64-bit IEEE floating point
|
|
#define FIT_COMPLEX 8 // array of FICOMPLEX : 2 x 64-bit IEEE floating point
|
|
#define FIT_RGB16 9 // 48-bit RGB image : 3 x 16-bit
|
|
#define FIT_RGBA16 10 // 64-bit RGBA image : 4 x 16-bit
|
|
#define FIT_RGBF 11 // 96-bit RGB float image : 3 x 32-bit IEEE floating point
|
|
#define FIT_RGBAF 12 // 128-bit RGBA float image : 4 x 32-bit IEEE floating point
|
|
|
|
|
|
/** Image color type used in FreeImage.
|
|
*/
|
|
//FREE_IMAGE_COLOR_TYPE
|
|
#define FIC_MINISWHITE 0 // min value is white
|
|
#define FIC_MINISBLACK 1 // min value is black
|
|
#define FIC_RGB 2 // RGB color model
|
|
#define FIC_PALETTE 3 // color map indexed
|
|
#define FIC_RGBALPHA 4 // RGB color model with alpha channel
|
|
#define FIC_CMYK 5 // CMYK color model
|
|
|
|
|
|
/** Color quantization algorithms.
|
|
Constants used in FreeImage_ColorQuantize.
|
|
*/
|
|
//FREE_IMAGE_QUANTIZE
|
|
#define FIQ_WUQUANT 0 // Xiaolin Wu color quantization algorithm
|
|
#define FIQ_NNQUANT 1 // NeuQuant neural-net quantization algorithm by Anthony Dekker
|
|
|
|
|
|
/** Dithering algorithms.
|
|
Constants used in FreeImage_Dither.
|
|
*/
|
|
//FREE_IMAGE_DITHER
|
|
#define FID_FS 0 // Floyd & Steinberg error diffusion
|
|
#define FID_BAYER4x4 1 // Bayer ordered dispersed dot dithering (order 2 dithering matrix)
|
|
#define FID_BAYER8x8 2 // Bayer ordered dispersed dot dithering (order 3 dithering matrix)
|
|
#define FID_CLUSTER6x6 3 // Ordered clustered dot dithering (order 3 - 6x6 matrix)
|
|
#define FID_CLUSTER8x8 4 // Ordered clustered dot dithering (order 4 - 8x8 matrix)
|
|
#define FID_CLUSTER16x16 5 // Ordered clustered dot dithering (order 8 - 16x16 matrix)
|
|
|
|
|
|
/** Lossless JPEG transformations
|
|
Constants used in FreeImage_JPEGTransform
|
|
*/
|
|
//FREE_IMAGE_JPEG_OPERATION
|
|
#define FIJPEG_OP_NONE 0 // no transformation
|
|
#define FIJPEG_OP_FLIP_H 1 // horizontal flip
|
|
#define FIJPEG_OP_FLIP_V 2 // vertical flip
|
|
#define FIJPEG_OP_TRANSPOSE 3 // transpose across UL-to-LR axis
|
|
#define FIJPEG_OP_TRANSVERSE 4 // transpose across UR-to-LL axis
|
|
#define FIJPEG_OP_ROTATE_90 5 // 90-degree clockwise rotation
|
|
#define FIJPEG_OP_ROTATE_180 6 // 180-degree rotation
|
|
#define FIJPEG_OP_ROTATE_270 7 // 270-degree clockwise (or 90 ccw)
|
|
|
|
|
|
/** Tone mapping operators.
|
|
Constants used in FreeImage_ToneMapping.
|
|
*/
|
|
//FREE_IMAGE_TMO
|
|
#define FITMO_DRAGO03 0 // Adaptive logarithmic mapping (F. Drago, 2003)
|
|
#define FITMO_REINHARD05 1 // Dynamic range reduction inspired by photoreceptor physiology (E. Reinhard, 2005)
|
|
|
|
|
|
/** Upsampling / downsampling filters.
|
|
Constants used in FreeImage_Rescale.
|
|
*/
|
|
//FREE_IMAGE_FILTER
|
|
#define FILTER_BOX 0 // Box, pulse, Fourier window, 1st order (constant) b-spline
|
|
#define FILTER_BICUBIC 1 // Mitchell & Netravali's two-param cubic filter
|
|
#define FILTER_BILINEAR 2 // Bilinear filter
|
|
#define FILTER_BSPLINE 3 // 4th order (cubic) b-spline
|
|
#define FILTER_CATMULLROM 4 // Catmull-Rom spline, Overhauser spline
|
|
#define FILTER_LANCZOS3 5 // Lanczos3 filter
|
|
|
|
|
|
/** Color channels.
|
|
Constants used in color manipulation routines.
|
|
*/
|
|
//FREE_IMAGE_COLOR_CHANNEL
|
|
#define FICC_RGB 0 // Use red, green and blue channels
|
|
#define FICC_RED 1 // Use red channel
|
|
#define FICC_GREEN 2 // Use green channel
|
|
#define FICC_BLUE 3 // Use blue channel
|
|
#define FICC_ALPHA 4 // Use alpha channel
|
|
#define FICC_BLACK 5 // Use black channel
|
|
#define FICC_REAL 6 // Complex images: use real part
|
|
#define FICC_IMAG 7 // Complex images: use imaginary part
|
|
#define FICC_MAG 8 // Complex images: use magnitude
|
|
#define FICC_PHASE 9 // Complex images: use phase
|
|
|
|
/* Metadata support */
|
|
|
|
/**
|
|
Tag data type information (based on TIFF specifications)
|
|
|
|
Note: RATIONALs are the ratio of two 32-bit integer values.
|
|
*/
|
|
//FREE_IMAGE_MDTYPE
|
|
#define FIDT_NOTYPE 0 // placeholder
|
|
#define FIDT_BYTE 1 // 8-bit unsigned integer
|
|
#define FIDT_ASCII 2 // 8-bit bytes w/ last byte null
|
|
#define FIDT_SHORT 3 // 16-bit unsigned integer
|
|
#define FIDT_LONG 4 // 32-bit unsigned integer
|
|
#define FIDT_RATIONAL 5 // 64-bit unsigned fraction
|
|
#define FIDT_SBYTE 6 // 8-bit signed integer
|
|
#define FIDT_UNDEFINED 7 // 8-bit untyped data
|
|
#define FIDT_SSHORT 8 // 16-bit signed integer
|
|
#define FIDT_SLONG 9 // 32-bit signed integer
|
|
#define FIDT_SRATIONAL 10 // 64-bit signed fraction
|
|
#define FIDT_FLOAT 11 // 32-bit IEEE floating point
|
|
#define FIDT_DOUBLE 12 // 64-bit IEEE floating point
|
|
#define FIDT_IFD 13 // 32-bit unsigned integer (offset)
|
|
#define FIDT_PALETTE 14 // 32-bit RGBQUAD
|
|
|
|
|
|
/**
|
|
Metadata models supported by FreeImage
|
|
*/
|
|
//FREE_IMAGE_MDMODEL
|
|
#define FIMD_NODATA -1
|
|
#define FIMD_COMMENTS 0 // single comment or keywords
|
|
#define FIMD_EXIF_MAIN 1 // Exif-TIFF metadata
|
|
#define FIMD_EXIF_EXIF 2 // Exif-specific metadata
|
|
#define FIMD_EXIF_GPS 3 // Exif GPS metadata
|
|
#define FIMD_EXIF_MAKERNOTE 4 // Exif maker note metadata
|
|
#define FIMD_EXIF_INTEROP 5 // Exif interoperability metadata
|
|
#define FIMD_IPTC 6 // IPTC/NAA metadata
|
|
#define FIMD_XMP 7 // Abobe XMP metadata
|
|
#define FIMD_GEOTIFF 8 // GeoTIFF metadata
|
|
#define FIMD_ANIMATION 9 // Animation metadata
|
|
#define FIMD_CUSTOM 10 // Used to attach other metadata types to a dib
|
|
|
|
/* Load / Save flag constants */
|
|
|
|
#define BMP_DEFAULT 0
|
|
#define BMP_SAVE_RLE 1
|
|
#define CUT_DEFAULT 0
|
|
#define DDS_DEFAULT 0
|
|
#define GIF_DEFAULT 0
|
|
#define GIF_LOAD256 1 // Load the image as a 256 color image with ununsed palette entries, if it's 16 or 2 color
|
|
#define GIF_PLAYBACK 2 // 'Play' the GIF to generate each frame (as 32bpp) instead of returning raw frame data when loading
|
|
#define HDR_DEFAULT 0
|
|
#define ICO_DEFAULT 0
|
|
#define ICO_MAKEALPHA 1 // convert to 32bpp and create an alpha channel from the AND-mask when loading
|
|
#define IFF_DEFAULT 0
|
|
#define JPEG_DEFAULT 0
|
|
#define JPEG_FAST 1
|
|
#define JPEG_ACCURATE 2
|
|
#define JPEG_QUALITYSUPERB 0x80
|
|
#define JPEG_QUALITYGOOD 0x100
|
|
#define JPEG_QUALITYNORMAL 0x200
|
|
#define JPEG_QUALITYAVERAGE 0x400
|
|
#define JPEG_QUALITYBAD 0x800
|
|
#define JPEG_CMYK 0x1000 // load separated CMYK "as is" (use | to combine with other flags)
|
|
#define KOALA_DEFAULT 0
|
|
#define LBM_DEFAULT 0
|
|
#define MNG_DEFAULT 0
|
|
#define PCD_DEFAULT 0
|
|
#define PCD_BASE 1 // load the bitmap sized 768 x 512
|
|
#define PCD_BASEDIV4 2 // load the bitmap sized 384 x 256
|
|
#define PCD_BASEDIV16 3 // load the bitmap sized 192 x 128
|
|
#define PCX_DEFAULT 0
|
|
#define PNG_DEFAULT 0
|
|
#define PNG_IGNOREGAMMA 1 // avoid gamma correction
|
|
#define PNM_DEFAULT 0
|
|
#define PNM_SAVE_RAW 0 // If set the writer saves in RAW format (i.e. P4, P5 or P6)
|
|
#define PNM_SAVE_ASCII 1 // If set the writer saves in ASCII format (i.e. P1, P2 or P3)
|
|
#define PSD_DEFAULT 0
|
|
#define RAS_DEFAULT 0
|
|
#define TARGA_DEFAULT 0
|
|
#define TARGA_LOAD_RGB888 1 // If set the loader converts RGB555 and ARGB8888 -> RGB888.
|
|
#define TIFF_DEFAULT 0
|
|
#define TIFF_CMYK 0x0001 // reads/stores tags for separated CMYK (use | to combine with compression flags)
|
|
#define TIFF_PACKBITS 0x0100 // save using PACKBITS compression
|
|
#define TIFF_DEFLATE 0x0200 // save using DEFLATE compression (a.k.a. ZLIB compression)
|
|
#define TIFF_ADOBE_DEFLATE 0x0400 // save using ADOBE DEFLATE compression
|
|
#define TIFF_NONE 0x0800 // save without any compression
|
|
#define TIFF_CCITTFAX3 0x1000 // save using CCITT Group 3 fax encoding
|
|
#define TIFF_CCITTFAX4 0x2000 // save using CCITT Group 4 fax encoding
|
|
#define TIFF_LZW 0x4000 // save using LZW compression
|
|
#define TIFF_JPEG 0x8000 // save using JPEG compression
|
|
#define WBMP_DEFAULT 0
|
|
#define XBM_DEFAULT 0
|
|
#define XPM_DEFAULT 0
|
|
|
|
#endif // FREEIMAGE_CH
|