$Header: /usr/people/sam/tiff/RCS/CHANGES-v3.0,v 1.5 1992/03/31 11:31:03 sam Exp $ TIFF Software "Release" 3.00 (changes since 2.4.2 release) ---------------------------------------------------------- Changes in libtiff: o the mkg3states program has been made more portable o global library data structures can now be compiled as const (this is important for building shared libraries) o the file machdep.h is no longer needed and has been purged o the format of the include file generated by mkg3states has been altered so that applications can access the Group 3 and Group 4 compression machinery more easily (see tools/fax2tiff and contrib/fax2ps for examples) o a new -c option has been added to mkg3states to generate const data structures o the function prototyping macros now fail at compile time if the library is configured to not use prototypes and not use varargs o two new functions, TIFFGetFieldDefaulted and TIFFVGetFieldDefaulted, for getting either a tag's value or a default value (if one exists) have been added o a new function TIFFReadRGBAImage has been added to read an entire image into memory and return it in a common format (packed into 32-bit pixels) o function prototype inconsistencies for TIFFMapFileContents and TIFFUnmapFileContents have been fixed o the directory handling code has been broken up into 4 separate files: tif_dir.c routines for getting & setting tag values tif_dirinfo.c information about known tags tif_dirread.c directory reading support tif_dirwrite.c directory writing support o the directory handling code has been substantially reworked to eliminate many special cases and add more general reading and writing support routines; this is mainly for supporting the 6.0 tags o the code that deduces a value for StripByteCounts when the tag is not present has been improved slightly o the directory reading code is now more careful about checking count fields and tag definitions (when known) o support has been added for the color information tags that are to appear in TIFF 6.0: WhitePoint, PrimaryChromaticities, ReferenceBlackWhite, and TransferFunction o support has been added for the JPEG tags that are to appear in TIFF 6.0 (but still no compression/decompression code yet): JPEGProc, JPEGRestartInterval, JPEGQTables, JPEGACTables, JPEGDCTables o support has been added for the CMYK tags that are to appear in TIFF 6.0: InkSet, InkNames, DotRange, TargetPrinter o support has been added for the YCbCr tags that are to appear in TIFF 6.0: YCbCrCoefficients, YCbCrSubsampling, YCbCrPositioning o support has been added for some 6.0 tags that replace SGI-private tags previously supported by the library: ExtraSamples, SampleFormat o the reading and writing of packed sampled YCbCr data by strip or tile works correctly (i.e. buffer sizes are calculated according to the sampling factors and the Y...YCbCr packing) o it is no longer necessary to call TIFFFlushData before a call to TIFFWriteDirectory; this is now handled automatically; old code that did this will still work as the library is now more intelligent about doing end-of-strip work only once per strip o the values for certain tags are now checked when the tag's value is set; e.g. FillOrder may only be FILLORDER_LSB2MSB or FILLORDER_MSB2LSB o old tags obsoleted by changes in TIFF 6.0 have been removed: ColorResponseUnit, ColorResponseCurves, GrayResponseUnit, GrayResponseCurve o a bug whereby the library could leak memory if directories were read in a non-sequential order has been fixed o a bug in the Group 3 2D/Group 4 decoding+encoding routines whereby the reference scanline was not reset to white at the start of each strip after the first has been fixed o bugs in the Group 3 2D/Group 4 decoding routine logic for several (slightly obscure) cases were fixed o a bug in the LZW encoding routine that could result in invalid codes being generated was fixed (this only happened in a low probability situation where the encoding process was considered "poor" and the library attempted to reset its encoding state to improve the compression performance) o a new routine, TIFFCurrentDirectory has been added; it returns the index of the current directory -- suitable for passing to TIFFSetDirectory o TIFFPrintDirectory has been updated to reflect the changes in the tags supported by the library o an obscure case in TIFFReadEncodedStrip where an error could occur without a diagnostic has been corrected o the private Picio and SGI RLE compression codes have been deleted (along with the associated code) o the JPEG compression code has been renumbered to reflect the value that it will have in TIFF 6.0 o support has been added for the the HalftoneHints tag that is to appear in TIFF 6.0 o support has been added for using the library under VMS o the bit reversal routine TIFFReverseBits has been made faster o a bug in the TIFFWriteTile routine where the tile size might be used before it's calculated has been fixed o some portability problems with 16-bit machines such as the Macintosh have been fixed o the library now treats RATIONAL values as the ratio of two unsigned 32-bit quantities; it used to treat them as the ratio of two *signed* values o the library now supports all the new 6.0 tag data types except DOUBLE o the SUBFILE_COMPAT configuration define has been removed (compatibility for SHORT SubfileType tags is always included). o a new global variable, TIFFVersion, has been added -- it is a string giving the version and copyright information for the library (Note, since the 2.5 BETA version the following user-visible modifications have been made: o the ReferenceBlackWhite tag changed from LONG to RATIONAL with a corresponding change in the parameters to TIFFGetField and TIFFSetField; LONG values may still be read, but only RATIONAL values are now written o the SGI-specific Matteing and DataType tags have been replaced by the new ExtraSamples and SampleFormat tags; the library will accept the old tags, but only generate the new tags o several bugs in the handling of the JPEG tags have been fixed o a bug in the Group 3 2D and Group 4 decoding routines was fixed o Group 3 2d tag bits are no longer included in the EOL byte-aligning logic: that is, EOL codes are consistently aligned to byte boundaries and any 2d tag bits are placed in the byte that follows o the writing of the TileByteCounts and TileOffsets tags has been corrected o the library now treats RATIONAL values as the ratio of two unsigned 32-bit quantities; it used to treat them as the ratio of two *signed* values ) (Note, since the 3.0 BETA version the following user-visible modifications have been made: o a bug that caused RTC to be written at the end of each Group 4-encoded strip has been fixed o support for the DotRange tag was fixed o the PhotometricInterpretation, Orientation, and ResolutionUnit tags no longer may be modified once data is written (for the Group 3 compression algorithm) o portability problems with the IEEE floating point conversion code have been fixed o the PackBits encoding algorithm now breaks strips and tiles up into row-sized units to avoid problems caused by encoding by strip/tile and then decoding by scanline ) Changes in the tools: o a new tool for converting PBM+ files, ppm2tiff, has been added o a new tool for converting an RGB, grayscale, or bilevel image to a sampled YCbCr image, rgb2ycbcr, has been added o a new tool for splitting multi-image files into multiple single-image files, tiffsplit, has been added o the fax2tiff utility has been rewritten to use the library decoding routines; because of this, it can now decode Group 4 data as well as Group 3 data o all references to obsolete tags such as ColorResponseCurves were deleted o the picio2tiff utility was purged for lack of use o the pixargt utility was purged for lack of use o a bug in ras2tiff that caused the default value of RowsPerStrip to be large was fixed o tiffgt (SGI version) now continues in the face of decoding errors unless a -s flag is specified; support for displaying YCbCr data has been added; also, the -v (verbose) flag has been changed to alter the window title strip rather than print to the terminal; finally, a bug that caused certain kinds of images larger than the screen to not be displayed properly was fixed o the PostScript generated by tiff2ps has been changed slightly to conform to the latest Adobe document conventions; also, several bugs were fixed and support was added for converting CMYK images o a bug in tiffcmp that caused it to dump core was fixed o tiffcp has been enhanced so that it can be used to generate a multipage file from multiple source files; it now checks the colormap to see if it is an 8-bit colormap and, if so, coerces it to be 16-bit in the resultant file; it copies more tags; and it copies the most common data organization more efficiently o tiffdump has been updated to reflect the new tags added to the library for TIFF 6.0 o tiffdump is now more resilient in the face of bad tag types and read errors; also, a longstanding bug whereby 2 SHORT values packed into an offset field were printed out of order has been fixed o tiffinfo has new -l and -m options to specify the FillOrder of the input file as LSB-to-MSB and MSB-to-LSB, respectively o tiffinfo now reads data by strip and tile (e.g. for the -D option) o tiffcmp can now compare 1, 2, and 4 bit data o a public domain version of getopt is now included with the tools o the tools have been ported to VMS Changes in the documentation: o the section 3 manual pages have been renamed to reflect full function names and a Makefile now exists for creating links when multiple functions are described in a single manual page (NOTE that this means that many file names are now much longer than 14 characters.) o a draft copy of the TIFF 6.0 spec is in PostScript form o the obsolete 5.0spec has been removed Changes in the contrib software: o a new program, fax2ps, was contributed by Sam Leffler; it converts bilevel TIFF images to a compressed PostScript that is typically much faster to print than the PostScript generated by tiff2ps o a vms area contains scripts and data files for building the library and tools under the VMS operating system o an xv area contains patches to add TIFF support to version 2.00 of the XV program (xv versions >=2.10 include this support)