IM: im_format_all.h Source File

IM - An Imaging Tool

im_format_all.h

Go to the documentation of this file.
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.9 2006/05/16 13:57:17 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.4 \n
00029  * http://www.remotesensing.org/libtiff/                     \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(1) returns a TIFF* libTIFF structure.
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(1) 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(1) to obtain a TIFF*.
00096       
00097     Changes:
00098       "tiff_jpeg.c" - commented "downsampled_output = TRUE" in 2 places.
00099       "tiff_ojpeg.c" for boolean type compilation. 
00100       New file "tif_config.h" to match our needs.
00101       New file "tiff_binfile.c" that implement I/O rotines using imBinFile.
00102 \endverbatim
00103  * \ingroup format */
00104 void imFormatRegisterTIFF(void);
00105 
00106 /** \defgroup jpeg JPEG - JPEG File Interchange Format
00107  * \section Description
00108  * 
00109  * \par
00110  * ISO/IEC 10918 (1994, 1995, 1997, 1999)\n
00111  * http://www.jpeg.org/
00112  * \par
00113  * Access to the JPEG file format uses libJPEG version 6b. \n
00114  * http://www.ijg.org                                      \n
00115  * Copyright (C) 1991-1998, Thomas G. Lane                 \n
00116  *   from the Independent JPEG Group.
00117  * \par
00118  * Access to the EXIF attributes uses libEXIF version 0.6.12. \n
00119  * http://sourceforge.net/projects/libexif                    \n
00120  * Copyright (C) 2001-2003, Lutz Müller
00121  *
00122  * \section Features
00123  *
00124 \verbatim
00125     Data Types: Byte
00126     Color Spaces: Gray, RGB, CMYK and YCbCr (Binary Saved as Gray)
00127     Compressions: 
00128       JPEG - ISO JPEG  [default]
00129     Only one image.
00130     No alpha channel.
00131     Internally the components are always packed.
00132     Internally the lines are arranged from top down to bottom.
00133     Handle(1) returns jpeg_decompress_struct* when reading, and 
00134                       jpeg_compress_struct* when writing (libJPEG structures).
00135  
00136     Attributes:
00137       AutoYCbCr IM_INT (1) (controls YCbCr auto conversion) default 1
00138       JPEGQuality IM_INT (1) [0-100, default 75] (write only)
00139       ResolutionUnit (string) ["DPC", "DPI"]
00140       XResolution, YResolution IM_FLOAT (1)
00141       Interlaced (same as Progressive) IM_INT (1 | 0) default 0  
00142       Description (string)
00143       (lots of Exif tags)
00144  
00145     Changes to libJPEG:
00146       jdatadst.c - fflush and ferror replaced by macros JFFLUSH and JFERROR.
00147       jinclude.h - standard JFFLUSH and JFERROR definitions, and new macro HAVE_JFIO.
00148       jmorecfg.h - changed definition of INT32 to JINT32 for better compatibility.
00149       jdhuf.c - added support for OJPEG_SUPPORT in libTIFF.
00150       new file created: jconfig.h
00151  
00152     Changes to libEXIF:
00153       new file config.h
00154       changed "exif-tag.c" to add new function
00155       changed "exif-entry.c" to improve exif_entry_initialize
00156       fixed small bug in "mnote-pentax-tag.h".
00157 
00158     Comments:
00159       Other APPx markers are ignored.
00160       No thumbnail support.
00161       RGB images are automatically converted to YCbCr when saved. 
00162       Also YcbCr are converted to RGB when loaded. Use AutoYCbCr=0 to disable this behavior. 
00163 \endverbatim
00164  * \ingroup format */
00165 void imFormatRegisterJPEG(void);
00166 
00167 /** \defgroup png PNG - Portable Network Graphic Format
00168  * \section Description
00169  * 
00170  * \par
00171  * Access to the PNG file format uses libPNG version 1.2.8. \n
00172  * http://www.libpng.org                                    \n
00173  * Copyright (C) 1998-2004 Glenn Randers-Pehrson
00174  *
00175  * \section Features
00176  *
00177 \verbatim
00178     Data Types: Byte and UShort
00179     Color Spaces: Gray, RGB, MAP and Binary
00180     Compressions: 
00181       DEFLATE - LZ77 variation (ZIP) [default]
00182     Only one image.
00183     Can have an alpha channel.
00184     Internally the components are always packed.
00185     Internally the lines are arranged from top down to bottom.
00186     Handle(1) returns png_structp libPNG structure.
00187  
00188     Attributes:
00189       ZIPQuality IM_INT (1) [1-9, default 6] (write only)
00190       ResolutionUnit (string) ["DPC", "DPI"]
00191       XResolution, YResolution IM_FLOAT (1)
00192       Interlaced (same as Progressive) IM_INT (1 | 0) default 0 
00193       Gamma IM_FLOAT (1)
00194       WhitePoint IMFLOAT (2)
00195       PrimaryChromaticities  IMFLOAT (6)
00196       XPosition, YPosition IM_FLOAT (1)
00197       sRGBIntent IM_INT (1) [0: Perceptual, 1: Relative colorimetric, 2: Saturation, 3: Absolute colorimetric]
00198       TransparencyIndex IM_BYTE (1 or N)
00199       TransparentColor IM_BYTE (3)
00200       CalibrationName, CalibrationUnits (string)
00201       CalibrationLimits IM_INT (2) 
00202       CalibrationEquation IM_BYTE (1) [0-Linear,1-Exponential,2-Arbitrary,3-HyperbolicSine)]
00203       CalibrationParam (string) [params separated by '\\n']
00204       Title, Author, Description, Copyright, DateTime (string)
00205       Software, Disclaimer, Warning, Source, Comment, ...       (string)
00206       DateTimeModified (string) [when writing uses the current system time]
00207       ICCProfile IM_BYTE (N)
00208       ScaleUnit (string) ["meters", "radians"]
00209       XScale, YScale IM_FLOAT (1)
00210 
00211     Comments:
00212       Attributes after the image are ignored.
00213       Define PNG_NO_CONSOLE_IO to avoid printfs.
00214       We define PNG_TIME_RFC1123_SUPPORTED.
00215       Add the following files to the makefile to optimize the library:
00216       pngvcrd.c  - PNG_USE_PNGVCRD
00217                    For Intel x86 CPU and Microsoft Visual C++ compiler
00218       pnggccrd.c - PNG_USE_PNGGCCRD
00219                    For Intel x86 CPU (Pentium-MMX or later) and GNU C compiler.
00220       Changed pngconf.h to use int instead of long in png_uint_32 and png_int_32.
00221 \endverbatim
00222  * \ingroup format */
00223 void imFormatRegisterPNG(void);
00224 
00225 /** \defgroup gif GIF - Graphics Interchange Format
00226  * \section Description
00227  * 
00228  * \par
00229  * Copyright (c) 1987,1988,1989,1990 CompuServe Incorporated. \n
00230  * GIF is a Service Mark property of CompuServe Incorporated. \n
00231  * Graphics Interchange Format Programming Reference, 1990. \n
00232  * LZW Copyright Unisys.
00233  * \par
00234  * Patial Internal Implementation. \n
00235  * Decoding and encoding code were extracted from GIFLib 1.0. \n
00236  * Copyright (c) 1989 Gershon Elber.
00237  *
00238  * \section Features
00239  *
00240 \verbatim
00241     Data Types: Byte
00242     Color Spaces: MAP only, (Gray and Binary saved as MAP)
00243     Compressions: 
00244       LZW - Lempel-Ziv & Welch      [default]
00245     Can have more than one image.
00246     No alpha channel.
00247     Internally the lines are arranged from top down to bottom.
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  
00290     Attributes:
00291       ResolutionUnit (string) ["DPC", "DPI"]
00292       XResolution, YResolution IM_FLOAT (1)
00293 
00294     Comments:
00295       Reads OS2 1.x and Windows 3, but writes Windows 3 always.
00296       Version 4 and 5 BMPs are not supported.
00297 \endverbatim
00298  * \ingroup format */
00299 void imFormatRegisterBMP(void);
00300 
00301 /** \defgroup ras RAS - Sun Raster File
00302  * \section Description
00303  * 
00304  * \par
00305  * Copyright Sun Corporation.
00306  * \par
00307  * Internal Implementation.
00308  *
00309  * \section Features
00310  *
00311 \verbatim
00312     Data Types: Byte
00313     Color Spaces: Gray, RGB, MAP and Binary
00314     Compressions: 
00315       NONE - no compression   [default]
00316       RLE  - Run Lenght Encoding
00317     Only one image.
00318     Can have an alpha channel (only for IM_RGB)
00319     Internally the components are always packed.
00320     Internally the lines are arranged from top down to bottom.
00321  
00322     Attributes:
00323       none
00324 \endverbatim
00325  * \ingroup format */
00326 void imFormatRegisterRAS(void);
00327 
00328 /** \defgroup led LED - IUP image in LED
00329  * \section Description
00330  * 
00331  * \par
00332  * Copyright Tecgraf/PUC-Rio and PETROBRAS/CENPES.
00333  * \par
00334  * Internal Implementation.
00335  *
00336  * \section Features
00337  *
00338 \verbatim
00339     Data Types: Byte
00340     Color Spaces: MAP only (Gray and Binary saved as MAP)
00341     Compressions: 
00342       NONE - no compression  [default]
00343     Only one image. 
00344     No alpha channel.
00345     Internally the lines are arranged from top down to bottom.
00346  
00347     Attributes:
00348       none
00349 
00350     Comments:
00351       LED file must start with "LEDImage = IMAGE[".
00352 \endverbatim
00353  * \ingroup format */
00354 void imFormatRegisterLED(void);
00355 
00356 /** \defgroup sgi SGI - Silicon Graphics Image File Format
00357  * \section Description
00358  * 
00359  * \par
00360  * SGI is a trademark of Silicon Graphics, Inc.
00361  * \par
00362  * Internal Implementation.
00363  *
00364  * \section Features
00365  *
00366 \verbatim
00367     Data Types: Byte and UShort
00368     Color Spaces: Gray and RGB (Binary saved as Gray, MAP with fixed palette when reading only)
00369     Compressions: 
00370       NONE - no compression  [default]
00371       RLE  - Run Lenght Encoding
00372     Only one image.
00373     Can have an alpha channel (only for IM_RGB)
00374     Internally the components are always packed.
00375     Internally the lines are arranged from bottom up to top.
00376  
00377     Attributes:
00378       Description (string)
00379 \endverbatim
00380  * \ingroup format */
00381 void imFormatRegisterSGI(void);
00382 
00383 /** \defgroup pcx PCX - ZSoft Picture
00384  * \section Description
00385  * 
00386  * \par
00387  * Copyright ZSoft Corporation. \n
00388  * ZSoft (1988) PCX Technical Reference Manual.
00389  * \par
00390  * Internal Implementation.
00391  *
00392  * \section Features
00393  *
00394 \verbatim
00395     Data Types: Byte
00396     Color Spaces: RGB, MAP and Binary (Gray saved as MAP)
00397     Compressions: 
00398       NONE - no compression 
00399       RLE  - Run Lenght Encoding [default - since uncompressed PCX is not well supported]
00400     Only one image.
00401     No alpha channel.
00402     Internally the components are always packed.
00403     Internally the lines are arranged from top down to bottom.
00404  
00405     Attributes:
00406       ResolutionUnit (string) ["DPC", "DPI"]
00407       XResolution, YResolution IM_FLOAT (1)
00408       XScreen, YScreen IM_USHORT (1) screen position
00409 
00410     Comments:
00411       Reads Versions 0-5, but writes Version 5 always.
00412 \endverbatim
00413  * \ingroup format */
00414 void imFormatRegisterPCX(void);
00415 
00416 /** \defgroup tga TGA - Truevision Graphics Adapter File
00417  * \section Description
00418  * 
00419  * \par
00420  * Truevision TGA File Format Specification Version 2.0 \n
00421  * Technical Manual Version 2.2 January, 1991           \n
00422  * Copyright 1989, 1990, 1991 Truevision, Inc.
00423  * \par
00424  * Internal Implementation.
00425  *
00426  * \section Features
00427  *
00428 \verbatim
00429     Supports 8 bits per component only. Data type is always Byte.
00430     Color Spaces: Gray, RGB and MAP (Binary saved as Gray)
00431     Compressions: 
00432       NONE - no compression [default]
00433       RLE  - Run Lenght Encoding
00434     Only one image.
00435     No alpha channel.
00436     Internally the components are always packed.
00437     Internally the lines are arranged from bottom up to top or from top down to bottom.
00438  
00439     Attributes:
00440       XScreen, YScreen IM_USHORT (1) screen position
00441       Title, Author, Description, JobName, Software (string)
00442       SoftwareVersion (read only) (string)
00443       DateTimeModified (string) [when writing uses the current system time]
00444       Gamma IM_FLOAT (1)
00445 \endverbatim
00446  * \ingroup format */
00447 void imFormatRegisterTGA(void);
00448 
00449 /** \defgroup pnm PNM - Netpbm Portable Image Map
00450  * \section Description
00451  * 
00452  * \par
00453  * PNM formats Copyright Jef Poskanzer
00454  * \par
00455  * Internal Implementation.
00456  *
00457  * \section Features
00458  *
00459 \verbatim
00460     Data Types: Byte and UShort
00461     Color Spaces: Gray, RGB and Binary
00462     Compressions: 
00463       NONE - no compression [default]
00464       ASCII (textual data)
00465     Can have more than one image, but sequencial access only.
00466     No alpha channel.
00467     Internally the components are always packed.
00468     Internally the lines are arranged from top down to bottom.
00469  
00470     Attributes:
00471       Description (string)
00472 
00473     Comments:
00474       In fact ASCII is an expansion...
00475 \endverbatim
00476  * \ingroup format */
00477 void imFormatRegisterPNM(void);
00478 
00479 /** \defgroup ico ICO - Windows Icon
00480  * \section Description
00481  * 
00482  * \par
00483  * Windows Copyright Microsoft Corporation.
00484  * \par
00485  * Internal Implementation.
00486  *
00487  * \section Features
00488  *
00489 \verbatim
00490     Data Types: Byte
00491     Color Spaces: RGB, MAP and Binary (Gray saved as MAP)
00492     Compressions: 
00493       NONE - no compression [default]
00494     Can have more than one image. But writing is limited to 5 images,
00495       and all images must have different sizes and bpp.
00496     No alpha channel.
00497     Internally the components are always packed.
00498     Internally the lines are arranged from bottom up to top.
00499  
00500     Attributes:
00501       TransparencyIndex IM_BYTE (1 or N)
00502 
00503     Comments:
00504       If the user specifies an alpha channel, the AND mask is loaded as alpha,
00505         but the file color mode will not contain the IM_ALPHA flag.
00506       For IM_MAP imagens, if the user does not specifies an alpha channel 
00507         the TransparencyIndex is used to initialize the AND mask when writing,
00508         and the most repeated index with transparency will be the transparent index.
00509       Although any size and bpp can be used is recomended to use the typical configurations:
00510         16x16, 32x32, 48x48, 64x64 or 96x96
00511         2 colors, 16 colors or 256 colors
00512 \endverbatim
00513  * \ingroup format */
00514 void imFormatRegisterICO(void);
00515 
00516 /** \defgroup krn KRN - IM Kernel File Format
00517  * \section Description
00518  * 
00519  * \par
00520  * Textual format to provied a simple way to create kernel convolution images.
00521  * \par
00522  * Internal Implementation.
00523  *
00524  * \section Features
00525  *
00526 \verbatim
00527     Data Types: Byte, Int
00528     Color Spaces: Gray
00529     Compressions: 
00530       NONE - no compression [default]
00531     Only one image.
00532     No alpha channel.
00533     Internally the lines are arranged from top down to bottom.
00534  
00535     Attributes:
00536       Description (string)
00537 
00538     Comments:
00539       The format is very simple, inspired by PNM.
00540       It was developed because PNM does not have support for INT and FLOAT.
00541       Remeber that usually convolution operations use kernel size an odd number.
00542 
00543     Format Model:
00544       IMKERNEL
00545       Description up to 512 characters
00546       width height
00547       type (0 - IM_INT, 1 - IM_FLOAT)
00548       data...
00549 
00550     Example:
00551       IMKERNEL
00552       Gradian
00553       3 3
00554       0
00555       0 -1 0     
00556       0  1 0  
00557       0  0 0  
00558 \endverbatim
00559  * \ingroup format */
00560 void imFormatRegisterKRN(void);
00561 
00562 
00563 #if defined(__cplusplus)
00564 }
00565 #endif
00566 
00567 #endif