windows-nt/Source/XPSP1/NT/shell/ext/docpropv3/tiff.h

412 lines
20 KiB
C
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
tiff.h
Abstract:
This file the data structures and constant
definitions for the TIFF file format.
See the TIFF specification Revision 6.0,
dated 6-3-92, from Adobe for specific details.
Environment:
WIN32 User Mode
Author:
Wesley Witt (wesw) 17-Feb-1996
--*/
#ifndef _TIFF_
#define _TIFF_
#define TIFF_VERSION 42
#define TIFF_BIGENDIAN 0x4d4d
#define TIFF_LITTLEENDIAN 0x4949
#pragma pack(1)
typedef struct _TIFF_HEADER {
WORD Identifier;
WORD Version;
DWORD IFDOffset;
} TIFF_HEADER, *PTIFF_HEADER;
//
// TIFF Image File Directories are comprised of
// a table of field descriptors of the form shown
// below. The table is sorted in ascending order
// by tag. The values associated with each entry
// are disjoint and may appear anywhere in the file
// (so long as they are placed on a word boundary).
//
// If the value is 4 bytes or less, then it is placed
// in the offset field to save space. If the value
// is less than 4 bytes, it is left-justified in the
// offset field.
//
typedef struct _TIFF_TAG {
WORD TagId;
WORD DataType;
DWORD DataCount;
DWORD DataOffset;
} TIFF_TAG;
typedef TIFF_TAG UNALIGNED *PTIFF_TAG;
typedef struct TIFF_IFD {
WORD wEntries;
TIFF_TAG ifdEntries[1];
} TIFF_IFD;
typedef TIFF_IFD UNALIGNED *PTIFF_IFD;
#pragma pack()
//
// NB: In the comments below,
// - items marked with a + are obsoleted by revision 5.0,
// - items marked with a ! are introduced in revision 6.0.
// - items marked with a % are introduced post revision 6.0.
// - items marked with a $ are obsoleted by revision 6.0.
//
//
// Tag data type information.
//
#define TIFF_NOTYPE 0 // placeholder
#define TIFF_BYTE 1 // 8-bit unsigned integer
#define TIFF_ASCII 2 // 8-bit bytes w/ last byte null
#define TIFF_SHORT 3 // 16-bit unsigned integer
#define TIFF_LONG 4 // 32-bit unsigned integer
#define TIFF_RATIONAL 5 // 64-bit unsigned fraction
#define TIFF_SBYTE 6 // !8-bit signed integer
#define TIFF_UNDEFINED 7 // !8-bit untyped data
#define TIFF_SSHORT 8 // !16-bit signed integer
#define TIFF_SLONG 9 // !32-bit signed integer
#define TIFF_SRATIONAL 10 // !64-bit signed fraction
#define TIFF_FLOAT 11 // !32-bit IEEE floating point
#define TIFF_DOUBLE 12 // !64-bit IEEE floating point
//
// TIFF Tag Definitions.
//
#define TIFFTAG_SUBFILETYPE 254 // subfile data descriptor
#define FILETYPE_REDUCEDIMAGE 0x1 // reduced resolution version
#define FILETYPE_PAGE 0x2 // one page of many
#define FILETYPE_MASK 0x4 // transparency mask
#define TIFFTAG_OSUBFILETYPE 255 // +kind of data in subfile
#define OFILETYPE_IMAGE 1 // full resolution image data
#define OFILETYPE_REDUCEDIMAGE 2 // reduced size image data
#define OFILETYPE_PAGE 3 // one page of many
#define TIFFTAG_IMAGEWIDTH 256 // image width in pixels
#define TIFFTAG_IMAGELENGTH 257 // image height in pixels
#define TIFFTAG_BITSPERSAMPLE 258 // bits per channel (sample)
#define TIFFTAG_COMPRESSION 259 // data compression technique
#define COMPRESSION_NONE 1 // dump mode
#define COMPRESSION_CCITTRLE 2 // CCITT modified Huffman RLE
#define COMPRESSION_CCITTFAX3 3 // CCITT Group 3 fax encoding
#define COMPRESSION_CCITTFAX4 4 // CCITT Group 4 fax encoding
#define COMPRESSION_LZW 5 // Lempel-Ziv & Welch
#define COMPRESSION_OJPEG 6 // !6.0 JPEG
#define COMPRESSION_JPEG 7 // %JPEG DCT compression
#define COMPRESSION_NEXT 32766 // NeXT 2-bit RLE
#define COMPRESSION_CCITTRLEW 32771 // #1 w/ word alignment
#define COMPRESSION_PACKBITS 32773 // Macintosh RLE
#define COMPRESSION_THUNDERSCAN 32809 // ThunderScan RLE
//
// compression codes 32908-32911 are reserved for Pixar
//
#define COMPRESSION_PIXARFILM 32908 // Pixar companded 10bit LZW
#define COMPRESSION_DEFLATE 32946 // Deflate compression
#define COMPRESSION_JBIG 34661 // ISO JBIG
#define TIFFTAG_PHOTOMETRIC 262 // photometric interpretation
#define PHOTOMETRIC_MINISWHITE 0 // min value is white
#define PHOTOMETRIC_MINISBLACK 1 // min value is black
#define PHOTOMETRIC_RGB 2 // RGB color model
#define PHOTOMETRIC_PALETTE 3 // color map indexed
#define PHOTOMETRIC_MASK 4 // $holdout mask
#define PHOTOMETRIC_SEPARATED 5 // !color separations
#define PHOTOMETRIC_YCBCR 6 // !CCIR 601
#define PHOTOMETRIC_CIELAB 8 // !1976 CIE L*a*b*
#define TIFFTAG_THRESHHOLDING 263 // +thresholding used on data
#define THRESHHOLD_BILEVEL 1 // b&w art scan
#define THRESHHOLD_HALFTONE 2 // or dithered scan
#define THRESHHOLD_ERRORDIFFUSE 3 // usually floyd-steinberg
#define TIFFTAG_CELLWIDTH 264 // +dithering matrix width
#define TIFFTAG_CELLLENGTH 265 // +dithering matrix height
#define TIFFTAG_FILLORDER 266 // data order within a byte
#define FILLORDER_MSB2LSB 1 // most significant -> least
#define FILLORDER_LSB2MSB 2 // least significant -> most
#define TIFFTAG_DOCUMENTNAME 269 // name of doc. image is from
#define TIFFTAG_IMAGEDESCRIPTION 270 // info about image
#define TIFFTAG_MAKE 271 // scanner manufacturer name
#define TIFFTAG_MODEL 272 // scanner model name/number
#define TIFFTAG_STRIPOFFSETS 273 // offsets to data strips
#define TIFFTAG_ORIENTATION 274 // +image orientation
#define ORIENTATION_TOPLEFT 1 // row 0 top, col 0 lhs
#define ORIENTATION_TOPRIGHT 2 // row 0 top, col 0 rhs
#define ORIENTATION_BOTRIGHT 3 // row 0 bottom, col 0 rhs
#define ORIENTATION_BOTLEFT 4 // row 0 bottom, col 0 lhs
#define ORIENTATION_LEFTTOP 5 // row 0 lhs, col 0 top
#define ORIENTATION_RIGHTTOP 6 // row 0 rhs, col 0 top
#define ORIENTATION_RIGHTBOT 7 // row 0 rhs, col 0 bottom
#define ORIENTATION_LEFTBOT 8 // row 0 lhs, col 0 bottom
#define TIFFTAG_SAMPLESPERPIXEL 277 // samples per pixel
#define TIFFTAG_ROWSPERSTRIP 278 // rows per strip of data
#define TIFFTAG_STRIPBYTECOUNTS 279 // bytes counts for strips
#define TIFFTAG_MINSAMPLEVALUE 280 // +minimum sample value
#define TIFFTAG_MAXSAMPLEVALUE 281 // +maximum sample value
#define TIFFTAG_XRESOLUTION 282 // pixels/resolution in x
#define TIFFTAG_YRESOLUTION 283 // pixels/resolution in y
#define TIFFTAG_PLANARCONFIG 284 // storage organization
#define PLANARCONFIG_CONTIG 1 // single image plane
#define PLANARCONFIG_SEPARATE 2 // separate planes of data
#define TIFFTAG_PAGENAME 285 // page name image is from
#define TIFFTAG_XPOSITION 286 // x page offset of image lhs
#define TIFFTAG_YPOSITION 287 // y page offset of image lhs
#define TIFFTAG_FREEOFFSETS 288 // +byte offset to free block
#define TIFFTAG_FREEBYTECOUNTS 289 // +sizes of free blocks
#define TIFFTAG_GRAYRESPONSEUNIT 290 // $gray scale curve accuracy
#define GRAYRESPONSEUNIT_10S 1 // tenths of a unit
#define GRAYRESPONSEUNIT_100S 2 // hundredths of a unit
#define GRAYRESPONSEUNIT_1000S 3 // thousandths of a unit
#define GRAYRESPONSEUNIT_10000S 4 // ten-thousandths of a unit
#define GRAYRESPONSEUNIT_100000S 5 // hundred-thousandths
#define TIFFTAG_GRAYRESPONSECURVE 291 // $gray scale response curve
#define TIFFTAG_GROUP3OPTIONS 292 // 32 flag bits
#define GROUP3OPT_2DENCODING 0x1 // 2-dimensional coding
#define GROUP3OPT_UNCOMPRESSED 0x2 // data not compressed
#define GROUP3OPT_FILLBITS 0x4 // fill to byte boundary
#define TIFFTAG_GROUP4OPTIONS 293 // 32 flag bits
#define GROUP4OPT_UNCOMPRESSED 0x2 // data not compressed
#define TIFFTAG_RESOLUTIONUNIT 296 // units of resolutions
#define RESUNIT_NONE 1 // no meaningful units
#define RESUNIT_INCH 2 // english
#define RESUNIT_CENTIMETER 3 // metric
#define TIFFTAG_PAGENUMBER 297 // page numbers of multi-page
#define TIFFTAG_COLORRESPONSEUNIT 300 // $color curve accuracy
#define COLORRESPONSEUNIT_10S 1 // tenths of a unit
#define COLORRESPONSEUNIT_100S 2 // hundredths of a unit
#define COLORRESPONSEUNIT_1000S 3 // thousandths of a unit
#define COLORRESPONSEUNIT_10000S 4 // ten-thousandths of a unit
#define COLORRESPONSEUNIT_100000S 5 // hundred-thousandths
#define TIFFTAG_TRANSFERFUNCTION 301 // !colorimetry info
#define TIFFTAG_SOFTWARE 305 // name & release
#define TIFFTAG_DATETIME 306 // creation date and time
#define TIFFTAG_ARTIST 315 // creator of image
#define TIFFTAG_HOSTCOMPUTER 316 // machine where created
#define TIFFTAG_PREDICTOR 317 // prediction scheme w/ LZW
#define TIFFTAG_WHITEPOINT 318 // image white point
#define TIFFTAG_PRIMARYCHROMATICITIES 319 // !primary chromaticities
#define TIFFTAG_COLORMAP 320 // RGB map for pallette image
#define TIFFTAG_HALFTONEHINTS 321 // !highlight+shadow info
#define TIFFTAG_TILEWIDTH 322 // !rows/data tile
#define TIFFTAG_TILELENGTH 323 // !cols/data tile
#define TIFFTAG_TILEOFFSETS 324 // !offsets to data tiles
#define TIFFTAG_TILEBYTECOUNTS 325 // !byte counts for tiles
#define TIFFTAG_BADFAXLINES 326 // lines w/ wrong pixel count
#define TIFFTAG_CLEANFAXDATA 327 // regenerated line info
#define CLEANFAXDATA_CLEAN 0 // no errors detected
#define CLEANFAXDATA_REGENERATED 1 // receiver regenerated lines
#define CLEANFAXDATA_UNCLEAN 2 // uncorrected errors exist
#define TIFFTAG_CONSECUTIVEBADFAXLINES 328 // max consecutive bad lines
#define TIFFTAG_SUBIFD 330 // subimage descriptors
#define TIFFTAG_INKSET 332 // !inks in separated image
#define INKSET_CMYK 1 // !cyan-magenta-yellow-black
#define TIFFTAG_INKNAMES 333 // !ascii names of inks
#define TIFFTAG_DOTRANGE 336 // !0% and 100% dot codes
#define TIFFTAG_TARGETPRINTER 337 // !separation target
#define TIFFTAG_EXTRASAMPLES 338 // !info about extra samples
#define EXTRASAMPLE_UNSPECIFIED 0 // !unspecified data
#define EXTRASAMPLE_ASSOCALPHA 1 // !associated alpha data
#define EXTRASAMPLE_UNASSALPHA 2 // !unassociated alpha data
#define TIFFTAG_SAMPLEFORMAT 339 // !data sample format
#define SAMPLEFORMAT_UINT 1 // !unsigned integer data
#define SAMPLEFORMAT_INT 2 // !signed integer data
#define SAMPLEFORMAT_IEEEFP 3 // !IEEE floating point data
#define SAMPLEFORMAT_VOID 4 // !untyped data
#define TIFFTAG_SMINSAMPLEVALUE 340 // !variable MinSampleValue
#define TIFFTAG_SMAXSAMPLEVALUE 341 // !variable MaxSampleValue
#define TIFFTAG_JPEGTABLES 347 // %JPEG table stream
//
// Tags 512-521 are obsoleted by Technical Note #2
// which specifies a revised JPEG-in-TIFF scheme.
//
#define TIFFTAG_JPEGPROC 512 // !JPEG processing algorithm
#define JPEGPROC_BASELINE 1 // !baseline sequential
#define JPEGPROC_LOSSLESS 14 // !Huffman coded lossless
#define TIFFTAG_JPEGIFOFFSET 513 // !pointer to SOI marker
#define TIFFTAG_JPEGIFBYTECOUNT 514 // !JFIF stream length
#define TIFFTAG_JPEGRESTARTINTERVAL 515 // !restart interval length
#define TIFFTAG_JPEGLOSSLESSPREDICTORS 517 // !lossless proc predictor
#define TIFFTAG_JPEGPOINTTRANSFORM 518 // !lossless point transform
#define TIFFTAG_JPEGQTABLES 519 // !Q matrice offsets
#define TIFFTAG_JPEGDCTABLES 520 // !DCT table offsets
#define TIFFTAG_JPEGACTABLES 521 // !AC coefficient offsets
#define TIFFTAG_YCBCRCOEFFICIENTS 529 // !RGB -> YCbCr transform
#define TIFFTAG_YCBCRSUBSAMPLING 530 // !YCbCr subsampling factors
#define TIFFTAG_YCBCRPOSITIONING 531 // !subsample positioning
#define YCBCRPOSITION_CENTERED 1 // !as in PostScript Level 2
#define YCBCRPOSITION_COSITED 2 // !as in CCIR 601-1
#define TIFFTAG_REFERENCEBLACKWHITE 532 // !colorimetry info
//
// tags 32952-32956 are private tags registered to Island Graphics
//
#define TIFFTAG_REFPTS 32953 // image reference points
#define TIFFTAG_REGIONTACKPOINT 32954 // region-xform tack point
#define TIFFTAG_REGIONWARPCORNERS 32955 // warp quadrilateral
#define TIFFTAG_REGIONAFFINE 32956 // affine transformation mat
//
// tags 32995-32999 are private tags registered to SGI
//
#define TIFFTAG_MATTEING 32995 // $use ExtraSamples
#define TIFFTAG_DATATYPE 32996 // $use SampleFormat
#define TIFFTAG_IMAGEDEPTH 32997 // z depth of image
#define TIFFTAG_TILEDEPTH 32998 // z depth/data tile
//
// tags 33300-33309 are private tags registered to Pixar
//
// TIFFTAG_PIXAR_IMAGEFULLWIDTH and TIFFTAG_PIXAR_IMAGEFULLLENGTH
// are set when an image has been cropped out of a larger image.
// They reflect the size of the original uncropped image.
// The TIFFTAG_XPOSITION and TIFFTAG_YPOSITION can be used
// to determine the position of the smaller image in the larger one.
//
#define TIFFTAG_PIXAR_IMAGEFULLWIDTH 33300 // full image size in x
#define TIFFTAG_PIXAR_IMAGEFULLLENGTH 33301 // full image size in y
//
// tag 33432 is listed in the 6.0 spec w/ unknown ownership
//
#define TIFFTAG_COPYRIGHT 33432 // copyright string
//
// tags 34232-34236 are private tags registered to Texas Instruments
//
#define TIFFTAG_FRAMECOUNT 34232 // Sequence Frame Count
//
// tag 34750 is a private tag registered to Pixel Magic
//
#define TIFFTAG_JBIGOPTIONS 34750 // JBIG options
//
// tags 34908-34914 are private tags registered to SGI
//
#define TIFFTAG_FAXRECVPARAMS 34908 // encoded Class 2 ses. parms
#define TIFFTAG_FAXSUBADDRESS 34909 // received SubAddr string
#define TIFFTAG_FAXRECVTIME 34910 // receive time (secs)
//
// tags 40001-40100 are private tags registered to ms
//
#define MS_TIFFTAG_START 40001
#define TIFFTAG_CSID 40001
#define TIFFTAG_TSID 40002
#define TIFFTAG_PORT 40003
#define TIFFTAG_ROUTING 40004
#define TIFFTAG_CALLERID 40005
#define TIFFTAG_RECIP_NAME 40006
#define TIFFTAG_RECIP_NUMBER 40007
#define TIFFTAG_RECIP_COMPANY 40008
#define TIFFTAG_RECIP_STREET 40009
#define TIFFTAG_RECIP_CITY 40010
#define TIFFTAG_RECIP_STATE 40011
#define TIFFTAG_RECIP_ZIP 40012
#define TIFFTAG_RECIP_COUNTRY 40013
#define TIFFTAG_RECIP_TITLE 40014
#define TIFFTAG_RECIP_DEPARTMENT 40015
#define TIFFTAG_RECIP_OFFICE_LOCATION 40016
#define TIFFTAG_RECIP_HOME_PHONE 40017
#define TIFFTAG_RECIP_OFFICE_PHONE 40018
#define TIFFTAG_RECIP_EMAIL 40020
#define TIFFTAG_SENDER_NAME 40021
#define TIFFTAG_SENDER_NUMBER 40022
#define TIFFTAG_SENDER_COMPANY 40023
#define TIFFTAG_SENDER_STREET 40024
#define TIFFTAG_SENDER_CITY 40025
#define TIFFTAG_SENDER_STATE 40026
#define TIFFTAG_SENDER_ZIP 40027
#define TIFFTAG_SENDER_COUNTRY 40028
#define TIFFTAG_SENDER_TITLE 40029
#define TIFFTAG_SENDER_DEPARTMENT 40030
#define TIFFTAG_SENDER_OFFICE_LOCATION 40031
#define TIFFTAG_SENDER_HOME_PHONE 40032
#define TIFFTAG_SENDER_OFFICE_PHONE 40033
#define TIFFTAG_SENDER_EMAIL 40035
#define TIFFTAG_SENDER_BILLING 40036
#define TIFFTAG_SENDER_USER_NAME 40037
#define TIFFTAG_SENDER_TSID 40038
#define TIFFTAG_DOCUMENT 40039
#define TIFFTAG_SUBJECT 40040
#define TIFFTAG_RETRIES 40041
#define TIFFTAG_PRIORITY 40042
#define TIFFTAG_BROADCAST_ID 40043
#define TIFFTAG_FAX_SUBMISSION_TIME 40044
#define TIFFTAG_FAX_SCHEDULED_TIME 40045
#define TIFFTAG_PAGES 40046
#define TIFFTAG_TYPE 40047
#define TIFFTAG_STATUS 40048
#define TIFFTAG_EXTENDED_STATUS 40049
#define TIFFTAG_EXTENDED_STATUS_TEXT 40050
#define TIFFTAG_FAX_START_TIME 40051
#define TIFFTAG_FAX_END_TIME 40052
#define MS_TIFFTAG_END 40052
#define MAX_MS_TIFFTAGS MS_TIFFTAG_END - MS_TIFFTAG_START +1
//
// The following are ``pseudo tags'' that can be
// used to control codec-specific functionality.
// These tags are not written to file. Note that
// these values start at 0xffff+1 so that they'll
// never collide with Aldus-assigned tags.
//
// If you want your private pseudo tags ``registered''
// (i.e. added to this file), send mail to sam@sgi.com
// with the appropriate C definitions to add.
//
#define TIFFTAG_FAXMODE 65536 // Group 3/4 format control
#define FAXMODE_CLASSIC 0x0000 // default, include RTC
#define FAXMODE_NORTC 0x0001 // no RTC at end of data
#define FAXMODE_NOEOL 0x0002 // no EOL code at end of row
#define FAXMODE_BYTEALIGN 0x0004 // byte align row
#define FAXMODE_WORDALIGN 0x0008 // word align row
#define FAXMODE_CLASSF FAXMODE_NORTC // TIFF Class F
#define TIFFTAG_JPEGQUALITY 65537 // Compression quality level
//
// Note: quality level is on the IJG 0-100 scale. Default value is 75
//
#define TIFFTAG_JPEGCOLORMODE 65538 // Auto RGB<=>YCbCr convert?
#define JPEGCOLORMODE_RAW 0x0000 // no conversion (default)
#define JPEGCOLORMODE_RGB 0x0001 // do auto conversion
#define TIFFTAG_JPEGTABLESMODE 65539 // What to put in JPEGTables
#define JPEGTABLESMODE_QUANT 0x0001 // include quantization tbls
#define JPEGTABLESMODE_HUFF 0x0002 // include Huffman tbls
//
// Note: default is JPEGTABLESMODE_QUANT | JPEGTABLESMODE_HUFF
//
#define TIFFTAG_FAXFILLFUNC 65540 // G3/G4 fill function
#define TIFFTAG_PIXARLOGDATAFMT 65549 // PixarLogCodec I/O data sz
#define PIXARLOGDATAFMT_8BIT 0 // regular u_char samples
#define PIXARLOGDATAFMT_8BITABGR 1 // ABGR-order u_chars
#define PIXARLOGDATAFMT_10BITLOG 2 // 10-bit log-encoded (raw)
#define PIXARLOGDATAFMT_12BITPICIO 3 // as per PICIO (1.0==2048)
#define PIXARLOGDATAFMT_16BIT 4 // signed short samples
#define PIXARLOGDATAFMT_FLOAT 5 // IEEE float samples
#endif