IM: im_format_all.h Source File
From 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.8 2005/12/07 20:28:27 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() 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 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() returns jpeg_decompress_struct* when reading, and 00134 jpeg_compress_struct* when writing. 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() returns png_structp 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 Handle() returns a imBinFile* pointer. 00249 00250 Attributes: 00251 ScreenHeight, ScreenWidth IM_USHORT (1) screen size [default to the first image size] 00252 Interlaced IM_INT (1 | 0) default 0 00253 Description (string) 00254 TransparencyIndex IM_BYTE (1) 00255 XScreen, YScreen IM_USHORT (1) screen position 00256 UserInput IM_BYTE (1) [1, 0] 00257 Disposal (string) [UNDEF, LEAVE, RBACK, RPREV] 00258 Delay IM_USHORT (1) 00259 Iterations IM_USHORT (1) (NETSCAPE2.0 Application Extension) 00260 00261 Comments: 00262 Attributes after the last image are ignored. 00263 Reads GIF87 and GIF89, but writes GIF89 always. 00264 Ignored attributes: Background Color Index, Pixel Aspect Ratio, 00265 Plain Text Extensions, Application Extensions... 00266 \endverbatim 00267 * \ingroup format */ 00268 void imFormatRegisterGIF(void); 00269 00270 /** \defgroup bmp BMP - Windows Device Independent Bitmap 00271 * \section Description 00272 * 00273 * \par 00274 * Windows Copyright Microsoft Corporation. 00275 * \par 00276 * Internal Implementation. 00277 * 00278 * \section Features 00279 * 00280 \verbatim 00281 Data Types: Byte 00282 Color Spaces: RGB, MAP and Binary (Gray saved as MAP) 00283 Compressions: 00284 NONE - no compression [default] 00285 RLE - Run Lenght Encoding (only for MAP and Gray) 00286 Only one image. 00287 Can have an alpha channel (only for RGB) 00288 Internally the components are always packed. 00289 Lines arranged from top down to bottom or bottom up to top. But are saved always as bottom up. 00290 Handle() returns imBinFile* pointer. 00291 00292 Attributes: 00293 ResolutionUnit (string) ["DPC", "DPI"] 00294 XResolution, YResolution IM_FLOAT (1) 00295 00296 Comments: 00297 Reads OS2 1.x and Windows 3, but writes Windows 3 always. 00298 Version 4 and 5 BMPs are not supported. 00299 \endverbatim 00300 * \ingroup format */ 00301 void imFormatRegisterBMP(void); 00302 00303 /** \defgroup ras RAS - Sun Raster File 00304 * \section Description 00305 * 00306 * \par 00307 * Copyright Sun Corporation. 00308 * \par 00309 * Internal Implementation. 00310 * 00311 * \section Features 00312 * 00313 \verbatim 00314 Data Types: Byte 00315 Color Spaces: Gray, RGB, MAP and Binary 00316 Compressions: 00317 NONE - no compression [default] 00318 RLE - Run Lenght Encoding 00319 Only one image. 00320 Can have an alpha channel (only for IM_RGB) 00321 Internally the components are always packed. 00322 Internally the lines are arranged from top down to bottom. 00323 Handle() returns imBinFile* pointer. 00324 00325 Attributes: 00326 none 00327 \endverbatim 00328 * \ingroup format */ 00329 void imFormatRegisterRAS(void); 00330 00331 /** \defgroup led LED - IUP image in LED 00332 * \section Description 00333 * 00334 * \par 00335 * Copyright Tecgraf/PUC-Rio and PETROBRAS/CENPES. 00336 * \par 00337 * Internal Implementation. 00338 * 00339 * \section Features 00340 * 00341 \verbatim 00342 Data Types: Byte 00343 Color Spaces: MAP only (Gray and Binary saved as MAP) 00344 Compressions: 00345 NONE - no compression [default] 00346 Only one image. 00347 No alpha channel. 00348 Internally the lines are arranged from top down to bottom. 00349 Handle() returns imBinFile* pointer. 00350 00351 Attributes: 00352 none 00353 00354 Comments: 00355 LED file must start with "LEDImage = IMAGE[". 00356 \endverbatim 00357 * \ingroup format */ 00358 void imFormatRegisterLED(void); 00359 00360 /** \defgroup sgi SGI - Silicon Graphics Image File Format 00361 * \section Description 00362 * 00363 * \par 00364 * SGI is a trademark of Silicon Graphics, Inc. 00365 * \par 00366 * Internal Implementation. 00367 * 00368 * \section Features 00369 * 00370 \verbatim 00371 Data Types: Byte and UShort 00372 Color Spaces: Gray and RGB (Binary saved as Gray, MAP with fixed palette when reading only) 00373 Compressions: 00374 NONE - no compression [default] 00375 RLE - Run Lenght Encoding 00376 Only one image. 00377 Can have an alpha channel (only for IM_RGB) 00378 Internally the components are always packed. 00379 Internally the lines are arranged from bottom up to top. 00380 Handle() returns imBinFile* pointer. 00381 00382 Attributes: 00383 Description (string) 00384 \endverbatim 00385 * \ingroup format */ 00386 void imFormatRegisterSGI(void); 00387 00388 /** \defgroup pcx PCX - ZSoft Picture 00389 * \section Description 00390 * 00391 * \par 00392 * Copyright ZSoft Corporation. \n 00393 * ZSoft (1988) PCX Technical Reference Manual. 00394 * \par 00395 * Internal Implementation. 00396 * 00397 * \section Features 00398 * 00399 \verbatim 00400 Data Types: Byte 00401 Color Spaces: RGB, MAP and Binary (Gray saved as MAP) 00402 Compressions: 00403 NONE - no compression 00404 RLE - Run Lenght Encoding [default - since uncompressed PCX is not well supported] 00405 Only one image. 00406 No alpha channel. 00407 Internally the components are always packed. 00408 Internally the lines are arranged from top down to bottom. 00409 Handle() returns imBinFile* pointer. 00410 00411 Attributes: 00412 ResolutionUnit (string) ["DPC", "DPI"] 00413 XResolution, YResolution IM_FLOAT (1) 00414 XScreen, YScreen IM_USHORT (1) screen position 00415 00416 Comments: 00417 Reads Versions 0-5, but writes Version 5 always. 00418 \endverbatim 00419 * \ingroup format */ 00420 void imFormatRegisterPCX(void); 00421 00422 /** \defgroup tga TGA - Truevision Graphics Adapter File 00423 * \section Description 00424 * 00425 * \par 00426 * Truevision TGA File Format Specification Version 2.0 \n 00427 * Technical Manual Version 2.2 January, 1991 \n 00428 * Copyright 1989, 1990, 1991 Truevision, Inc. 00429 * \par 00430 * Internal Implementation. 00431 * 00432 * \section Features 00433 * 00434 \verbatim 00435 Supports 8 bits per component only. Data type is always Byte. 00436 Color Spaces: Gray, RGB and MAP (Binary saved as Gray) 00437 Compressions: 00438 NONE - no compression [default] 00439 RLE - Run Lenght Encoding 00440 Only one image. 00441 No alpha channel. 00442 Internally the components are always packed. 00443 Internally the lines are arranged from bottom up to top or from top down to bottom. 00444 Handle() returns imBinFile* pointer. 00445 00446 Attributes: 00447 XScreen, YScreen IM_USHORT (1) screen position 00448 Title, Author, Description, JobName, Software (string) 00449 SoftwareVersion (read only) (string) 00450 DateTimeModified (string) [when writing uses the current system time] 00451 Gamma IM_FLOAT (1) 00452 \endverbatim 00453 * \ingroup format */ 00454 void imFormatRegisterTGA(void); 00455 00456 /** \defgroup pnm PNM - Netpbm Portable Image Map 00457 * \section Description 00458 * 00459 * \par 00460 * PNM formats Copyright Jef Poskanzer 00461 * \par 00462 * Internal Implementation. 00463 * 00464 * \section Features 00465 * 00466 \verbatim 00467 Data Types: Byte and UShort 00468 Color Spaces: Gray, RGB and Binary 00469 Compressions: 00470 NONE - no compression [default] 00471 ASCII (textual data) 00472 Can have more than one image, but sequencial access only. 00473 No alpha channel. 00474 Internally the components are always packed. 00475 Internally the lines are arranged from top down to bottom. 00476 Handle() returns imBinFile* pointer. 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 No alpha channel. 00505 Internally the components are always packed. 00506 Internally the lines are arranged from bottom up to top. 00507 Handle() returns imBinFile* pointer. 00508 00509 Attributes: 00510 TransparencyIndex IM_BYTE (1 or N) 00511 00512 Comments: 00513 If the user specifies an alpha channel, the AND mask is loaded as alpha, 00514 but the file color mode will not contain the IM_ALPHA flag. 00515 For IM_MAP imagens, if the user does not specifies an alpha channel 00516 the TransparencyIndex is used to initialize the AND mask when writing, 00517 and the most repeated index with transparency will be the transparent index. 00518 Although any size and bpp can be used is recomended to use the typical configurations: 00519 16x16, 32x32, 48x48, 64x64 or 96x96 00520 2 colors, 16 colors or 256 colors 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 Handle() returns imBinFile* pointer. 00544 00545 Attributes: 00546 Description (string) 00547 00548 Comments: 00549 The format is very simple, inspired by PNM. 00550 It was developed because PNM does not have support for INT and FLOAT. 00551 Remeber that usually convolution operations use kernel size an odd number. 00552 00553 Format Model: 00554 IMKERNEL 00555 Description up to 512 characters 00556 width height 00557 type (0 - IM_INT, 1 - IM_FLOAT) 00558 data... 00559 00560 Example: 00561 IMKERNEL 00562 Gradian 00563 3 3 00564 0 00565 0 -1 0 00566 0 1 0 00567 0 0 0 00568 \endverbatim 00569 * \ingroup format */ 00570 void imFormatRegisterKRN(void); 00571 00572 00573 #if defined(__cplusplus) 00574 } 00575 #endif 00576 00577 #endif