• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

src/processing/TIFFTags.cpp

00001 #include <map>
00002 #include "pthread.h"
00003 
00004 #include "TIFFTags.h"
00005 
00006 namespace FCam {
00007     const TiffEntryInfo tiffEntryTypes[]={
00009         {
00010             "Artist",
00011             // Person who created the image.
00012             315,
00013             TIFF_ASCII
00014             // Note: some older TIFF files used this tag for storing Copyright information.
00015         },{
00016             "BitsPerSample",
00017             // Number of bits per component.
00018             258,
00019             TIFF_SHORT
00020             // N = SamplesPerPixel
00021             // Note that this field allows a different number of bits per component for each
00022             // component corresponding to a pixel. For example, RGB color data could use a
00023             // different number of bits per component for each of the three color planes. Most RGB
00024             // files will have the same number of BitsPerSample for each component. Even in this
00025             // case, the writer must write all three values.
00026             // Default = 1. See also SamplesPerPixel.
00027             //
00028             // From DNG Spec:
00029             // Supported values are from 8 to 32 bits/sample. The depth
00030             // must be the same for each sample if SamplesPerPixel is not
00031             // equal to 1. If BitsPerSample is not equal to 8 or 16 or 32,
00032             // then the bits must be packed into bytes using the TIFF
00033             // default FillOrder of 1 (big-endian), even if the TIFF file
00034             // itself uses little-endian byte order.
00035         },{
00036             "CellLength",
00037             // The length of the dithering or halftoning matrix used to create a dithered or
00038             // halftoned bilevel file.
00039             265,
00040             TIFF_SHORT
00041             // N = 1
00042             // This field should only be present if Threshholding = 2
00043             // No default. See also Threshholding.
00044         },{
00045             "CellWidth",
00046             // The width of the dithering or halftoning matrix used to create a dithered or
00047             // halftoned bilevel file
00048             264,
00049             TIFF_SHORT
00050             // N = 1
00051             // No default. See also Threshholding.
00052         },{
00053             "ColorMap",
00054             // A color map for palette color images.
00055             32,
00056             TIFF_SHORT
00057             // N = 3 * (2**BitsPerSample)
00058             // This field defines a Red-Green-Blue color map (often called a lookup table) for
00059             // palette-color images. In a palette-color image, a pixel value is used to index into
00060             // an RGB lookup table. For example, a palette-color pixel having a value of 0
00061             // would be displayed according to the 0th Red, Green, Blue triplet.
00062             // In a TIFF ColorMap, all the Red values come first, followed by the Green values,
00063             // then the Blue values. The number of values for each color is 2**BitsPerSample.
00064             // Therefore, the ColorMap field for an 8-bit palette-color image would have 3 * 256
00065             // values.
00066             // The width of each value is 16 bits, as implied by the type of SHORT. 0 represents
00067             // the minimum intensity, and 65535 represents the maximum intensity. Black is
00068             // represented by 0,0,0, and white by 65535, 65535, 65535.
00069             // See also PhotometricInterpretation—palette color.
00070             // No default. ColorMap must be included in all palette-color images.
00071         },{
00072             "Compression",
00073             // Compression scheme used on the image data.
00074             259,
00075             TIFF_SHORT
00076             // N = 1
00077             // 1 = No compression, but pack data into bytes as tightly as possible leaving no unused
00078             // bits except at the end of a row.
00079             // If Then the sample values are stored as an array of type:
00080             // BitsPerSample = 16 for all samples SHORT
00081             // BitsPerSample = 32 for all samples LONG
00082             // Otherwise BYTE
00083             // Each row is padded to the next BYTE/SHORT/LONG boundary, consistent with
00084             // the preceding BitsPerSample rule.
00085             // If the image data is stored as an array of SHORTs or LONGs, the byte ordering
00086             // must be consistent with that specified in bytes 0 and 1 of the TIFF file header.
00087             // Therefore, little-endian format files will have the least significant bytes preceding
00088             // the most significant bytes, while big-endian format files will have the opposite
00089             // order.
00090             // If the number of bits per component is not a power of 2, and you are willing to give up
00091             // some space for better performance, use the next higher power of 2. For example, if
00092             // your data can be represented in 6 bits, set BitsPerSample to 8 instead of 6, and then
00093             // convert the range of the values from [0,63] to [0,255].
00094             // Rows must begin on byte boundaries. (SHORT boundaries if the data is stored as
00095             // SHORTs, LONG boundaries if the data is stored as LONGs).
00096             // Some graphics systems require image data rows to be word-aligned or double-word-
00097             // aligned, and padded to word-boundaries or double-word boundaries. Uncompressed
00098             // TIFF rows will need to be copied into word-aligned or double-word-aligned row
00099             // buffers before being passed to the graphics routines in these environments.
00100             // 2 = CCITT Group 3 1-Dimensional Modified Huffman run-length encoding. See
00101             // Section 10. BitsPerSample must be 1, since this type of compression is defined
00102             // only for bilevel images.
00103             // 32773 = PackBits compression, a simple byte-oriented run-length scheme. See Section 9
00104             // for details.
00105             // Data compression applies only to the image data, pointed to by StripOffsets.
00106             // Default = 1.
00107             //
00108             // From DNG Spec:
00109             // Two Compression tag values are supported:
00110             // Value = 1: Uncompressed data.
00111             // Value = 7: JPEG compressed data, either baseline DCT JPEG, or lossless JPEG compression.
00112             // If PhotometricInterpretation = 6 (YCbCr) and BitsPerSample
00113             // = 8/8/8, or if PhotometricInterpretation = 1 (BlackIsZero)
00114             // and BitsPerSample = 8, then the JPEG variant must be
00115             // baseline DCT JPEG. Otherwise, the JPEG variant must be
00116             // lossless Huffman JPEG. For lossless JPEG, the internal
00117             // width/length/components in the JPEG stream are not required
00118             // to match the strip or tile's width/length/components. Only
00119             // the total sample counts need to match. It is common for CFA
00120             // images to be encoded with a different width, length or
00121             // component count to allow the JPEG compression predictors to
00122             // work across like colors.
00123         },{
00124             "Copyright",
00125             // Copyright notice.
00126             33432,
00127             TIFF_ASCII
00128             // Copyright notice of the person or organization that claims the copyright to the
00129             // image. The complete copyright statement should be listed in this field including
00130             // any dates and statements of claims. For example, “Copyright, John Smith, 19xx.
00131             // All rights reserved.”
00132         },{
00133             "DateTime",
00134             // Date and time of image creation.
00135             306,
00136             TIFF_ASCII
00137             // N = 20
00138             // The format is: “YYYY:MM:DD HH:MM:SS”, with hours like those on a 24-hour
00139             // clock, and one space character between the date and the time. The length of the
00140             // string, including the terminating NUL, is 20 bytes.
00141         },{
00142             "ExtraSamples",
00143             // Description of extra components.
00144             33,
00145             TIFF_SHORT
00146             // N = m
00147             // Specifies that each pixel has m extra components whose interpretation is defined
00148             // by one of the values listed below. When this field is used, the SamplesPerPixel
00149             // field has a value greater than the PhotometricInterpretation field suggests.
00150             // For example, full-color RGB data normally has SamplesPerPixel=3. If
00151             // SamplesPerPixel is greater than 3, then the ExtraSamples field describes the
00152             // meaning of the extra samples. If SamplesPerPixel is, say, 5 then ExtraSamples
00153             // will contain 2 values, one for each extra sample.
00154             // ExtraSamples is typically used to include non-color information, such as opacity,
00155             // in an image. The possible values for each item in the field's value are:
00156             // 0 = Unspecified data
00157             // 1 = Associated alpha data (with pre-multiplied color)
00158             // 2 = Unassociated alpha data
00159             // Associated alpha data is opacity information; it is fully described in Section 21.
00160             // Unassociated alpha data is transparency information that logically exists indepen-
00161             // dent of an image; it is commonly called a soft matte. Note that including both
00162             // unassociated Land associated alpha is undefined because associated alpha specifies
00163             // that color components are pre-multiplied by the alpha component, while
00164             // unassociated alpha specifies the opposite.
00165             // By convention, extra components that are present must be stored as the “last com-
00166             // ponents” in each pixel. For example, if SamplesPerPixel is 4 and there is 1 extra
00167             // component, then it is located in the last component location (SamplesPerPixel-1)
00168             // in each pixel.
00169             // Components designated as “extra” are just like other components in a pixel. In
00170             // particular, the size of such components is defined by the value of the
00171             // BitsPerSample field.
00172             // With the introduction of this field, TIFF readers must not assume a particular
00173             // SamplesPerPixel value based on the value of the PhotometricInterpretation field.
00174             // For example, if the file is an RGB file, SamplesPerPixel may be greater than 3.
00175             // The default is no extra samples. This field must be present if there are extra
00176             // samples.
00177             // See also SamplesPerPixel, AssociatedAlpha.
00178         },{
00179             "FillOrder",
00180             // The logical order of bits within a byte.
00181             266,
00182             TIFF_SHORT
00183             // N = 1
00184             // 1 = pixels are arranged within a byte such that pixels with lower column values are
00185             // stored in the higher-order bits of the byte.
00186             // 1-bit uncompressed data example: Pixel 0 of a row is stored in the high-order bit
00187             // of byte 0, pixel 1 is stored in the next-highest bit, ..., pixel 7 is stored in the low-
00188             // order bit of byte 0, pixel 8 is stored in the high-order bit of byte 1, and so on.
00189             // CCITT 1-bit compressed data example: The high-order bit of the first compres-
00190             // sion code is stored in the high-order bit of byte 0, the next-highest bit of the first
00191             // compression code is stored in the next-highest bit of byte 0, and so on.
00192             // 2 = pixels are arranged within a byte such that pixels with lower column values are
00193             // stored in the lower-order bits of the byte.
00194             // We recommend that FillOrder=2 be used only in special-purpose applications. It
00195             // is easy and inexpensive for writers to reverse bit order by using a 256-byte lookup
00196             // table1 and the data is
00197             // either uncompressed or compressed using CCITT 1D or 2D compression, to
00198             // avoid potentially ambigous situations.
00199             // Support for FillOrder=2 is not required in a Baseline TIFF compliant reader
00200             // Default is FillOrder = 1.
00201             // FreeByteCounts
00202             // For each string of contiguous unused bytes in a TIFF file, the number of bytes in
00203             // the string.
00204             // Tag = 289  (121.H)
00205             // Type = LONG
00206             // Not recommended for general interchange.
00207             // See also FreeOffsets.
00208         },{
00209             "FreeOffsets",
00210             // For each string of contiguous unused bytes in a TIFF file, the byte offset of the
00211             // string.
00212             288,
00213             TIFF_LONG
00214             // Not recommended for general interchange.
00215             // See also FreeByteCounts.
00216         },{
00217             "GrayResponseCurve",
00218             // For grayscale data, the optical density of each possible pixel value.
00219             29,
00220             TIFF_SHORT
00221             // N = 2**BitsPerSample
00222             // The 0th value of GrayResponseCurve corresponds to the optical density of a pixel
00223             // having a value of 0, and so on.
00224             // This field may provide useful information for sophisticated applications, but it is
00225             // currently ignored by most TIFF readers.
00226             // See also GrayResponseUnit, PhotometricInterpretation.
00227         },{
00228             "GrayResponseUnit",
00229             // The precision of the information contained in the GrayResponseCurve.
00230             29,
00231             TIFF_SHORT
00232             // N = 1
00233             // Because optical density is specified in terms of fractional numbers, this field is
00234             // necessary to interpret the stored integer information. For example, if
00235             // GrayScaleResponseUnits is set to 4 (ten-thousandths of a unit), and a
00236             // GrayScaleResponseCurve number for gray level 4 is 3455, then the resulting
00237             // actual value is 0.3455.
00238             // Optical densitometers typically measure densities within the range of 0.0 to 2.0.
00239             // 1 = Number represents tenths of a unit.
00240             // 2 = Number represents hundredths of a unit.
00241             // 3 = Number represents thousandths of a unit.
00242             // 4 =  Number represents ten-thousandths of a unit.
00243             // 5 = Number represents hundred-thousandths of a unit.
00244             // Modifies GrayResponseCurve.
00245             // See also GrayResponseCurve.
00246             // For historical reasons, the default is 2. However, for greater accuracy, 3 is recom-
00247             // mended.
00248         },{
00249             "HostComputer",
00250             // The computer and/or operating system in use at the time of image creation.
00251             316,
00252             TIFF_ASCII
00253             // See also Make, Model, Software.
00254         },{
00255             "ImageDescription",
00256             // A string that describes the subject of the image.
00257             27,
00258             TIFF_ASCII
00259             // For example, a user may wish to attach a comment such as “1988 company pic-
00260             // nic” to an image.
00261         },{
00262             "ImageLength",
00263             // The number of rows of pixels in the image.
00264             257,
00265             TIFF_LONG // or SHORT
00266             // N = 1
00267             // No default. See also ImageWidth.
00268         },{
00269             "ImageWidth",
00270             // The number of columns in the image, i.e., the number of pixels per row.
00271             256,
00272             TIFF_LONG // or SHORT
00273             // N = 1
00274             // No default. See also ImageLength.
00275         },{
00276             "Make",
00277             // The scanner manufacturer.
00278             271,
00279             TIFF_ASCII
00280             // Manufacturer of the scanner, video digitizer, or other type of equipment used to
00281             // generate the image. Synthetic images should not include this field.
00282             // See also Model, Software.
00283         },{
00284             "MaxSampleValue",
00285             // The maximum component value used.
00286             281,
00287             TIFF_SHORT
00288             // N = SamplesPerPixel
00289             // This field is not to be used to affect the visual appearance of an image when it is
00290             // displayed or printed. Nor should this field affect the interpretation of any other
00291             // field; it is used only for statistical purposes.
00292             // Default is 2**(BitsPerSample) - 1.
00293         },{
00294             "MinSampleValue",
00295             // The minimum component value used.
00296             280,
00297             TIFF_SHORT
00298             // N = SamplesPerPixel
00299             // See also MaxSampleValue.
00300             // Default is 0.
00301         },{
00302             "Model",
00303             // The scanner model name or number.
00304             272,
00305             TIFF_ASCII
00306             // The model name or number of the scanner, video digitizer, or other type of equip-
00307             // ment used to generate the image.
00308             // See also Make, Software.
00309         },{
00310             "NewSubfileType",
00311             // A general indication of the kind of data contained in this subfile.
00312             254,
00313             TIFF_LONG
00314             // N = 1 Replaces the old SubfileType field, due to
00315             // limitations in the definition of that field.
00316             // NewSubfileType is mainly useful when there are multiple
00317             // subfiles in a single TIFF file.  This field is made up of a
00318             // set of 32 flag bits. Unused bits are expected to be 0. Bit
00319             // 0 is the low-order bit.  Currently defined values are: Bit
00320             // 0 is 1 if the image is a reduced-resolution version of
00321             // another image in this TIFF file; else the bit is 0.  Bit 1
00322             // is 1 if the image is a single page of a multi-page image
00323             // (see the PageNumber field description); else the bit is 0.
00324             // Bit 2 is 1 if the image defines a transparency mask for
00325             // another image in this TIFF file.  The
00326             // PhotometricInterpretation value must be 4, designating a
00327             // transparency mask.  These values are defined as bit flags
00328             // because they are independent of each other.  Default is 0.
00329             //
00330             // From DNG Spec: In DNG versions earlier than 1.2.0.0, full
00331             // resolution raw images should use NewSubFileType equal to
00332             // 0. Rendered previews or reduced resolution versions of raw
00333             // images should use NewSubFileType equal to 1. DNG 1.2.0.0
00334             // allows a new value for NewSubFileType equal to
00335             // 10001.H. This value, used for alternative or non-primary
00336             // rendered previews, allows for multiple renderings (not just
00337             // multiple sizes of a single rendering) to be stored in a DNG
00338             // file. DNG reading software that displays a preview for a
00339             // DNG file should, by default, display a preview from an IFD
00340             // with NewSubFileType equal to 1. Alternative renderings
00341             // should only be displayed if requested by the user.
00342 
00343         },{
00344             "Orientation",
00345             // The orientation of the image with respect to the rows and columns.
00346             274,
00347             TIFF_SHORT
00348             // N = 1
00349             // 1 = The 0th row represents the visual top of the image, and the 0th column represents
00350             // the visual left-hand side.
00351             // 2 = The 0th row represents the visual top of the image, and the 0th column represents
00352             // the visual right-hand side.
00353             // 3 = The 0th row represents the visual bottom of the image, and the 0th column repre-
00354             // sents the visual right-hand side.
00355             // 4 = The 0th row represents the visual bottom of the image, and the 0th column repre-
00356             // sents the visual left-hand side.
00357             // 5 = The 0th row represents the visual left-hand side of the image, and the 0th column
00358             // represents the visual top.
00359             // 6 = The 0th row represents the visual right-hand side of the image, and the 0th column
00360             // represents the visual top.
00361             // 7 = The 0th row represents the visual right-hand side of the image, and the 0th column
00362             // represents the visual bottom.
00363             // 8 = The 0th row represents the visual left-hand side of the image, and the 0th column
00364             // represents the visual bottom.
00365             // Default is 1.
00366             // Support for orientations other than 1 is not a Baseline TIFF requirement.
00367             //
00368             // From DNG spec:
00369             // Orientation is a required tag for DNG. With the Orientation
00370             // tag present, file browsers can perform lossless rotation of
00371             // DNG files by modifying a single byte of the file. DNG
00372             // readers should support all possible orientations, including
00373             // mirrored orientations. Note that the mirrored orientations
00374             // are not allowed by the TIFF-EP specification, so writers
00375             // should not use them if they want their files be compatible
00376             // with both specifications.
00377         },{
00378             "PhotometricInterpretation",
00379             // The color space of the image data.
00380             262,
00381             TIFF_SHORT
00382             // N = 1
00383             // 0 = WhiteIsZero. For bilevel and grayscale images:  0 is imaged as white.
00384             // 2**BitsPerSample-1 is imaged as black. This is the normal value for Compres-
00385             // sion=2.
00386             // 1 =  BlackIsZero. For bilevel and grayscale images:  0 is imaged as black.
00387             // 2**BitsPerSample-1 is imaged as white. If this value is specified for Compres-
00388             // sion=2, the image should display and print reversed.
00389             // 2 = RGB. In the RGB model, a color is described as a combination of the three pri-
00390             // mary colors of light (red, green, and blue) in particular concentrations. For each of
00391             // the three components, 0 represents minimum intensity, and 2**BitsPerSample - 1
00392             // represents maximum intensity. Thus an RGB value of (0,0,0) represents black,
00393             // and (255,255,255) represents white, assuming 8-bit components. For
00394             // PlanarConfiguration = 1, the components are stored in the indicated order:  first
00395             // Red, then Green, then Blue2, the StripOffsets for the
00396             // component planes are stored in the indicated order:  first the Red component plane
00397             // StripOffsets, then the Green plane StripOffsets, then the Blue plane StripOffsets.
00398             // 3= Palette color.  In this model, a color is described with a single component. The
00399             // value of the component is used as an index into the red, green and blue curves in
00400             // the ColorMap field to retrieve an RGB triplet that defines the color. When
00401             // PhotometricInterpretation=3 is used, ColorMap must be present and
00402             // SamplesPerPixel must be 1.
00403             // 4 =  Transparency Mask.
00404             // This means that the image is used to define an irregularly shaped region of another
00405             // image in the same TIFF file. SamplesPerPixel and BitsPerSample must be 1.
00406             // PackBits compression is recommended. The 1-bits define the interior of the re-
00407             // gion; the 0-bits define the exterior of the region.
00408             // A reader application can use the mask to determine which parts of the image to
00409             // display. Main image pixels that correspond to 1-bits in the transparency mask are
00410             // imaged to the screen or printer, but main image pixels that correspond to 0-bits in
00411             // the mask are not displayed or printed.
00412             // The image mask is typically at a higher resolution than the main image, if the
00413             // main image is grayscale or color so that the edges can be sharp.
00414             // There is no default for PhotometricInterpretation, and it is required. Do not rely
00415             // on applications defaulting to what you want.
00416             //
00417             // From DNG Spec:
00418 
00419             // The following values are supported for thumbnail and preview IFDs only:
00420             // 1 = BlackIsZero. Assumed to be in a gamma 2.2 color space, unless otherwise specified using PreviewColorSpace tag.
00421             // 2 = RGB. Assumed to be in the sRGB color space, unless otherwise specified using the PreviewColorSpace tag.
00422             // 6 = YCbCr. Used for JPEG encoded preview images.
00423             // The following values are supported for the raw IFD, and are assumed to be the camera's native color space:
00424             // 32803 = CFA (Color Filter Array).
00425             // 34892 = LinearRaw.
00426             // The CFA PhotometricInterpretation value is documented in
00427             // the TIFF-EP specification. Its use requires the use of the
00428             // CFARepeatPatternDim and CFAPattern tags in the same
00429             // IFD. The origin of the repeating CFA pattern is the
00430             // top-left corner of the ActiveArea rectangle. The LinearRaw
00431             // PhotometricInterpretation value is intended for use by
00432             // cameras that do not use color filter arrays, but instead
00433             // capture all color components at each pixel. It can also be
00434             // used for CFA data that has already been de-mosaiced. The
00435             // LinearRaw value can be used in reduced resolution IFDs,
00436             // even if the raw IFD uses the CFA PhotometricInterpretation
00437             // value.
00438         },{
00439             "PlanarConfiguration",
00440             // How the components of each pixel are stored.
00441             284,
00442             TIFF_SHORT
00443             // N = 1
00444             // 1 =  Chunky format. The component values for each pixel are stored contiguously.
00445             // The order of the components within the pixel is specified by
00446             // PhotometricInterpretation. For example, for RGB data, the data is stored as
00447             // RGBRGBRGB…
00448             // 2 = Planar format. The components are stored in separate “component planes.”  The
00449             // values in StripOffsets and StripByteCounts are then arranged as a 2-dimensional
00450             // array, with SamplesPerPixel rows and StripsPerImage columns. (All of the col-
00451             // umns for row 0 are stored first, followed by the columns of row 1, and so on.)
00452             // PhotometricInterpretation describes the type of data stored in each component
00453             // plane. For example, RGB data is stored with the Red components in one compo-
00454             // nent plane, the Green in another, and the Blue in another.
00455             // PlanarConfiguration=2 is not currently in widespread use and it is not recom-
00456             // mended for general interchange. It is used as an extension and Baseline TIFF
00457             // readers are not required to support it.
00458             // If SamplesPerPixel is 1, PlanarConfiguration is irrelevant, and need not be in-
00459             // cluded.
00460             // If a row interleave effect is desired, a writer might write out the data as
00461             // PlanarConfiguration=2—separate sample planes—but break up the planes into
00462             // multiple strips (one row per strip, perhaps) and interleave the strips.
00463             // Default is 1. See also BitsPerSample, SamplesPerPixel.
00464         },{
00465             "ResolutionUnit",
00466             // The unit of measurement for XResolution and YResolution.
00467             29,
00468             TIFF_SHORT
00469             // N = 1
00470             // To be used with XResolution and YResolution.
00471             // 1 = No absolute unit of measurement. Used for images that may have a non-square
00472             // aspect ratio, but no meaningful absolute dimensions.
00473             // The drawback of ResolutionUnit=1 is that different applications will import the image
00474             // at different sizes. Even if the decision is arbitrary, it might be better to use dots per
00475             // inch or dots per centimeter, and to pick XResolution and YResolution so that the
00476             // aspect ratio is correct and the maximum dimension of the image is about four inches
00477             // (the “four” is arbitrary.)
00478             // 2 =  Inch.
00479             // 3 =  Centimeter.
00480             // Default is 2.
00481         },{
00482             "RowsPerStrip",
00483             // The number of rows per strip.
00484             278,
00485             TIFF_LONG // or SHORT
00486             // N = 1
00487             // TIFF image data is organized into strips for faster random access and efficient I/O
00488             // buffering.
00489             // RowsPerStrip and ImageLength together tell us the number of strips in the entire
00490             // image. The equation is:
00491             // StripsPerImage = floor ((ImageLength + RowsPerStrip - 1) / RowsPerStrip).
00492             // StripsPerImage is not a field. It is merely a value that a TIFF reader will want to
00493             // compute because it specifies the number of StripOffsets and StripByteCounts for the
00494             // image.
00495             // Note that either SHORT or LONG values can be used to specify RowsPerStrip.
00496             // SHORT values may be used for small TIFF files. It should be noted, however, that
00497             // earlier TIFF specification revisions required LONG values and that some software
00498             // may not accept SHORT values.
00499             // The default is 2**32 - 1, which is effectively infinity. That is, the entire image is
00500             // one strip.
00501             // Use of a single strip is not recommended. Choose RowsPerStrip such that each strip is
00502             // about 8K bytes, even if the data is not compressed, since it makes buffering simpler
00503             // for readers. The “8K” value is fairly arbitrary, but seems to work well.
00504             // See also ImageLength, StripOffsets, StripByteCounts, TileWidth, TileLength,
00505             // TileOffsets, TileByteCounts.
00506         },{
00507             "SamplesPerPixel",
00508             // The number of components per pixel.
00509             277,
00510             TIFF_SHORT
00511             // N = 1
00512             // SamplesPerPixel is usually 1 for bilevel, grayscale, and palette-color images.
00513             // SamplesPerPixel is usually 3 for RGB images.
00514             // Default = 1. See also BitsPerSample, PhotometricInterpretation, ExtraSamples.
00515         },{
00516             "Software",
00517             // Name and version number of the software package(s) used to create the image.
00518             305,
00519             TIFF_ASCII
00520             // See also Make, Model.
00521         },{
00522             "StripByteCounts",
00523             // For each strip, the number of bytes in the strip after compression.
00524             279,
00525             TIFF_LONG // or SHORT, but make sure to write LONG
00526             // N = StripsPerImage for PlanarConfiguration equal to 1.
00527             // = SamplesPerPixel * StripsPerImage for PlanarConfiguration equal to 2
00528             // This tag is required for Baseline TIFF files.
00529             // No default.
00530             // See also StripOffsets, RowsPerStrip, TileOffsets, TileByteCounts.
00531         },{
00532             "StripOffsets",
00533             // For each strip, the byte offset of that strip.
00534             273,
00535             TIFF_LONG // or SHORT, but make sure to write LONG
00536             // N = StripsPerImage for PlanarConfiguration equal to 1.
00537             // = SamplesPerPixel * StripsPerImage for PlanarConfiguration equal to 2
00538             // The offset is specified with respect to the beginning of the TIFF file. Note that this
00539             // implies that each strip has a location independent of the locations of other strips.
00540             // This feature may be useful for editing applications. This required field is the only
00541             // way for a reader to find the image data. (Unless TileOffsets is used; see
00542             // TileOffsets.)
00543             // Note that either SHORT or LONG values may be used to specify the strip offsets.
00544             // SHORT values may be used for small TIFF files. It should be noted, however, that
00545             // earlier TIFF specifications required LONG strip offsets and that some software
00546             // may not accept SHORT values.
00547             // For maximum compatibility with operating systems such as MS-DOS and Win-
00548             // dows, the StripOffsets array should be less than or equal to 64K bytes in length,
00549             // and the strips themselves, in both compressed and uncompressed forms, should
00550             // not be larger than 64K bytes.
00551             // No default. See also StripByteCounts, RowsPerStrip, TileOffsets,
00552             // TileByteCounts.
00553         },{
00554             "SubfileType",
00555             // A general indication of the kind of data contained in this subfile.
00556             255,
00557             TIFF_SHORT
00558             // N = 1
00559             // Currently defined values are:
00560             // 1 = full-resolution image data
00561             // 2 = reduced-resolution image data
00562             // 3 = a single page of a multi-page image (see the PageNumber field description).
00563             // Note that several image types may be found in a single TIFF file, with each subfile
00564             // described by its own IFD.
00565             // No default.
00566             // This field is deprecated. The NewSubfileType field should be used instead.
00567         },{
00568             "Threshholding",
00569             // For black and white TIFF files that represent shades of gray, the technique used to
00570             // convert from gray to black and white pixels.
00571             263,
00572             TIFF_SHORT
00573             // N = 1
00574             // 1 = No dithering or halftoning has been applied to the image data.
00575             // 2 = An ordered dither or halftone technique has been applied to the image data.
00576             // 3 = A randomized process such as error diffusion has been applied to the image data.
00577             // Default is Threshholding = 1. See also CellWidth, CellLength.
00578         },{
00579             "XResolution",
00580             // The number of pixels per ResolutionUnit in the ImageWidth direction.
00581             282,
00582             TIFF_RATIONAL
00583             // N = 1
00584             // It is not mandatory that the image be actually displayed or printed at the size implied
00585             // by this parameter. It is up to the application to use this information as it wishes.
00586             // No default. See also YResolution, ResolutionUnit.
00587         },{
00588             "YResolution",
00589             // The number of pixels per ResolutionUnit in the ImageLength direction.
00590             283,
00591             TIFF_RATIONAL
00592             // N = 1
00593             // No default. See also XResolution, ResolutionUnit.
00594             //
00595         },
00597         {
00598             "SubIFDs",
00599             330,
00600             TIFF_IFD // or “LONG”. “IFD” is preferred.
00601             // Note: When writing, TIFF_IFD tags are always saved as LONG for compatibility with dcraw and dcraw-derived applications.
00602             // N = number of child IFDs
00603             // Each value is an offset (from the beginning of the TIFF file, as always) to a child
00604             // IFD. Child images provide extra information for the parent image—such as a
00605             // subsampled version of the parent image.
00606             // TIFF data type 13, “IFD,” is otherwise identical to LONG, but is only used to
00607             // point to other valid IFDs.
00608         },
00610         {
00611             "TileWidth",
00612             322,
00613             TIFF_SHORT // or LONG
00614             // N = 1
00615             // The tile width in pixels.  This is the number of columns in each tile.
00616             // Assuming integer arithmetic, three computed values that are useful in the follow-
00617             // ing field descriptions are:
00618             // TilesAcross = (ImageWidth + TileWidth - 1) / TileWidth
00619             // TilesDown = (ImageLength + TileLength - 1) / TileLength
00620             // TilesPerImage = TilesAcross * TilesDown
00621             // These computed values are not TIFF fields; they are simply values determined by
00622             // the ImageWidth, TileWidth, ImageLength, and TileLength fields.
00623             // TileWidth and ImageWidth together determine the number of tiles that span the
00624             // width of the image (TilesAcross). TileLength and ImageLength together deter-
00625             // mine the number of tiles that span the length of the image (TilesDown).
00626             // We recommend choosing TileWidth and TileLength such that the resulting tiles
00627             // are about 4K to 32K bytes before compression. This seems to be a reasonable
00628             // value for most applications and compression schemes.
00629             // TileWidth must be a multiple of 16. This restriction improves performance in
00630             // some graphics environments and enhances compatibility with compression
00631             // schemes such as JPEG.
00632             // Tiles need not be square.
00633             // Note that ImageWidth can be less than TileWidth, although this means that the
00634             // tiles are too large or that you are using tiling on really small images, neither of
00635             // which is recommended. The same observation holds for ImageLength and
00636             // TileLength.
00637             // No default. See also TileLength, TileOffsets, TileByteCounts.
00638         },{
00639             "TileLength",
00640             323,
00641             TIFF_SHORT // or LONG
00642             // N = 1
00643             // The tile length (height) in pixels. This is the number of rows in each tile.
00644             // TileLength must be a multiple of 16 for compatibility with compression schemes
00645             // such as JPEG.
00646             // Replaces RowsPerStrip in tiled TIFF files.
00647             // No default. See also TileWidth, TileOffsets, TileByteCounts.
00648         },{
00649             "TileOffsets",
00650             324,
00651             TIFF_LONG
00652             // N = TilesPerImage for PlanarConfiguration = 1
00653             // = SamplesPerPixel * TilesPerImage for PlanarConfiguration = 2
00654             // For each tile, the byte offset of that tile, as compressed and stored on disk. The
00655             // offset is specified with respect to the beginning of the TIFF file. Note that this
00656             // implies that each tile has a location independent of the locations of other tiles.
00657             // Offsets are ordered left-to-right and top-to-bottom. For PlanarConfiguration = 2,
00658             // the offsets for the first component plane are stored first, followed by all the offsets
00659             // for the second component plane, and so on.
00660             // No default. See also TileWidth, TileLength, TileByteCounts.
00661         },{
00662             "TileByteCounts",
00663             325,
00664             TIFF_SHORT // or LONG
00665             // N = TilesPerImage for PlanarConfiguration = 1
00666             // = SamplesPerPixel * TilesPerImage for PlanarConfiguration = 2
00667             // For each tile, the number of (compressed) bytes in that tile.
00668             // See TileOffsets for a description of how the byte counts are ordered.
00669             // No default. See also TileWidth, TileLength, TileOffsets.
00670         },
00671 // TIFF/EP Tags (knowledge inferred from many places, ISO spec costs money)
00672         {
00673             "TIFF/EPStandardID",
00674             37398,
00675             TIFF_BYTE,
00676             // Note: Below inferred from various sources
00677             // Count:
00678             // 4
00679             // Value:
00680             // See below
00681             // Default:
00682             // Required tag
00683             // Usage:
00684             // IFD 0
00685             // Description:
00686             // Should always be 1 0 0 0 
00687         },
00688         {
00689             "CFAPattern",
00690             33422,
00691             TIFF_BYTE
00692             // Count                Number of pixels in a single CFA pattern repetition
00693             // Default                None
00694             // Description
00695             // Indicates the color filter array (CFA) geometric pattern of the image sensor when a one-chip color area sensor is used.
00696             // It does not apply to all sensing methods.
00697             // The value consists of an id code for every pixel in that pattern. The pattern shape is given by CFARepeatPatternDim, the pixels
00698             // are listed left-to-right, top-to-bottom, with the first pattern starting at the top-left corner of the sensor.
00699             // This identification code can be:
00700             // 0 = Red
00701             // 1 = Green
00702             // 2 = Blue
00703             // 3 = Cyan
00704             // 4 = Magenta
00705             // 5 = Yellow
00706             // 6 = White
00707         },        {
00708             "CFARepeatPatternDim",
00709             33421,
00710             TIFF_SHORT
00711             // Count 2
00712             // Default ?
00713             // Description
00714             // (inferred from Boris's saving code, web info - Eddy)
00715             // Dimensions of the CFA repeating pattern, as two shorts. The colors that make up the pattern are given by CFAPattern
00716         },
00718         {
00719             "DNGVersion",
00720             50706,
00721             TIFF_BYTE,
00722             // Count:
00723             // 4
00724             // Value:
00725             // See below
00726             // Default:
00727             // Required tag
00728             // Usage:
00729             // IFD 0
00730             // Description:
00731             // This tag encodes the DNG four-tier version number. For
00732             // files compliant with this version of the DNG specification
00733             // (1.2.0.0), this tag should contain the bytes: 1, 2, 0, 0.
00734         },{
00735             "DNGBackwardVersion",
00736             50707,
00737             TIFF_BYTE,
00738             // Count:
00739             // 4
00740             // Value:
00741             // See below
00742             // Default:
00743             // DNGVersion with the last two bytes set to zero.
00744             // Usage:
00745             // IFD 0
00746             // Description:
00747             // This tag specifies the oldest version of the Digital
00748             // Negative specification for which a file is
00749             // compatible. Readers should not attempt to read a file if
00750             // this tag specifies a version number that is higher than the
00751             // version number of the specification the reader was based
00752             // on.  In addition to checking the version tags, readers
00753             // should, for all tags, check the types, counts, and values,
00754             // to verify it is able to correctly read the file.  For more
00755             // information on compatibility with previous DNG versions,
00756             // see Appendix A: Compatibility with Previous Versions.
00757         },{
00758             "UniqueCameraModel",
00759             50708,
00760             TIFF_ASCII,
00761             // Count:
00762             // String length including null
00763             // Value:
00764             // Null terminated string
00765             // Default:
00766             // Required tag
00767             // Usage:
00768             // IFD 0
00769             // Description:
00770             // UniqueCameraModel defines a unique, non-localized name for
00771             // the camera model that created the image in the raw
00772             // file. This name should include the manufacturer's name to
00773             // avoid conflicts, and should not be localized, even if the
00774             // camera name itself is localized for different markets (see
00775             // LocalizedCameraModel).
00776             // This string may be used by reader software to index into
00777             // per-model preferences and replacement profiles.  Examples
00778             // of unique model names are:
00779             // •"Canon EOS 300D"
00780             // •"Fujifilm FinePix S2Pro"
00781             // •"Kodak ProBack645"
00782             // •"Minolta DiMAGE A1"
00783             // •"Nikon D1X"
00784             // •"Olympus C-5050Z"
00785             // •"Pentax *istD"
00786             // •"Sony F828"
00787         },{
00788             "LocalizedCameraModel",
00789             50709,
00790             TIFF_ASCII //or BYTE,
00791             // Count:
00792             // Byte count including null
00793             // Value:
00794             // Null terminated UTF-8 encoded Unicode string
00795             // Default:
00796             // Same as UniqueCameraModel
00797             // Usage:
00798             // IFD 0
00799             // Description:
00800             // Similar to the UniqueCameraModel field, except the name can
00801             // be localized for different markets to match the
00802             // localization of the camera name.
00803         },{
00804             "CFAPlaneColor",
00805             50710,
00806             TIFF_BYTE,
00807             // Count:
00808             // ColorPlanes
00809             // Value:
00810             // See below
00811             // Default:
00812             // 0, 1, 2 (red, green, blue)
00813             // Usage:
00814             // Raw IFD
00815             // Description:
00816             // CFAPlaneColor provides a mapping between the values in the
00817             // CFAPattern tag and the plane numbers in LinearRaw
00818             // space. This is a required tag for non-RGB CFA images
00819         },{
00820             "CFALayout",
00821             50711,
00822             TIFF_SHORT,
00823             // Count:
00824             // 1
00825             // Value:
00826             // See below
00827             // Default:
00828             // 1
00829             // Usage:
00830             // Raw IFD
00831             // Description:
00832             // CFALayout describes the spatial layout of the CFA. The currently defined values are:
00833             // 1 = Rectangular (or square) layout
00834             // 2 = Staggered layout A: even columns are offset down by 1/2 row
00835             // 3 = Staggered layout B: even columns are offset up by 1/2 row
00836             // 4 = Staggered layout C: even rows are offset right by 1/2 column
00837             // 5 = Staggered layout D: even rows are offset left by 1/2 column
00838             // 6 = Staggered layout E: even rows are offset up by 1/2 row, even columns are offset left by 1/2 column
00839             // 7 = Staggered layout F: even rows are offset up by 1/2 row, even columns are offset right by 1/2 column
00840             // 8 = Staggered layout G: even rows are offset down by 1/2 row, even columns are offset left by 1/2 column
00841             // 9 = Staggered layout H: even rows are offset down by 1/2 row, even columns are offset right by 1/2 column
00842             // Note that for the purposes of this tag, rows and columns are numbered starting with one.
00843             // Layout values 6 through 9 were added with DNG version 1.3.0.0.
00844         },{
00845             "LinearizationTable",
00846             50712,
00847             TIFF_SHORT,
00848             // Count:
00849             // N
00850             // Value:
00851             // See below
00852             // Default:
00853             // Identity table (0, 1, 2, 3, etc.)
00854             // Usage:
00855             // Raw IFD
00856             // Description:
00857             // LinearizationTable describes a lookup table that maps
00858             // stored values into linear values. This tag is typically
00859             // used to increase compression ratios by storing the raw data
00860             // in a non-linear, more visually uniform space with fewer
00861             // total encoding levels.  If SamplesPerPixel is not equal to
00862             // one, this single table applies to all the samples for each
00863             // pixel.  See Chapter 5, “Mapping Raw Values to Linear
00864             // Reference Values” on page 65 for details of the processing
00865             // model.
00866         },{
00867             "BlackLevelRepeatDim",
00868             50713,
00869             TIFF_SHORT,
00870             // Count:
00871             // 2
00872             // Value:
00873             // Value: 0: BlackLevelRepeatRows
00874             // Value: 1: BlackLevelRepeatCols
00875             // Default:
00876             // 1, 1
00877             // Usage:
00878             // Raw IFD
00879             // Description:
00880             // This tag specifies repeat pattern size for the BlackLevel tag.
00881         },{
00882             "BlackLevel",
00883             50714,
00884             TIFF_SHORT // or LONG or RATIONAL,
00885             // Count:
00886             // BlackLevelRepeatRows * BlackLevelRepeatCols * SamplesPerPixel
00887             // Value:
00888             // See below
00889             // Default:
00890             // 0
00891             // Usage:
00892             // Raw IFD
00893             // Description:
00894             // This tag specifies the zero light (a.k.a. thermal black or
00895             // black current) encoding level, as a repeating pattern. The
00896             // origin of this pattern is the top-left corner of the
00897             // ActiveArea rectangle. The values are stored in
00898             // row-column-sample scan order.  See Chapter 5, “Mapping Raw
00899             // Values to Linear Reference Values” on page 65 for details
00900             // of the processing model.
00901         },{
00902             "BlackLevelDeltaH",
00903             50715,
00904             TIFF_SRATIONAL,
00905             // Count:
00906             // ActiveArea width
00907             // Value:
00908             // See below
00909             // Default:
00910             // All zeros
00911             // Usage:
00912             // Raw IFD
00913             // Description:
00914             // If the zero light encoding level is a function of the image
00915             // column, BlackLevelDeltaH specifies the difference between
00916             // the zero light encoding level for each column and the
00917             // baseline zero light encoding level.  If SamplesPerPixel is
00918             // not equal to one, this single table applies to all the
00919             // samples for each pixel.  See Chapter 5, “Mapping Raw Values
00920             // to Linear Reference Values” on page 65 for details of the
00921             // processing model.
00922         },{
00923             "BlackLevelDeltaV",
00924             50716,
00925             TIFF_SRATIONAL,
00926             // Count:
00927             // ActiveArea length
00928             // Value:
00929             // See below
00930             // Default:
00931             // All zeros
00932             // Usage:
00933             // Raw IFD
00934             // Description:
00935             // If the zero light encoding level is a function of the image
00936             // row, this tag specifies the difference between the zero
00937             // light encoding level for each row and the baseline zero
00938             // light encoding level.  If SamplesPerPixel is not equal to
00939             // one, this single table applies to all the samples for each
00940             // pixel.  See Chapter 5, “Mapping Raw Values to Linear
00941             // Reference Values” on page 65 for details of the processing
00942             // model.
00943         },{
00944             "WhiteLevel",
00945             50717,
00946             TIFF_SHORT //or LONG,
00947             // Count:
00948             // SamplesPerPixel
00949             // Value:
00950             // See below
00951             // Default:
00952             // (2 ** BitsPerSample) - 1
00953             // Usage:
00954             // Raw IFD
00955             // Description:
00956             // This tag specifies the fully saturated encoding level for
00957             // the raw sample values. Saturation is caused either by the
00958             // sensor itself becoming highly non-linear in response, or by
00959             // the camera's analog to digital converter clipping.  See
00960             // Chapter 5, “Mapping Raw Values to Linear Reference Values”
00961             // on page 65 for details of the processing model.
00962         },{
00963             "DefaultScale",
00964             50718,
00965             TIFF_RATIONAL,
00966             // Count:
00967             // 2
00968             // Value:
00969             // Value: 0: DefaultScaleH
00970             // Value: 1: DefaultScaleV
00971             // Default:
00972             // 1.0, 1.0
00973             // Usage:
00974             // Raw IFD
00975             // Description:
00976             // DefaultScale is required for cameras with non-square
00977             // pixels. It specifies the default scale factors for each
00978             // direction to convert the image to square pixels. Typically
00979             // these factors are selected to approximately preserve total
00980             // pixel count.  For CFA images that use CFALayout equal to 2,
00981             // 3, 4, or 5, such as the Fujifilm SuperCCD, these two values
00982             // should usually differ by a factor of 2.0.
00983         },{
00984             "BestQualityScale",
00985             50780,
00986             TIFF_RATIONAL,
00987             // Count:
00988             // 1
00989             // Value:
00990             // see below
00991             // Default:
00992             // 1.0
00993             // Usage:
00994             // Raw IFD
00995             // Description:
00996             // For some cameras, the best possible image quality is not
00997             // achieved by preserving the total pixel count during
00998             // conversion. For example, Fujifilm SuperCCD images have
00999             // maximum detail when their total pixel count is doubled.
01000             // This tag specifies the amount by which the values of the
01001             // DefaultScale tag need to be multiplied to achieve the best
01002             // quality image size.
01003         },{
01004             "DefaultCropOrigin",
01005             50719,
01006             TIFF_SHORT //or LONG or RATIONAL,
01007             // Count:
01008             // 2
01009             // Value:
01010             // Value: 0: DefaultCropOriginH
01011             // Value: 1: DefaultCropOriginV
01012             // Default:
01013             // 0, 0
01014             // Usage:
01015             // Raw IFD
01016             // Description:
01017             // Raw images often store extra pixels around the edges of the
01018             // final image. These extra pixels help prevent interpolation
01019             // artifacts near the edges of the final image.
01020             // Default:CropOrigin specifies the origin of the final image
01021             // area, in raw image coordinates (i.e., before the
01022             // DefaultScale has been applied), relative to the top-left
01023             // corner of the ActiveArea rectangle.
01024         },{
01025             "DefaultCropSize",
01026             50720,
01027             TIFF_SHORT // or LONG or RATIONAL,
01028             // Count:
01029             // 2
01030             // Value:
01031             // Value: 0: DefaultCropSizeH
01032             // Value: 1: DefaultCropSizeV
01033             // Default:
01034             // ImageWidth, ImageLength
01035             // Usage:
01036             // Raw IFD
01037             // Description:
01038             // Raw images often store extra pixels around the edges of the
01039             // final image. These extra pixels help prevent interpolation
01040             // artifacts near the edges of the final image.
01041             // Default:CropSize specifies the size of the final image
01042             // area, in raw image coordinates (i.e., before the
01043             // DefaultScale has been applied).
01044         },{
01045             "CalibrationIlluminant1",
01046             50778,
01047             TIFF_SHORT,
01048             // Count:
01049             // 1
01050             // Value:
01051             // See below
01052             // Default:
01053             // 0 (unknown)
01054             // Usage:
01055             // IFD 0 or Camera Profile IFD
01056             // Description:
01057             // The illuminant used for the first set of color calibration
01058             // tags. The legal values for this tag are the same as the
01059             // legal values for the LightSource EXIF tag.  See Chapter 6,
01060             // “Mapping Camera Color Space to CIE XYZ Space” on page 67
01061             // for details of the color-processing model.
01062         },{
01063             "CalibrationIlluminant2",
01064             50779,
01065             TIFF_SHORT,
01066             // Count:
01067             // 1
01068             // Value:
01069             // See below
01070             // Default:
01071             // None
01072             // Usage:
01073             // IFD 0 or Camera Profile IFD
01074             // Description:
01075             // The illuminant used for an optional second set of color
01076             // calibration tags. The legal values for this tag are the
01077             // same as the legal values for the CalibrationIlluminant1
01078             // tag; however, if both are included, neither is allowed to
01079             // have a value of 0 (unknown).  See Chapter 6, “Mapping
01080             // Camera Color Space to CIE XYZ Space” on page 67 for details
01081             // of the color-processing model.
01082         },{
01083             "ColorMatrix1",
01084             50721,
01085             TIFF_SRATIONAL,
01086             // Count:
01087             // ColorPlanes * 3
01088             // Value:
01089             // See below
01090             // Default:
01091             // None
01092             // Usage:
01093             // IFD 0 or Camera Profile IFD
01094             // Description:
01095             // ColorMatrix1 defines a transformation matrix that converts
01096             // XYZ values to reference camera native color space values,
01097             // under the first calibration illuminant. The matrix values
01098             // are stored in row scan order.  The ColorMatrix1 tag is
01099             // required for all non-monochrome DNG files.  See Chapter 6,
01100             // “Mapping Camera Color Space to CIE XYZ Space” on page 67
01101             // for details of the color-processing model.
01102         },{
01103             "ColorMatrix2",
01104             50722,
01105             TIFF_SRATIONAL,
01106             // Count:
01107             // ColorPlanes * 3
01108             // Value:
01109             // See below
01110             // Default:
01111             // None
01112             // Usage:
01113             // IFD 0 or Camera Profile IFD
01114             // Description:
01115             // ColorMatrix2 defines a transformation matrix that converts
01116             // XYZ values to reference camera native color space values,
01117             // under the second calibration illuminant. The matrix values
01118             // are stored in row scan order.  See Chapter 6, “Mapping
01119             // Camera Color Space to CIE XYZ Space” on page 67 for details
01120             // of the color-processing model.
01121         },{
01122             "CameraCalibration1",
01123             50723,
01124             TIFF_SRATIONAL,
01125             // Count:
01126             // ColorPlanes * ColorPlanes
01127             // Value:
01128             // See below
01129             // Default:
01130             // Identity matrix
01131             // Usage:
01132             // IFD 0
01133             // Description:
01134             // CameraCalibration1 defines a calibration matrix that
01135             // transforms reference camera native space values to
01136             // individual camera native space values under the first
01137             // calibration illuminant. The matrix is stored in row scan
01138             // order.  This matrix is stored separately from the matrix
01139             // specified by the ColorMatrix1 tag to allow raw converters
01140             // to swap in replacement color matrices based on
01141             // UniqueCameraModel tag, while still taking advantage of any
01142             // per-individual camera calibration performed by the camera
01143             // manufacturer.See Chapter 6, “Mapping Camera Color Space to
01144             // CIE XYZ Space” on page 67 for details of the
01145             // color-processing model.
01146         },{
01147             "CameraCalibration2",
01148             50724,
01149             TIFF_SRATIONAL,
01150             // Count:
01151             // ColorPlanes * ColorPlanes
01152             // Value:
01153             // See below
01154             // Default:
01155             // Identity matrix
01156             // Usage:
01157             // IFD 0
01158             // Description:
01159             // CameraCalibration2 defines a calibration matrix that
01160             // transforms reference camera native space values to
01161             // individual camera native space values under the second
01162             // calibration illuminant. The matrix is stored in row scan
01163             // order.  This matrix is stored separately from the matrix
01164             // specified by the ColorMatrix2 tag to allow raw converters
01165             // to swap in replacement color matrices based on
01166             // UniqueCameraModel tag, while still taking advantage of any
01167             // per-individual camera calibration performed by the camera
01168             // manufacturer.  See Chapter 6, “Mapping Camera Color Space
01169             // to CIE XYZ Space” on page 67 for details of the
01170             // color-processing model.
01171         },{
01172             "ReductionMatrix1",
01173             50725,
01174             TIFF_SRATIONAL,
01175             // Count:
01176             // 3 * ColorPlanes
01177             // Value:
01178             // See below
01179             // Default:
01180             // None
01181             // Usage:
01182             // IFD 0 or Camera Profile IFD
01183             // Description:
01184             // ReductionMatrix1 defines a dimensionality reduction matrix
01185             // for use as the first stage in converting color camera
01186             // native space values to XYZ values, under the first
01187             // calibration illuminant. This tag may only be used if
01188             // ColorPlanes is greater than 3. The matrix is stored in row
01189             // scan order.  See Chapter 6, “Mapping Camera Color Space to
01190             // CIE XYZ Space” on page 67 for details of the
01191             // color-processing model.
01192         },{
01193             "ReductionMatrix2",
01194             50726,
01195             TIFF_SRATIONAL,
01196             // Count:
01197             // 3 * ColorPlanes
01198             // Value:
01199             // See below
01200             // Default:
01201             // None
01202             // Usage:
01203             // IFD 0 or Camera Profile IFD
01204             // Description:
01205             // ReductionMatrix2 defines a dimensionality reduction matrix
01206             // for use as the first stage in converting color camera
01207             // native space values to XYZ values, under the second
01208             // calibration illuminant. This tag may only be used if
01209             // ColorPlanes is greater than 3. The matrix is stored in row
01210             // scan order.  See Chapter 6, “Mapping Camera Color Space to
01211             // CIE XYZ Space” on page 67 for details of the
01212             // color-processing model.
01213         },{
01214             "AnalogBalance",
01215             50727,
01216             TIFF_RATIONAL,
01217             // Count:
01218             // ColorPlanes
01219             // Value:
01220             // See below
01221             // Default:
01222             // All 1.0
01223             // Usage:
01224             // IFD 0
01225             // Description:
01226             // Normally the stored raw values are not white balanced,
01227             // since any digital white balancing will reduce the dynamic
01228             // range of the final image if the user decides to later
01229             // adjust the white balance; however, if camera hardware is
01230             // capable of white balancing the color channels before the
01231             // signal is digitized, it can improve the dynamic range of
01232             // the final image.
01233             // AnalogBalance defines the gain, either analog (recommended)
01234             // or digital (not recommended) that has been applied the
01235             // stored raw values.
01236             // See Chapter 6, “Mapping Camera Color Space to CIE XYZ
01237             // Space” on page 67 for details of the color-processing
01238             // model.
01239         },{
01240             "AsShotNeutral",
01241             50728,
01242             TIFF_SHORT //or RATIONAL,
01243             // Count:
01244             // ColorPlanes
01245             // Value:
01246             // See below
01247             // Default:
01248             // None
01249             // Usage:
01250             // IFD 0
01251             // Description:
01252             // AsShotNeutral specifies the selected white balance at time
01253             // of capture, encoded as the coordinates of a perfectly
01254             // neutral color in linear reference space values. The
01255             // inclusion of this tag precludes the inclusion of the
01256             // AsShotWhiteXY tag.
01257         },{
01258             "AsShotWhiteXY",
01259             50729,
01260             TIFF_RATIONAL,
01261             // Count:
01262             // 2
01263             // Value:
01264             // See below
01265             // Default:
01266             // None
01267             // Usage:
01268             // IFD 0
01269             // Description:
01270             // AsShotWhiteXY specifies the selected white balance at time
01271             // of capture, encoded as x-y chromaticity coordinates. The
01272             // inclusion of this tag precludes the inclusion of the
01273             // AsShotNeutral tag.
01274         },{
01275             "BaselineExposure",
01276             50730,
01277             TIFF_SRATIONAL,
01278             // Count:
01279             // 1
01280             // Value:
01281             // See below
01282             // Default:
01283             // 0.0
01284             // Usage:
01285             // IFD 0
01286             // Description:
01287             // Camera models vary in the trade-off they make between
01288             // highlight headroom and shadow noise. Some leave a
01289             // significant amount of highlight headroom during a normal
01290             // exposure. This allows significant negative exposure
01291             // compensation to be applied during raw conversion, but also
01292             // means normal exposures will contain more shadow
01293             // noise. Other models leave less headroom during normal
01294             // exposures. This allows for less negative exposure
01295             // compensation, but results in lower shadow noise for normal
01296             // exposures.
01297             // Because of these differences, a raw converter needs to vary
01298             // the zero point of its exposure compensation control from
01299             // model to model. BaselineExposure specifies by how much (in
01300             // EV units) to move the zero point. Positive values result in
01301             // brighter default results, while negative values result in
01302             // darker default results.
01303         },{
01304             "BaselineNoise",
01305             50731,
01306             TIFF_RATIONAL,
01307             // Count:
01308             // 1
01309             // Value:
01310             // See below
01311             // Default:
01312             // 1.0
01313             // Usage:
01314             // IFD 0
01315             // Description:
01316             // BaselineNoise specifies the relative noise level of the
01317             // camera model at a baseline ISO value of 100, compared to a
01318             // reference camera model.
01319             // Since noise levels tend to vary approximately with the
01320             // square root of the ISO value, a raw converter can use this
01321             // value, combined with the current ISO, to estimate the
01322             // relative noise level of the current image.
01323         },{
01324             "BaselineSharpness",
01325             50732,
01326             TIFF_RATIONAL,
01327             // Count:
01328             // 1
01329             // Value:
01330             // See below
01331             // Default:
01332             // 1.0
01333             // Usage:
01334             // IFD 0
01335             // Description:
01336             // BaselineSharpness specifies the relative amount of
01337             // sharpening required for this camera model, compared to a
01338             // reference camera model. Camera models vary in the strengths
01339             // of their anti-aliasing filters. Cameras with weak or no
01340             // filters require less sharpening than cameras with strong
01341             // anti-aliasing filters.
01342         },{
01343             "BayerGreenSplit",
01344             50733,
01345             TIFF_LONG,
01346             // Count:
01347             // 1
01348             // Value:
01349             // See below
01350             // Default:
01351             // 0
01352             // Usage:
01353             // Raw IFD
01354             // Description:
01355             // BayerGreenSplit only applies to CFA images using a Bayer
01356             // pattern filter array. This tag specifies, in arbitrary
01357             // units, how closely the values of the green pixels in the
01358             // blue/green rows track the values of the green pixels in the
01359             // red/green rows.
01360             // A value of zero means the two kinds of green pixels track
01361             // closely, while a non-zero value means they sometimes
01362             // diverge. The useful range for this tag is from 0 (no
01363             // divergence) to about 5000 (quite large divergence).
01364         },{
01365             "LinearResponseLimit",
01366             50734,
01367             TIFF_RATIONAL,
01368             // Count:
01369             // 1
01370             // Value:
01371             // See below
01372             // Default:
01373             // 1.0
01374             // Usage:
01375             // IFD 0
01376             // Description:
01377             // Some sensors have an unpredictable non-linearity in their
01378             // response as they near the upper limit of their encoding
01379             // range. This non-linearity results in color shifts in the
01380             // highlight areas of the resulting image unless the raw
01381             // converter compensates for this effect.
01382             // LinearResponseLimit specifies the fraction of the encoding
01383             // range above which the response may become significantly
01384             // non-linear.
01385         },{
01386             "CameraSerialNumber",
01387             50735,
01388             TIFF_ASCII,
01389             // Count:
01390             // String length including null
01391             // Value:
01392             // Null terminated string
01393             // Default:
01394             // None
01395             // Usage:
01396             // IFD 0
01397             // Description:
01398             // CameraSerialNumber contains the serial number of the camera or camera body that captured the image.
01399         },{
01400             "LensInfo",
01401             50736,
01402             TIFF_RATIONAL,
01403             // Count:
01404             // 4
01405             // Value:
01406             // Value: 0: Minimum focal length in mm.
01407             // Value: 1: Maximum focal length in mm.
01408             // Value: 2: Minimum (maximum aperture) f-stop at minimum focal length.
01409             // Value: 3: Minimum (maximum aperture) f-stop at maximum focal length.
01410             // Default:
01411             // none
01412             // Usage:
01413             // IFD 0
01414             // Description:
01415             // LensInfo contains information about the lens that captured
01416             // the image. If the minimum f-stops are unknown, they should
01417             // be encoded as 0/0.
01418         },{
01419             "ChromaBlurRadius",
01420             50737,
01421             TIFF_RATIONAL,
01422             // Count:
01423             // 1
01424             // Value:
01425             // Chroma blur radius in pixels
01426             // Default:
01427             // See below
01428             // Usage:
01429             // Raw IFD
01430             // Description:
01431             // ChromaBlurRadius provides a hint to the DNG reader about
01432             // how much chroma blur should be applied to the image. If
01433             // this tag is omitted, the reader will use its default amount
01434             // of chroma blurring.
01435             // Normally this tag is only included for non-CFA images,
01436             // since the amount of chroma blur required for mosaic images
01437             // is highly dependent on the de-mosaic algorithm, in which
01438             // case the DNG reader's default value is likely optimized for
01439             // its particular de-mosaic algorithm.
01440         },{
01441             "AntiAliasStrength",
01442             50738,
01443             TIFF_RATIONAL,
01444             // Count:
01445             // 1
01446             // Value:
01447             // Relative strength of the camera's anti-alias filter
01448             // Default:
01449             // 1.0
01450             // Usage:
01451             // Raw IFD
01452             // Description:
01453             // AntiAliasStrength provides a hint to the DNG reader about
01454             // how strong the camera's anti-alias filter is. A value of
01455             // 0.0 means no anti-alias filter (i.e., the camera is prone
01456             // to aliasing artifacts with some subjects), while a value of
01457             // 1.0 means a strong anti-alias filter (i.e., the camera
01458             // almost never has aliasing artifacts).
01459             // Note that this tag overlaps in functionality with the
01460             // BaselineSharpness tag. The primary difference is the
01461             // AntiAliasStrength tag is used as a hint to the de-mosaic
01462             // algorithm, while the BaselineSharpness tag is used as a
01463             // hint to a sharpening algorithm applied later in the
01464             // processing pipeline.
01465         },{
01466             "ShadowScale",
01467             50739,
01468             TIFF_RATIONAL,
01469             // Count:
01470             // 1
01471             // Value:
01472             // See below
01473             // Default:
01474             // 1.0
01475             // Usage:
01476             // IFD 0
01477             // Description:
01478             // This tag is used by Adobe Camera Raw to control the sensitivity of its "Shadows" slider.
01479         },{
01480             "DNGPrivateData",
01481             50740,
01482             TIFF_BYTE,
01483             // Count: Length of private data block in bytes Value: See
01484             // below Default: None Usage: IFD 0 Description:
01485             // DNGPrivateData provides a way for camera manufacturers to
01486             // store private data in the DNG file for use by their own raw
01487             // converters, and to have that data preserved by programs
01488             // that edit DNG files.
01489             // The private data must follow these rules:
01490             // The private data must start with a null-terminated ASCII
01491             // string identifying the data. The first part of this string
01492             // must be the manufacturer's name, to avoid conflicts between
01493             // manufacturers.
01494             // *The private data must be self-contained. All offsets
01495             // within the private data must be offsets relative to the
01496             // start of the private data, and must not point to bytes
01497             // outside the private data.
01498             // *The private data must be byte-order independent. If a DNG
01499             // file is converted from a big-endian file to a
01500             // little-endian file, the data must remain valid.
01501         },{
01502             "MakerNoteSafety",
01503             50741,
01504             TIFF_SHORT,
01505             // Count:
01506             // 1
01507             // Value:
01508             // 0 (unsafe) or 1 (safe)
01509             // Default:
01510             // 0
01511             // Usage:
01512             // IFD 0
01513             // Description:
01514             // MakerNoteSafety lets the DNG reader know whether the EXIF
01515             // MakerNote tag is safe to preserve along with the rest of
01516             // the EXIF data. File browsers and other image management
01517             // software processing an image with a preserved MakerNote
01518             // should be aware that any thumbnail image embedded in the
01519             // MakerNote may be stale, and may not reflect the current
01520             // state of the full size image.
01521             // A MakerNote is safe to preserve if it follows these rules:
01522             // *The MakerNote data must be self-contained. All offsets
01523             // within the MakerNote must be offsets relative to the start
01524             // of the MakerNote, and must not point to bytes outside the
01525             // MakerNote.
01526             // *The MakerNote data must be byte-order independent. Moving
01527             // *the data to a file with a different byte order must not
01528             // *invalidate it.
01529         },{
01530             "RawDataUniqueID",
01531             50781,
01532             TIFF_BYTE,
01533             // Count:
01534             // 16
01535             // Value:
01536             // See below
01537             // Default:
01538             // Optional
01539             // Usage:
01540             // IFD 0
01541             // Description:
01542             // This tag contains a 16-byte unique identifier for the raw
01543             // image data in the DNG file. DNG readers can use this tag to
01544             // recognize a particular raw image, even if the file's name
01545             // or the metadata contained in the file has been changed.  If
01546             // a DNG writer creates such an identifier, it should do so
01547             // using an algorithm that will ensure that it is very
01548             // unlikely two different images will end up having the same
01549             // identifier.
01550         },{
01551             "OriginalRawFileName",
01552             50827,
01553             TIFF_ASCII // or BYTE,
01554             // Count:
01555             // Byte count including null
01556             // Value:
01557             // Null terminated UTF-8 encoded Unicode string
01558             // Default:
01559             // Optional
01560             // Usage:
01561             // IFD 0
01562             // Description:
01563             // If the DNG file was converted from a non-DNG raw file, then
01564             // this tag contains the file name of that original raw file.
01565         },{
01566             "OriginalRawFileData",
01567             50828,
01568             TIFF_UNDEFINED,
01569             // Count:
01570             // Byte count of embedded data
01571             // Value:
01572             // See below
01573             // Default:
01574             // Optional
01575             // Usage:
01576             // IFD 0
01577             // Description:
01578             // If the DNG file was converted from a non-DNG raw file, then
01579             // this tag contains the compressed contents of that original
01580             // raw file.  The contents of this tag always use the
01581             // big-endian byte order.
01582             // The tag contains a sequence of data blocks. Future versions
01583             // of the DNG specification may define additional data blocks,
01584             // so DNG readers should ignore extra bytes when parsing this
01585             // tag. DNG readers should also detect the case where data
01586             // blocks are missing from the end of the sequence, and should
01587             // assume a default value for all the missing blocks.  There
01588             // are no padding or alignment bytes between data blocks. The
01589             // sequence of data blocks is:
01590             // 1.Compressed data fork of original raw file.
01591             // 2.Compressed Mac OS resource fork of original raw file.
01592             // 3.Mac OS file type (4 bytes) of original raw file.
01593             // 4.Mac OS file creator (4 bytes) of original raw file.
01594             // 5.Compressed data fork of sidecar ".THM" file.
01595             // 6.Compressed Mac OS resource fork of sidecar ".THM" file.
01596             // 7.Mac OS file type (4 bytes) of sidecar ".THM" file.
01597             // 8.Mac OS file creator (4 bytes) of sidecar ".THM" file.
01598             // If the Mac OS file types or creator codes are unknown, zero is stored.
01599             // If the Mac OS resource forks do not exist, they should be encoded as zero length forks.
01600             // Each fork (data or Mac OS resource) is compressed and encoded as:
01601             // ForkLength = first four bytes. This is the uncompressed
01602             // length of this fork. If this value is zero, then no more
01603             // data is stored for this fork.
01604             // From ForkLength, compute the number of 64K compression blocks used for this data (the last block is usually smaller than 64K):
01605             // ForkBlocks = Floor ((ForkLength + 65535) / 65536)
01606             // The next (ForkBlocks + 1) 4-byte values are an index into
01607             // the compressed data. The first ForkBlock values are offsets
01608             // from the start of the data for this fork to the start of
01609             // the compressed data for the corresponding compression
01610             // block. The last value is an offset from the start of the
01611             // data for this fork to the end of the data for this fork.
01612             // Following this index is the ZIP compressed data for each 64K compression block.
01613         },{
01614             "ActiveArea",
01615             50829,
01616             TIFF_SHORT // or LONG,
01617             // Count:
01618             // 4
01619             // Value:
01620             // See below
01621             // Default:
01622             // 0, 0, ImageLength, ImageWidth
01623             // Usage:
01624             // Raw IFD
01625             // Description:
01626             // This rectangle defines the active (non-masked) pixels of
01627             // the sensor. The order of the rectangle coordinates is: top,
01628             // left, bottom, right.
01629         },{
01630             "MaskedAreas",
01631             50830,
01632             TIFF_SHORT // or LONG,
01633             // Count:
01634             // 4 * number of rectangles
01635             // Value:
01636             // See below
01637             // Default:
01638             // None
01639             // Usage:
01640             // Raw IFD
01641             // Description:
01642             // This tag contains a list of non-overlapping rectangle
01643             // coordinates of fully masked pixels, which can be optionally
01644             // used by DNG readers to measure the black encoding level.
01645             // The order of each rectangle's coordinates is: top, left,
01646             // bottom, right.  If the raw image data has already had its
01647             // black encoding level subtracted, then this tag should not
01648             // be used, since the masked pixels are no longer useful.
01649             // Note that DNG writers are still required to include
01650             // estimate and store the black encoding level using the black
01651             // level DNG tags. Support for the MaskedAreas tag is not
01652             // required of DNG readers.
01653         },{
01654             "AsShotICCProfile",
01655             50831,
01656             TIFF_UNDEFINED,
01657             // Count:
01658             // Length of ICC profile in bytes
01659             // Value:
01660             // See below
01661             // Default:
01662             // Optional
01663             // Usage:
01664             // IFD 0
01665             // Description:
01666             // This tag contains an ICC profile that, in conjunction with
01667             // the AsShotPreProfileMatrix tag, provides the camera
01668             // manufacturer with a way to specify a default color
01669             // rendering from camera color space coordinates (linear
01670             // reference values) into the ICC profile connection space.
01671             // The ICC profile connection space is an output referred
01672             // colorimetric space, whereas the other color calibration
01673             // tags in DNG specify a conversion into a scene referred
01674             // colorimetric space. This means that the rendering in this
01675             // profile should include any desired tone and gamut mapping
01676             // needed to convert between scene referred values and output
01677             // referred values.  DNG readers that have their own tone and
01678             // gamut mapping controls (such as Adobe Camera Raw) will
01679             // probably ignore this tag pair.
01680         },{
01681             "AsShotPreProfileMatrix",
01682             50832,
01683             TIFF_SRATIONAL,
01684             // Count:
01685             // 3 * ColorPlanes or ColorPlanes * ColorPlanes
01686             // Value:
01687             // See below
01688             // Default:
01689             // Identity matrix
01690             // Usage:
01691             // IFD 0
01692             // Description:
01693             // This tag is used in conjunction with the AsShotICCProfile
01694             // tag. It specifies a matrix that should be applied to the
01695             // camera color space coordinates before processing the values
01696             // through the ICC profile specified in the AsShotICCProfile
01697             // tag.  The matrix is stored in the row scan order.
01698             // If ColorPlanes is greater than three, then this matrix can
01699             // (but is not required to) reduce the dimensionality of the
01700             // color data down to three components, in which case the
01701             // AsShotICCProfile should have three rather than ColorPlanes
01702             // input components.
01703         },{
01704             "CurrentICCProfile",
01705             50833,
01706             TIFF_UNDEFINED,
01707             // Count:
01708             // Length of ICC profile in bytes
01709             // Value:
01710             // See below
01711             // Default:
01712             // Optional
01713             // Usage:
01714             // IFD 0
01715             // Description:
01716             // This tag is used in conjunction with the CurrentPreProfileMatrix tag.
01717             // The CurrentICCProfile and CurrentPreProfileMatrix tags have
01718             // the same purpose and usage as the AsShotICCProfile and
01719             // AsShotPreProfileMatrix tag pair, except they are for use by
01720             // raw file editors rather than camera manufacturers.
01721         },{
01722             "CurrentPreProfileMatrix",
01723             50834,
01724             TIFF_SRATIONAL,
01725             // Count:
01726             // 3 * ColorPlanes or ColorPlanes * ColorPlanes
01727             // Value:
01728             // See below
01729             // Default:
01730             // Identity matrix
01731             // Usage:
01732             // IFD 0
01733             // Description:
01734             // This tag is used in conjunction with the CurrentICCProfile tag.
01735             // The CurrentICCProfile and CurrentPreProfileMatrix tags have
01736             // the same purpose and usage as the AsShotICCProfile and
01737             // AsShotPreProfileMatrix tag pair, except they are for use by
01738             // raw file editors rather than camera manufacturers.
01739         },{
01740             "ColorimetricReference",
01741             50879,
01742             TIFF_SHORT,
01743             // Count:
01744             // 1
01745             // Value:
01746             // 0 or 1
01747             // Default:
01748             // 0
01749             // Usage:
01750             // IFD 0
01751             // Description:
01752             // The DNG color model documents a transform between camera
01753             // colors and CIE XYZ values. This tag describes the
01754             // colorimetric reference for the CIE XYZ values.
01755             // 0 = The XYZ values are scene-referred.
01756             // 1 = The XYZ values are output-referred, using the ICC
01757             // profile perceptual dynamic range.
01758             // This tag allows output-referred data to be stored in DNG
01759             // files and still processed correctly by DNG readers.
01760         },{
01761             "CameraCalibrationSignature",
01762             50931,
01763             TIFF_ASCII // or BYTE,
01764             // Count:
01765             // Length of string including null
01766             // Value:
01767             // Null terminated string
01768             // Default:
01769             // Empty string
01770             // Usage:
01771             // IFD 0
01772             // Description:
01773             // A UTF-8 encoded string associated with the
01774             // CameraCalibration1 and CameraCalibration2 tags. The
01775             // CameraCalibration1 and CameraCalibration2 tags should only
01776             // be used in the DNG color transform if the string stored in
01777             // the CameraCalibrationSignature tag exactly matches the
01778             // string stored in the ProfileCalibrationSignature tag for
01779             // the selected camera profile.
01780         },{
01781             "ProfileCalibrationSignature",
01782             50932,
01783             TIFF_ASCII // or BYTE,
01784             // Count:
01785             // Length of string including null
01786             // Value:
01787             // Null terminated string
01788             // Default:
01789             // Empty string
01790             // Usage:
01791             // IFD 0 or Camera Profile IFD
01792             // Description:
01793             // A UTF-8 encoded string associated with the camera profile
01794             // tags. The CameraCalibration1 and CameraCalibration2 tags
01795             // should only be used in the DNG color transfer if the string
01796             // stored in the CameraCalibrationSignature tag exactly
01797             // matches the string stored in the
01798             // ProfileCalibrationSignature tag for the selected camera
01799             // profile.
01800         },{
01801             "ExtraCameraProfiles",
01802             50933,
01803             TIFF_LONG,
01804             // Count:
01805             // Number of extra camera profiles
01806             // Value:
01807             // Offsets to Camera Profile IFDs
01808             // Default:
01809             // Empty list
01810             // Usage:
01811             // IFD 0
01812             // Description:
01813             // A list of file offsets to extra Camera Profile IFDs. The
01814             // format of a camera profile begins with a 16-bit byte order
01815             // mark (MM or II) followed by a 16-bit "magic" number equal
01816             // to 0x4352 (CR), a 32-bit IFD offset, and then a standard
01817             // TIFF format IFD. All offsets are relative to the start of
01818             // the byte order mark. Note that the primary camera profile
01819             // tags should be stored in IFD 0, and the ExtraCameraProfiles
01820             // tag should only be used if there is more than one camera
01821             // profile stored in the DNG file.
01822         },{
01823             "AsShotProfileName",
01824             50934,
01825             TIFF_ASCII // or BYTE,
01826             // Count:
01827             // Length of string including null
01828             // Value:
01829             // Null terminated string
01830             // Default:
01831             // Optional
01832             // Usage:
01833             // IFD 0
01834             // Description:
01835             // A UTF-8 encoded string containing the name of the "as shot"
01836             // camera profile, if any.
01837         },{
01838             "NoiseReductionApplied",
01839             50935,
01840             TIFF_RATIONAL,
01841             // Count:
01842             // 1
01843             // Value:
01844             // See below
01845             // Default:
01846             // 0/0
01847             // Usage:
01848             // Raw IFD
01849             // Description:
01850             // This tag indicates how much noise reduction has been
01851             // applied to the raw data on a scale of 0.0 to 1.0. A 0.0
01852             // value indicates that no noise reduction has been applied. A
01853             // 1.0 value indicates that the "ideal" amount of noise
01854             // reduction has been applied, i.e. that the DNG reader should
01855             // not apply additional noise reduction by default. A value of
01856             // 0/0 indicates that this parameter is unknown.
01857         },{
01858             "ProfileName",
01859             50936,
01860             TIFF_ASCII // or BYTE,
01861             // Count:
01862             // Length of string including null
01863             // Value:
01864             // Null terminated string
01865             // Default:
01866             // None
01867             // Usage:
01868             // IFD 0 or Camera Profile IFD
01869             // Description:
01870             // A UTF-8 encoded string containing the name of the camera
01871             // profile. This tag is optional if there is only a single
01872             // camera profile stored in the file but is required for all
01873             // camera profiles if there is more than one camera profile
01874             // stored in the file.
01875         },{
01876             "ProfileHueSatMapDims",
01877             50937,
01878             TIFF_LONG,
01879             // Count:
01880             // 3
01881             // Value:
01882             // HueDivisions SaturationDivisions ValueDivisions
01883             // Default:
01884             // None
01885             // Usage:
01886             // IFD 0 or Camera Profile IFD
01887             // Description:
01888             // This tag specifies the number of input samples in each
01889             // dimension of the hue/saturation/value mapping tables. The
01890             // data for these tables are stored in ProfileHueSatMapData1
01891             // and ProfileHueSatMapData2 tags. Allowed values include the
01892             // following:
01893             // *HueDivisions >= 1
01894             // *SaturationDivisions >= 2
01895             // *ValueDivisions >=1
01896             // The most common case has ValueDivisions equal to 1, so only
01897             // hue and saturation are used as inputs to the mapping table.
01898         },{
01899             "ProfileHueSatMapData1",
01900             50938,
01901             TIFF_FLOAT,
01902             // Count:
01903             // HueDivisions * SaturationDivisions * ValueDivisions * 3
01904             // Value:
01905             // See below
01906             // Default:
01907             // None
01908             // Usage:
01909             // IFD 0 or Camera Profile IFD
01910             // Description:
01911             // This tag contains the data for the first
01912             // hue/saturation/value mapping table. Each entry of the table
01913             // contains three 32-bit IEEE floating-point values. The first
01914             // entry is hue shift in degrees; the second entry is
01915             // saturation scale factor; and the third entry is a value
01916             // scale factor. The table entries are stored in the tag in
01917             // nested loop order, with the value divisions in the outer
01918             // loop, the hue divisions in the middle loop, and the
01919             // saturation divisions in the inner loop. All zero input
01920             // saturation entries are required to have a value scale
01921             // factor of 1.0. The hue/saturation/value table application
01922             // is described in detail in Chapter 6.
01923         },{
01924             "ProfileHueSatMapData2",
01925             50939,
01926             TIFF_FLOAT,
01927             // Count:
01928             // HueDivisions * SaturationDivisions * ValueDivisions * 3
01929             // Value:
01930             // See below
01931             // Default:
01932             // None
01933             // Usage:
01934             // IFD 0 or Camera Profile IFD
01935             // Description:
01936             // This tag contains the data for the second
01937             // hue/saturation/value mapping table. Each entry of the table
01938             // contains three 32-bit IEEE floating-point values. The first
01939             // entry is hue shift in degrees; the second entry is a
01940             // saturation scale factor; and the third entry is a value
01941             // scale factor. The table entries are stored in the tag in
01942             // nested loop order, with the value divisions in the outer
01943             // loop, the hue divisions in the middle loop, and the
01944             // saturation divisions in the inner loop. All zero input
01945             // saturation entries are required to have a value scale
01946             // factor of 1.0. The hue/saturation/value table application
01947             // is described in detail in Chapter 6.
01948         },{
01949             "ProfileToneCurve",
01950             50940,
01951             TIFF_FLOAT,
01952             // Count:
01953             // Samples * 2
01954             // Value:
01955             // See below
01956             // Default:
01957             // None
01958             // Usage:
01959             // IFD 0 or Camera Profile IFD
01960             // Description:
01961             // This tag contains a default tone curve that can be applied
01962             // while processing the image as a starting point for user
01963             // adjustments. The curve is specified as a list of 32-bit
01964             // IEEE floating-point value pairs in linear gamma. Each
01965             // sample has an input value in the range of 0.0 to 1.0, and
01966             // an output value in the range of 0.0 to 1.0. The first
01967             // sample is required to be (0.0, 0.0), and the last sample is
01968             // required to be (1.0, 1.0). Interpolated the curve using a
01969             // cubic spline.
01970         },{
01971             "ProfileEmbedPolicy",
01972             50941,
01973             TIFF_LONG,
01974             // Count:
01975             // 1
01976             // Value:
01977             // See below
01978             // Default:
01979             // 0
01980             // Usage:
01981             // IFD 0 or Camera Profile IFD
01982             // Description:
01983             // This tag contains information about the usage rules for the
01984             // associated camera profile. The valid values and meanings
01985             // are:
01986             // *0 = “allow copying”. The camera profile can be used to
01987             // *process, or be embedded in, any DNG file. It can be copied
01988             // *from DNG files to other DNG files, or copied from DNG
01989             // *files and stored on the user’s system for use in
01990             // *processing or embedding in any DNG file. The camera
01991             // *profile may not be used to process non-DNG files.
01992             // *1 = “embed if used”. This value applies the same rules as
01993             // *“allow copying”, except it does not allow copying the
01994             // *camera profile from a DNG file for use in processing any
01995             // *image other than the image in which it is embedded, unless
01996             // *the profile is already stored on the user’s system.
01997             // *2 = “embed never”. This value only applies to profiles
01998             // *stored on a user’s system but not already embedded in DNG
01999             // *files. These stored profiles can be used to process images
02000             // *but cannot be embedded in files. If a camera profile is
02001             // *already embedded in a DNG file, then this value has the
02002             // *same restrictions as “embed if used”.
02003             // *3 = “no restrictions”. The camera profile creator has not
02004             // *placed any restrictions on the use of the camera profile.
02005         },{
02006             "ProfileCopyright",
02007             50942,
02008             TIFF_ASCII // or BYTE,
02009             // Count:
02010             // Length of string including null
02011             // Value:
02012             // Null terminated string
02013             // Default:
02014             // Optional
02015             // Usage:
02016             // IFD 0 or Camera Profile IFD
02017             // Description:
02018             // A UTF-8 encoded string containing the copyright information
02019             // for the camera profile. This string always should be
02020             // preserved along with the other camera profile tags.
02021         },{
02022             "ForwardMatrix1",
02023             50964,
02024             TIFF_SRATIONAL,
02025             // Count:
02026             // 3 * ColorPlanes
02027             // Value:
02028             // See below
02029             // Default:
02030             // Optional
02031             // Usage:
02032             // IFD 0 or Camera Profile IFD
02033             // Description:
02034             // This tag defines a matrix that maps white balanced camera
02035             // colors to XYZ D50 colors. Application is described in
02036             // detail in Chapter 6.
02037         },{
02038             "ForwardMatrix2",
02039             50965,
02040             TIFF_SRATIONAL,
02041             // Count:
02042             // 3 * ColorPlanes
02043             // Value:
02044             // See below
02045             // Default:
02046             // Optional
02047             // Usage:
02048             // IFD 0 or Camera Profile IFD
02049             // Description:
02050             // This tag defines a matrix that maps white balanced camera
02051             // colors to XYZ D50 colors. Application is described in
02052             // detail in Chapter 6.
02053         },{
02054             "PreviewApplicationName",
02055             50966,
02056             TIFF_ASCII // or BYTE,
02057             // Count:
02058             // Length of string including null
02059             // Value:
02060             // Null terminated string
02061             // Default:
02062             // Optional
02063             // Usage:
02064             // Preview IFD
02065             // Description:
02066             // A UTF-8 encoded string containing the name of the
02067             // application that created the preview stored in the IFD.
02068         },{
02069             "PreviewApplicationVersion",
02070             50967,
02071             TIFF_ASCII // or BYTE,
02072             // Count:
02073             // Length of string including null
02074             // Value:
02075             // Null terminated string
02076             // Default:
02077             // Optional
02078             // Usage:
02079             // Preview IFD
02080             // Description:
02081             // A UTF-8 encoded string containing the version number of the application that created the preview stored in the IFD.
02082         },{
02083             "PreviewSettingsName",
02084             50968,
02085             TIFF_ASCII // or BYTE,
02086             // Count:
02087             // Length of string including null
02088             // Value:
02089             // Null terminated string
02090             // Default:
02091             // Optional
02092             // Usage:
02093             // Preview IFD
02094             // Description:
02095             // A UTF-8 encoded string containing the name of the
02096             // conversion settings (for example, snapshot name) used for
02097             // the preview stored in the IFD.
02098         },{
02099             "PreviewSettingsDigest",
02100             50969,
02101             TIFF_BYTE,
02102             // Count:
02103             // 16
02104             // Value:
02105             // See below
02106             // Default:
02107             // Optional
02108             // Usage:
02109             // Preview IFD
02110             // Description:
02111             // A unique ID of the conversion settings (for example, MD5 digest) used to render the preview stored in the IFD.
02112         },{
02113             "PreviewColorSpace",
02114             50970,
02115             TIFF_LONG,
02116             // Count:
02117             // 1
02118             // Value:
02119             // See below
02120             // Default:
02121             // See below
02122             // Usage:
02123             // Preview IFD
02124             // Description:
02125             // This tag specifies the color space in which the rendered preview in this IFD is stored. The valid values include:
02126             // *0 = Unknown
02127             // *1 = Gray Gamma 2.2
02128             // *2 = sRGB
02129             // *3 = Adobe RGB
02130             // *4 = ProPhoto RGB
02131             // The default value for this tag is sRGB for color previews and Gray Gamma 2.2 for monochrome previews.
02132         },{
02133             "PreviewDateTime",
02134             50971,
02135             TIFF_ASCII,
02136             // Count:
02137             // Length of string including null
02138             // Value:
02139             // Null terminated string
02140             // Default:
02141             // Optional
02142             // Usage:
02143             // Preview IFD
02144             // Description:
02145             // This tag is an ASCII string containing the name of the
02146             // date/time at which the preview stored in the IFD was
02147             // rendered. The date/time is encoded using ISO 8601 format.
02148         },{
02149             "RawImageDigest",
02150             50972,
02151             TIFF_BYTE,
02152             // Count:
02153             // 16
02154             // Value:
02155             // See below
02156             // Default:
02157             // Optional
02158             // Usage:
02159             // IFD 0
02160             // Description:
02161             // This tag is an MD5 digest of the raw image data. All pixels
02162             // in the image are processed in row-scan order. Each pixel is
02163             // zero padded to 16 or 32 bits deep (16-bit for data less
02164             // than or equal to 16 bits deep, 32-bit otherwise). The data
02165             // for each pixel is processed in little-endian byte order.
02166         },{
02167             "OriginalRawFileDigest",
02168             50973,
02169             TIFF_BYTE,
02170             // Count:
02171             // 16
02172             // Value:
02173             // See below
02174             // Default:
02175             // Optional
02176             // Usage:
02177             // IFD 0
02178             // Description:
02179             // This tag is an MD5 digest of the data stored in the OriginalRawFileData tag.
02180         },{
02181             "SubTileBlockSize",
02182             50974,
02183             TIFF_SHORT // or LONG,
02184             // Count:
02185             // 2
02186             // Value:
02187             // SubTileBlockRows SubTileBlockCols
02188             // Default:
02189             // 1, 1
02190             // Usage:
02191             // Raw IFD
02192             // Description:
02193             // Normally, the pixels within a tile are stored in simple
02194             // row-scan order. This tag specifies that the pixels within a
02195             // tile should be grouped first into rectangular blocks of the
02196             // specified size. These blocks are stored in row-scan
02197             // order. Within each block, the pixels are stored in row-scan
02198             // order. The use of a non-default value for this tag requires
02199             // setting the DNGBackwardVersion tag to at least 1.2.0.0.
02200         },{
02201             "RowInterleaveFactor",
02202             50975,
02203             TIFF_SHORT // or LONG,
02204             // Count:
02205             // 1
02206             // Value:
02207             // RowInterleaveFactor
02208             // Default:
02209             // 1
02210             // Usage:
02211             // Raw IFD
02212             // Description:
02213             // This tag specifies that rows of the image are stored in
02214             // interleaved order. The value of the tag specifies the
02215             // number of interleaved fields. The use of a non-default
02216             // value for this tag requires setting the DNGBackwardVersion
02217             // tag to at least 1.2.0.0.
02218         },{
02219             "ProfileLookTableDims",
02220             50981,
02221             TIFF_LONG,
02222             // Count:
02223             // 3
02224             // Value:
02225             // HueDivisions SaturationDivisions ValueDivisions
02226             // Default:
02227             // none
02228             // Usage:
02229             // IFD 0 or Camera Profile IFD
02230             // Description:
02231             // This tag specifies the number of input samples in each
02232             // dimension of a default "look" table. The data for this
02233             // table is stored in the ProfileLookTableData tag. Allowed
02234             // values include:
02235             // HueDivisions >= 1
02236             // SaturationDivisions >= 2
02237             // Value:Divisions >= 1
02238         },{
02239             "ProfileLookTableData",
02240             50982,
02241             TIFF_FLOAT,
02242             // Count:
02243             // HueDivisions * SaturationDivisions * ValueDivisions * 3
02244             // Value:
02245             // See below
02246             // Default:
02247             // none
02248             // Usage:
02249             // IFD 0 or Camera Profile IFD
02250             // Description:
02251             // This tag contains a default "look" table that can be
02252             // applied while processing the image as a starting point for
02253             // user adjustment. This table uses the same format as the
02254             // tables stored in the ProfileHueSatMapData1 and
02255             // ProfileHueSatMapData2 tags, and is applied in the same
02256             // color space. However, it should be applied later in the
02257             // processing pipe, after any exposure compensation and/or
02258             // fill light stages, but before any tone curve stage.  Each
02259             // entry of the table contains three 32-bit IEEE
02260             // floating-point values. The first entry is hue shift in
02261             // degrees, the second entry is a saturation scale factor, and
02262             // the third entry is a value scale factor.  The table entries
02263             // are stored in the tag in nested loop order, with the value
02264             // divisions in the outer loop, the hue divisions in the
02265             // middle loop, and the saturation divisions in the inner
02266             // loop.  All zero input saturation entries are required to
02267             // have a value scale factor of 1.0.
02268         },{
02269             "OpcodeList1",
02270             51008,
02271             TIFF_UNDEFINED,
02272             // Count:
02273             // Variable
02274             // Value:
02275             // Opcode List
02276             // Default:
02277             // Empty List
02278             // Usage:
02279             // Raw IFD
02280             // Description:
02281             // Specifies the list of opcodes that should be applied to the
02282             // raw image, as read directly from the file. The format and
02283             // processing details of an opcode list are described in
02284             // Chapter 7, "Opcode List Processing".
02285         },{
02286             "OpcodeList2",
02287             51009,
02288             TIFF_UNDEFINED,
02289             // Count:
02290             // Variable
02291             // Value:
02292             // Opcode List
02293             // Default:
02294             // Empty List
02295             // Usage:
02296             // Raw IFD
02297             // Description:
02298             // Specifies the list of opcodes that should be applied to the
02299             // raw image, just after it has been mapped to linear
02300             // reference values. The format and processing details of an
02301             // opcode list are described in Chapter 7, "Opcode List
02302             // Processing".
02303         },{
02304             "OpcodeList3",
02305             51022,
02306             TIFF_UNDEFINED,
02307             // Count:
02308             // Variable
02309             // Value:
02310             // Opcode List
02311             // Default:
02312             // Empty List
02313             // Usage:
02314             // Raw IFD
02315             // Description:
02316             // Specifies the list of opcodes that should be applied to the
02317             // raw image, just after it has been demosaiced. The format
02318             // and processing details of an opcode list are described in
02319             // Chapter 7, "Opcode List Processing".
02320         },{
02321             "NoiseProfile",
02322             51041,
02323             TIFF_DOUBLE,
02324             // Count:
02325             // 2 or 2 * ColorPlanes
02326             // Value:
02327             // See Below
02328             // Default:
02329             // Value:s are estimated from BaselineNoise tag (see below).
02330             // Usage:
02331             // Raw IFD
02332             // Description:
02333             // NoiseProfile describes the amount of noise in a raw
02334             // image. Specifically, this tag models the amount of
02335             // signal-dependent photon (shot) noise and signal-independent
02336             // sensor readout noise, two common sources of noise in raw
02337             // images. The model assumes that the noise is white and
02338             // spatially independent, ignoring fixed pattern effects and
02339             // other sources of noise (e.g., pixel response
02340             // non-uniformity, spatially-dependent thermal effects, etc.).
02341             // This tag is intended to be used to describe the amount of
02342             // noise present in unprocessed raw image data. When noise
02343             // reduction has already been applied to the raw data (i.e.,
02344             // NoiseReductionApplied0), this tag may be used to estimate
02345             // the white component of the residual noise.  For the
02346             // purposes of this tag, noise is defined as the standard
02347             // deviation of a random variable x, where xrepresents a
02348             // recorded linear signal in the range x01[,]. The
02349             // two-parameter noise model isNixSixOi+= for parameters
02350             // (SiOi), where Siis a scale term that models the amount of
02351             // sensor amplification, and Oiis an offset term that models
02352             // the amount of sensor readout noise. A more detailed
02353             // explanation of this model is given below.  The data
02354             // elements for this tag are the nsets of noise model
02355             // parameters:S1O1S2O2SnO Note that n must be 1 (i.e.,
02356             // tag count is 2) or equal to the number of color planes in
02357             // the image (i.e., tag count is 2ColorPlanes). When n1=, the
02358             // two specified parameters (S1O1) define the same noise
02359             // model for all image planes. Whenn is equal to the number of
02360             // image planes, the parameters (SiOi) define the noise model
02361             // for the ith image plane, e.g., (S1O1) correspond to the
02362             // first image plane, (S2O2) correspond to the second image
02363             // plane, etc. The order of the parameters follows the plane
02364             // order specified by the CFAPlaneColor tag.  EachSi term must
02365             // be positive (Si0), and eachOi term must be non-negative
02366             // (Oi0).  A BaselineNoise tag value of 1.0 at ISO 100
02367             // corresponds approximately to NoiseProfile parameter values
02368             // of Si2105–=and Oi4.5107–=(e.g., standard deviation of
02369             // 0.00201 when x0.18=); these values may be used to estimate
02370             // absolute noise levels in an image when the NoiseProfile tag
02371             // is missing. When both tags are present, however, DNG
02372             // readers should prefer using the NoiseProfile data, since it
02373             // describes noise levels more precisely than BaselineNoise.
02374             // A more detailed description of the noise model is given
02375             // below. This tag models two common sources of noise:
02376             // 1.Photon (shot) noise p, which has a white Poisson
02377             // distribution, and 2.Electronic readout noise r, which is
02378             // present even in the absence of light and is assumed to have
02379             // an approximately white normal (Gaussian) distribution.
02380             // Assuming thatp andr are independent random variables, the
02381             // square of the total noise (i.e., the variance) can be
02382             // expressed as the sum of the squares of the individual
02383             // sources of noise:N2p2r2+=1 In this expression, the
02384             // variables N, p, andr are expressed in B-bit recorded
02385             // digital values, where common values ofB include 12, 14, and
02386             // 16 bits. Ifxˆ is the average signal level expressed in
02387             // photons, then its variance will also be xˆ, since a random
02388             // variable with a Poisson distribution has a variance equal
02389             // to its mean:pˆ2xˆ=2 wherepˆ denotes the photon noise,
02390             // expressed in photons. The conversion factor between photons
02391             // (xˆpˆ) and B-bit digital values (xp) is the gain factor
02392             // g:xgxˆ=3pgpˆ=4 Substituting equations 2, 3, and 4
02393             // into equation 1 yields:N2gpˆ2r2+=g2xˆr2+=gxr2+=
02394             // Therefore the total noiseN can be expressed as a
02395             // two-parameter function of the signal x:Nxgxr2+=SisOi+=
02396             // for model parameters SigOir2==.  This tag uses the
02397             // convention of a normalized noise model, i.e.,Nx() is the
02398             // standard deviation (i.e., noise) of a random variable x,
02399             // where x represents a recorded linear signal in the range
02400             // x01[,]. The specified parameters (SiOi) must also be
02401             // appropriately normalized.
02402         },
02404         {
02405             "ExifVersion",
02406             // The version of this standard supported. Nonexistence of this field is taken to mean nonconformance to the standard
02407             // (see section 4.2). Conformance to this standard is indicated by recording "0220" as 4-byte ASCII. Since the type is
02408             // UNDEFINED, there is no NULL for termination.
02409             36864,
02410             TIFF_UNDEFINED
02411             // Count = 4
02412             // Default = "0220"
02413         },{
02414             "FlashpixVersion",
02415             // The Flashpix format version supported by a FPXR file. If the FPXR function supports Flashpix format Ver. 1.0, this
02416             // is indicated similarly to ExifVersion by recording "0100" as 4-byte ASCII. Since the type is UNDEFINED, there is no
02417             // NULL for termination.
02418             40960,
02419             TIFF_UNDEFINED
02420             // Count = 4
02421             // Default = "0100"
02422             // 0100 = Flashpix Format Version 1.0
02423             // Other = reserved
02424         },{
02425             "ColorSpace",
02426             // The color space information tag (ColorSpace) is always recorded as the color space specifier.
02427             // Normally sRGB (=1) is used to define the color space based on the PC monitor conditions and environment. If a
02428             // color space other than sRGB is used, Uncalibrated (=FFFF.H) is set. Image data recorded as Uncalibrated can be
02429             // treated as sRGB when it is converted to Flashpix. On sRGB see Annex E.
02430             40961,
02431             TIFF_SHORT
02432             // Count = 1
02433             // 1 = sRGB
02434             // FFFF.H = Uncalibrated
02435             // Other = reserved
02436         },{
02437             "PixelXDimension",
02438             // Information specific to compressed data. When a compressed file is recorded, the valid width of the meaningful
02439             // image shall be recorded in this tag, whether or not there is padding data or a restart marker. This tag should not
02440             // exist in an uncompressed file. For details see section 2.8.1 and Annex F.
02441             40962,
02442             TIFF_LONG // or SHORT
02443             // Count = 1
02444             // Default = none
02445         },{
02446             "PixelYDimension",
02447             // Information specific to compressed data. When a compressed file is recorded, the valid height of the meaningful
02448             // image shall be recorded in this tag, whether or not there is padding data or a restart marker. This tag should not
02449             // exist in an uncompressed file. For details see section 2.8.1 and Annex F. Since data padding is unnecessary in the
02450             // vertical direction, the number of lines recorded in this valid image height tag will in fact be the same as that
02451             // recorded in the SOF.
02452             40963,
02453             TIFF_LONG // or SHORT
02454             // Count = 1
02455         },{
02456             "ComponentsConfiguration",
02457             // Information specific to compressed data. The channels of each component are arranged in order from the 1st
02458             // component to the 4th. For uncompressed data the data arrangement is given in the PhotometricInterpretation tag.
02459             // However, since PhotometricInterpretation can only express the order of Y,Cb and Cr, this tag is provided for cases
02460             // when compressed data uses components other than Y, Cb, and Cr and to enable support of other sequences.
02461             37121,
02462             TIFF_UNDEFINED
02463             // Count = 4
02464             // Default = 4 5 6 0 (if RGB uncompressed)
02465             // 1 2 3 0 (other cases)
02466             // 0 = does not exist
02467             // 1 = Y
02468             // 2 = Cb
02469             // 3 = Cr
02470             // 4 = R
02471             // 5 = G
02472             // 6 = B
02473             // Other = reserved
02474         },{
02475             "CompressedBitsPerPixel",
02476             // Information specific to compressed data. The compression mode used for a compressed image is indicated in unit
02477             // bits per pixel.
02478             37122,
02479             TIFF_RATIONAL
02480             // Count = 1
02481             // Default = none
02482         },{
02483             "MakerNote",
02484             // A tag for manufacturers of Exif writers to record any desired information. The contents are up to the manufacturer,
02485             // but this tag should not be used for any other than its intended purpose.
02486             37500,
02487             TIFF_UNDEFINED
02488             // Count = Any
02489             // Default = none
02490         },{
02491             "UserComment",
02492             // A tag for Exif users to write keywords or comments on the image besides those in ImageDescription, and without
02493             // the character code limitations of the ImageDescription tag.
02494             37510,
02495             TIFF_UNDEFINED
02496             // Count = Any
02497             // Default = none
02498             // The character code used in the UserComment tag is identified based on an ID code in a fixed 8-byte area at the
02499             // start of the tag data area. The unused portion of the area is padded with NULL ("00.H"). ID codes are assigned by
02500             // means of registration. The designation method and references for each character code are given in Table 6 . The
02501             // value of Count N is determined based on the 8 bytes in the character code area and the number of bytes in the
02502             // user comment part. Since the TYPE is not ASCII, NULL termination is not necessary (see Figure 9).
02503             // Table 6 Character Codes and their Designation
02504             // Character Code    Code Designation (8 Bytes)                      References
02505             // ASCII             41.H, 53.H, 43.H, 49.H, 49.H, 00.H, 00.H, 00.H  ITU-T T.50 IA5
02506             // JIS               4A.H, 49.H, 53.H, 00.H, 00.H, 00.H, 00.H, 00.H  JIS X208-1990
02507             // Unicode           55.H, 4E.H, 49.H, 43.H, 4F.H, 44.H, 45.H, 00.H  Unicode Standard
02508             // Undefined         00.H, 00.H, 00.H, 00.H, 00.H, 00.H, 00.H, 00.H  Undefined
02509         },{
02510             "DateTimeOriginal",
02511             // The date and time when the original image data was generated. For a DSC the date and time the picture was taken
02512             // are recorded. The format is "YYYY:MM:DD HH:MM:SS" with time shown in 24-hour format, and the date and time
02513             // separated by one blank character [20.H]. When the date and time are unknown, all the character spaces except
02514             // colons (":") may be filled with blank characters, or else the Interoperability field may be filled with blank characters.
02515             // The character string length is 20 bytes including NULL for termination. When the field is left blank, it is treated as
02516             // unknown.
02517             36867,
02518             TIFF_ASCII
02519             // Count = 20
02520             // Default = none
02521         },{
02522             "DateTimeDigitized",
02523             // The date and time when the image was stored as digital data. If, for example, an image was captured by DSC and at the same
02524             // time the file was recorded, then the DateTimeOriginal and DateTimeDigitized will have the same contents. The format is
02525             // "YYYY:MM:DD HH:MM:SS" with time shown in 24-hour format, and the date and time separated by one blank character [20.H].
02526             // When the date and time are unknown, all the character spaces except colons (":") may be filled with blank characters, or else
02527             // the Interoperability field may be filled with blank characters. The character string length is 20 bytes including NULL for
02528             // termination. When the field is left blank, it is treated as unknown.
02529             36868,
02530             TIFF_ASCII
02531             // Count = 20
02532             // Default = none
02533         },{
02534             "SubsecTime",
02535             // A tag used to record fractions of seconds for the DateTime tag.
02536             37520,
02537             TIFF_ASCII
02538             // Count = Any
02539             // Default = none
02540         },{
02541             "SubsecTimeOriginal",
02542             // A tag used to record fractions of seconds for the DateTimeOriginal tag.
02543             37521,
02544             TIFF_ASCII
02545             // N = Any
02546             // Default = none
02547         },{
02548             "SubsecTimeDigitized",
02549             // A tag used to record fractions of seconds for the DateTimeDigitized tag.
02550             37522,
02551             TIFF_ASCII
02552             // N = Any
02553             // Default = none
02554             // Note-Recording subsecond data (SubsecTime, SubsecTimeOriginal, SubsecTimeDigitized)
02555             // The tag type is ASCII and the string length including NULL is variable length. When the number of valid
02556             // digits is up to the second decimal place, the subsecond value goes in the Value position. When it is up to
02557             // four decimal places, an address value is Interoperability, with the subsecond value put in the location
02558             // pointed to by that address. (Since the count of ASCII type field Interoperability is a value that includes
02559             // NULL, when the number of valid digits is up to four decimal places the count is 5, and the offset value goes
02560             // in the Value Offset field. See section 2.6.2.) Note that the subsecond tag differs from the DateTime tag and
02561             // other such tags already defined in TIFF Rev. 6.0, and that both are recorded in the Exif IFD.
02562             // Ex.: September 9, 1998, 9:15:30.130 (the number of valid digits is up to the third decimal place)
02563             // DateTime 1996:09:01 09:15:30 [NULL]
02564             // SubSecTime 130 [NULL]
02565             // If the string length is longer than the number of valid digits, the digits are aligned with the start of the area
02566             // and the rest is filled with blank characters [20.H]. If the subsecond data is unknown, the Interoperability
02567             // area can be filled with blank characters.
02568             // Examples when subsecond data is 0.130 seconds:
02569             // Ex. 1) '1','3','0',[NULL]
02570             // Ex. 2) '1','3','0',[20.H],[NULL]
02571             // Ex. 3) '1','3','0', [20.H], [20.H], [20.H], [20.H], [20.H], [NULL]
02572             // Example when subsecond data is unknown:
02573             // Ex. 4) [20.H], [20.H], [20.H], [20.H], [20.H], [20.H], [20.H], [20.H], [NULL]
02574         },{
02575             "ExposureTime",
02576             // Exposure time, given in seconds (sec).
02577             33434,
02578             TIFF_RATIONAL
02579             // Count = 1
02580             // Default = none
02581         },{
02582             "FNumber",
02583             // The F number.
02584             33437,
02585             TIFF_RATIONAL
02586             // Count = 1
02587             // Default = none
02588         },
02589         {
02590             "ExifIfd",
02591             // Exif IFD offset tag
02592             34665,
02593             TIFF_LONG
02594             // Count = 1
02595             // Default = None
02596             // A pointer to the Exif IFD. Exif IFD has the same
02597             // structure as that of the IFD specified in
02598             // TIFF. Ordinarily, however, it does not contain image
02599             // data as in the case of TIFF.
02600         },
02601         {
02602             "GPSIfd",
02603             // GPS IFD offset tag
02604             34853,
02605             TIFF_LONG
02606             // Count = 1
02607             // Default = None
02608             // A pointer to the GPS Info IFD. 
02609         },
02610         {
02611             "InteroperabilityIfd",
02612             // EXIF Interoperability IFD offset tag
02613             40965,
02614             TIFF_LONG
02615             // Count = 1
02616             // Default = None
02617             // A pointer to the EXIF Interoperability IFD.
02618         },
02619         {
02620             "ExposureProgram",
02621             // The class of the program used by the camera to set exposure when the picture is taken. The tag values are as
02622             // follows.
02623             34850,
02624             TIFF_SHORT
02625             // Count = 1
02626             // Default = 0
02627             // 0 = Not defined
02628             // 1 = Manual
02629             // 2 = Normal program
02630             // 3 = Aperture priority
02631             // 4 = Shutter priority
02632             // 5 = Creative program (biased toward depth of field)
02633             // 6 = Action program (biased toward fast shutter speed)
02634             // 7 = Portrait mode (for closeup photos with the background out of focus)
02635             // 8 = Landscape mode (for landscape photos with the background in focus)
02636             // Other = reserved
02637         },{
02638             "SpectralSensitivity",
02639             // Indicates the spectral sensitivity of each channel of the camera used. The tag value is an ASCII string compatible
02640             // with the standard developed by the ASTM Technical committee.
02641             34852,
02642             TIFF_ASCII
02643             // Count = Any
02644             // Default = none
02645         },{
02646             "ISOSpeedRatings",
02647             // Indicates the ISO Speed and ISO Latitude of the camera or input device as specified in ISO 12232.
02648             34855,
02649             TIFF_SHORT
02650             // Count = Any
02651             // Default = none
02652             // Also called "PhotographicSensitivity" in EXIF 2.3.
02653             // Can be several different values, depending on value of
02654             // SensitivityType tag.
02655 
02656         },{
02657             "OECF",
02658             // Indicates the Opto-Electric Conversion Function (OECF) specified in ISO 14524. OECF is the relationship between
02659             // the camera optical input and the image values.
02660             34856,
02661             TIFF_UNDEFINED
02662             // Count = ANY
02663             // Default = none
02664             // When this tag records an OECF of m rows and n columns, the values are as in Figure 10.
02665             // Length Type Meaning
02666             // 2 SHORT Columns = n
02667             // 2 SHORT Rows = m
02668             // Any ASCII 0th column item name (NULL terminated)
02669             // : : :
02670             // Any ASCII n-1th column item name (NULL terminated)
02671             // 8 SRATIONAL OECF value [0,0]
02672             // : : :
02673             // 8 SRATIONAL OECF value [n-1,0]
02674             // 8 SRATIONAL OECF value [0,m-1]
02675             // : : :
02676             // 8 SRATIONAL OECF value [n-1,m-1]
02677             // Figure 10 OECF Description
02678             // Table 9 gives a simple example.
02679             // Table 9 Example of Exposure and RGB Output Level
02680             // Camera log Aperture R Output Level G Output Level B Output Level
02681             // -3.0 10.2 12.4 8.9
02682             // -2.0 48.1 47.5 48.3
02683             // -1.0 150.2 152.0 149.8
02684         },
02685         {
02686             "SensitivityType",
02687             // Indicates which of the parameters of ISO12232 is the PhotographicSensitivity tag.
02688             34864,
02689             TIFF_SHORT
02690             // Count = 1
02691             // Default = none
02692             // 0 : Unknown
02693             // 1 : Standard output sensitivity (SOS)
02694             // 2 : Recommended Exposure Index (REI)
02695             // 3 : ISO speed
02696             // 4 : SOS and REI
02697             // 5 : SOS and ISO
02698             // 6 : REI and ISO
02699             // 7 : SOS, REI, and ISO
02700         },
02701         {
02702             "ShutterSpeedValue",
02703             // Shutter speed. The unit is the APEX (Additive System of Photographic Exposure) setting (see Annex C).
02704             37377,
02705             TIFF_SRATIONAL
02706             // Count = 1
02707             // Default = none
02708         },{
02709             "ApertureValue",
02710             // The lens aperture. The unit is the APEX value.
02711             37378,
02712             TIFF_RATIONAL
02713             // Count = 1
02714             // Default = none
02715         },{
02716             "BrightnessValue",
02717             // The value of brightness. The unit is the APEX value. Ordinarily it is given in the range of -99.99 to 99.99. Note that
02718             // if the numerator of the recorded value is FFFFFFFF.H, Unknown shall be indicated.
02719             37379,
02720             TIFF_SRATIONAL
02721             // Count = 1
02722             // Default = none
02723         },{
02724             "ExposureBiasValue",
02725             // The exposure bias. The unit is the APEX value. Ordinarily it is given in the range of –99.99 to 99.99.
02726             37380,
02727             TIFF_SRATIONAL
02728             // Count = 1
02729             // Default = none
02730         },{
02731             "MaxApertureValue",
02732             // The smallest F number of the lens. The unit is the APEX value. Ordinarily it is given in the range of 00.00 to 99.99,
02733             // but it is not limited to this range.
02734             37381,
02735             TIFF_RATIONAL
02736             // Count = 1
02737             // Default = none
02738         },{
02739             "SubjectDistance",
02740             // The distance to the subject, given in meters. Note that if the numerator of the recorded value is FFFFFFFF.H,
02741             // Infinity shall be indicated; and if the numerator is 0, Distance unknown shall be indicated.
02742             37382,
02743             TIFF_RATIONAL
02744             // Count = 1
02745             // Default = none
02746         },{
02747             "MeteringMode",
02748             // The metering mode.
02749             37383,
02750             TIFF_SHORT
02751             // Count = 1
02752             // Default = 0
02753             // 0 = unknown
02754             // 1 = Average
02755             // 2 = CenterWeightedAverage
02756             // 3 = Spot
02757             // 4 = MultiSpot
02758             // 5 = Pattern
02759             // 6 = Partial
02760             // Other = reserved
02761             // 255 = other
02762         },{
02763             "LightSource",
02764             // The kind of light source.
02765             37384,
02766             TIFF_SHORT
02767             // Count = 1
02768             // Default = 0
02769             // 0 = unknown
02770             // 1 = Daylight
02771             // 2 = Fluorescent
02772             // 3 = Tungsten (incandescent light)
02773             // 4 = Flash
02774             // 9 = Fine weather
02775             // 10 = Cloudy weather
02776             // 11 = Shade
02777             // 12 = Daylight fluorescent (D 5700 – 7100K)
02778             // 13 = Day white fluorescent (N 4600 – 5400K)
02779             // 14 = Cool white fluorescent (W 3900 – 4500K)
02780             // 15 = White fluorescent (WW 3200 – 3700K)
02781             // 17 = Standard light A
02782             // 18 = Standard light B
02783             // 19 = Standard light C
02784             // 20 = D55
02785             // 21 = D65
02786             // 22 = D75
02787             // 23 = D50
02788             // 24 = ISO studio tungsten
02789             // 255 = other light source
02790             // Other = reserved
02791         },{
02792             "Flash",
02793             // This tag indicates the status of flash when the image was shot. Bit 0 indicates the flash firing status, bits 1 and 2
02794             // indicate the flash return status, bits 3 and 4 indicate the flash mode, bit 5 indicates whether the flash function is
02795             // present, and bit 6 indicates "red eye" mode (see Figure 11).
02796             37385,
02797             TIFF_SHORT
02798             // Count = 1
02799             // Values for bit 0 indicating whether the flash fired.
02800             // 0b = Flash did not fire.
02801             // 1b = Flash fired.
02802             // Values for bits 1 and 2 indicating the status of returned light.
02803             // 00b = No strobe return detection function
02804             // 01b = reserved
02805             // 10b = Strobe return light not detected.
02806             // 11b = Strobe return light detected.
02807             // Values for bits 3 and 4 indicating the camera's flash mode.
02808             // 00b = unknown
02809             // 01b = Compulsory flash firing
02810             // 10b = Compulsory flash suppression
02811             // 11b = Auto mode
02812             // Values for bit 5 indicating the presence of a flash function.
02813             // 0b = Flash function present
02814             // 1b = No flash function
02815             // Values for bit 6 indicating the camera's red-eye mode.
02816             // 0b = No red-eye reduction mode or unknown
02817             // 1b = Red-eye reduction supported
02818         },{
02819             "SubjectArea",
02820             // This tag indicates the location and area of the main subject in the overall scene.
02821             37396,
02822             TIFF_SHORT
02823             // Count = 2 or 3 or 4
02824             // Default = none
02825             // The subject location and area are defined by Count values as follows.
02826             // Count = 2 Indicates the location of the main subject as coordinates. The first value is the X coordinate and the
02827             // second is the Y coordinate.
02828             // Count = 3 The area of the main subject is given as a circle. The circular area is expressed as center coordinates
02829             // and diameter. The first value is the center X coordinate, the second is the center Y coordinate, and the
02830             // third is the diameter. (See Figure 12.)
02831             // Count = 4 The area of the main subject is given as a rectangle. The rectangular area is expressed as center
02832             // coordinates and area dimensions. The first value is the center X coordinate, the second is the center Y
02833             // coordinate, the third is the width of the area, and the fourth is the height of the area. (See Figure 13.)
02834             // Note that the coordinate values, width, and height are expressed in relation to the upper left as origin, prior to
02835             // rotation processing as per the Rotation tag.
02836         },{
02837             "FocalLength",
02838             // The actual focal length of the lens, in mm. Conversion is not made to the focal length of a 35 mm film camera.
02839             37386,
02840             TIFF_RATIONAL
02841             // Count = 1
02842             // Default = none
02843         },{
02844             "FlashEnergy",
02845             // Indicates the strobe energy at the time the image is captured, as measured in Beam Candle Power Seconds
02846             // (BCPS).
02847             41483,
02848             TIFF_RATIONAL
02849             // Count = 1
02850             // Default = none
02851         },{
02852             "SpatialFrequencyResponse",
02853             // This tag records the camera or input device spatial frequency table and SFR values in the direction of image width,
02854             // image height, and diagonal direction, as specified in ISO 12233.
02855             41484,
02856             TIFF_UNDEFINED
02857             // Count = ANY
02858             // Default = none
02859             // When the spatial frequency response for m rows and n columns is recorded, the values are as shown in Figure 14.
02860             // Length Type Meaning
02861             // 2 SHORT Columns = n
02862             // 2 SHORT Rows = m
02863             // Any ASCII 0th column item name (NULL terminated)
02864             // : : :
02865             // Any ASCII n-1th column item name (NULL terminated)
02866             // 8 RATIONAL SFR value [0,0]
02867             // : : :
02868             // 8 RATIONAL SFR value [n-1,0]
02869             // 8 RATIONAL SFR value [0,m-1]
02870             // : : :
02871             // 8 RATIONAL SFR value [n-1,m-1]
02872             // Figure 14 Spatial Frequency Response Description
02873             // Table 10 gives a simple example.
02874             // Table 10 Example of Spatial Frequency Response
02875             // Spatial Frequency (lw/ph) Along Image Width Along Image Height
02876             // 0.1 1.00 1.00
02877             // 0.2 0.90 0.95
02878             // 0.3 0.80 0.85
02879         },{
02880             "FocalPlaneXResolution",
02881             // Indicates the number of pixels in the image width (X) direction per FocalPlaneResolutionUnit on the camera focal
02882             // plane.
02883             41486,
02884             TIFF_RATIONAL
02885             // Count = 1
02886             // Default = none
02887         },{
02888             "FocalPlaneYResolution",
02889             // Indicates the number of pixels in the image height (Y) direction per FocalPlaneResolutionUnit on the camera focal
02890             // plane.
02891             41487,
02892             TIFF_RATIONAL
02893             // Count = 1
02894             // Default = none
02895         },{
02896             "FocalPlaneResolutionUnit",
02897             // Indicates the unit for measuring FocalPlaneXResolution and FocalPlaneYResolution. This value is the same as the
02898             // ResolutionUnit.
02899             41488,
02900             TIFF_SHORT
02901             // Count = 1
02902             // Default = 2 (inch)
02903             // Note on use of tags concerning focal plane resolution
02904             // These tags record the actual focal plane resolutions of the main image which is written as a file after processing
02905             // instead of the pixel resolution of the image sensor in the camera. It should be noted carefully that the data from
02906             // the image sensor is resampled.
02907             // These tags are used at the same time as a FocalLength tag when the angle of field of the recorded image is to
02908             // be calculated precisely.
02909         },{
02910             "SubjectLocation",
02911             // Indicates the location of the main subject in the scene. The value of this tag represents the pixel at the center of the
02912             // main subject relative to the left edge, prior to rotation processing as per the Rotation tag. The first value indicates
02913             // the X column number and second indicates the Y row number.
02914             41492,
02915             TIFF_SHORT
02916             // Count = 2
02917             // Default = none
02918             // When a camera records the main subject location, it is recommended that the SubjectArea tag be used instead of this tag.
02919         },{
02920             "ExposureIndex",
02921             // Indicates the exposure index selected on the camera or input device at the time the image is captured.
02922             41493,
02923             TIFF_RATIONAL
02924             // Count = 1
02925             // Default = none
02926         },{
02927             "SensingMethod",
02928             // Indicates the image sensor type on the camera or input device. The values are as follows.
02929             41495,
02930             TIFF_SHORT
02931             // Count = 1
02932             // Default = none
02933             // 1 = Not defined
02934             // 2 = One-chip color area sensor
02935             // 3 = Two-chip color area sensor
02936             // 4 = Three-chip color area sensor
02937             // 5 = Color sequential area sensor
02938             // 7 = Trilinear sensor
02939             // 8 = Color sequential linear sensor
02940             // Other = reserved
02941         },{
02942             "FileSource",
02943             // Indicates the image source. If a DSC recorded the image, this tag value of this tag always be set to 3, indicating
02944             // that the image was recorded on a DSC.
02945             41728,
02946             TIFF_UNDEFINED
02947             // Count = 1
02948             // Default = 3
02949             // 3 = DSC
02950             // Other = reserved
02951         },{
02952             "SceneType",
02953             // Indicates the type of scene. If a DSC recorded the image, this tag value shall always be set to 1, indicating that the
02954             // image was directly photographed.
02955             41729,
02956             TIFF_UNDEFINED
02957             // Count = 1
02958             // Default = 1
02959             // 1 = A directly photographed image
02960             // Other = reserved
02961         },{
02962             "CFAPatternEXIF",
02963             // Indicates the color filter array (CFA) geometric pattern of the image sensor when a one-chip color area sensor is
02964             // used. It does not apply to all sensing methods.
02965             41730,
02966             TIFF_UNDEFINED
02967             // Count = ANY
02968             // Default = none
02969             // Figure 15 shows how a CFA pattern is recorded for a one-chip color area sensor when the color filter array is
02970             // repeated in m x n (vertical x lateral) pixel units.
02971             // Length Type Meaning
02972             // 2 SHORT Horizontal repeat pixel unit = n
02973             // 2 SHORT Vertical repeat pixel unit = m
02974             // 1 BYTE CFA value [0.0]
02975             // : : :
02976             // 1 BYTE CFA value [n-1.0]
02977             // 1 BYTE CFA value [0.m-1]
02978             // : : :
02979             // 1 BYTE CFA value [n-1.m-1]
02980             // Figure 15 CFA Pattern Description
02981             // The relation of color filter color to CFA value is shown in Table 11.
02982             // Table 11 Color Filter Color and CFA Value
02983             // Filter Color CFA Value
02984             // RED 00.H
02985             // GREEN 01.H
02986             // BLUE 02.H
02987             // CYAN 03.H
02988             // MAGENTA 04.H
02989             // YELLOW 05.H
02990             // WHITE 06.H
02991         },{
02992             "CustomRendered",
02993             // This tag indicates the use of special processing on image data, such as rendering geared to output. When special
02994             // processing is performed, the reader is expected to disable or minimize any further processing.
02995             41985,
02996             TIFF_SHORT
02997             // Count = 1
02998             // Default = 0
02999             // 0 = Normal process
03000             // 1 = Custom process
03001             // Other = reserved
03002         },{
03003             "ExposureMode",
03004             // This tag indicates the exposure mode set when the image was shot. In auto-bracketing mode, the camera shoots a
03005             // series of frames of the same scene at different exposure settings.
03006             41986,
03007             TIFF_SHORT
03008             // Count = 1
03009             // Default = none
03010             // 0 = Auto exposure
03011             // 1 = Manual exposure
03012             // 2 = Auto bracket
03013             // Other = reserved
03014         },{
03015             "WhiteBalance",
03016             // This tag indicates the white balance mode set when the image was shot.
03017             41987,
03018             TIFF_SHORT
03019             // Count = 1
03020             // Default = none
03021             // 0 = Auto white balance
03022             // 1 = Manual white balance
03023             // Other = reserved
03024         },{
03025             "DigitalZoomRatio",
03026             // This tag indicates the digital zoom ratio when the image was shot. If the numerator of the recorded value is 0, this
03027             // indicates that digital zoom was not used.
03028             41988,
03029             TIFF_RATIONAL
03030             // Count = 1
03031             // Default = none
03032         },{
03033             "FocalLengthIn35mmFilm",
03034             // This tag indicates the equivalent focal length assuming a 35mm film camera, in mm. A value of 0 means the focal
03035             // length is unknown. Note that this tag differs from the FocalLength tag.
03036             41989,
03037             TIFF_SHORT
03038             // Count = 1
03039             // Default = none
03040         },{
03041             "This tag indicates the type of scene that was shot. It can also be used to record the mode in which the image was",
03042             // shot. Note that this differs from the scene type (SceneType) tag.
03043             41990,
03044             TIFF_SHORT
03045             // Count = 1
03046             // Default = 0
03047             // 0 = Standard
03048             // 1 = Landscape
03049             // 2 = Portrait
03050             // 3 = Night scene
03051             // Other = reserved
03052         },{
03053             "GainControl",
03054             // This tag indicates the degree of overall image gain adjustment.
03055             41991,
03056             TIFF_SHORT
03057             // Count = 1
03058             // Default = none
03059             // 0 = None
03060             // 1 = Low gain up
03061             // 2 = High gain up
03062             // 3 = Low gain down
03063             // 4 = High gain down
03064             // Other = reserved
03065         },{
03066             "Contrast",
03067             // This tag indicates the direction of contrast processing applied by the camera when the image was shot.
03068             41992,
03069             TIFF_SHORT
03070             // Count = 1
03071             // Default = 0
03072             // 0 = Normal
03073             // 1 = Soft
03074             // 2 = Hard
03075             // Other = reserved
03076         },{
03077             "Saturation",
03078             // This tag indicates the direction of saturation processing applied by the camera when the image was shot.
03079             41993,
03080             TIFF_SHORT
03081             // Count = 1
03082             // Default = 0
03083             // 0 = Normal
03084             // 1 = Low saturation
03085             // 2 = High saturation
03086             // Other = reserved
03087         },{
03088             "Sharpness",
03089             // This tag indicates the direction of sharpness processing applied by the camera when the image was shot.
03090             41994,
03091             TIFF_SHORT
03092             // Count = 1
03093             // Default = 0
03094             // 0 = Normal
03095             // 1 = Soft
03096             // 2 = Hard
03097             // Other = reserved
03098         },{
03099             "DeviceSettingDescription",
03100             // This tag indicates information on the picture-taking conditions of a particular camera model. The tag is used only to
03101             // indicate the picture-taking conditions in the reader.
03102             41995,
03103             TIFF_UNDEFINED
03104             // Count = Any
03105             // Default = none
03106             // The information is recorded in the format shown in Figure 17. The data is recorded in Unicode using SHORT type
03107             // for the number of display rows and columns and UNDEFINED type for the camera settings. The Unicode (UCS-2)
03108             // string including Signature is NULL terminated. The specifics of the Unicode string are as given in ISO/IEC 10464-1.
03109             // Length Type Meaning
03110             // 2 SHORT Display columns
03111             // 2 SHORT Display rows
03112             // Any UNDEFINED Camera setting-1
03113             // Any UNDEFINED Camera setting-2
03114             // : : :
03115             // Any UNDEFINED Camera setting-n
03116             // Figure 17 Format used to record picture-taking conditions
03117         },{
03118             "SubjectDistanceRange",
03119             // This tag indicates the distance to the subject.
03120             41996,
03121             TIFF_SHORT
03122             // Count = 1
03123             // Default = none
03124             // 0 = unknown
03125             // 1 = Macro
03126             // 2 = Close view
03127             // 3 = Distant view
03128             // Other = reserved
03129         },{
03130             "ImageUniqueID",
03131             // This tag indicates an identifier assigned uniquely to each image. It is recorded as an ASCII string equivalent to
03132             // hexadecimal notation and 128-bit fixed length.
03133             42016,
03134             TIFF_ASCII
03135             // Count = 33
03136             // Default = none
03137         }
03138     };
03139 
03140 
03141     TiffEntryInfo const* tiffEntryLookup(uint16_t tag) {
03142         static std::map<uint16_t, TiffEntryInfo const*> entriesByTag;
03143         static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
03144         static bool initialized = false;
03145 
03146         // Build map if not yet initialized. Annoying thread-safety mutex
03147         if (!initialized) {
03148             pthread_mutex_lock(&mutex);
03149             if (!initialized) {
03150                 for (unsigned int i=0; i < sizeof(tiffEntryTypes)/sizeof(TiffEntryInfo); i++) {
03151                     entriesByTag[tiffEntryTypes[i].tag] = tiffEntryTypes+i;
03152                 }
03153                 initialized = true;
03154             }
03155             pthread_mutex_unlock(&mutex);
03156         }
03157 
03158         std::map<uint16_t, TiffEntryInfo const*>::iterator it = entriesByTag.find(tag);
03159         if (it == entriesByTag.end()) return NULL;
03160         return it->second;
03161     }
03162 
03163     // The lookup by entry name is done using basic c char arrays, to avoid having to make duplicate strings of the whole big tiffEntryTypes table.
03164 
03165     // Need to compare const char* as strings, not pointers.
03166     struct TiffNameLess {
03167         bool operator()(const char *l, const char *r) const {
03168             return strcmp(l, r) < 0;
03169         }
03170     };
03171 
03172     TiffEntryInfo const* tiffEntryLookup(const std::string &entryName) {
03173         static std::map<const char*, TiffEntryInfo const*, TiffNameLess> entriesByName;
03174         static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
03175         static bool initialized = false;
03176 
03177         // Build map if not yet initialized. Annoying thread-safety mutex
03178         if (!initialized) {
03179             pthread_mutex_lock(&mutex);
03180             if (!initialized) {
03181                 for (unsigned int i=0; i < sizeof(tiffEntryTypes)/sizeof(TiffEntryInfo); i++) {
03182                     entriesByName[tiffEntryTypes[i].name] = tiffEntryTypes+i;
03183                 }
03184                 initialized = true;
03185             }
03186             pthread_mutex_unlock(&mutex);
03187         }
03188         std::map<const char*, TiffEntryInfo const*, TiffNameLess>::iterator it = entriesByName.find(entryName.c_str());
03189         if (it == entriesByName.end()) return NULL;
03190         return it->second;
03191     }
03192 
03193 }

Generated on Mon Aug 16 2010 14:25:45 for FCam by  doxygen 1.7.1