diff options
Diffstat (limited to 'Wrapper/FreeImage.NET/cs/Library/Classes/MetadataModels.cs')
-rw-r--r-- | Wrapper/FreeImage.NET/cs/Library/Classes/MetadataModels.cs | 6724 |
1 files changed, 6724 insertions, 0 deletions
diff --git a/Wrapper/FreeImage.NET/cs/Library/Classes/MetadataModels.cs b/Wrapper/FreeImage.NET/cs/Library/Classes/MetadataModels.cs new file mode 100644 index 0000000..dfa9f90 --- /dev/null +++ b/Wrapper/FreeImage.NET/cs/Library/Classes/MetadataModels.cs @@ -0,0 +1,6724 @@ +// ========================================================== +// FreeImage 3 .NET wrapper +// Original FreeImage 3 functions and .NET compatible derived functions +// +// Design and implementation by +// - Jean-Philippe Goerke (jpgoerke@users.sourceforge.net) +// - Carsten Klein (cklein05@users.sourceforge.net) +// +// Contributors: +// - David Boland (davidboland@vodafone.ie) +// +// Main reference : MSDN Knowlede Base +// +// This file is part of FreeImage 3 +// +// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY +// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES +// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE +// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED +// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT +// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY +// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL +// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER +// THIS DISCLAIMER. +// +// Use at your own risk! +// ========================================================== + +// ========================================================== +// CVS +// $Revision: 1.6 $ +// $Date: 2009/09/15 11:49:24 $ +// $Id: MetadataModels.cs,v 1.6 2009/09/15 11:49:24 cklein05 Exp $ +// ========================================================== + +using System; +using System.Xml; +using System.IO; +using System.Text; + +namespace FreeImageAPI.Metadata +{ + /// <summary> + /// Represents a collection of all tags contained in the metadata model + /// <see cref="FREE_IMAGE_MDMODEL.FIMD_ANIMATION"/>. + /// </summary> + public class MDM_ANIMATION : MetadataModel + { + /// <summary> + /// Initializes a new instance of this class. + /// </summary> + /// <param name="dib">Handle to a FreeImage bitmap.</param> + public MDM_ANIMATION(FIBITMAP dib) : base(dib) { } + + /// <summary> + /// Retrieves the datamodel that this instance represents. + /// </summary> + public override FREE_IMAGE_MDMODEL Model + { + get { return FREE_IMAGE_MDMODEL.FIMD_ANIMATION; } + } + + /// <summary> + /// Gets or sets the width of the entire canvas area, that each page is displayed in. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public ushort? LogicalWidth + { + get + { + return GetTagValue<ushort>("LogicalWidth"); + } + set + { + SetTagValue("LogicalWidth", value); + } + } + + /// <summary> + /// Gets or sets the height of the entire canvas area, that each page is displayed in. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public ushort? LogicalHeight + { + get + { + return GetTagValue<ushort>("LogicalHeight"); + } + set + { + SetTagValue("LogicalHeight", value); + } + } + + /// <summary> + /// Gets or sets the global palette of the GIF image. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public Palette GlobalPalette + { + get + { + MetadataTag mdtag = GetTag("GlobalPalette"); + return (mdtag == null) ? null : new Palette(mdtag); + } + set + { + SetTagValue("GlobalPalette", (value != null) ? null : value.Data); + } + } + + /// <summary> + /// Gets or sets the number of replays for the animation. + /// Use 0 (zero) to specify an infinte number of replays. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public uint? LoopCount + { + get + { + return GetTagValue<uint>("Loop"); + } + set + { + SetTagValue("Loop", value); + } + } + + /// <summary> + /// Gets or sets the horizontal offset within the logical canvas area, this frame is to be displayed at. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public ushort? FrameLeft + { + get + { + return GetTagValue<ushort>("FrameLeft"); + } + set + { + SetTagValue("FrameLeft", value); + } + } + + /// <summary> + /// Gets or sets the vertical offset within the logical canvas area, this frame is to be displayed at. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public ushort? FrameTop + { + get + { + return GetTagValue<ushort>("FrameTop"); + } + set + { + SetTagValue("FrameTop", value); + } + } + + /// <summary> + /// Gets or sets a flag to supress saving the dib's attached palette + /// (making it use the global palette). The local palette is the palette used by a page. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public bool? NoLocalPalette + { + get + { + byte? useGlobalPalette = GetTagValue<byte>("NoLocalPalette"); + return useGlobalPalette.HasValue ? (useGlobalPalette.Value != 0) : default(bool?); + } + set + { + byte? val = null; + if (value.HasValue) + { + val = (byte)(value.Value ? 1 : 0); + } + SetTagValue("NoLocalPalette", val); + } + } + + /// <summary> + /// Gets or sets a value indicating whether the image is interlaced. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public bool? Interlaced + { + get + { + byte? useGlobalPalette = GetTagValue<byte>("Interlaced"); + return useGlobalPalette.HasValue ? (useGlobalPalette.Value != 0) : default(bool?); + } + set + { + byte? val = null; + if (value.HasValue) + { + val = (byte)(value.Value ? 1 : 0); + } + SetTagValue("Interlaced", val); + } + } + + /// <summary> + /// Gets or sets the amout of time in milliseconds this frame is to be displayed. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public uint? FrameTime + { + get + { + return GetTagValue<uint>("FrameTime"); + } + set + { + SetTagValue("FrameTime", value); + } + } + + /// <summary> + /// Gets or sets this frame's disposal method. Generally, this method defines, how to + /// remove or replace a frame when the next frame has to be drawn.<para/> + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public DisposalMethodType? DisposalMethod + { + get + { + return GetTagValue<DisposalMethodType>("DisposalMethod"); + } + set + { + SetTagValue("DisposalMethod", value); + } + } + } + + /// <summary> + /// Represents a collection of all tags contained in the metadata model + /// <see cref="FREE_IMAGE_MDMODEL.FIMD_COMMENTS"/>. + /// </summary> + public class MDM_COMMENTS : MetadataModel + { + /// <summary> + /// Initializes a new instance of this class. + /// </summary> + /// <param name="dib">Handle to a FreeImage bitmap.</param> + public MDM_COMMENTS(FIBITMAP dib) : base(dib) { } + + /// <summary> + /// Retrieves the datamodel that this instance represents. + /// </summary> + public override FREE_IMAGE_MDMODEL Model + { + get { return FREE_IMAGE_MDMODEL.FIMD_COMMENTS; } + } + + /// <summary> + /// Gets or sets the comment of the image. + /// Supported formats are JPEG, PNG and GIF. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string Comment + { + get + { + return GetTagText("Comment"); + } + set + { + SetTagValue("Comment", value); + } + } + } + + /// <summary> + /// Represents a collection of all tags contained in the metadata model + /// <see cref="FREE_IMAGE_MDMODEL.FIMD_CUSTOM"/>. + /// </summary> + public class MDM_CUSTOM : MetadataModel + { + /// <summary> + /// Initializes a new instance of this class. + /// </summary> + /// <param name="dib">Handle to a FreeImage bitmap.</param> + public MDM_CUSTOM(FIBITMAP dib) : base(dib) { } + + /// <summary> + /// Retrieves the datamodel that this instance represents. + /// </summary> + public override FREE_IMAGE_MDMODEL Model + { + get { return FREE_IMAGE_MDMODEL.FIMD_CUSTOM; } + } + } + + /// <summary> + /// Represents a collection of all tags contained in the metadata model + /// <see cref="FREE_IMAGE_MDMODEL.FIMD_EXIF_EXIF"/>. + /// </summary> + public class MDM_EXIF_EXIF : MetadataModel + { + /// <summary> + /// Initializes a new instance of this class. + /// </summary> + /// <param name="dib">Handle to a FreeImage bitmap.</param> + public MDM_EXIF_EXIF(FIBITMAP dib) : base(dib) { } + + /// <summary> + /// Retrieves the datamodel that this instance represents. + /// </summary> + public override FREE_IMAGE_MDMODEL Model + { + get { return FREE_IMAGE_MDMODEL.FIMD_EXIF_EXIF; } + } + + /// <summary> + /// Gets or sets the version of this standard supported. + /// Constant length or 4. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public byte[] ExifVersion + { + get + { + return GetTagArray<byte>("ExifVersion"); + } + set + { + FreeImage.Resize(ref value, 4); + SetTagValueUndefined("ExifVersion", value); + } + } + + /// <summary> + /// Gets or sets the Flashpix format version supported by a FPXR file. + /// Constant length or 4. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public byte[] FlashpixVersion + { + get + { + return GetTagArray<byte>("FlashpixVersion"); + } + set + { + FreeImage.Resize(ref value, 4); + SetTagValueUndefined("FlashpixVersion", value); + } + } + + /// <summary> + /// Gets or sets the color space information tag. + /// See remarks for further information. + /// </summary> + /// <remarks> + /// The following values are defined:<para/> + /// <list type="table"> + /// <listheader> + /// <term>ID</term> + /// <description>Description</description> + /// </listheader> + /// <item> + /// <term>1</term> + /// <description>sRGB (default)</description> + /// </item> + /// <item> + /// <term>0xFFFF</term> + /// <description>uncalibrated</description> + /// </item> + /// <item> + /// <term>other</term> + /// <description>reserved</description> + /// </item> + /// </list> + /// <para/> + /// <br/><b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public ushort? ColorSpace + { + get + { + return GetTagValue<ushort>("ColorSpace"); + } + set + { + SetTagValue("ColorSpace", value); + } + } + + /// <summary> + /// Gets or sets the valid width of a compressed image. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public uint? PixelXDimension + { + get + { + return GetUInt32Value("PixelXDimension"); + } + set + { + RemoveTag("PixelXDimension"); + if (value.HasValue) + { + SetTagValue("PixelXDimension", value.Value); + } + } + } + + /// <summary> + /// Gets or sets the valid height of a compressed image. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public uint? PixelYDimension + { + get + { + return GetUInt32Value("PixelYDimension"); + } + set + { + RemoveTag("PixelYDimension"); + if (value.HasValue) + { + SetTagValue("PixelYDimension", value.Value); + } + } + } + + /// <summary> + /// Gets or sets components configuration. See remarks for further information. + /// Constant length of 4. + /// </summary> + /// <remarks> + /// The channels of each component are arranged in order from the 1st component to the 4th. + /// For uncompressed data the data arrangement is given in the PhotometricInterpretation tag. + /// However, since PhotometricInterpretation can only express the order of Y,Cb and Cr, + /// this tag is provided for cases when compressed data uses components other than Y, Cb, + /// and Cr and to enable support of other sequences.<para/> + /// Default = 4 5 6 0 (if RGB uncompressed)<para/> + /// The following values are defined:<para/> + /// <list type="table"> + /// <listheader> + /// <term>ID</term> + /// <description>Description</description> + /// </listheader> + /// <item> + /// <term>0</term> + /// <description>does not exist</description> + /// </item> + /// <item> + /// <term>1</term> + /// <description>Y</description> + /// </item> + /// <item> + /// <term>2</term> + /// <description>Cb</description> + /// </item> + /// <item> + /// <term>3</term> + /// <description>Cr</description> + /// </item> + /// <item> + /// <term>4</term> + /// <description>R</description> + /// </item> + /// <item> + /// <term>5</term> + /// <description>R</description> + /// </item> + /// <item> + /// <term>6</term> + /// <description>R</description> + /// </item> + /// <item> + /// <term>other</term> + /// <description>reserved</description> + /// </item> + /// </list> + /// <para/> + /// <br/><b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public byte[] ComponentsConfiguration + { + get + { + return GetTagArray<byte>("ComponentsConfiguration"); + } + set + { + FreeImage.Resize(ref value, 4); + SetTagValueUndefined("ComponentsConfiguration", value); + } + } + + /// <summary> + /// Gets or sets compression mode used for a compressed image is indicated + /// in unit bits per pixel. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public FIURational? CompressedBitsPerPixel + { + get + { + return GetTagValue<FIURational>("CompressedBitsPerPixel"); + } + set + { + SetTagValue("CompressedBitsPerPixel", value); + } + } + + /// <summary> + /// Gets or sets a tag for manufacturers of Exif writers to record any desired information. + /// The contents are up to the manufacturer, but this tag should not be used for any other + /// than its intended purpose. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public byte[] MakerNote + { + get + { + return GetTagArray<byte>("FlashpixVersion"); + } + set + { + SetTagValueUndefined("FlashpixVersion", value); + } + } + + /// <summary> + /// Gets or sets a tag for Exif users to write keywords or comments on the image besides + /// those in ImageDescription, and without the character code limitations of the ImageDescription tag. + /// Minimum length of 8. See remarks for further information. + /// </summary> + /// <remarks> + /// The character code used in the UserComment tag is identified based on an ID code in a fixed 8-byte + /// area at the start of the tag data area. The unused portion of the area is padded with NULL. + /// The ID code for the UserComment area may be a Defined code such as JIS or ASCII, or may be Undefined. + /// <para/> + /// <br/><b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public byte[] UserComment + { + get + { + return GetTagArray<byte>("UserComment"); + } + set + { + FreeImage.Resize(ref value, 8, int.MaxValue); + SetTagValueUndefined("UserComment", value); + } + } + + /// <summary> + /// Gets or sets the name of an audio file related to the image data. + /// The format is 8.3. + /// Constant length of 12 + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string RelatedSoundFile + { + get + { + string text = GetTagText("RelatedSoundFile"); + if (!string.IsNullOrEmpty(text)) + { + text = text.Substring(0, text.Length - 1); + } + return text; + } + set + { + if (value != null) + { + FreeImage.Resize(ref value, 12); + value += '\0'; + } + SetTagValue("RelatedSoundFile", value); + } + } + + /// <summary> + /// Gets or sets the date and time when the original image data was generated. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public DateTime? DateTimeOriginal + { + get + { + DateTime? result = null; + string text = GetTagText("DateTimeOriginal"); + if (text != null) + { + try + { + result = System.DateTime.ParseExact(text, "yyyy:MM:dd HH:mm:ss\0", null); + } + catch + { + } + } + return result; + } + set + { + string val = null; + if (value.HasValue) + { + try + { + val = value.Value.ToString("yyyy:MM:dd HH:mm:ss\0"); + } + catch + { + } + } + SetTagValue("DateTimeOriginal", val); + } + } + + /// <summary> + /// Gets or sets the date and time when the image was stored as digital data. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public DateTime? DateTimeDigitized + { + get + { + DateTime? result = null; + string text = GetTagText("DateTimeDigitized"); + if (text != null) + { + try + { + result = System.DateTime.ParseExact(text, "yyyy:MM:dd HH:mm:ss\0", null); + } + catch + { + } + } + return result; + } + set + { + string val = null; + if (value.HasValue) + { + try + { + val = value.Value.ToString("yyyy:MM:dd HH:mm:ss\0"); + } + catch + { + } + } + SetTagValue("DateTimeDigitized", val); + } + } + + /// <summary> + /// Gets or sets a tag used to record fractions of seconds for the DateTime tag. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string SubsecTime + { + get + { + string text = GetTagText("SubsecTime"); + if (!string.IsNullOrEmpty(text)) + { + text = text.Substring(0, text.Length - 1); + } + return text; + } + set + { + if (value != null) + { + value += '\0'; + } + SetTagValue("SubsecTime", value); + } + } + + /// <summary> + /// Gets or sets a tag used to record fractions of seconds for the DateTimeOriginal tag. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string SubsecTimeOriginal + { + get + { + string text = GetTagText("SubsecTimeOriginal"); + if (!string.IsNullOrEmpty(text)) + { + text = text.Substring(0, text.Length - 1); + } + return text; + } + set + { + if (value != null) + { + value += '\0'; + } + SetTagValue("SubsecTimeOriginal", value); + } + } + + /// <summary> + /// Gets or sets a tag used to record fractions of seconds for the DateTimeDigitized tag. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string SubsecTimeDigitized + { + get + { + string text = GetTagText("SubsecTimeDigitized"); + if (!string.IsNullOrEmpty(text)) + { + text = text.Substring(0, text.Length - 1); + } + return text; + } + set + { + if (value != null) + { + value += '\0'; + } + SetTagValue("SubsecTimeDigitized", value); + } + } + + /// <summary> + /// Gets or the exposure time, given in seconds (sec). + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public FIURational? ExposureTime + { + get + { + return GetTagValue<FIURational>("ExposureTime"); + } + set + { + SetTagValue("ExposureTime", value); + } + } + + /// <summary> + /// Gets or the F number. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public FIURational? FNumber + { + get + { + return GetTagValue<FIURational>("FNumber"); + } + set + { + SetTagValue("FNumber", value); + } + } + + /// <summary> + /// Gets or sets the class of the program used by the camera to set exposure when the + /// picture is taken. + /// See remarks for further information. + /// </summary> + /// <remarks> + /// The following values are defined:<para/> + /// <list type="table"> + /// <listheader> + /// <term>ID</term> + /// <description>Description</description> + /// </listheader> + /// <item> + /// <term>0</term> + /// <description>not defined</description> + /// </item> + /// <item> + /// <term>1</term> + /// <description>manual</description> + /// </item> + /// <item> + /// <term>2</term> + /// <description>normal program</description> + /// </item> + /// <item> + /// <term>3</term> + /// <description>aperture priority</description> + /// </item> + /// <item> + /// <term>4</term> + /// <description>shutter priority</description> + /// </item> + /// <item> + /// <term>5</term> + /// <description>create program</description> + /// </item> + /// <item> + /// <term>6</term> + /// <description>action program</description> + /// </item> + /// <item> + /// <term>7</term> + /// <description>portrait mode</description> + /// </item> + /// <item> + /// <term>8</term> + /// <description>landscape mode</description> + /// </item> + /// <item> + /// <term>others</term> + /// <description>reserved</description> + /// </item> + /// </list> + /// <para/> + /// <br/><b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public ushort? ExposureProgram + { + get + { + return GetTagValue<ushort>("ExposureProgram"); + } + set + { + SetTagValue("ExposureProgram", value); + } + } + + /// <summary> + /// Gets or sets the spectral sensitivity of each channel of the camera used. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string SpectralSensitivity + { + get + { + string text = GetTagText("SpectralSensitivity"); + if (!string.IsNullOrEmpty(text)) + { + text = text.Substring(0, text.Length - 1); + } + return text; + } + set + { + if (value != null) + { + value += '\0'; + } + SetTagValue("SpectralSensitivity", value); + } + } + + /// <summary> + /// Gets or sets the the ISO Speed and ISO Latitude of the camera or input device as + /// specified in ISO 12232. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public ushort[] ISOSpeedRatings + { + get + { + return GetTagArray<ushort>("ISOSpeedRatings"); + } + set + { + SetTagValue("ISOSpeedRatings", value); + } + } + + /// <summary> + /// Gets or sets the Opto-Electric Conversion Function (OECF) specified in ISO 14524. + /// OECF is the relationship between the camera optical input and the image values. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public byte[] OECF + { + get + { + return GetTagArray<byte>("OECF"); + } + set + { + SetTagValueUndefined("OECF", value); + } + } + + /// <summary> + /// Gets or sets the shutter speed. The unit is the APEX (Additive System of Photographic Exposure). + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public FIRational? ShutterSpeedValue + { + get + { + return GetTagValue<FIRational>("ShutterSpeedValue"); + } + set + { + SetTagValue("ShutterSpeedValue", value); + } + } + + /// <summary> + /// Gets or sets the lens aperture. The unit is the APEX value. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public FIURational? ApertureValue + { + get + { + return GetTagValue<FIURational>("ApertureValue"); + } + set + { + SetTagValue("ApertureValue", value); + } + } + + /// <summary> + /// Gets or sets the value of brightness. The unit is the APEX value. + /// Ordinarily it is given in the range of -99.99 to 99.99. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public FIRational? BrightnessValue + { + get + { + return GetTagValue<FIRational>("BrightnessValue"); + } + set + { + SetTagValue("BrightnessValue", value); + } + } + + /// <summary> + /// Gets or sets the exposure bias. The unit is the APEX value. + /// Ordinarily it is given in the range of –99.99 to 99.99. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public FIRational? ExposureBiasValue + { + get + { + return GetTagValue<FIRational>("ExposureBiasValue"); + } + set + { + SetTagValue("ExposureBiasValue", value); + } + } + + /// <summary> + /// Gets or sets 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, + /// but it is not limited to this range. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public FIURational? MaxApertureValue + { + get + { + return GetTagValue<FIURational>("MaxApertureValue"); + } + set + { + SetTagValue("MaxApertureValue", value); + } + } + + /// <summary> + /// Gets or sets distance to the subject, given in meters. + /// Note that if the numerator of the recorded value is FFFFFFFF, infinity shall be indicated; + /// and if the numerator is 0, distance unknown shall be indicated. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public FIURational? SubjectDistance + { + get + { + return GetTagValue<FIURational>("SubjectDistance"); + } + set + { + SetTagValue("SubjectDistance", value); + } + } + + /// <summary> + /// Gets or sets the metering mode. See remarks for further information. + /// </summary> + /// <remarks> + /// The following values are defined:<para/> + /// <list type="table"> + /// <listheader> + /// <term>ID</term> + /// <description>Description</description> + /// </listheader> + /// <item> + /// <term>0</term> + /// <description>unknown</description> + /// </item> + /// <item> + /// <term>1</term> + /// <description>average</description> + /// </item> + /// <item> + /// <term>2</term> + /// <description>center-weighted-average</description> + /// </item> + /// <item> + /// <term>3</term> + /// <description>spot</description> + /// </item> + /// <item> + /// <term>4</term> + /// <description>multi-spot</description> + /// </item> + /// <item> + /// <term>5</term> + /// <description>pattern</description> + /// </item> + /// <item> + /// <term>6</term> + /// <description>partial</description> + /// </item> + /// <item> + /// <term>other</term> + /// <description>reserved</description> + /// </item> + /// <item> + /// <term>255</term> + /// <description>other</description> + /// </item> + /// </list> + /// <para/> + /// <br/><b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public ushort? MeteringMode + { + get + { + return GetTagValue<ushort>("MeteringMode"); + } + set + { + SetTagValue("MeteringMode", value); + } + } + + /// <summary> + /// Gets or sets the kind of light source. + /// See remarks for further information. + /// </summary> + /// <remarks> + /// The following values are defined:<para/> + /// <list type="table"> + /// <listheader> + /// <term>ID</term> + /// <description>Description</description> + /// </listheader> + /// <item> + /// <term>0</term> + /// <description>unknown</description> + /// </item> + /// <item> + /// <term>1</term> + /// <description>daylight</description> + /// </item> + /// <item> + /// <term>2</term> + /// <description>fluorescent</description> + /// </item> + /// <item> + /// <term>3</term> + /// <description>tungsten</description> + /// </item> + /// <item> + /// <term>4</term> + /// <description>flash</description> + /// </item> + /// <item> + /// <term>9</term> + /// <description>fine weather</description> + /// </item> + /// <item> + /// <term>10</term> + /// <description>cloudy weather</description> + /// </item> + /// <item> + /// <term>11</term> + /// <description>shade</description> + /// </item> + /// <item> + /// <term>12</term> + /// <description>daylight fluorecent (D 5700 - 7100K)</description> + /// </item> + /// <item> + /// <term>13</term> + /// <description>day white fluorescent (N 4600 - 5400K)</description> + /// </item> + /// <item> + /// <term>14</term> + /// <description>cool white fluorescent (W 3900 - 4500K)</description> + /// </item> + /// <item> + /// <term>15</term> + /// <description>white fluorescent (WW 3200 - 3700K)</description> + /// </item> + /// <item> + /// <term>17</term> + /// <description>standard light A</description> + /// </item> + /// <item> + /// <term>18</term> + /// <description>standard light B</description> + /// </item> + /// <item> + /// <term>19</term> + /// <description>standard light C</description> + /// </item> + /// <item> + /// <term>20</term> + /// <description>D55</description> + /// </item> + /// <item> + /// <term>21</term> + /// <description>D65</description> + /// </item> + /// <item> + /// <term>22</term> + /// <description>D75</description> + /// </item> + /// <item> + /// <term>23</term> + /// <description>D50</description> + /// </item> + /// <item> + /// <term>24</term> + /// <description>ISO studio tungsten</description> + /// </item> + /// <item> + /// <term>255</term> + /// <description>other light source</description> + /// </item> + /// <item> + /// <term>other</term> + /// <description>reserved</description> + /// </item> + /// </list> + /// <para/> + /// <br/><b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public ushort? LightSource + { + get + { + return GetTagValue<ushort>("LightSource"); + } + set + { + SetTagValue("LightSource", value); + } + } + + /// <summary> + /// Gets or sets a value indicating the status of flash when the image was shot. + /// Bit 0 indicates the flash firing status, bits 1 and 2 indicate the flash return + /// status, bits 3 and 4 indicate the flash mode, bit 5 indicates whether the flash + /// function is present, and bit 6 indicates "red eye" mode. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public ushort? Flash + { + get + { + return GetTagValue<ushort>("Flash"); + } + set + { + SetTagValue("Flash", value); + } + } + + /// <summary> + /// Gets or sets a value indicating the location and area of the main subject in + /// the overall scene. Variable length between 2 and 4. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public ushort[] SubjectArea + { + get + { + return GetTagArray<ushort>("SubjectArea"); + } + set + { + FreeImage.Resize(ref value, 2, 4); + SetTagValue("SubjectArea", value); + } + } + + /// <summary> + /// Gets or sets the actual focal length of the lens, in mm. + /// Conversion is not made to the focal length of a 35 mm film camera. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public FIURational? FocalLength + { + get + { + return GetTagValue<FIURational>("FocalLength"); + } + set + { + SetTagValue("FocalLength", value); + } + } + + /// <summary> + /// Gets or sets the strobe energy at the time the image is captured, + /// as measured in Beam Candle Power Seconds (BCPS). + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public FIURational? FlashEnergy + { + get + { + return GetTagValue<FIURational>("FlashEnergy"); + } + set + { + SetTagValue("FlashEnergy", value); + } + } + + /// <summary> + /// Gets or sets the camera or input device spatial frequency table and SFR values + /// in the direction of image width, image height, and diagonal direction, + /// as specified in ISO 12233. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public byte[] SpatialFrequencyResponse + { + get + { + return GetTagArray<byte>("SpatialFrequencyResponse"); + } + set + { + SetTagValueUndefined("SpatialFrequencyResponse", value); + } + } + + /// <summary> + /// Gets or sets the number of pixels in the image width (X) direction per + /// FocalPlaneResolutionUnit on the camera focal plane. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public FIURational? FocalPlaneXResolution + { + get + { + return GetTagValue<FIURational>("FocalPlaneXResolution"); + } + set + { + SetTagValue("FocalPlaneXResolution", value); + } + } + + /// <summary> + /// Gets or sets the number of pixels in the image height (Y) direction per + /// FocalPlaneResolutionUnit on the camera focal plane. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public FIURational? FocalPlaneYResolution + { + get + { + return GetTagValue<FIURational>("FocalPlaneYResolution"); + } + set + { + SetTagValue("FocalPlaneYResolution", value); + } + } + + /// <summary> + /// Gets or sets the unit for measuring FocalPlaneXResolution and FocalPlaneYResolution. + /// This value is the same as the ResolutionUnit. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public ushort? FocalPlaneResolutionUnit + { + get + { + return GetTagValue<ushort>("FocalPlaneResolutionUnit"); + } + set + { + SetTagValue("FocalPlaneResolutionUnit", value); + } + } + + /// <summary> + /// Gets or sets the location of the main subject in the scene. + /// The value of this tag represents the pixel at the center of the main subject + /// relative to the left edge, prior to rotation processing as per the Rotation tag. + /// The first value indicates the X column number and second indicates the Y row number. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public ushort? SubjectLocation + { + get + { + return GetTagValue<ushort>("SubjectLocation"); + } + set + { + SetTagValue("SubjectLocation", value); + } + } + + /// <summary> + /// Gets or sets the exposure index selected on the camera or input device at the + /// time the image was captured. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public FIURational? ExposureIndex + { + get + { + return GetTagValue<FIURational>("ExposureIndex"); + } + set + { + SetTagValue("ExposureIndex", value); + } + } + + /// <summary> + /// Gets or sets the image sensor type on the camera or input device. + /// See remarks for further information. + /// </summary> + /// <remarks> + /// The following values are defined:<para/> + /// <list type="table"> + /// <listheader> + /// <term>ID</term> + /// <description>Description</description> + /// </listheader> + /// <item> + /// <term>1</term> + /// <description>not defined</description> + /// </item> + /// <item> + /// <term>2</term> + /// <description>one-chip color area sensor</description> + /// </item> + /// <item> + /// <term>3</term> + /// <description>two-chip color area sensor</description> + /// </item> + /// <item> + /// <term>4</term> + /// <description>three-chip color area sensor</description> + /// </item> + /// <item> + /// <term>5</term> + /// <description>color sequential area sensor</description> + /// </item> + /// <item> + /// <term>7</term> + /// <description>trilinear sensor</description> + /// </item> + /// <item> + /// <term>8</term> + /// <description>color sequential linear sensor</description> + /// </item> + /// <item> + /// <term>other</term> + /// <description>reserved</description> + /// </item> + /// </list> + /// <para/> + /// <br/><b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public ushort? SensingMethod + { + get + { + return GetTagValue<ushort>("SensingMethod"); + } + set + { + SetTagValue("SensingMethod", value); + } + } + + /// <summary> + /// Gets or sets the image source. If a DSC recorded the image, this tag value of this + /// tag always be set to 3, indicating that the image was recorded on a DSC. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public byte? FileSource + { + get + { + return GetTagValue<byte>("FileSource"); + } + set + { + SetTagValueUndefined("FileSource", value.HasValue ? new byte[] { value.Value } : null); + } + } + + /// <summary> + /// Gets or sets the type of scene. If a DSC recorded the image, this tag value shall + /// always be set to 1, indicating that the image was directly photographed. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public byte? SceneType + { + get + { + return GetTagValue<byte>("SceneType"); + } + set + { + SetTagValueUndefined("SceneType", value.HasValue ? new byte[] { value.Value } : null); + } + } + + /// <summary> + /// Gets or sets the color filter array (CFA) geometric pattern of the image sensor + /// when a one-chip color area sensor is used. It does not apply to all sensing methods. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public byte[] CFAPattern + { + get + { + return GetTagArray<byte>("CFAPattern"); + } + set + { + SetTagValueUndefined("CFAPattern", value); + } + } + + /// <summary> + /// Gets or sets the use of special processing on image data, such as rendering geared to output. + /// When special processing is performed, the reader is expected to disable or minimize any + /// further processing. See remarks for further information. + /// </summary> + /// <remarks> + /// The following values are definied:<para/> + /// <list type="table"> + /// <listheader> + /// <term>ID</term> + /// <description>Description</description> + /// </listheader> + /// <item> + /// <term>0</term> + /// <description>normal process</description> + /// </item> + /// <item> + /// <term>1</term> + /// <description>custom process</description> + /// </item> + /// <item> + /// <term>other</term> + /// <description>reserved</description> + /// </item> + /// </list> + /// <para/> + /// <br/><b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public ushort? CustomRendered + { + get + { + return GetTagValue<ushort>("CustomRendered"); + } + set + { + SetTagValue("CustomRendered", value); + } + } + + /// <summary> + /// Gets or sets the exposure mode set when the image was shot. + /// In auto-bracketing mode, the camera shoots a series of frames of the same scene + /// at different exposure settings. See remarks for further information. + /// </summary> + /// <remarks> + /// The following values are definied:<para/> + /// <list type="table"> + /// <listheader> + /// <term>ID</term> + /// <description>Description</description> + /// </listheader> + /// <item> + /// <term>0</term> + /// <description>auto exposure</description> + /// </item> + /// <item> + /// <term>1</term> + /// <description>manual exposure</description> + /// </item> + /// <item> + /// <term>2</term> + /// <description>auto bracket</description> + /// </item> + /// <item> + /// <term>other</term> + /// <description>reserved</description> + /// </item> + /// </list> + /// <para/> + /// <br/><b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public ushort? ExposureMode + { + get + { + return GetTagValue<ushort>("ExposureMode"); + } + set + { + SetTagValue("ExposureMode", value); + } + } + + /// <summary> + /// Gets or sets the white balance mode set when the image was shot. + /// See remarks for further information. + /// </summary> + /// <remarks> + /// The following values are definied:<para/> + /// <list type="table"> + /// <listheader> + /// <term>ID</term> + /// <description>Description</description> + /// </listheader> + /// <item> + /// <term>0</term> + /// <description>auto white balance</description> + /// </item> + /// <item> + /// <term>1</term> + /// <description>manual white balance</description> + /// </item> + /// <item> + /// <term>other</term> + /// <description>reserved</description> + /// </item> + /// </list> + /// <para/> + /// <br/><b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public ushort? WhiteBalance + { + get + { + return GetTagValue<ushort>("WhiteBalance"); + } + set + { + SetTagValue("WhiteBalance", value); + } + } + + /// <summary> + /// Gets or sets the digital zoom ratio when the image was shot. + /// If the numerator of the recorded value is 0, this indicates that digital zoom was not used. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public FIURational? DigitalZoomRatio + { + get + { + return GetTagValue<FIURational>("DigitalZoomRatio"); + } + set + { + SetTagValue("DigitalZoomRatio", value); + } + } + + /// <summary> + /// Gets or sets the equivalent focal length assuming a 35mm film camera, in mm. + /// A value of 0 means the focal length is unknown. Note that this tag differs + /// from the FocalLength tag. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public ushort? FocalLengthIn35mmFilm + { + get + { + return GetTagValue<ushort>("DigitalZoomRatio"); + } + set + { + SetTagValue("DigitalZoomRatio", value); + } + } + + /// <summary> + /// Gets or sets the type of scene that was shot. + /// It can also be used to record the mode in which the image was shot. + /// See remarks for further information. + /// </summary> + /// <remarks> + /// The following values are definied:<para/> + /// <list type="table"> + /// <listheader> + /// <term>ID</term> + /// <description>Description</description> + /// </listheader> + /// <item> + /// <term>0</term> + /// <description>standard</description> + /// </item> + /// <item> + /// <term>1</term> + /// <description>landscape</description> + /// </item> + /// <item> + /// <term>2</term> + /// <description>portrait</description> + /// </item> + /// <item> + /// <term>3</term> + /// <description>night scene</description> + /// </item> + /// <item> + /// <term>other</term> + /// <description>reserved</description> + /// </item> + /// </list> + /// <para/> + /// <br/><b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public ushort? SceneCaptureType + { + get + { + return GetTagValue<ushort>("SceneCaptureType"); + } + set + { + SetTagValue("SceneCaptureType", value); + } + } + + /// <summary> + /// Gets or sets the degree of overall image gain adjustment. + /// See remarks for further information. + /// </summary> + /// <remarks> + /// The following values are definied:<para/> + /// <list type="table"> + /// <listheader> + /// <term>ID</term> + /// <description>Description</description> + /// </listheader> + /// <item> + /// <term>0</term> + /// <description>none</description> + /// </item> + /// <item> + /// <term>1</term> + /// <description>low gain up</description> + /// </item> + /// <item> + /// <term>2</term> + /// <description>high gain up</description> + /// </item> + /// <item> + /// <term>3</term> + /// <description>low gain down</description> + /// </item> + /// <item> + /// <term>4</term> + /// <description>high gain down</description> + /// </item> + /// <item> + /// <term>other</term> + /// <description>reserved</description> + /// </item> + /// </list> + /// <para/> + /// <br/><b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public ushort? GainControl + { + get + { + return GetTagValue<ushort>("GainControl"); + } + set + { + SetTagValue("GainControl", value); + } + } + + /// <summary> + /// Gets or sets the direction of contrast processing applied by the camera + /// when the image was shot. + /// See remarks for further information. + /// </summary> + /// <remarks> + /// The following values are definied:<para/> + /// <list type="table"> + /// <listheader> + /// <term>ID</term> + /// <description>Description</description> + /// </listheader> + /// <item> + /// <term>0</term> + /// <description>normal</description> + /// </item> + /// <item> + /// <term>1</term> + /// <description>soft</description> + /// </item> + /// <item> + /// <term>2</term> + /// <description>hard</description> + /// </item> + /// <item> + /// <term>other</term> + /// <description>reserved</description> + /// </item> + /// </list> + /// <para/> + /// <br/><b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public ushort? Contrast + { + get + { + return GetTagValue<ushort>("Contrast"); + } + set + { + SetTagValue("Contrast", value); + } + } + + /// <summary> + /// Gets or sets the direction of saturation processing applied by the camera + /// when the image was shot. + /// See remarks for further information. + /// </summary> + /// <remarks> + /// The following values are definied:<para/> + /// <list type="table"> + /// <listheader> + /// <term>ID</term> + /// <description>Description</description> + /// </listheader> + /// <item> + /// <term>0</term> + /// <description>normal</description> + /// </item> + /// <item> + /// <term>1</term> + /// <description>low saturation</description> + /// </item> + /// <item> + /// <term>2</term> + /// <description>high saturation</description> + /// </item> + /// <item> + /// <term>other</term> + /// <description>reserved</description> + /// </item> + /// </list> + /// <para/> + /// <br/><b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public ushort? Saturation + { + get + { + return GetTagValue<ushort>("Saturation"); + } + set + { + SetTagValue("Saturation", value); + } + } + + /// <summary> + /// Gets or sets the direction of sharpness processing applied by the camera + /// when the image was shot. + /// See remarks for further information. + /// </summary> + /// <remarks> + /// The following values are definied:<para/> + /// <list type="table"> + /// <listheader> + /// <term>ID</term> + /// <description>Description</description> + /// </listheader> + /// <item> + /// <term>0</term> + /// <description>normal</description> + /// </item> + /// <item> + /// <term>1</term> + /// <description>soft</description> + /// </item> + /// <item> + /// <term>2</term> + /// <description>hard</description> + /// </item> + /// <item> + /// <term>other</term> + /// <description>reserved</description> + /// </item> + /// </list> + /// <para/> + /// <br/><b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public ushort? Sharpness + { + get + { + return GetTagValue<ushort>("Sharpness"); + } + set + { + SetTagValue("Sharpness", value); + } + } + + /// <summary> + /// Gets or sets information on the picture-taking conditions of a particular camera model. + /// The tag is used only to indicate the picture-taking conditions in the reader. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public byte[] DeviceSettingDescription + { + get + { + return GetTagArray<byte>("DeviceSettingDescription"); + } + set + { + SetTagValueUndefined("DeviceSettingDescription", value); + } + } + + /// <summary> + /// Gets or sets the distance to the subject. + /// See remarks for further information. + /// </summary> + /// <remarks> + /// The following values are definied:<para/> + /// <list type="table"> + /// <listheader> + /// <term>ID</term> + /// <description>Description</description> + /// </listheader> + /// <item> + /// <term>0</term> + /// <description>unknown</description> + /// </item> + /// <item> + /// <term>1</term> + /// <description>macro</description> + /// </item> + /// <item> + /// <term>2</term> + /// <description>close view</description> + /// </item> + /// <item> + /// <term>3</term> + /// <description>distant view</description> + /// </item> + /// <item> + /// <term>other</term> + /// <description>reserved</description> + /// </item> + /// </list> + /// <para/> + /// <br/><b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public ushort? SubjectDistanceRange + { + get + { + return GetTagValue<ushort>("SubjectDistanceRange"); + } + set + { + SetTagValue("SubjectDistanceRange", value); + } + } + + /// <summary> + /// Gets or sets an identifier assigned uniquely to each image. + /// It is recorded as an ASCII string equivalent to hexadecimal notation and 128-bit fixed length. + /// Constant length of 32. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string ImageUniqueID + { + get + { + string text = GetTagText("ImageUniqueID"); + if (!string.IsNullOrEmpty(text)) + { + text = text.Substring(0, text.Length - 1); + } + return text; + } + set + { + if (value != null) + { + FreeImage.Resize(ref value, 32); + value += '\0'; + } + SetTagValue("ImageUniqueID", value); + } + } + } + + /// <summary> + /// Represents a collection of all tags contained in the metadata model + /// <see cref="FREE_IMAGE_MDMODEL.FIMD_EXIF_GPS"/>. + /// </summary> + public class MDM_EXIF_GPS : MetadataModel + { + /// <summary> + /// Initializes a new instance of this class. + /// </summary> + /// <param name="dib">Handle to a FreeImage bitmap.</param> + public MDM_EXIF_GPS(FIBITMAP dib) : base(dib) { } + + /// <summary> + /// Retrieves the datamodel that this instance represents. + /// </summary> + public override FREE_IMAGE_MDMODEL Model + { + get { return FREE_IMAGE_MDMODEL.FIMD_EXIF_GPS; } + } + + /// <summary> + /// Gets or sets the GPS version ID. Constant length of 4. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public byte[] VersionID + { + get + { + return GetTagArray<byte>("GPSVersionID"); + } + set + { + FreeImage.Resize(ref value, 4); + SetTagValue("GPSVersionID", value); + } + } + + /// <summary> + /// Gets or sets a value indicating whether the <see cref="Latitude"/> + /// is north or south latitude. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public LatitudeType? LatitudeDirection + { + get + { + return ToLatitudeType(GetTagText("GPSLatitudeRef")); + } + set + { + SetTagValue("GPSLatitudeRef", ToString(value) + '\0'); + } + } + + /// <summary> + /// Gets or sets the latitude of the image. The latitude is expressed as three rational + /// values giving the degrees, minutes, and seconds, respectively. Constant length of 3. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + /// <seealso cref="LatitudeDirection"/> + public FIURational[] Latitude + { + get + { + return GetTagArray<FIURational>("GPSLatitude"); + } + set + { + FreeImage.Resize(ref value, 3); + SetTagValue("GPSLatitude", value); + } + } + + /// <summary> + /// Gets or sets a value indicating whether <see cref="Longitude"/> + /// is east or west longitude. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public LongitudeType? LongitudeDirection + { + get + { + return ToLongitudeType(GetTagText("GPSLongitudeRef")); + } + set + { + SetTagValue("GPSLongitudeRef", ToString(value) + '\0'); + } + } + + /// <summary> + /// Gets or sets the longitude of the image. The longitude is expressed as three rational + /// values giving the degrees, minutes, and seconds, respectively. Constant length of 3. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + /// <seealso cref="LongitudeDirection"/> + public FIURational[] Longitude + { + get + { + return GetTagArray<FIURational>("GPSLongitude"); + } + set + { + FreeImage.Resize(ref value, 3); + SetTagValue("GPSLongitude", value); + } + } + + /// <summary> + /// Gets a value indicating whether <see cref="Altitude"/> is sea level and the altitude + /// is above sea level. If the altitude is below sea level <see cref="Altitude"/> is + /// indicated as an absolute value. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public AltitudeType? AltitudeDirection + { + get + { + byte? flag = GetTagValue<byte>("GPSAltitudeRef"); + if (flag.HasValue) + { + switch (flag.Value) + { + case 0: + return AltitudeType.AboveSeaLevel; + case 1: + return AltitudeType.BelowSeaLevel; + default: + return AltitudeType.Undefined; + } + } + return null; + } + set + { + byte? val = null; + if (value.HasValue) + { + switch (value.Value) + { + case AltitudeType.AboveSeaLevel: + val = 0; + break; + + case AltitudeType.BelowSeaLevel: + val = 1; + break; + + default: + val = 2; + break; + } + } + SetTagValue("GPSAltitudeRef", val); + } + } + + /// <summary> + /// Gets or sets the altitude based on the reference in <see cref="AltitudeDirection"/>. + /// Altitude is expressed as one rational value. The reference unit is meters. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public FIURational? Altitude + { + get + { + return GetTagValue<FIURational>("GPSAltitude"); + } + set + { + SetTagValue("GPSAltitude", value); + } + } + + /// <summary> + /// Gets or sets the sign of the <see cref="SignedAltitude"/>. + /// </summary> + /// <remarks> + /// This is a derived property. There is no metadata tag directly associated + /// with this property value. + /// <para/> + /// <br/><b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public int? AltitudeSign + { + get + { + AltitudeType? seaLevel = AltitudeDirection; + if (seaLevel.HasValue) + { + return (seaLevel.Value == AltitudeType.BelowSeaLevel) ? -1 : 1; + } + return null; + } + set + { + if (value.HasValue) + { + AltitudeDirection = value.Value >= 0 ? AltitudeType.AboveSeaLevel : AltitudeType.BelowSeaLevel; + } + else + { + AltitudeDirection = null; + } + } + } + + /// <summary> + /// Gets or sets the signed altitude. + /// Altitude is expressed as one rational value. The reference unit is meters. + /// </summary> + /// <exception cref="OverflowException"> + /// Altitude is too large to fit into a FIRational. + /// </exception> + /// <remarks> + /// This is a derived property. There is no metadata tag directly associated + /// with this property value. + /// <para/> + /// <br/><b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public FIRational? SignedAltitude + { + get + { + FIRational? result = null; + FIURational? altitude = Altitude; + if (altitude.HasValue) + { + int sign = AltitudeSign ?? 1; + if (((int)altitude.Value.Numerator < 0) || ((int)altitude.Value.Denominator < 0)) + throw new OverflowException(); + result = new FIRational((int)altitude.Value.Numerator * sign, (int)altitude.Value.Denominator); + } + return result; + } + set + { + FIURational? val = null; + if (value.HasValue) + { + if (value.Value < 0) + { + AltitudeSign = -1; + value = -value.Value; + } + else + { + AltitudeSign = 1; + } + val = new FIURational((uint)value.Value.Numerator, (uint)value.Value.Denominator); + } + Altitude = val; + } + } + + + /// <summary> + /// Gets or sets the time as UTC (Coordinated Universal Time). Constant length of 3. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public TimeSpan? TimeStamp + { + get + { + FIURational[] stamp = GetTagArray<FIURational>("GPSTimeStamp"); + if ((stamp == null) || stamp.Length != 3) + { + return null; + } + else + { + return new TimeSpan((int)stamp[0], (int)stamp[1], (int)stamp[2]); + } + } + set + { + FIURational[] stamp = null; + if (value.HasValue) + { + TimeSpan span = value.Value; + stamp = new FIURational[3]; + stamp[0] = span.Hours; + stamp[1] = span.Minutes; + stamp[2] = span.Seconds; + } + SetTagValue("GPSTimeStamp", stamp); + } + } + + /// <summary> + /// Gets or sets the GPS satellites used for measurements. This tag can be used to describe + /// the number of satellites, their ID number, angle of elevation, azimuth, SNR and other + /// information in ASCII notation. The format is not specified. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string Satellites + { + get + { + string result = GetTagText("GPSSatellites"); + if (!string.IsNullOrEmpty(result)) + { + result = result.Substring(0, result.Length - 1); + } + return result; + } + set + { + if (value != null) + { + value += '\0'; + } + SetTagValue("GPSTimeStamp", value); + } + } + + /// <summary> + /// Gets or sets a value indicating the status of the GPS receiver when the image was recorded. + /// <b>true</b> indicates measurement was in progress; + /// <b>false</b> indicates measurement was Interoperability. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public bool? Status + { + get + { + string text = GetTagText("GPSStatus"); + return string.IsNullOrEmpty(text) ? default(bool?) : text[0] == 'A'; + } + set + { + SetTagValue("GPSStatus", value.HasValue ? (value.Value ? "A\0" : "V\0") : null); + } + } + + /// <summary> + /// Gets or sets a value indicating the GPS measurement mode. + /// <b>true</b> indicates three-dimensional measurement; + /// <b>false</b> indicated two-dimensional measurement was in progress. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public bool? MeasureMode3D + { + get + { + string text = GetTagText("GPSMeasureMode"); + return string.IsNullOrEmpty(text) ? default(bool?) : text[0] == '3'; + } + set + { + SetTagValue("GPSMeasureMode", value.HasValue ? (value.Value ? "3\0" : "2\0") : null); + } + } + + /// <summary> + /// Gets or sets the GPS DOP (data degree of precision). An HDOP value is written during + /// two-dimensional measurement, and PDOP during three-dimensional measurement. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public FIURational? DOP + { + get + { + return GetTagValue<FIURational>("GPSDOP"); + } + set + { + SetTagValue("GPSDOP", value); + } + } + + /// <summary> + /// Gets or sets the unit used to express the GPS receiver <see cref="Speed"/> of movement. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + /// <seealso cref="Speed"/> + public VelocityUnit? SpeedUnit + { + get + { + return ToUnitType(GetTagText("GPSSpeedRef")); + } + set + { + SetTagValue("GPSSpeedRef", ToString(value) + '\0'); + } + } + + /// <summary> + /// Gets or sets the speed of GPS receiver movement. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + /// <seealso cref="SpeedUnit"/> + public FIURational? Speed + { + get + { + return GetTagValue<FIURational>("GPSSpeed"); + } + set + { + SetTagValue("GPSSpeed", value); + } + } + + /// <summary> + /// Gets or sets the reference for giving the direction of GPS receiver movement. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + /// <seealso cref="Track"/> + public DirectionReference? TrackDirectionReference + { + get + { + return ToDirectionType(GetTagText("GPSTrackRef")); + } + set + { + SetTagValue("GPSTrackRef", ToString(value) + '\0'); + } + } + + /// <summary> + /// Gets or sets the direction of GPS receiver movement. + /// The range of values is from 0.00 to 359.99. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + /// <seealso cref="TrackDirectionReference"/> + public FIURational? Track + { + get + { + return GetTagValue<FIURational>("GPSTrack"); + } + set + { + SetTagValue("GPSTrack", value); + } + } + + /// <summary> + /// Gets or sets the reference for giving the direction of GPS receiver movement. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + /// <seealso cref="ImageDirection"/> + public DirectionReference? ImageDirectionReference + { + get + { + return ToDirectionType(GetTagText("GPSImgDirectionRef")); + } + set + { + SetTagValue("GPSImgDirectionRef", ToString(value) + '\0'); + } + } + + /// <summary> + /// Gets or sets the direction of the image when it was captured. + /// The range of values is from 0.00 to 359.99. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + /// <seealso cref="ImageDirectionReference"/> + public FIURational? ImageDirection + { + get + { + return GetTagValue<FIURational>("GPSImgDirection"); + } + set + { + SetTagValue("GPSImgDirection", value); + } + } + + /// <summary> + /// Gets or sets the geodetic survey data used by the GPS receiver. If the survey data + /// is restricted to Japan, the value of this tag is 'TOKYO' or 'WGS-84'. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string MapDatum + { + get + { + string result = GetTagText("GPSMapDatum"); + if (!string.IsNullOrEmpty(result)) + { + result = result.Substring(0, result.Length - 1); + } + return result; + } + set + { + SetTagValue("GPSMapDatum", value + '\0'); + } + } + + /// <summary> + /// Gets or sets a value indicating whether the destination point + /// is north or south latitude. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + /// <seealso cref="Latitude"/> + public LatitudeType? DestinationLatitudeDirection + { + get + { + return ToLatitudeType(GetTagText("GPSDestLatitudeRef")); + } + set + { + SetTagValue("GPSDestLatitudeRef", ToString(value) + '\0'); + } + } + + /// <summary> + /// Gets or sets the latitude of the destination point. The latitude is expressed as three rational + /// values giving the degrees, minutes, and seconds, respectively. Constant length of 3. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + /// <seealso cref="DestinationLatitudeDirection"/> + public FIURational[] DestinationLatitude + { + get + { + return GetTagArray<FIURational>("GPSDestLatitude"); + } + set + { + FreeImage.Resize(ref value, 3); + SetTagValue("GPSDestLatitude", value); + } + } + + /// <summary> + /// Gets or sets a value indicating whether the destination point + /// is east or west longitude. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + /// <seealso cref="Latitude"/> + public LongitudeType? DestinationLongitudeDirection + { + get + { + return ToLongitudeType(GetTagText("GPSDestLongitudeRef")); + } + set + { + SetTagValue("GPSDestLongitudeRef", ToString(value) + '\0'); + } + } + + /// <summary> + /// Gets or sets the longitude of the destination point. The longitude is expressed as three rational + /// values giving the degrees, minutes, and seconds, respectively. Constant length of 3. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public FIURational[] DestinationLongitude + { + get + { + return GetTagArray<FIURational>("GPSDestLongitude"); + } + set + { + FreeImage.Resize(ref value, 3); + SetTagValue("GPSDestLongitude", value); + } + } + + /// <summary> + /// Gets or sets the reference used for giving the bearing to the destination point. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + /// <seealso cref="DestinationBearing"/> + public DirectionReference? DestinationDirectionReference + { + get + { + return ToDirectionType(GetTagText("GPSDestBearingRef")); + } + set + { + SetTagValue("GPSDestBearingRef", ToString(value) + '\0'); + } + } + + /// <summary> + /// Gets or sets the bearing to the destination point. + /// The range of values is from 0.00 to 359.99. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + /// <seealso cref="DestinationDirectionReference"/> + public FIURational? DestinationBearing + { + get + { + return GetTagValue<FIURational>("GPSDestBearing"); + } + set + { + SetTagValue("GPSDestBearing", value); + } + } + + /// <summary> + /// Gets or sets the unit used to express the distance to the destination point. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + /// <seealso cref="DestinationBearing"/> + public VelocityUnit? DestinationUnit + { + get + { + return ToUnitType(GetTagText("GPSDestDistanceRef")); + } + set + { + SetTagValue("GPSDestDistanceRef", ToString(value) + '\0'); + } + } + + /// <summary> + /// Gets or sets a character string recording the name of the method used + /// for location finding. The first byte indicates the character code used, + /// and this is followed by the name of the method. Since the Type is not ASCII, + /// NULL termination is not necessary. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public byte[] ProcessingMethod + { + get + { + return GetTagArray<byte>("GPSProcessingMethod"); + } + set + { + SetTagValue("GPSProcessingMethod", value); + } + } + + /// <summary> + /// Gets or sets a character string recording the name of the GPS area. + /// The first byte indicates the character code used, and this is followed by + /// the name of the GPS area. Since the Type is not ASCII, NULL termination is + /// not necessary. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public byte[] AreaInformation + { + get + { + return GetTagArray<byte>("GPSAreaInformation"); + } + set + { + SetTagValue("GPSAreaInformation", value); + } + } + + /// <summary> + /// Gets or sets date and time information relative to UTC (Coordinated Universal Time). + /// </summary> + /// <remarks> + /// This is a derived property. There is no metadata tag directly associated + /// with this property value. + /// <para/> + /// <br/><b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public DateTime? DateTimeStamp + { + get + { + DateTime? date = DateStamp; + TimeSpan? time = TimeStamp; + if ((date == null) && (time == null)) + { + return null; + } + else + { + if (date == null) + { + date = DateTime.MinValue; + } + if (time == null) + { + time = TimeSpan.MinValue; + } + return date.Value.Add(time.Value); + } + } + set + { + if (value.HasValue) + { + DateStamp = value.Value.Date; + TimeStamp = value.Value.TimeOfDay; + } + else + { + DateStamp = null; + TimeStamp = null; + } + } + } + + /// <summary> + /// Gets or sets date information relative to UTC (Coordinated Universal Time). + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public DateTime? DateStamp + { + get + { + string stamp = GetTagText("GPSDateStamp"); + if (stamp != null) + { + try + { + return DateTime.ParseExact(stamp, "yyyy:MM:dd\0", null); + } + catch + { + } + } + return null; + } + set + { + string val = null; + if (value.HasValue) + { + try + { + val = value.Value.ToString("yyyy:MM:dd\0"); + } + catch + { + } + } + SetTagValue("GPSDateStamp", val); + } + } + + /// <summary> + /// Gets or sets a value indicating whether differential correction was applied to + /// the GPS receiver. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public bool? IsDifferential + { + get + { + ushort? value = GetTagValue<ushort>("GPSDifferential"); + return value.HasValue ? (value != 0) : (default(bool?)); + } + set + { + SetTagValue("GPSDifferential", value.HasValue ? (object)(value.Value ? (ushort)1 : (ushort)0) : (null)); + } + } + } + + /// <summary> + /// Represents a collection of all tags contained in the metadata model + /// <see cref="FREE_IMAGE_MDMODEL.FIMD_EXIF_INTEROP"/>. + /// </summary> + public class MDM_INTEROP : MetadataModel + { + /// <summary> + /// Initializes a new instance of this class. + /// </summary> + /// <param name="dib">Handle to a FreeImage bitmap.</param> + public MDM_INTEROP(FIBITMAP dib) : base(dib) { } + + /// <summary> + /// Retrieves the datamodel that this instance represents. + /// </summary> + public override FREE_IMAGE_MDMODEL Model + { + get { return FREE_IMAGE_MDMODEL.FIMD_EXIF_INTEROP; } + } + + /// <summary> + /// Gets or sets the identification of the Interoperability rule. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public InteroperabilityMode? Identification + { + get + { + return ToInteroperabilityType(GetTagText("InteroperabilityIndex")); + } + set + { + SetTagValue("InteroperabilityIndex", ToString(value) + '\0'); + } + } + } + + /// <summary> + /// Represents a collection of all tags contained in the metadata model + /// <see cref="FREE_IMAGE_MDMODEL.FIMD_EXIF_MAIN"/>. + /// <para/> + /// <b>This class is obsolete. Use class <see cref="MDM_EXIF_MAIN"/> instead.</b> + /// </summary> + [Obsolete("To be removed in future releases. Use MDM_EXIF_MAIN instead.")] + public class MDM_MAIN : MDM_EXIF_MAIN + { + /// <summary> + /// Initializes a new instance of this class. + /// </summary> + /// <param name="dib">Handle to a FreeImage bitmap.</param> + public MDM_MAIN(FIBITMAP dib) : base(dib) { } + } + + /// <summary> + /// Represents a collection of all tags contained in the metadata model + /// <see cref="FREE_IMAGE_MDMODEL.FIMD_EXIF_MAIN"/>. + /// </summary> + public class MDM_EXIF_MAIN : MetadataModel + { + /// <summary> + /// Initializes a new instance of this class. + /// </summary> + /// <param name="dib">Handle to a FreeImage bitmap.</param> + public MDM_EXIF_MAIN(FIBITMAP dib) : base(dib) { } + + /// <summary> + /// Retrieves the datamodel that this instance represents. + /// </summary> + public override FREE_IMAGE_MDMODEL Model + { + get { return FREE_IMAGE_MDMODEL.FIMD_EXIF_MAIN; } + } + + /// <summary> + /// Gets or sets the number of columns of image data, equal to the number + /// of pixels per row. In JPEG compressed data a JPEG marker is used + /// instead of this tag. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public uint? ImageWidth + { + get + { + return GetUInt32Value("ImageWidth"); + } + set + { + RemoveTag("ImageWidth"); + if (value.HasValue) + { + SetTagValue("ImageWidth", value); + } + } + } + + /// <summary> + /// Gets or sets number of rows of image data. In JPEG compressed data a JPEG marker + /// is used instead of this tag. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public uint? ImageHeight + { + get + { + return GetUInt32Value("ImageLength"); + } + set + { + RemoveTag("ImageLength"); + if (value.HasValue) + { + SetTagValue("ImageLength", value); + } + } + } + + /// <summary> + /// Gets or sets number of bits per image component. In this standard + /// each component of the image is 8 bits, so the value for this tag is 8. + /// Constant length of 3. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public ushort[] BitsPerSample + { + get + { + return GetTagArray<ushort>("BitsPerSample"); + } + set + { + FreeImage.Resize(ref value, 3); + SetTagValue("BitsPerSample", value); + } + } + + /// <summary> + /// Gets or sets compression scheme used for the image data. When a primary image + /// is JPEG compressed, this designation is not necessary and is omitted. + /// When thumbnails use JPEG compression, this tag value is set to 6. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public ushort? Compression + { + get + { + return GetTagValue<ushort>("Compression"); + } + set + { + SetTagValue("Compression", value); + } + } + + /// <summary> + /// Gets or sets pixel composition. In JPEG compressed data a JPEG marker is + /// used instead of this tag. See remarks for further information. + /// </summary> + /// <remarks> + /// The following values are definied:<para/> + /// <list type="table"> + /// <listheader> + /// <term>ID</term> + /// <description>Description</description> + /// </listheader> + /// <item> + /// <term>2</term> + /// <description>RGB</description> + /// </item> + /// <item> + /// <term>6</term> + /// <description>YCbCr</description> + /// </item> + /// <item> + /// <term>other</term> + /// <description>reserved</description> + /// </item> + /// </list> + /// <para/> + /// <br/><b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public ushort? PhotometricInterpretation + { + get + { + return GetTagValue<ushort>("PhotometricInterpretation"); + } + set + { + SetTagValue("PhotometricInterpretation", value); + } + } + + /// <summary> + /// Gets or sets the image orientation viewed in terms of rows and columns. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public ExifImageOrientation? Orientation + { + get + { + return (ExifImageOrientation?)GetTagValue<ushort>("Orientation"); + } + set + { + SetTagValue("Orientation", (ushort?)value); + } + } + + /// <summary> + /// Gets or sets the number of components per pixel. Since this standard applies + /// to RGB and YCbCr images, the value set for this tag is 3. In JPEG compressed + /// data a JPEG marker is used instead of this tag. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public ushort? SamplesPerPixel + { + get + { + return GetTagValue<ushort>("SamplesPerPixel"); + } + set + { + SetTagValue("SamplesPerPixel", value); + } + } + + /// <summary> + /// Gets or sets a value that indicates whether pixel components are recorded in + /// chunky or planar format. In JPEG compressed files a JPEG marker is used instead + /// of this tag. If this field does not exist, the TIFF default of 1 (chunky) is assumed. + /// See remarks for further information. + /// </summary> + /// <remarks> + /// The following values are definied:<para/> + /// <list type="table"> + /// <listheader> + /// <term>ID</term> + /// <description>Description</description> + /// </listheader> + /// <item> + /// <term>1</term> + /// <description>chunky format</description> + /// </item> + /// <item> + /// <term>2</term> + /// <description>planar format</description> + /// </item> + /// <item> + /// <term>other</term> + /// <description>reserved</description> + /// </item> + /// </list> + /// <para/> + /// <br/><b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public ushort? PlanarConfiguration + { + get + { + return GetTagValue<ushort>("PlanarConfiguration"); + } + set + { + SetTagValue("PlanarConfiguration", value); + } + } + + /// <summary> + /// Gets or sets the sampling ratio of chrominance components in relation to + /// the luminance component. In JPEG compressed dat a JPEG marker is used + /// instead of this tag. + /// See remarks for further information. + /// </summary> + /// <remarks> + /// The following values are definied:<para/> + /// <list type="table"> + /// <listheader> + /// <term>ID</term> + /// <description>Description</description> + /// </listheader> + /// <item> + /// <term>[2,1]</term> + /// <description>YCbCr4:2:2</description> + /// </item> + /// <item> + /// <term>[2,2]</term> + /// <description>YCbCr4:2:0</description> + /// </item> + /// <item> + /// <term>other</term> + /// <description>reserved</description> + /// </item> + /// </list> + /// <para/> + /// <br/><b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public ushort[] YCbCrSubSampling + { + get + { + return GetTagArray<ushort>("YCbCrSubSampling"); + } + set + { + FreeImage.Resize(ref value, 2); + SetTagValue("YCbCrSubSampling", value); + } + } + + /// <summary> + /// Gets or sets position of chrominance components in relation to the luminance component. + /// See remarks for further information. + /// </summary> + /// <remarks> + /// This field is designated only for JPEG compressed data or uncompressed YCbCr data. + /// The TIFF default is 1 (centered); but when Y:Cb:Cr = 4:2:2 it is recommended in + /// this standard that 2 (co-sited) be used to record data, in order to improve the + /// image quality when viewed on TV systems. + /// <para/> + /// When this field does not exist, the reader shall assume the TIFF default. + /// In the case of Y:Cb:Cr = 4:2:0, the TIFF default (centered) is recommended. + /// If the reader does not have the capability of supporting both kinds of YCbCrPositioning, + /// it shall follow the TIFF default regardless of the value in this field. + /// It is preferable that readers be able to support both centered and co-sited positioning. + /// <para/> + /// The following values are definied:<para/> + /// <list type="table"> + /// <listheader> + /// <term>ID</term> + /// <description>Description</description> + /// </listheader> + /// <item> + /// <term>1</term> + /// <description>centered</description> + /// </item> + /// <item> + /// <term>2</term> + /// <description>co-sited</description> + /// </item> + /// <item> + /// <term>other</term> + /// <description>reserved</description> + /// </item> + /// </list> + /// <para/> + /// <br/><b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public ushort? YCbCrPositioning + { + get + { + return GetTagValue<ushort>("YCbCrPositioning"); + } + set + { + SetTagValue("YCbCrPositioning", value); + } + } + + /// <summary> + /// Gets or sets the number of pixels per <see cref="ResolutionUnit"/> + /// in the <see cref="ImageWidth"/> direction. When the image resolution is unknown, + /// 72 [dpi] is designated. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public FIURational? XResolution + { + get + { + return GetTagValue<FIURational>("XResolution"); + } + set + { + SetTagValue("XResolution", value); + } + } + + /// <summary> + /// Gets or sets the number of pixels per <see cref="ResolutionUnit"/> + /// in the <see cref="ImageHeight"/> direction. When the image resolution is unknown, + /// 72 [dpi] is designated. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public FIURational? YResolution + { + get + { + return GetTagValue<FIURational>("YResolution"); + } + set + { + SetTagValue("YResolution", value); + } + } + + /// <summary> + /// Gets or sets the unit for measuring <see cref="XResolution"/> and <see cref="YResolution"/>. + /// The same unit is used for both <see cref="XResolution"/> and <see cref="YResolution"/>. + /// If the image resolution in unknown, 2 (inches) is designated. + /// See remarks for further information. + /// </summary> + /// <remarks> + /// The following values are definied:<para/> + /// <list type="table"> + /// <listheader> + /// <term>ID</term> + /// <description>Description</description> + /// </listheader> + /// <item> + /// <term>2</term> + /// <description>inches</description> + /// </item> + /// <item> + /// <term>3</term> + /// <description>YCbCr4:2:0</description> + /// </item> + /// <item> + /// <term>other</term> + /// <description>centimeters</description> + /// </item> + /// </list> + /// <para/> + /// <br/><b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public ushort? ResolutionUnit + { + get + { + return GetTagValue<ushort>("ResolutionUnit"); + } + set + { + SetTagValue("ResolutionUnit", value); + } + } + + /// <summary> + /// Gets or sets the byte offset of that strip. + /// It is recommended that this be selected so the number of strip bytes + /// does not exceed 64 Kbytes. + /// With JPEG compressed data this designation is not needed and is omitted. + /// Constant length of <see cref="SamplesPerPixel"/> * StripsPerImage. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + /// <seealso cref="RowsPerStrip"/> + /// <see cref="StripByteCounts"/> + public uint[] StripOffsets + { + get + { + return GetUInt32Array("StripOffsets"); + } + set + { + RemoveTag("StripOffsets"); + if (value != null) + { + SetTagValue("StripOffsets", value); + } + } + } + + /// <summary> + /// Gets or sets number of rows per strip. This is the number of rows in the image of + /// one strip when an image is divided into strips. With JPEG compressed data this + /// designation is not needed and is omitted. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + /// <seealso cref="StripByteCounts"/> + public uint? RowsPerStrip + { + get + { + return GetUInt32Value("RowsPerStrip"); + } + set + { + RemoveTag("RowsPerStrip"); + if (value.HasValue) + { + SetTagValue("RowsPerStrip", value); + } + } + } + + /// <summary> + /// Gets or sets the total number of bytes in each strip. + /// With JPEG compressed data this designation is not needed and is omitted. + /// Constant length of <see cref="SamplesPerPixel"/> * StripsPerImage. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public uint[] StripByteCounts + { + get + { + return GetUInt32Array("StripByteCounts"); + } + set + { + RemoveTag("StripByteCounts"); + if (value != null) + { + SetTagValue("StripByteCounts", value); + } + } + } + + /// <summary> + /// Gets or sets the offset to the start byte (SOI) of JPEG compressed thumbnail data. + /// This is not used for primary image JPEG data. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public uint? JPEGInterchangeFormat + { + get + { + return GetTagValue<uint>("JPEGInterchangeFormat"); + } + set + { + SetTagValue("JPEGInterchangeFormat", value); + } + } + + /// <summary> + /// Gets or sets the number of bytes of JPEG compressed thumbnail data. + /// </summary> + /// <remarks> + /// This is not used for primary image JPEG data. + /// JPEG thumbnails are not divided but are recorded as a continuous + /// JPEG bitstream from SOI to EOI. APPn and COM markers should not be recorded. + /// Compressed thumbnails shall be recorded in no more than 64 Kbytes, + /// including all other data to be recorded in APP1. + /// <para/> + /// <br/><b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public uint? JPEGInterchangeFormatLength + { + get + { + return GetTagValue<uint>("JPEGInterchangeFormatLength"); + } + set + { + SetTagValue("JPEGInterchangeFormatLength", value); + } + } + + /// <summary> + /// Gets or sets a transfer function for the image, described in tabular style. + /// Constant length of 3 * 256. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public ushort[] TransferFunction + { + get + { + return GetTagArray<ushort>("TransferFunction"); + } + set + { + FreeImage.Resize(ref value, 3 * 256); + SetTagValue("TransferFunction", value); + } + } + + /// <summary> + /// Gets or sets the chromaticity of the white point of the image. + /// Constant length of 2. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public FIURational[] WhitePoint + { + get + { + return GetTagArray<FIURational>("WhitePoint"); + } + set + { + FreeImage.Resize(ref value, 2); + SetTagValue("WhitePoint", value); + } + } + + /// <summary> + /// Gets or sets the chromaticity of the three primary colors of the image. + /// Constant length of 6. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public FIURational[] PrimaryChromaticities + { + get + { + return GetTagArray<FIURational>("PrimaryChromaticities"); + } + set + { + FreeImage.Resize(ref value, 6); + SetTagValue("PrimaryChromaticities", value); + } + } + + /// <summary> + /// Gets or sets the matrix coefficients for transformation from RGB to YCbCr image data. + /// Constant length of 3. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public FIURational[] YCbCrCoefficients + { + get + { + return GetTagArray<FIURational>("YCbCrCoefficients"); + } + set + { + FreeImage.Resize(ref value, 3); + SetTagValue("PrimaryChromaticities", value); + } + } + + /// <summary> + /// Gets or sets the reference black point value and reference white point value. + /// Constant length of 6. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public FIURational[] ReferenceBlackWhite + { + get + { + return GetTagArray<FIURational>("ReferenceBlackWhite"); + } + set + { + FreeImage.Resize(ref value, 6); + SetTagValue("ReferenceBlackWhite", value); + } + } + + /// <summary> + /// Gets or sets the date and time of image creation. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public DateTime? DateTime + { + get + { + DateTime? result = null; + string text = GetTagText("DateTime"); + if (text != null) + { + try + { + result = System.DateTime.ParseExact(text, "yyyy:MM:dd HH:mm:ss\0", null); + } + catch + { + } + } + return result; + } + set + { + string val = null; + if (value.HasValue) + { + try + { + val = value.Value.ToString("yyyy:MM:dd HH:mm:ss\0"); + } + catch + { + } + } + SetTagValue("DateTime", val); + } + } + + /// <summary> + /// Gets or sets a string giving the title of the image. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string ImageDescription + { + get + { + string result = GetTagText("ImageDescription"); + if (!string.IsNullOrEmpty(result)) + { + result = result.Substring(0, result.Length - 1); + } + return result; + } + set + { + if (value != null) + { + value += '\0'; + } + SetTagValue("ImageDescription", value); + } + } + + /// <summary> + /// Gets or sets the manufacturer of the recording equipment. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string Make + { + get + { + string result = GetTagText("Make"); + if (!string.IsNullOrEmpty(result)) + { + result = result.Substring(0, result.Length - 1); + } + return result; + } + set + { + if (value != null) + { + value += '\0'; + } + SetTagValue("Make", value); + } + } + + /// <summary> + /// Gets or sets the model name or model number of the equipment. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string EquipmentModel + { + get + { + string result = GetTagText("Model"); + if (!string.IsNullOrEmpty(result)) + { + result = result.Substring(0, result.Length - 1); + } + return result; + } + set + { + if (value != null) + { + value += '\0'; + } + SetTagValue("Model", value); + } + } + + /// <summary> + /// Gets or sets the name and version of the software or firmware of the camera + /// or image input device used to generate the image. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string Software + { + get + { + string result = GetTagText("Software"); + if (!string.IsNullOrEmpty(result)) + { + result = result.Substring(0, result.Length - 1); + } + return result; + } + set + { + if (value != null) + { + value += '\0'; + } + SetTagValue("Software", value); + } + } + + /// <summary> + /// Gets or sets the name of the camera owner, photographer or image creator. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string Artist + { + get + { + string result = GetTagText("Artist"); + if (!string.IsNullOrEmpty(result)) + { + result = result.Substring(0, result.Length - 1); + } + return result; + } + set + { + if (value != null) + { + value += '\0'; + } + SetTagValue("Artist", value); + } + } + + /// <summary> + /// Gets or sets the photographer and editor copyrights. + /// Constant length of 1-2. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string[] Copyright + { + get + { + string[] result = null; + string text = GetTagText("Copyright"); + if (!string.IsNullOrEmpty(text)) + { + result = text.Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries); + } + return result; + } + set + { + string val = null; + if (value != null) + { + if (value.Length == 1) + { + if (value[0] != null) + { + val = value[0] + '\0'; + } + } + else if (value.Length == 2) + { + if ((value[0] != null) && (value[1] != null)) + { + val = value[0] + '\0' + value[1] + '\0'; + } + } + } + SetTagValue("Copyright", val); + } + } + } + + /// <summary> + /// Represents a collection of all tags contained in the metadata model + /// <see cref="FREE_IMAGE_MDMODEL.FIMD_EXIF_MAKERNOTE"/>. + /// </summary> + public class MDM_MAKERNOTE : MetadataModel + { + /// <summary> + /// Initializes a new instance of this class. + /// </summary> + /// <param name="dib">Handle to a FreeImage bitmap.</param> + public MDM_MAKERNOTE(FIBITMAP dib) : base(dib) { } + + /// <summary> + /// Retrieves the datamodel that this instance represents. + /// </summary> + public override FREE_IMAGE_MDMODEL Model + { + get { return FREE_IMAGE_MDMODEL.FIMD_EXIF_MAKERNOTE; } + } + } + + /// <summary> + /// Represents a collection of all tags contained in the metadata model + /// <see cref="FREE_IMAGE_MDMODEL.FIMD_GEOTIFF"/>. + /// </summary> + public class MDM_GEOTIFF : MetadataModel + { + /// <summary> + /// Initializes a new instance of this class. + /// </summary> + /// <param name="dib">Handle to a FreeImage bitmap.</param> + public MDM_GEOTIFF(FIBITMAP dib) : base(dib) { } + + /// <summary> + /// Retrieves the datamodel that this instance represents. + /// </summary> + public override FREE_IMAGE_MDMODEL Model + { + get { return FREE_IMAGE_MDMODEL.FIMD_GEOTIFF; } + } + + /// <summary> + /// Gets or sets the value of the GeoTIFF GeoASCIIParamsTag. + /// </summary> + /// <remarks> + /// The GeoASCIIParamsTag is used to store all of the <see cref="String"/> valued + /// GeoKeys, referenced by the <see cref="GeoKeyDirectory"/> property. Since keys + /// defined in the GeoKeyDirectoryTag use offsets into this tag, any special + /// comments may be placed at the beginning of this tag. + /// For the most part, the only keys that are <see cref="String"/> valued are + /// <i>Citation</i> keys, giving documentation and references for obscure + /// projections, datums, etc. + /// <para/> + /// Special handling is required for <see cref="String"/>-valued keys. While it + /// is true that TIFF 6.0 permits multiple NULL-delimited strings within a single + /// ASCII tag, the secondary strings might not appear in the output of naive + /// <i>tiffdump</i> programs. For this reason, the NULL delimiter of each ASCII key + /// value shall be converted to a "|" (pipe) character before being installed + /// back into the <see cref="String"/> holding tag, so that a dump of the tag + /// will look like this. + /// <para/> + /// AsciiTag="first_value|second_value|etc...last_value|" + /// <para/> + /// A baseline GeoTIFF-reader must check for and convert the final "|" pipe + /// character of a key back into a NULL before returning it to the client + /// software. + /// <para/> + /// <br/><b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string GeoASCIIParams + { + get + { + string text = GetTagText("GeoASCIIParams"); + if (!string.IsNullOrEmpty(text)) + { + text = text.Substring(0, text.Length - 1); + } + return text; + } + set + { + if (value != null) + { + value += '\0'; + } + SetTagValue("GeoASCIIParams", value); + } + } + + /// <summary> + /// Gets or sets the value of the GeoTIFF GeoDoubleParamsTag. + /// </summary> + /// <remarks> + /// The GeoDoubleParamsTag is used to store all of the <see cref="Double"/> valued + /// GeoKeys, referenced by the <see cref="GeoKeyDirectory"/> property. The meaning of + /// any value of this double array is determined from the GeoKeyDirectoryTag reference + /// pointing to it. <see cref="Single"/> values should first be converted to + /// <see cref="Double"/> and stored here. + /// <para/> + /// <br/><b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public double[] GeoDoubleParams + { + get + { + return GetTagArray<double>("GeoDoubleParams"); + } + set + { + SetTagValue("GeoDoubleParams", value); + } + } + + /// <summary> + /// Gets or sets the value of the GeoTIFF GeoKeyDirectoryTag. + /// </summary> + /// <remarks> + /// The GeoKeyDirectoryTag may be used to store the GeoKey Directory, which defines and + /// references the <i>GeoKeys</i>. + /// <para/> + /// The tag is an array of unsigned <see cref="UInt16"/> values, which are primarily + /// grouped into blocks of 4. The first 4 values are special, and contain GeoKey directory + /// header information. The header values consist of the following information, in order: + /// <para/> + /// Header={KeyDirectoryVersion, KeyRevision, MinorRevision, NumberOfKeys} + /// <para/> + /// where + /// <para/> + /// <i>KeyDirectoryVersion</i> indicates the current version of Key implementation, and will + /// only change if this Tag's Key structure is changed. (Similar to the TIFFVersion (42)). + /// The current DirectoryVersion number is 1. This value will most likely never change, + /// and may be used to ensure that this is a valid Key-implementation. + /// <para/> + /// <i>KeyRevision</i> indicates what revision of Key-Sets are used. + /// <para/> + /// <i>MinorRevision</i> indicates what set of Key-Codes are used. The complete revision number + /// is denoted <KeyRevision>.<MinorRevision>. + /// <para/> + /// <i>NumberOfKeys</i> indicates how many Keys are defined by the rest of this Tag. + /// <para/> + /// This header is immediately followed by a collection of <NumberOfKeys> KeyEntry + /// sets, each of which is also 4-<see cref="UInt16"/> long. Each KeyEntry is modeled on the + /// <i>TIFFEntry</i> format of the TIFF directory header, and is of the form: + /// <para/> + /// KeyEntry = { KeyID, TIFFTagLocation, Count, Value_Offset } + /// <para/> + /// where + /// <para/> + /// <i>KeyID</i> gives the Key-ID value of the Key (identical in function to TIFF tag ID, + /// but completely independent of TIFF tag-space), + /// <para/> + /// <i>TIFFTagLocation</i> indicates which TIFF tag contains the value(s) of the Key: if + /// TIFFTagLocation is 0, then the value is <see cref="UInt16"/>, and is contained in the + /// <i>Value_Offset</i> entry. Otherwise, the type (format) of the value is implied by the + /// TIFF-Type of the tag containing the value. + /// <para/> + /// <i>Count</i> indicates the number of values in this key. + /// <para/> + /// <i>Value_Offset</i> Value_Offset indicates the index-offset into the TagArray indicated + /// by TIFFTagLocation, if it is nonzero. If TIFFTagLocation is 0 (zero) , then Value_Offset + /// contains the actual (<see cref="UInt16"/>) value of the Key, and Count=1 is implied. + /// Note that the offset is not a byte-offset, but rather an index based on the natural data + /// type of the specified tag array. + /// <para/> + /// Following the KeyEntry definitions, the KeyDirectory tag may also contain additional + /// values. For example, if a key requires multiple <see cref="UInt16"/> values, they shall + /// be placed at the end of this tag, and the KeyEntry will set + /// TIFFTagLocation=GeoKeyDirectoryTag, with the Value_Offset pointing to the location of the + /// value(s). + /// <para/> + /// <br/><b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public ushort[] GeoKeyDirectory + { + get + { + return GetTagArray<ushort>("GeoKeyDirectory"); + } + set + { + SetTagValue("GeoKeyDirectory", value); + } + } + + /// <summary> + /// Gets or sets the value of the GeoTIFF ModelPixelScaleTag. + /// </summary> + /// <remarks> + /// The ModelPixelScaleTag tag may be used to specify the size of raster pixel spacing + /// in the model space units, when the raster space can be embedded in the model space + /// coordinate system without rotation, and consists of the following 3 values: + /// <para/> + /// ModelPixelScaleTag = (ScaleX, ScaleY, ScaleZ) + /// <para/> + /// where <i>ScaleX</i> and <i>ScaleY</i> give the horizontal and vertical spacing of + /// raster pixels. The <i>ScaleZ</i> is primarily used to map the pixel value of a + /// digital elevation model into the correct Z-scale, and so for most other purposes + /// this value should be zero (since most model spaces are 2-D, with Z=0). + /// <para/> + /// A single tiepoint in the <see cref="ModelTiePoints"/> tag, together with this tag, + /// completely determine the relationship between raster and model space; thus they + /// comprise the two tags which Baseline GeoTIFF files most often will use to place a + /// raster image into a "standard position" in model space. + /// <para/> + /// Like the <see cref="ModelTiePoints"/> tag, this tag information is independent of the + /// XPosition, YPosition, Resolution and Orientation tags of the standard TIFF 6.0 spec. + /// However, simple reversals of orientation between raster and model space + /// (e.g. horizontal or vertical flips) may be indicated by reversal of sign in the + /// corresponding component of the ModelPixelScaleTag. GeoTIFF compliant readers must + /// honor this signreversal convention. + /// <para/> + /// This tag must not be used if the raster image requires rotation or shearing to place + /// it into the standard model space. In such cases the transformation shall be defined + /// with the more general <see cref="ModelTransformationMatrix"/>. + /// <para/> + /// <br/><b>Naming differences</b><para/> + /// In the native FreeImage library and thus, in the FreeImage API documentation, this + /// property's key is named <i>GeoPixelScale</i>. Since the GeoTIFF specification + /// as well as Java's <c>EXIFTIFFTagSet</c> class call this tag + /// <see cref="ModelPixelScale"/>, this property was renamed accordingly. + /// However, when accessing this property's tag by its <see cref="MetadataTag"/> object, + /// the native FreeImage tag key <i>GeoPixelScale</i> must be used. + /// <para/> + /// <br/><b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public double[] ModelPixelScale + { + get + { + return GetTagArray<double>("GeoPixelScale"); + } + set + { + SetTagValue("GeoPixelScale", value); + } + } + + /// <summary> + /// Gets or sets the value of the GeoTIFF GeoTiePointsTag. + /// </summary> + /// <remarks> + /// The GeoTiePointsTag stores raster -> model tiepoint pairs in the order + /// <para/> + /// ModelTiePoints = (...,I,J,K, X,Y,Z...), + /// <para/> + /// where <i>(I,J,K)</i> is the point at location <i>(I,J)</i> in raster space with + /// pixel-value <i>K</i>, and <i>(X,Y,Z)</i> is a vector in model space. In most cases + /// the model space is only two-dimensional, in which case both K and Z should be set + /// to zero; this third dimension is provided in anticipation of future support for 3D + /// digital elevation models and vertical coordinate systems. + /// <para/> + /// A raster image may be georeferenced simply by specifying its location, size and + /// orientation in the model coordinate space M. This may be done by specifying the + /// location of three of the four bounding corner points. However, tiepoints are only + /// to be considered exact at the points specified; thus defining such a set of + /// bounding tiepoints does not imply that the model space locations of the interior + /// of the image may be exactly computed by a linear interpolation of these tiepoints. + /// <para/> + /// However, since the relationship between the Raster space and the model space will + /// often be an exact, affine transformation, this relationship can be defined using + /// one set of tiepoints and the <see cref="ModelPixelScale"/>, described below, which + /// gives the vertical and horizontal raster grid cell size, specified in model units. + /// <para/> + /// If possible, the first tiepoint placed in this tag shall be the one establishing + /// the location of the point (0,0) in raster space. However, if this is not possible + /// (for example, if (0,0) is goes to a part of model space in which the projection is + /// ill-defined), then there is no particular order in which the tiepoints need be + /// listed. + /// <para/> + /// For orthorectification or mosaicking applications a large number of tiepoints may + /// be specified on a mesh over the raster image. However, the definition of associated + /// grid interpolation methods is not in the scope of the current GeoTIFF spec. + /// <para/> + /// <br/><b>Naming differences</b><para/> + /// In the native FreeImage library and thus, in the FreeImage API documentation, this + /// property's key is named <i>GeoTiePoints</i>. Since the GeoTIFF specification + /// as well as Java's <c>EXIFTIFFTagSet</c> class call this tag + /// <see cref="ModelTiePoints"/>, this property was renamed accordingly. + /// However, when accessing this property's tag by its <see cref="MetadataTag"/> object, + /// the native FreeImage tag key <i>GeoTiePoints</i> must be used. + /// <para/> + /// <br/><b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public double[] ModelTiePoints + { + get + { + return GetTagArray<double>("GeoTiePoints"); + } + set + { + SetTagValue("GeoTiePoints", value); + } + } + + /// <summary> + /// Gets or sets the value of the GeoTIFF ModelTransformationMatrixTag. + /// </summary> + /// <remarks> + /// This tag may be used to specify the transformation matrix between the raster space + /// (and its dependent pixel-value space) and the (possibly 3D) model space. + /// <para/> + /// <br/><b>Naming differences</b><para/> + /// In the native FreeImage library and thus, in the FreeImage API documentation, this + /// property's key is named <i>GeoTransformationMatrix</i>. Since the GeoTIFF specification + /// as well as Java's <c>EXIFTIFFTagSet</c> class call this tag + /// <see cref="ModelTransformationMatrix"/>, this property was renamed accordingly. + /// However, when accessing this property's tag by its <see cref="MetadataTag"/> object, + /// the native FreeImage tag key <i>GeoTransformationMatrix</i> must be used. + /// <para/> + /// <br/><b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public double[] ModelTransformationMatrix + { + get + { + return GetTagArray<double>("GeoTransformationMatrix"); + } + set + { + SetTagValue("GeoTransformationMatrix", value); + } + } + + /// <summary> + /// Gets or sets the value of the GeoTIFF IntergraphTransformationMatrixTag. + /// </summary> + /// <remarks> + /// The IntergraphTransformationMatrixTag conflicts with an internal software implementation + /// at Intergraph, and so its use is no longer encouraged. A GeoTIFF reader should look first + /// for the new tag, and only if it is not found should it check for this older tag. If found, + /// it should only consider it to be contain valid GeoTIFF matrix information if the tag-count + /// is 16; the Intergraph version uses 17 values. + /// <para/> + /// <br/><b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public double[] IntergraphTransformationMatrix + { + get + { + return GetTagArray<double>("Intergraph TransformationMatrix"); + } + set + { + SetTagValue("Intergraph TransformationMatrix", value); + } + } + + /// <summary> + /// Gets or sets the value of the GeoTIFF JPLCartoIFDOffsetTag. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public uint? JPLCartoIFDOffset + { + get + { + return GetTagValue<uint>("JPL Carto IFD offset"); + } + set + { + SetTagValue("JPL Carto IFD offset", value); + } + } + } + + /// <summary> + /// Represents a collection of all tags contained in the metadata model + /// <see cref="FREE_IMAGE_MDMODEL.FIMD_IPTC"/>. + /// </summary> + public class MDM_IPTC : MetadataModel + { + /// <summary> + /// Initializes a new instance of this class. + /// </summary> + /// <param name="dib">Handle to a FreeImage bitmap.</param> + public MDM_IPTC(FIBITMAP dib) : base(dib) { } + + /// <summary> + /// Retrieves the datamodel that this instance represents. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public override FREE_IMAGE_MDMODEL Model + { + get { return FREE_IMAGE_MDMODEL.FIMD_IPTC; } + } + + /// <summary> + /// Gets the Application Record Version. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public short? ApplicationRecordVersion + { + get + { + return GetTagValue<short>("ApplicationRecordVersion"); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Object Type Reference. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string ObjectTypeReference + { + get + { + return GetTagText("ObjectTypeReference"); + } + set + { + SetTagValue("ObjectTypeReference", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Object Attribute Reference. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string ObjectAttributeReference + { + get + { + return GetTagText("ObjectAttributeReference"); + } + set + { + SetTagValue("ObjectAttributeReference", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Object Name. + /// This is also referred to as Title. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string ObjectName + { + get + { + return GetTagText("ObjectName"); + } + set + { + SetTagValue("ObjectName", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Edit Status. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string EditStatus + { + get + { + return GetTagText("EditStatus"); + } + set + { + SetTagValue("EditStatus", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Editorial Update. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string EditorialUpdate + { + get + { + return GetTagText("EditorialUpdate"); + } + set + { + SetTagValue("EditorialUpdate", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Urgency. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string Urgency + { + get + { + return GetTagText("Urgency"); + } + set + { + SetTagValue("Urgency", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Subject Reference. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string SubjectReference + { + get + { + return GetTagText("SubjectReference"); + } + set + { + SetTagValue("SubjectReference", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Category. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string Category + { + get + { + return GetTagText("Category"); + } + set + { + SetTagValue("Category", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Supplemental Categories. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string SupplementalCategories + { + get + { + return GetTagText("SupplementalCategories"); + } + set + { + SetTagValue("SupplementalCategories", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Fixture Identifier. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string FixtureIdentifier + { + get + { + return GetTagText("FixtureIdentifier"); + } + set + { + SetTagValue("FixtureIdentifier", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Keywords. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string Keywords + { + get + { + return GetTagText("Keywords"); + } + set + { + SetTagValue("Keywords", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Content Location Code. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string ContentLocationCode + { + get + { + return GetTagText("ContentLocationCode"); + } + set + { + SetTagValue("ContentLocationCode", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Content Location Name. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string ContentLocationName + { + get + { + return GetTagText("ContentLocationName"); + } + set + { + SetTagValue("ContentLocationName", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Release Date. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string ReleaseDate + { + get + { + return GetTagText("ReleaseDate"); + } + set + { + SetTagValue("ReleaseDate", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Release Time. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string ReleaseTime + { + get + { + return GetTagText("ReleaseTime"); + } + set + { + SetTagValue("ReleaseTime", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Expiration Date. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string ExpirationDate + { + get + { + return GetTagText("ExpirationDate"); + } + set + { + SetTagValue("ExpirationDate", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Expiration Time. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string ExpirationTime + { + get + { + return GetTagText("ExpirationTime"); + } + set + { + SetTagValue("ExpirationTime", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Special Instructions. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string SpecialInstructions + { + get + { + return GetTagText("SpecialInstructions"); + } + set + { + SetTagValue("SpecialInstructions", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Action Advised. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string ActionAdvised + { + get + { + return GetTagText("ActionAdvised"); + } + set + { + SetTagValue("ActionAdvised", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Reference Service. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string ReferenceService + { + get + { + return GetTagText("ReferenceService"); + } + set + { + SetTagValue("ReferenceService", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Reference Date. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string ReferenceDate + { + get + { + return GetTagText("ReferenceDate"); + } + set + { + SetTagValue("ReferenceDate", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Reference Number. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string ReferenceNumber + { + get + { + return GetTagText("ReferenceNumber"); + } + set + { + SetTagValue("ReferenceNumber", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Date Created. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string DateCreated + { + get + { + return GetTagText("DateCreated"); + } + set + { + SetTagValue("DateCreated", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Time Created. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string TimeCreated + { + get + { + return GetTagText("TimeCreated"); + } + set + { + SetTagValue("TimeCreated", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Digital Creation Date. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string DigitalCreationDate + { + get + { + return GetTagText("DigitalCreationDate"); + } + set + { + SetTagValue("DigitalCreationDate", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Digital Creation Time. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string DigitalCreationTime + { + get + { + return GetTagText("DigitalCreationTime"); + } + set + { + SetTagValue("DigitalCreationTime", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Originating Program. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string OriginatingProgram + { + get + { + return GetTagText("OriginatingProgram"); + } + set + { + SetTagValue("OriginatingProgram", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Program Version. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string ProgramVersion + { + get + { + return GetTagText("ProgramVersion"); + } + set + { + SetTagValue("ProgramVersion", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Object Cycle. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string ObjectCycle + { + get + { + return GetTagText("ObjectCycle"); + } + set + { + SetTagValue("ObjectCycle", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag By Line. + /// This is the author's name. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string ByLine + { + get + { + return GetTagText("By-line"); + } + set + { + SetTagValue("By-line", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag By Line Title. + /// This is the author's position. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string ByLineTitle + { + get + { + return GetTagText("By-lineTitle"); + } + set + { + SetTagValue("By-lineTitle", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag City. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string City + { + get + { + return GetTagText("City"); + } + set + { + SetTagValue("City", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Sub Location. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string SubLocation + { + get + { + return GetTagText("SubLocation"); + } + set + { + SetTagValue("SubLocation", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Province State. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string ProvinceState + { + get + { + return GetTagText("ProvinceState"); + } + set + { + SetTagValue("ProvinceState", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Country Primary Location Code. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string CountryPrimaryLocationCode + { + get + { + return GetTagText("Country-PrimaryLocationCode"); + } + set + { + SetTagValue("Country-PrimaryLocationCode", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Country Primary Location Name. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string CountryPrimaryLocationName + { + get + { + return GetTagText("Country-PrimaryLocationName"); + } + set + { + SetTagValue("Country-PrimaryLocationName", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Original Transmission Reference. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string OriginalTransmissionReference + { + get + { + return GetTagText("OriginalTransmissionReference"); + } + set + { + SetTagValue("OriginalTransmissionReference", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Headline. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string Headline + { + get + { + return GetTagText("Headline"); + } + set + { + SetTagValue("Headline", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Credit. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string Credit + { + get + { + return GetTagText("Credit"); + } + set + { + SetTagValue("Credit", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Source. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string Source + { + get + { + return GetTagText("Source"); + } + set + { + SetTagValue("Source", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Copyright Notice. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string CopyrightNotice + { + get + { + return GetTagText("CopyrightNotice"); + } + set + { + SetTagValue("CopyrightNotice", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Contact. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string Contact + { + get + { + return GetTagText("Contact"); + } + set + { + SetTagValue("Contact", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Caption Abstract. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string CaptionAbstract + { + get + { + return GetTagText("CaptionAbstract"); + } + set + { + SetTagValue("CaptionAbstract", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Writer Editor. + /// This is also referred to as Caption Writer. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string WriterEditor + { + get + { + return GetTagText("WriterEditor"); + } + set + { + SetTagValue("WriterEditor", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Rasterized Caption. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string RasterizedCaption + { + get + { + return GetTagText("RasterizedCaption"); + } + set + { + SetTagValue("RasterizedCaption", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Image Type. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string ImageType + { + get + { + return GetTagText("ImageType"); + } + set + { + SetTagValue("ImageType", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Image Orientation. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string ImageOrientation + { + get + { + return GetTagText("ImageOrientation"); + } + set + { + SetTagValue("ImageOrientation", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Language Identifier. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string LanguageIdentifier + { + get + { + return GetTagText("LanguageIdentifier"); + } + set + { + SetTagValue("LanguageIdentifier", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Audio Type. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string AudioType + { + get + { + return GetTagText("AudioType"); + } + set + { + SetTagValue("AudioType", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Audio Sampling Rate. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string AudioSamplingRate + { + get + { + return GetTagText("AudioSamplingRate"); + } + set + { + SetTagValue("AudioSamplingRate", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Audio Sampling Resolution. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string AudioSamplingResolution + { + get + { + return GetTagText("AudioSamplingResolution"); + } + set + { + SetTagValue("AudioSamplingResolution", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Audio Duration. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string AudioDuration + { + get + { + return GetTagText("AudioDuration"); + } + set + { + SetTagValue("AudioDuration", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Audio Outcue. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string AudioOutcue + { + get + { + return GetTagText("AudioOutcue"); + } + set + { + SetTagValue("AudioOutcue", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Job I D. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string JobID + { + get + { + return GetTagText("JobID"); + } + set + { + SetTagValue("JobID", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Master Document I D. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string MasterDocumentID + { + get + { + return GetTagText("MasterDocumentID"); + } + set + { + SetTagValue("MasterDocumentID", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Short Document I D. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string ShortDocumentID + { + get + { + return GetTagText("ShortDocumentID"); + } + set + { + SetTagValue("ShortDocumentID", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Unique Document I D. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string UniqueDocumentID + { + get + { + return GetTagText("UniqueDocumentID"); + } + set + { + SetTagValue("UniqueDocumentID", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Owner I D. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string OwnerID + { + get + { + return GetTagText("OwnerID"); + } + set + { + SetTagValue("OwnerID", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Object Preview File Format. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string ObjectPreviewFileFormat + { + get + { + return GetTagText("ObjectPreviewFileFormat"); + } + set + { + SetTagValue("ObjectPreviewFileFormat", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Object Preview File Version. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string ObjectPreviewFileVersion + { + get + { + return GetTagText("ObjectPreviewFileVersion"); + } + set + { + SetTagValue("ObjectPreviewFileVersion", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Object Preview Data. + /// This is also referred to as Audio Outcue. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string ObjectPreviewData + { + get + { + return GetTagText("ObjectPreviewData"); + } + set + { + SetTagValue("ObjectPreviewData", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Prefs. + /// This is also referred to as photo-mechanic preferences. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string Prefs + { + get + { + return GetTagText("Prefs"); + } + set + { + SetTagValue("Prefs", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Classify State. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string ClassifyState + { + get + { + return GetTagText("ClassifyState"); + } + set + { + SetTagValue("ClassifyState", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Similarity Index. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string SimilarityIndex + { + get + { + return GetTagText("SimilarityIndex"); + } + set + { + SetTagValue("SimilarityIndex", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Document Notes. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string DocumentNotes + { + get + { + return GetTagText("DocumentNotes"); + } + set + { + SetTagValue("DocumentNotes", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Document History. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string DocumentHistory + { + get + { + return GetTagText("DocumentHistory"); + } + set + { + SetTagValue("DocumentHistory", value); + } + } + + /// <summary> + /// Gets or sets the value of the IPTC/NAA tag Exif Camera Info. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string ExifCameraInfo + { + get + { + return GetTagText("ExifCameraInfo"); + } + set + { + SetTagValue("ExifCameraInfo", value); + } + } + } + + /// <summary> + /// Represents a collection of all tags contained in the metadata model + /// <see cref="FREE_IMAGE_MDMODEL.FIMD_NODATA"/>. + /// </summary> + public class MDM_NODATA : MetadataModel + { + /// <summary> + /// Initializes a new instance of this class. + /// </summary> + /// <param name="dib">Handle to a FreeImage bitmap.</param> + public MDM_NODATA(FIBITMAP dib) : base(dib) { } + + /// <summary> + /// Retrieves the datamodel that this instance represents. + /// </summary> + public override FREE_IMAGE_MDMODEL Model + { + get { return FREE_IMAGE_MDMODEL.FIMD_NODATA; } + } + } + + /// <summary> + /// Represents a collection of all tags contained in the metadata model + /// <see cref="FREE_IMAGE_MDMODEL.FIMD_XMP"/>. + /// </summary> + public class MDM_XMP : MetadataModel + { + /// <summary> + /// Initializes a new instance of this class. + /// </summary> + /// <param name="dib">Handle to a FreeImage bitmap.</param> + public MDM_XMP(FIBITMAP dib) : base(dib) { } + + /// <summary> + /// Retrieves the datamodel that this instance represents. + /// </summary> + public override FREE_IMAGE_MDMODEL Model + { + get { return FREE_IMAGE_MDMODEL.FIMD_XMP; } + } + + /// <summary> + /// Gets or sets the XMP XML content. + /// </summary> + /// <remarks> + /// <b>Handling of null values</b><para/> + /// A null value indicates, that the corresponding metadata tag is not + /// present in the metadata model. + /// Setting this property's value to a non-null reference creates the + /// metadata tag if necessary. + /// Setting this property's value to a null reference deletes the + /// metadata tag from the metadata model. + /// </remarks> + public string Xml + { + get + { + return GetTagText("XMLPacket"); + } + set + { + SetTagValue("XMLPacket", value); + } + } + + /// <summary> + /// Gets an <see cref="XmlReader"/> initialized to read the XMP XML content. + /// Returns null, if the metadata tag <i>XMLPacket</i> is not present in + /// this model. + /// </summary> + public XmlReader XmlReader + { + get + { + string xmlString = Xml; + if (xmlString == null) + { + return null; + } + else + { + MemoryStream stream = new MemoryStream(); + StreamWriter writer = new StreamWriter(stream); + writer.Write(xmlString); + return XmlReader.Create(stream); + } + } + } + } +}
\ No newline at end of file |