00001 /** \file
00002 * \brief All the Internal File Formats.
00003 * They are all automatically registered by the library.
00004 * The signatures are in C, but the functions are C++.
00005 * Header for internal use only.
00006 *
00007 * See Copyright Notice in im_lib.h
00008 */
00009
00010 #ifndef __IM_FORMAT_ALL_H
00011 #define __IM_FORMAT_ALL_H
00012
00013 #if defined(__cplusplus)
00014 extern "C" {
00015 #endif
00016
00017 /** \defgroup tiff TIFF - Tagged Image File Format
00018 * \section Description
00019 *
00020 * \par
00021 * Copyright (c) 1986-1988, 1992 by Adobe Systems Incorporated. \n
00022 * Originally created by a group of companies,
00023 * the Aldus Corporation keeped the copyright until Aldus was aquired by Adobe. \n
00024 * TIFF Revision 6.0 Final June 3, 1992 \n
00025 * http://www.adobe.com/Support/TechNotes.html
00026 * \par
00027 * Access to the TIFF file format uses libTIFF version 3.8.2 \n
00028 * http://www.remotesensing.org/libtiff/ \n
00029 * Copyright (c) 1988-1997 Sam Leffler \n
00030 * Copyright (c) 1991-1997 Silicon Graphics, Inc. \n
00031 *
00032 * \section Features
00033 *
00034 \verbatim
00035 Data Types: <all>
00036 Color Spaces: Gray, RGB, CMYK, YCbCr, Lab, XYZ, Map and Binary.
00037 Compressions:
00038 NONE - no compression [default for IEEE Floating Point Data]
00039 CCITTRLE - CCITT modified Huffman RLE (binary only) [default for Binary]
00040 CCITTFAX3 - CCITT Group 3 fax (binary only)
00041 CCITTFAX4 - CCITT Group 4 fax (binary only)
00042 LZW - Lempel-Ziv & Welch [default]
00043 JPEG - ISO JPEG [default for YCBCR]
00044 NEXT - NeXT 2-bit RLE (2 bpp only)
00045 CCITTRLEW - CCITT modified Huffman RLE with word alignment (binary only)
00046 RLE - Packbits (Macintosh RLE) [default for MAP]
00047 THUNDERSCAN - ThunderScan 4-bit RLE (only for 2 or 4 bpp)
00048 PIXARLOG - Pixar companded 11-bit ZIP (only byte, ushort and float)
00049 DEFLATE - LZ77 variation (ZIP)
00050 ADOBE_DEFLATE - Adobe LZ77 variation
00051 SGILOG - SGI Log Luminance RLE for L and Luv (only byte, ushort and float) [default for XYZ]
00052 SGILOG24 - SGI Log 24-bit packed for Luv (only byte, ushort and float)
00053 Can have more than one image.
00054 Can have an alpha channel.
00055 Components can be packed or not.
00056 Lines arranged from top down to bottom or bottom up to top.
00057 Handle(1) returns a TIFF* libTIFF structure.
00058
00059 Attributes:
00060 Photometric IM_USHORT (1) (when writing this will complement the color_mode information, for Mask, MinIsWhite, ITULab and ICCLab)
00061 ExtraSampleInfo IM_USHORT (1) (description of alpha channel: 0- uknown, 1- pre-multiplied, 2-normal)
00062 JPEGQuality IM_INT (1) [0-100, default 75] (write only)
00063 ZIPQuality IM_INT (1) [1-9, default 6] (write only)
00064 ResolutionUnit (string) ["DPC", "DPI"]
00065 XResolution, YResolution IM_FLOAT (1)
00066 Description, Author, Copyright, DateTime, DocumentName,
00067 PageName, TargetPrinter, Make, Model, Software, HostComputer (string)
00068 InkNames (strings separated by '0's)
00069 InkSet IM_USHORT (1)
00070 NumberOfInks IM_USHORT (1)
00071 DotRange IM_USHORT (2)
00072 TransferFunction0, TransferFunction1, TransferFunction3 IM_USHORT [gray=0, rgb=012]
00073 ReferenceBlackWhite IMFLOAT (6)
00074 WhitePoint IMFLOAT (2)
00075 PrimaryChromaticities IMFLOAT (6)
00076 YCbCrCoefficients IM_FLOAT (3)
00077 YCbCrSubSampling IM_USHORT (2)
00078 YCbCrPositioning IM_USHORT (1)
00079 PageNumber IM_USHORT (2)
00080 StoNits IM_FLOAT (1)
00081 XPosition, YPosition IM_FLOAT (1)
00082 SMinSampleValue, SMaxSampleValue IM_FLOAT (1)
00083 HalftoneHints IM_USHORT (2)
00084 SubfileType IM_INT (1)
00085 ICCProfile IM_BYTE (N)
00086 MultiBandCount IM_USHORT (1) [Number of bands in a multiband gray image.]
00087 MultiBandSelect IM_USHORT (1) [Band number to read one band of a multiband gray image. Must be set before reading image info.]
00088 and other TIFF tags as they are described in the TIFF documentation.
00089 GeoTIFF tags:
00090 GeoTiePoints, GeoTransMatrix, IntergraphMatrix, GeoPixelScale, GeoDoubleParams IM_FLOAT (N)
00091 GeoASCIIParams (string)
00092 Read-only support for EXIF tags as they are described in the EXIF 2.2 documentation. See http://www.exif.org/
00093 DNG tags as they are described in the DNG documentation. See http://www.adobe.com/br/products/dng/
00094 Tags BlackLevel, DefaultCropOrigin and DefaultCropSize are incorrectly interpreted by libTIFF so they are ignored.
00095 Raw image is loaded in place of the thumbnail image in the main IFD.
00096 SubIFDCount IM_USHORT (1) [Number of subifds of the current image.]
00097 SubIFDSelect IM_USHORT (1) [Subifd number to be readed. Must be set before reading image info.]
00098 (other attributes can be obtained by using libTIFF directly using the Handle(1) function)
00099
00100 Comments:
00101 LogLuv is in fact Y'+CIE(u,v), so we choose to always convert it to XYZ.
00102 SubIFD is handled only for DNG.
00103 Since LZW patent expired, LZW compression is enabled. LZW Copyright Unisys.
00104 libGeoTIFF can be used without XTIFF initialization. Use Handle(1) to obtain a TIFF*.
00105
00106 Changes:
00107 "tiff_jpeg.c" - commented "downsampled_output = TRUE" in 2 places.
00108 New file "tif_config.h" to match our needs.
00109 New file "tiff_binfile.c" that implement I/O rotines using imBinFile.
00110 \endverbatim
00111 * \ingroup format */
00112 void imFormatRegisterTIFF(void);
00113
00114 /** \defgroup jpeg JPEG - JPEG File Interchange Format
00115 * \section Description
00116 *
00117 * \par
00118 * ISO/IEC 10918 (1994, 1995, 1997, 1999)\n
00119 * http://www.jpeg.org/
00120 * \par
00121 * Access to the JPEG file format uses libJPEG version 6b. \n
00122 * http://www.ijg.org \n
00123 * Copyright (C) 1991-1998, Thomas G. Lane \n
00124 * from the Independent JPEG Group.
00125 * \par
00126 * Access to the EXIF attributes uses libEXIF version 0.6.12. \n
00127 * http://sourceforge.net/projects/libexif \n
00128 * Copyright (C) 2001-2003, Lutz Müller
00129 *
00130 * \section Features
00131 *
00132 \verbatim
00133 Data Types: Byte
00134 Color Spaces: Gray, RGB, CMYK and YCbCr (Binary Saved as Gray)
00135 Compressions:
00136 JPEG - ISO JPEG [default]
00137 Only one image.
00138 No alpha channel.
00139 Internally the components are always packed.
00140 Internally the lines are arranged from top down to bottom.
00141 Handle(1) returns jpeg_decompress_struct* when reading, and
00142 jpeg_compress_struct* when writing (libJPEG structures).
00143
00144 Attributes:
00145 AutoYCbCr IM_INT (1) (controls YCbCr auto conversion) default 1
00146 JPEGQuality IM_INT (1) [0-100, default 75] (write only)
00147 ResolutionUnit (string) ["DPC", "DPI"]
00148 XResolution, YResolution IM_FLOAT (1)
00149 Interlaced (same as Progressive) IM_INT (1 | 0) default 0
00150 Description (string)
00151 (lots of Exif tags)
00152
00153 Changes to libJPEG:
00154 jdatadst.c - fflush and ferror replaced by macros JFFLUSH and JFERROR.
00155 jinclude.h - standard JFFLUSH and JFERROR definitions, and new macro HAVE_JFIO.
00156 jmorecfg.h - changed definition of INT32 to JINT32 for better compatibility.
00157 jdhuf.c - added support for OJPEG_SUPPORT in libTIFF.
00158 new file created: jconfig.h
00159
00160 Changes to libEXIF:
00161 new file config.h
00162 changed "exif-tag.c" to add new function
00163 changed "exif-entry.c" to improve exif_entry_initialize
00164 fixed small bug in "mnote-pentax-tag.h".
00165
00166 Comments:
00167 Other APPx markers are ignored.
00168 No thumbnail support.
00169 RGB images are automatically converted to YCbCr when saved.
00170 Also YcbCr are converted to RGB when loaded. Use AutoYCbCr=0 to disable this behavior.
00171 \endverbatim
00172 * \ingroup format */
00173 void imFormatRegisterJPEG(void);
00174
00175 /** \defgroup png PNG - Portable Network Graphic Format
00176 * \section Description
00177 *
00178 * \par
00179 * Access to the PNG file format uses libPNG version 1.2.22. \n
00180 * http://www.libpng.org \n
00181 * Copyright (C) 1998-2007 Glenn Randers-Pehrson
00182 *
00183 * \section Features
00184 *
00185 \verbatim
00186 Data Types: Byte and UShort
00187 Color Spaces: Gray, RGB, MAP and Binary
00188 Compressions:
00189 DEFLATE - LZ77 variation (ZIP) [default]
00190 Only one image.
00191 Can have an alpha channel.
00192 Internally the components are always packed.
00193 Internally the lines are arranged from top down to bottom.
00194 Handle(1) returns png_structp libPNG structure.
00195
00196 Attributes:
00197 ZIPQuality IM_INT (1) [1-9, default 6] (write only)
00198 ResolutionUnit (string) ["DPC", "DPI"]
00199 XResolution, YResolution IM_FLOAT (1)
00200 Interlaced (same as Progressive) IM_INT (1 | 0) default 0
00201 Gamma IM_FLOAT (1)
00202 WhitePoint IMFLOAT (2)
00203 PrimaryChromaticities IMFLOAT (6)
00204 XPosition, YPosition IM_FLOAT (1)
00205 sRGBIntent IM_INT (1) [0: Perceptual, 1: Relative colorimetric, 2: Saturation, 3: Absolute colorimetric]
00206 TransparencyIndex IM_BYTE (1 or N)
00207 TransparentColor IM_BYTE (3)
00208 CalibrationName, CalibrationUnits (string)
00209 CalibrationLimits IM_INT (2)
00210 CalibrationEquation IM_BYTE (1) [0-Linear,1-Exponential,2-Arbitrary,3-HyperbolicSine)]
00211 CalibrationParam (string) [params separated by '\\n']
00212 Title, Author, Description, Copyright, DateTime (string)
00213 Software, Disclaimer, Warning, Source, Comment, ... (string)
00214 DateTimeModified (string) [when writing uses the current system time]
00215 ICCProfile IM_BYTE (N)
00216 ScaleUnit (string) ["meters", "radians"]
00217 XScale, YScale IM_FLOAT (1)
00218
00219 Comments:
00220 Attributes after the image are ignored.
00221 Define PNG_NO_CONSOLE_IO to avoid printfs.
00222 We define PNG_TIME_RFC1123_SUPPORTED.
00223 Add the following files to the makefile to optimize the library:
00224 pngvcrd.c - PNG_USE_PNGVCRD
00225 For Intel x86 CPU and Microsoft Visual C++ compiler
00226 pnggccrd.c - PNG_USE_PNGGCCRD
00227 For Intel x86 CPU (Pentium-MMX or later) and GNU C compiler.
00228 Changed pngconf.h to use int instead of long in png_uint_32 and png_int_32.
00229 \endverbatim
00230 * \ingroup format */
00231 void imFormatRegisterPNG(void);
00232
00233 /** \defgroup gif GIF - Graphics Interchange Format
00234 * \section Description
00235 *
00236 * \par
00237 * Copyright (c) 1987,1988,1989,1990 CompuServe Incorporated. \n
00238 * GIF is a Service Mark property of CompuServe Incorporated. \n
00239 * Graphics Interchange Format Programming Reference, 1990. \n
00240 * LZW Copyright Unisys.
00241 * \par
00242 * Patial Internal Implementation. \n
00243 * Decoding and encoding code were extracted from GIFLib 1.0. \n
00244 * Copyright (c) 1989 Gershon Elber.
00245 *
00246 * \section Features
00247 *
00248 \verbatim
00249 Data Types: Byte
00250 Color Spaces: MAP only, (Gray and Binary saved as MAP)
00251 Compressions:
00252 LZW - Lempel-Ziv & Welch [default]
00253 Can have more than one image.
00254 No alpha channel.
00255 Internally the lines are arranged from top down to bottom.
00256
00257 Attributes:
00258 ScreenHeight, ScreenWidth IM_USHORT (1) screen size [default to the first image size]
00259 Interlaced IM_INT (1 | 0) default 0
00260 Description (string)
00261 TransparencyIndex IM_BYTE (1)
00262 XScreen, YScreen IM_USHORT (1) screen position
00263 UserInput IM_BYTE (1) [1, 0]
00264 Disposal (string) [UNDEF, LEAVE, RBACK, RPREV]
00265 Delay IM_USHORT (1)
00266 Iterations IM_USHORT (1) (NETSCAPE2.0 Application Extension)
00267
00268 Comments:
00269 Attributes after the last image are ignored.
00270 Reads GIF87 and GIF89, but writes GIF89 always.
00271 Ignored attributes: Background Color Index, Pixel Aspect Ratio,
00272 Plain Text Extensions, Application Extensions...
00273 \endverbatim
00274 * \ingroup format */
00275 void imFormatRegisterGIF(void);
00276
00277 /** \defgroup bmp BMP - Windows Device Independent Bitmap
00278 * \section Description
00279 *
00280 * \par
00281 * Windows Copyright Microsoft Corporation.
00282 * \par
00283 * Internal Implementation.
00284 *
00285 * \section Features
00286 *
00287 \verbatim
00288 Data Types: Byte
00289 Color Spaces: RGB, MAP and Binary (Gray saved as MAP)
00290 Compressions:
00291 NONE - no compression [default]
00292 RLE - Run Lenght Encoding (only for MAP and Gray)
00293 Only one image.
00294 Can have an alpha channel (only for RGB)
00295 Internally the components are always packed.
00296 Lines arranged from top down to bottom or bottom up to top. But are saved always as bottom up.
00297
00298 Attributes:
00299 ResolutionUnit (string) ["DPC", "DPI"]
00300 XResolution, YResolution IM_FLOAT (1)
00301
00302 Comments:
00303 Reads OS2 1.x and Windows 3, but writes Windows 3 always.
00304 Version 4 and 5 BMPs are not supported.
00305 \endverbatim
00306 * \ingroup format */
00307 void imFormatRegisterBMP(void);
00308
00309 /** \defgroup ras RAS - Sun Raster File
00310 * \section Description
00311 *
00312 * \par
00313 * Copyright Sun Corporation.
00314 * \par
00315 * Internal Implementation.
00316 *
00317 * \section Features
00318 *
00319 \verbatim
00320 Data Types: Byte
00321 Color Spaces: Gray, RGB, MAP and Binary
00322 Compressions:
00323 NONE - no compression [default]
00324 RLE - Run Lenght Encoding
00325 Only one image.
00326 Can have an alpha channel (only for IM_RGB)
00327 Internally the components are always packed.
00328 Internally the lines are arranged from top down to bottom.
00329
00330 Attributes:
00331 none
00332 \endverbatim
00333 * \ingroup format */
00334 void imFormatRegisterRAS(void);
00335
00336 /** \defgroup led LED - IUP image in LED
00337 * \section Description
00338 *
00339 * \par
00340 * Copyright Tecgraf/PUC-Rio and PETROBRAS/CENPES.
00341 * \par
00342 * Internal Implementation.
00343 *
00344 * \section Features
00345 *
00346 \verbatim
00347 Data Types: Byte
00348 Color Spaces: MAP only (Gray and Binary saved as MAP)
00349 Compressions:
00350 NONE - no compression [default]
00351 Only one image.
00352 No alpha channel.
00353 Internally the lines are arranged from top down to bottom.
00354
00355 Attributes:
00356 none
00357
00358 Comments:
00359 LED file must start with "LEDImage = IMAGE[".
00360 \endverbatim
00361 * \ingroup format */
00362 void imFormatRegisterLED(void);
00363
00364 /** \defgroup sgi SGI - Silicon Graphics Image File Format
00365 * \section Description
00366 *
00367 * \par
00368 * SGI is a trademark of Silicon Graphics, Inc.
00369 * \par
00370 * Internal Implementation.
00371 *
00372 * \section Features
00373 *
00374 \verbatim
00375 Data Types: Byte and UShort
00376 Color Spaces: Gray and RGB (Binary saved as Gray, MAP with fixed palette when reading only)
00377 Compressions:
00378 NONE - no compression [default]
00379 RLE - Run Lenght Encoding
00380 Only one image.
00381 Can have an alpha channel (only for IM_RGB)
00382 Internally the components are always packed.
00383 Internally the lines are arranged from bottom up to top.
00384
00385 Attributes:
00386 Description (string)
00387 \endverbatim
00388 * \ingroup format */
00389 void imFormatRegisterSGI(void);
00390
00391 /** \defgroup pcx PCX - ZSoft Picture
00392 * \section Description
00393 *
00394 * \par
00395 * Copyright ZSoft Corporation. \n
00396 * ZSoft (1988) PCX Technical Reference Manual.
00397 * \par
00398 * Internal Implementation.
00399 *
00400 * \section Features
00401 *
00402 \verbatim
00403 Data Types: Byte
00404 Color Spaces: RGB, MAP and Binary (Gray saved as MAP)
00405 Compressions:
00406 NONE - no compression
00407 RLE - Run Lenght Encoding [default - since uncompressed PCX is not well supported]
00408 Only one image.
00409 No alpha channel.
00410 Internally the components are always packed.
00411 Internally the lines are arranged from top down to bottom.
00412
00413 Attributes:
00414 ResolutionUnit (string) ["DPC", "DPI"]
00415 XResolution, YResolution IM_FLOAT (1)
00416 XScreen, YScreen IM_USHORT (1) screen position
00417
00418 Comments:
00419 Reads Versions 0-5, but writes Version 5 always.
00420 \endverbatim
00421 * \ingroup format */
00422 void imFormatRegisterPCX(void);
00423
00424 /** \defgroup tga TGA - Truevision Graphics Adapter File
00425 * \section Description
00426 *
00427 * \par
00428 * Truevision TGA File Format Specification Version 2.0 \n
00429 * Technical Manual Version 2.2 January, 1991 \n
00430 * Copyright 1989, 1990, 1991 Truevision, Inc.
00431 * \par
00432 * Internal Implementation.
00433 *
00434 * \section Features
00435 *
00436 \verbatim
00437 Supports 8 bits per component only. Data type is always Byte.
00438 Color Spaces: Gray, RGB and MAP (Binary saved as Gray)
00439 Compressions:
00440 NONE - no compression [default]
00441 RLE - Run Lenght Encoding
00442 Only one image.
00443 No alpha channel.
00444 Internally the components are always packed.
00445 Internally the lines are arranged from bottom up to top or from top down to bottom.
00446
00447 Attributes:
00448 XScreen, YScreen IM_USHORT (1) screen position
00449 Title, Author, Description, JobName, Software (string)
00450 SoftwareVersion (read only) (string)
00451 DateTimeModified (string) [when writing uses the current system time]
00452 Gamma IM_FLOAT (1)
00453 \endverbatim
00454 * \ingroup format */
00455 void imFormatRegisterTGA(void);
00456
00457 /** \defgroup pnm PNM - Netpbm Portable Image Map
00458 * \section Description
00459 *
00460 * \par
00461 * PNM formats Copyright Jef Poskanzer
00462 * \par
00463 * Internal Implementation.
00464 *
00465 * \section Features
00466 *
00467 \verbatim
00468 Data Types: Byte and UShort
00469 Color Spaces: Gray, RGB and Binary
00470 Compressions:
00471 NONE - no compression [default]
00472 ASCII (textual data)
00473 Can have more than one image, but sequencial access only.
00474 No alpha channel.
00475 Internally the components are always packed.
00476 Internally the lines are arranged from top down to bottom.
00477
00478 Attributes:
00479 Description (string)
00480
00481 Comments:
00482 In fact ASCII is an expansion...
00483 \endverbatim
00484 * \ingroup format */
00485 void imFormatRegisterPNM(void);
00486
00487 /** \defgroup ico ICO - Windows Icon
00488 * \section Description
00489 *
00490 * \par
00491 * Windows Copyright Microsoft Corporation.
00492 * \par
00493 * Internal Implementation.
00494 *
00495 * \section Features
00496 *
00497 \verbatim
00498 Data Types: Byte
00499 Color Spaces: RGB, MAP and Binary (Gray saved as MAP)
00500 Compressions:
00501 NONE - no compression [default]
00502 Can have more than one image. But writing is limited to 5 images,
00503 and all images must have different sizes and bpp.
00504 Can have an alpha channel (only for RGB)
00505 Internally the components are always packed.
00506 Internally the lines are arranged from bottom up to top.
00507
00508 Attributes:
00509 TransparencyIndex IM_BYTE (1 or N)
00510
00511 Comments:
00512 If the user specifies an alpha channel, the AND mask is loaded as alpha if
00513 the file color mode does not contain the IM_ALPHA flag.
00514 For MAP imagens, if the user does not specifies an alpha channel
00515 the TransparencyIndex is used to initialize the AND mask when writing,
00516 and if the user does specifies an alpha channel
00517 the most repeated index with transparency will be the transparent index.
00518 Although any size and common bpp can be used is recomended to use the typical configurations:
00519 16x16, 32x32, 48x48, 64x64 or 96x96
00520 2 colors, 16 colors, 256 colors, 24bpp or 32bpp
00521 \endverbatim
00522 * \ingroup format */
00523 void imFormatRegisterICO(void);
00524
00525 /** \defgroup krn KRN - IM Kernel File Format
00526 * \section Description
00527 *
00528 * \par
00529 * Textual format to provied a simple way to create kernel convolution images.
00530 * \par
00531 * Internal Implementation.
00532 *
00533 * \section Features
00534 *
00535 \verbatim
00536 Data Types: Byte, Int
00537 Color Spaces: Gray
00538 Compressions:
00539 NONE - no compression [default]
00540 Only one image.
00541 No alpha channel.
00542 Internally the lines are arranged from top down to bottom.
00543
00544 Attributes:
00545 Description (string)
00546
00547 Comments:
00548 The format is very simple, inspired by PNM.
00549 It was developed because PNM does not have support for INT and FLOAT.
00550 Remeber that usually convolution operations use kernel size an odd number.
00551
00552 Format Model:
00553 IMKERNEL
00554 Description up to 512 characters
00555 width height
00556 type (0 - IM_INT, 1 - IM_FLOAT)
00557 data...
00558
00559 Example:
00560 IMKERNEL
00561 Gradian
00562 3 3
00563 0
00564 0 -1 0
00565 0 1 0
00566 0 0 0
00567 \endverbatim
00568 * \ingroup format */
00569 void imFormatRegisterKRN(void);
00570
00571
00572 #if defined(__cplusplus)
00573 }
00574 #endif
00575
00576 #endif