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