DEADSOFTWARE

Oops, blind foxes attacks!
[d2df-editor.git] / src / lib / vampimg / ImagingTypes.pas
1 {
2 Vampyre Imaging Library
3 by Marek Mauder
4 http://imaginglib.sourceforge.net
6 The contents of this file are used with permission, subject to the Mozilla
7 Public License Version 1.1 (the "License"); you may not use this file except
8 in compliance with the License. You may obtain a copy of the License at
9 http://www.mozilla.org/MPL/MPL-1.1.html
11 Software distributed under the License is distributed on an "AS IS" basis,
12 WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
13 the specific language governing rights and limitations under the License.
15 Alternatively, the contents of this file may be used under the terms of the
16 GNU Lesser General Public License (the "LGPL License"), in which case the
17 provisions of the LGPL License are applicable instead of those above.
18 If you wish to allow use of your version of this file only under the terms
19 of the LGPL License and not to allow others to use your version of this file
20 under the MPL, indicate your decision by deleting the provisions above and
21 replace them with the notice and other provisions required by the LGPL
22 License. If you do not delete the provisions above, a recipient may use
23 your version of this file under either the MPL or the LGPL License.
25 For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html
26 }
28 { This unit contains basic types and constants used by Imaging library.}
29 unit ImagingTypes;
31 {$I ImagingOptions.inc}
33 interface
35 const
36 { Current Major version of Imaging.}
37 ImagingVersionMajor = 0;
38 { Current Minor version of Imaging.}
39 ImagingVersionMinor = 77;
40 { Current patch of Imaging.}
41 ImagingVersionPatch = 2;
43 { Imaging Option Ids whose values can be set/get by SetOption/
44 GetOption functions.}
46 { Defines Jpeg compression quality, ranges from 1 (ugly/small) to 100 (nice/large).
47 Default value is 90.}
48 ImagingJpegQuality = 10;
49 { Specifies whether Jpeg images are saved in progressive format,
50 can be 0 or 1. Default value is 0.}
51 ImagingJpegProgressive = 11;
53 { Specifies whether Windows Bitmaps are saved using RLE compression
54 (only for 1/4/8 bit images), can be 0 or 1. Default value is 1.}
55 ImagingBitmapRLE = 12;
57 { Specifies whether Targa images are saved using RLE compression,
58 can be 0 or 1. Default value is 0.}
59 ImagingTargaRLE = 13;
61 { Value of this option is non-zero if last loaded DDS file was cube map.}
62 ImagingDDSLoadedCubeMap = 14;
63 { Value of this option is non-zero if last loaded DDS file was volume texture.}
64 ImagingDDSLoadedVolume = 15;
65 { Value of this option is number of mipmap levels of last loaded DDS image.}
66 ImagingDDSLoadedMipMapCount = 16;
67 { Value of this option is depth (slices of volume texture or faces of
68 cube map) of last loaded DDS image.}
69 ImagingDDSLoadedDepth = 17;
70 { If it is non-zero next saved DDS file should be stored as cube map.}
71 ImagingDDSSaveCubeMap = 18;
72 { If it is non-zero next saved DDS file should be stored as volume texture.}
73 ImagingDDSSaveVolume = 19;
74 { Sets the number of mipmaps which should be stored in the next saved DDS file.
75 Only applies to cube maps and volumes, ordinary 2D textures save all
76 levels present in input.}
77 ImagingDDSSaveMipMapCount = 20;
78 { Sets the depth (slices of volume texture or faces of cube map)
79 of the next saved DDS file.}
80 ImagingDDSSaveDepth = 21;
82 { Sets precompression filter used when saving PNG images. Allowed values
83 are: 0 (none), 1 (sub), 2 (up), 3 (average), 4 (paeth),
84 5 (use 0 for indexed/gray images and 4 for RGB/ARGB images),
85 6 (adaptive filtering - use best filter for each scanline - very slow).
86 Note that filters 3 and 4 are much slower than filters 1 and 2.
87 Default value is 5.}
88 ImagingPNGPreFilter = 25;
89 { Sets ZLib compression level used when saving PNG images.
90 Allowed values are in range 0 (no compresstion) to 9 (best compression).
91 Default value is 5.}
92 ImagingPNGCompressLevel = 26;
93 { Boolean option that specifies whether PNG images with more frames (APNG format)
94 are animated by Imaging (according to frame disposal/blend methods) or just
95 raw frames are loaded and sent to user (if you want to animate APNG yourself).
96 Default value is 1.}
97 ImagingPNGLoadAnimated = 27;
98 { Sets ZLib compression strategy used when saving PNG files (see deflateInit2()
99 in ZLib for details). Allowed values are: 0 (default), 1 (filtered),
100 2 (huffman only). Default value is 0.}
101 ImagingPNGZLibStrategy = 28;
103 { Specifies whether MNG animation frames are saved with lossy or lossless
104 compression. Lossless frames are saved as PNG images and lossy frames are
105 saved as JNG images. Allowed values are 0 (False) and 1 (True).
106 Default value is 0.}
107 ImagingMNGLossyCompression = 32;
108 { Defines whether alpha channel of lossy compressed MNG frames
109 (when ImagingMNGLossyCompression is 1) is lossy compressed too.
110 Allowed values are 0 (False) and 1 (True). Default value is 0.}
111 ImagingMNGLossyAlpha = 33;
112 { Sets precompression filter used when saving MNG frames as PNG images.
113 For details look at ImagingPNGPreFilter.}
114 ImagingMNGPreFilter = 34;
115 { Sets ZLib compression level used when saving MNG frames as PNG images.
116 For details look at ImagingPNGCompressLevel.}
117 ImagingMNGCompressLevel = 35;
118 { Specifies compression quality used when saving MNG frames as JNG images.
119 For details look at ImagingJpegQuality.}
120 ImagingMNGQuality = 36;
121 { Specifies whether images are saved in progressive format when saving MNG
122 frames as JNG images. For details look at ImagingJpegProgressive.}
123 ImagingMNGProgressive = 37;
125 { Specifies whether alpha channels of JNG images are lossy compressed.
126 Allowed values are 0 (False) and 1 (True). Default value is 0.}
127 ImagingJNGLossyAlpha = 40;
128 { Sets precompression filter used when saving lossless alpha channels.
129 For details look at ImagingPNGPreFilter.}
130 ImagingJNGAlphaPreFilter = 41;
131 { Sets ZLib compression level used when saving lossless alpha channels.
132 For details look at ImagingPNGCompressLevel.}
133 ImagingJNGAlphaCompressLevel = 42;
134 { Defines compression quality used when saving JNG images (and lossy alpha channels).
135 For details look at ImagingJpegQuality.}
136 ImagingJNGQuality = 43;
137 { Specifies whether JNG images are saved in progressive format.
138 For details look at ImagingJpegProgressive.}
139 ImagingJNGProgressive = 44;
141 { Specifies whether PGM files are stored in text or in binary format.
142 Allowed values are 0 (store as text - very! large files) and 1 (save binary).
143 Default value is 1.}
144 ImagingPGMSaveBinary = 50;
146 { Specifies whether PPM files are stored in text or in binary format.
147 Allowed values are 0 (store as text - very! large files) and 1 (save binary).
148 Default value is 1.}
149 ImagingPPMSaveBinary = 51;
151 { Boolean option that specifies whether GIF images with more frames
152 are animated by Imaging (according to frame disposal methods) or just
153 raw frames are loaded and sent to user (if you want to animate GIF yourself).
154 Default value is 1.
155 Raw frames are 256 color indexed images (ifIndex8), whereas
156 animated frames are always in 32bit ifA8R8G8B8 format (simplifies animating).}
157 ImagingGIFLoadAnimated = 56;
159 { This option is used when reducing number of colors used in
160 image (mainly when converting from ARGB image to indexed
161 format). Mask is 'anded' (bitwise AND) with every pixel's
162 channel value when creating color histogram. If $FF is used
163 all 8bits of color channels are used which can result in very
164 slow proccessing of large images with many colors so you can
165 use lower masks to speed it up (FC, F8 and F0 are good
166 choices). Allowed values are in range <0, $FF> and default is
167 $FE. }
168 ImagingColorReductionMask = 128;
169 { This option can be used to override image data format during image
170 loading. If set to format different from ifUnknown all loaded images
171 are automaticaly converted to this format. Useful when you have
172 many files in various formats but you want them all in one format for
173 further proccessing. Allowed values are in
174 range <Ord(Low(TImageFormat)), Ord(High(TImageFormat))> and
175 default value is ifUnknown.}
176 ImagingLoadOverrideFormat = 129;
177 { This option can be used to override image data format during image
178 saving. If set to format different from ifUnknown all images
179 to be saved are automaticaly internaly converted to this format.
180 Note that image file formats support only a subset of Imaging data formats
181 so final saved file may in different format than this override.
182 Allowed values are in range <Ord(Low(TImageFormat)), Ord(High(TImageFormat))>
183 and default value is ifUnknown.}
184 ImagingSaveOverrideFormat = 130;
185 { Specifies resampling filter used when generating mipmaps. It is used
186 in GenerateMipMaps low level function and Direct3D and OpenGL extensions.
187 Allowed values are in range
188 <Ord(Low(ImagingFormats.TSamplingFilter)), Ord(High(ImagingFormats.TSamplingFilter))>
189 and default value is 1 (linear filter).}
190 ImagingMipMapFilter = 131;
191 { Specifies treshold value used when automatically converting images to
192 ifBinary format. For adaptive tresholding see ImagingBinary.pas unit.
193 Default value is 128 and allowed range is 0..255.}
194 ImagingBinaryTreshold = 132;
196 { Returned by GetOption if given Option Id is invalid.}
197 InvalidOption = -$7FFFFFFF;
199 { Indices that can be used to access channel values in array parts
200 of structures like TColor32Rec. Note that this order can be
201 used only for ARGB images. For ABGR image you must swap Red and Blue.}
202 ChannelBlue = 0;
203 ChannelGreen = 1;
204 ChannelRed = 2;
205 ChannelAlpha = 3;
207 type
208 { Enum defining image data format. In formats with more channels,
209 first channel after "if" is stored in the most significant bits and channel
210 before end is stored in the least significant.}
211 TImageFormat = (
212 ifUnknown = 0,
213 ifDefault = 1,
214 { Indexed formats using palette }
215 ifIndex8 = 10,
216 { Grayscale/Luminance formats }
217 ifGray8 = 40,
218 ifA8Gray8 = 41,
219 ifGray16 = 42,
220 ifGray32 = 43,
221 ifGray64 = 44,
222 ifA16Gray16 = 45,
223 { ARGB formats }
224 ifX5R1G1B1 = 80,
225 ifR3G3B2 = 81,
226 ifR5G6B5 = 82,
227 ifA1R5G5B5 = 83,
228 ifA4R4G4B4 = 84,
229 ifX1R5G5B5 = 85,
230 ifX4R4G4B4 = 86,
231 ifR8G8B8 = 87,
232 ifA8R8G8B8 = 88,
233 ifX8R8G8B8 = 89,
234 ifR16G16B16 = 90,
235 ifA16R16G16B16 = 91,
236 ifB16G16R16 = 92,
237 ifA16B16G16R16 = 93,
238 { Floating point formats }
239 ifR32F = 160,
240 ifA32R32G32B32F = 161,
241 ifA32B32G32R32F = 162,
242 ifR16F = 163,
243 ifA16R16G16B16F = 164,
244 ifA16B16G16R16F = 165,
245 ifR32G32B32F = 166,
246 ifB32G32R32F = 167,
247 { Special formats }
248 ifDXT1 = 200,
249 ifDXT3 = 201,
250 ifDXT5 = 202,
251 ifBTC = 203,
252 ifATI1N = 204,
253 ifATI2N = 205,
254 ifBinary = 206,
255 { Passtrough formats }
256 {ifETC1 = 220,
257 ifETC2RGB = 221,
258 ifETC2RGBA = 222,
259 ifETC2PA = 223,
260 ifDXBC6 = 224,
261 ifDXBC7 = 225}
262 { PCX formats}
263 ifMono = 250,
264 ifIndex2 = 251,
265 ifIndex4 = 252
266 );
268 { Color value for 32 bit images.}
269 TColor32 = LongWord;
270 PColor32 = ^TColor32;
272 { Color value for 64 bit images.}
273 TColor64 = type Int64;
274 PColor64 = ^TColor64;
276 { Color record for 24 bit images, which allows access to individual color
277 channels.}
278 TColor24Rec = packed record
279 case LongInt of
280 0: (B, G, R: Byte);
281 1: (Channels: array[0..2] of Byte);
282 end;
283 PColor24Rec = ^TColor24Rec;
284 TColor24RecArray = array[0..MaxInt div SizeOf(TColor24Rec) - 1] of TColor24Rec;
285 PColor24RecArray = ^TColor24RecArray;
287 { Color record for 32 bit images, which allows access to individual color
288 channels.}
289 TColor32Rec = packed record
290 case LongInt of
291 0: (Color: TColor32);
292 1: (B, G, R, A: Byte);
293 2: (Channels: array[0..3] of Byte);
294 3: (Color24Rec: TColor24Rec);
295 end;
296 PColor32Rec = ^TColor32Rec;
297 TColor32RecArray = array[0..MaxInt div SizeOf(TColor32Rec) - 1] of TColor32Rec;
298 PColor32RecArray = ^TColor32RecArray;
300 { Color record for 48 bit images, which allows access to individual color
301 channels.}
302 TColor48Rec = packed record
303 case LongInt of
304 0: (B, G, R: Word);
305 1: (Channels: array[0..2] of Word);
306 end;
307 PColor48Rec = ^TColor48Rec;
308 TColor48RecArray = array[0..MaxInt div SizeOf(TColor48Rec) - 1] of TColor48Rec;
309 PColor48RecArray = ^TColor48RecArray;
311 { Color record for 64 bit images, which allows access to individual color
312 channels.}
313 TColor64Rec = packed record
314 case LongInt of
315 0: (Color: TColor64);
316 1: (B, G, R, A: Word);
317 2: (Channels: array[0..3] of Word);
318 3: (Color48Rec: TColor48Rec);
319 end;
320 PColor64Rec = ^TColor64Rec;
321 TColor64RecArray = array[0..MaxInt div SizeOf(TColor64Rec) - 1] of TColor64Rec;
322 PColor64RecArray = ^TColor64RecArray;
324 { Color record for 96 bit floating point images, which allows access to
325 individual color channels.}
326 TColor96FPRec = packed record
327 case Integer of
328 0: (B, G, R: Single);
329 1: (Channels: array[0..2] of Single);
330 end;
331 PColor96FPRec = ^TColor96FPRec;
332 TColor96FPRecArray = array[0..MaxInt div SizeOf(TColor96FPRec) - 1] of TColor96FPRec;
333 PColor96FPRecArray = ^TColor96FPRecArray;
335 { Color record for 128 bit floating point images, which allows access to
336 individual color channels.}
337 TColorFPRec = packed record
338 case LongInt of
339 0: (B, G, R, A: Single);
340 1: (Channels: array[0..3] of Single);
341 2: (Color96Rec: TColor96FPRec);
342 end;
343 PColorFPRec = ^TColorFPRec;
344 TColorFPRecArray = array[0..MaxInt div SizeOf(TColorFPRec) - 1] of TColorFPRec;
345 PColorFPRecArray = ^TColorFPRecArray;
347 { 16 bit floating-point value. It has 1 sign bit, 5 exponent bits,
348 and 10 mantissa bits.}
349 THalfFloat = type Word;
350 PHalfFloat = ^THalfFloat;
352 { Color record for 64 bit floating point images, which allows access to
353 individual color channels.}
354 TColorHFRec = packed record
355 case LongInt of
356 0: (B, G, R, A: THalfFloat);
357 1: (Channels: array[0..3] of THalfFloat);
358 end;
359 PColorHFRec = ^TColorHFRec;
360 TColorHFRecArray = array[0..MaxInt div SizeOf(TColorHFRec) - 1] of TColorHFRec;
361 PColorHFRecArray = ^TColorHFRecArray;
363 { Palette for indexed mode images with 32 bit colors.}
364 TPalette32 = TColor32RecArray;
365 TPalette32Size256 = array[0..255] of TColor32Rec;
366 PPalette32 = ^TPalette32;
368 { Palette for indexd mode images with 24 bit colors.}
369 TPalette24 = TColor24RecArray;
370 TPalette24Size256 = array[0..255] of TColor24Rec;
371 PPalette24 = ^TPalette24;
373 { Record that stores single image data and information describing it.}
374 TImageData = packed record
375 Width: LongInt; // Width of image in pixels
376 Height: LongInt; // Height of image in pixels
377 Format: TImageFormat; // Data format of image
378 Size: LongInt; // Size of image bits in Bytes
379 Bits: Pointer; // Pointer to memory containing image bits
380 Palette: PPalette32; // Image palette for indexed images
381 Tag: Pointer; // User data
382 end;
383 PImageData = ^TImageData;
385 { Pixel format information used in conversions to/from 16 and 8 bit ARGB
386 image formats.}
387 TPixelFormatInfo = packed record
388 ABitCount, RBitCount, GBitCount, BBitCount: Byte;
389 ABitMask, RBitMask, GBitMask, BBitMask: LongWord;
390 AShift, RShift, GShift, BShift: Byte;
391 ARecDiv, RRecDiv, GRecDiv, BRecDiv: Byte;
392 end;
393 PPixelFormatInfo = ^TPixelFormatInfo;
395 PImageFormatInfo = ^TImageFormatInfo;
397 { Look at TImageFormatInfo.GetPixelsSize for details.}
398 TFormatGetPixelsSizeFunc = function(Format: TImageFormat; Width,
399 Height: LongInt): LongInt;
400 { Look at TImageFormatInfo.CheckDimensions for details.}
401 TFormatCheckDimensionsProc = procedure(Format: TImageFormat; var Width,
402 Height: LongInt);
403 { Function for getting pixel colors. Native pixel is read from Image and
404 then translated to 32 bit ARGB.}
405 TGetPixel32Func = function(Bits: Pointer; Info: PImageFormatInfo;
406 Palette: PPalette32): TColor32Rec;
407 { Function for getting pixel colors. Native pixel is read from Image and
408 then translated to FP ARGB.}
409 TGetPixelFPFunc = function(Bits: Pointer; Info: PImageFormatInfo;
410 Palette: PPalette32): TColorFPRec;
411 { Procedure for setting pixel colors. Input 32 bit ARGB color is translated to
412 native format and then written to Image.}
413 TSetPixel32Proc = procedure(Bits: Pointer; Info: PImageFormatInfo;
414 Palette: PPalette32;const Color: TColor32Rec);
415 { Procedure for setting pixel colors. Input FP ARGB color is translated to
416 native format and then written to Image.}
417 TSetPixelFPProc = procedure(Bits: Pointer; Info: PImageFormatInfo;
418 Palette: PPalette32; const Color: TColorFPRec);
420 { Additional information for each TImageFormat value.}
421 TImageFormatInfo = packed record
422 Format: TImageFormat; // Format described by this record
423 Name: array[0..15] of Char; // Symbolic name of format
424 BytesPerPixel: LongInt; // Number of bytes per pixel (note: it is
425 // 0 for formats where BitsPerPixel < 8 (e.g. DXT).
426 // Use GetPixelsSize function to get size of
427 // image data.
428 ChannelCount: LongInt; // Number of image channels (R, G, B, A, Gray)
429 PaletteEntries: LongInt; // Number of palette entries
430 HasGrayChannel: Boolean; // True if image has grayscale channel
431 HasAlphaChannel: Boolean; // True if image has alpha channel
432 IsFloatingPoint: Boolean; // True if image has floating point pixels
433 UsePixelFormat: Boolean; // True if image uses pixel format
434 IsRBSwapped: Boolean; // True if Red and Blue channels are swapped
435 // e.g. A16B16G16R16 has IsRBSwapped True
436 RBSwapFormat: TImageFormat; // Indicates supported format with swapped
437 // Red and Blue channels, ifUnknown if such
438 // format does not exist
439 IsIndexed: Boolean; // True if image uses palette
440 IsSpecial: Boolean; // True if image is in special format
441 IsPasstrough: Boolean; // True if image is in passtrough program (Imaging
442 // iself doesn't know how to decode and encode it -
443 // complex texture compressions etc.)
444 PixelFormat: PPixelFormatInfo; // Pixel format structure
445 GetPixelsSize: TFormatGetPixelsSizeFunc; // Returns size in bytes of
446 // Width * Height pixels of image
447 CheckDimensions: TFormatCheckDimensionsProc; // some formats have limited
448 // values of Width and Height. This
449 // procedure checks and changes dimensions
450 // to be valid for given format.
451 GetPixel32: TGetPixel32Func; // 32bit ARGB pixel get function
452 GetPixelFP: TGetPixelFPFunc; // FP ARGB pixel get function
453 SetPixel32: TSetPixel32Proc; // 32bit ARGB pixel set procedure
454 SetPixelFP: TSetPixelFPProc; // FP ARGB pixel set procedure
455 SpecialNearestFormat: TImageFormat; // Regular image format used when
456 // compressing/decompressing special images
457 // as source/target
458 end;
460 { Handle to list of image data records.}
461 TImageDataList = Pointer;
462 PImageDataList = ^TImageDataList;
464 { Handle to input/output.}
465 TImagingHandle = Pointer;
467 { Filters used in functions that resize images or their portions.}
468 TResizeFilter = (
469 rfNearest = 0,
470 rfBilinear = 1,
471 rfBicubic = 2,
472 rfLanczos = 3);
474 { Seek origin mode for IO function Seek.}
475 TSeekMode = (
476 smFromBeginning = 0,
477 smFromCurrent = 1,
478 smFromEnd = 2);
480 TOpenMode = (
481 omReadOnly = 0, // Opens file for reading only
482 omCreate = 1, // Creates new file (overwriting any existing) and opens it for writing
483 omReadWrite = 2 // Opens for reading and writing. Non existing file is created.
484 );
486 { IO functions used for reading and writing images from/to input/output.}
487 TOpenProc = function(Source: PChar; Mode: TOpenMode): TImagingHandle; cdecl;
488 TCloseProc = procedure(Handle: TImagingHandle); cdecl;
489 TEofProc = function(Handle: TImagingHandle): Boolean; cdecl;
490 TSeekProc = function(Handle: TImagingHandle; Offset: LongInt; Mode: TSeekMode): LongInt; cdecl;
491 TTellProc = function(Handle: TImagingHandle): LongInt; cdecl;
492 TReadProc = function(Handle: TImagingHandle; Buffer: Pointer; Count: LongInt): LongInt; cdecl;
493 TWriteProc = function(Handle: TImagingHandle; Buffer: Pointer; Count: LongInt): LongInt; cdecl;
495 {$IFNDEF FPC}
496 type
497 {$IF CompilerVersion <= 18.5}
498 PtrUInt = LongWord;
499 {$ELSE}
500 PtrUInt = NativeUInt;
501 {$IFEND}
502 {$ENDIF}
504 implementation
507 File Notes:
509 -- TODOS ----------------------------------------------------
510 - add lookup tables to pixel formats for fast conversions
512 -- 0.77.1 ---------------------------------------------------
513 - Added "Passtrough" image data formats.
514 - Added Tag to TImageData for storing user data.
515 - Added ImagingPNGZLibStrategy option.
516 - Changed IO functions. Merged open functions to one
517 and added third open mode R/W (for TIFF append etc.).
518 - Added new image data formats and related structures:
519 ifR32G32B32F, ifB32G32G32F.
521 -- 0.26.5 Changes/Bug Fixes ---------------------------------
522 - Added ifBinary image format and ImagingBinaryTreshold option.
523 - Lanczos filter added to TResizeFilter enum.
525 -- 0.24.3 Changes/Bug Fixes ---------------------------------
526 - Added ifATI1N and ifATI2N image data formats.
528 -- 0.23 Changes/Bug Fixes -----------------------------------
529 - Added ifBTC image format and SpecialNearestFormat field
530 to TImageFormatInfo.
532 -- 0.21 Changes/Bug Fixes -----------------------------------
533 - Added option constants for PGM and PPM file formats.
534 - Added TPalette32Size256 and TPalette24Size256 types.
536 -- 0.19 Changes/Bug Fixes -----------------------------------
537 - added ImagingVersionPatch constant so bug fix only releases
538 can be distinguished from ordinary major/minor releases
539 - renamed TPixelFormat to TPixelFormatInfo to avoid name collisions
540 with Graphics.TPixelFormat
541 - added new image data formats: ifR16F, ifA16R16G16B16F,
542 ifA16B16G16R16F
543 - added pixel get/set function pointers to TImageFormatInfo
544 - added 16bit half float type and color record
545 - renamed TColorFRec to TColorFPRec (and related types too)
547 -- 0.17 Changes/Bug Fixes -----------------------------------
548 - added option ImagingMipMapFilter which now controls resampling filter
549 used when generating mipmaps
550 - added TResizeFilter type
551 - added ChannelCount to TImageFormatInfo
552 - added new option constants for MNG and JNG images
554 -- 0.15 Changes/Bug Fixes -----------------------------------
555 - added RBSwapFormat to TImageFormatInfo for faster conversions
556 between swapped formats (it just calls SwapChannels now if
557 RBSwapFormat is not ifUnknown)
558 - moved TImageFormatInfo and required types from Imaging unit
559 here, removed TImageFormatShortInfo
560 - added new options: ImagingLoadOverrideFormat, ImagingSaveOverrideFormat
562 -- 0.13 Changes/Bug Fixes -----------------------------------
563 - new ImagingColorReductionMask option added
564 - new image format added: ifA16Gray16
568 end.