LEADTOOLS (Leadtools assembly) Send comments on this topic. | Back to Introduction - All Topics | Help Version 17.0.3.29
RasterTagMetadata Class
See Also  Members  
Leadtools Namespace : RasterTagMetadata Class



Extends the RasterMetadata class to provide functionality for dealing with tag metadata stored within various image file formats. Supported in Silverlight, Windows Phone 7

Object Model

RasterTagMetadata Class

Syntax

Visual Basic (Declaration) 
<SerializableAttribute()>
Public Class RasterTagMetadata 
   Inherits RasterMetadata
Visual Basic (Usage)Copy Code
Dim instance As RasterTagMetadata
C# 
[SerializableAttribute()]
public class RasterTagMetadata : RasterMetadata 
C++/CLI 
[SerializableAttribute()]
public ref class RasterTagMetadata : public RasterMetadata 

Example

This example will save then load some tags to/from a tif file.

Visual BasicCopy Code
Public Sub RasterTagMetadataExample()
      Dim codecs As RasterCodecs = New RasterCodecs()
      codecs.ThrowExceptionsOnInvalidImages = True

      Dim srcFileName As String = Path.Combine(LEAD_VARS.ImagesDir, "Image1.cmp")
      Dim destFileName As String = Path.Combine(LEAD_VARS.ImagesDir, "Image1_tags.tif")

      ' Load the image
      Dim image As RasterImage = codecs.Load(srcFileName)

      ' add the tags
      Const tagSoftware As Integer = &H131

      Dim tag As RasterTagMetadata

      ' Ascii
      tag = New RasterTagMetadata()
      tag.Id = tagSoftware
      tag.DataType = RasterTagMetadataDataType.Ascii
      tag.FromAscii("Test String")
      image.Tags.Add(tag)

      ' Byte
      tag = New RasterTagMetadata()
      tag.Id = tagSoftware
      tag.DataType = RasterTagMetadataDataType.Byte
      Dim byteArray As Byte() = New Byte(0) {}
      byteArray(0) = 10
      tag.FromByte(byteArray)
      image.Tags.Add(tag)

      ' SByte
      tag = New RasterTagMetadata()
      tag.Id = tagSoftware
      tag.DataType = RasterTagMetadataDataType.SByte
      Dim sbyteArray As SByte() = New SByte(0) {}
      sbyteArray(0) = -45
      tag.FromSByte(sbyteArray)
      image.Tags.Add(tag)

      ' Int16
      tag = New RasterTagMetadata()
      tag.Id = tagSoftware
      tag.DataType = RasterTagMetadataDataType.Int16
      Dim shortArray As Short() = New Short(0) {}
      shortArray(0) = 64
      tag.FromInt16(shortArray)
      image.Tags.Add(tag)

      ' Uint16
      tag = New RasterTagMetadata()
      tag.Id = tagSoftware
      tag.DataType = RasterTagMetadataDataType.UInt16
      Dim uint16Array As System.UInt16() = New System.UInt16(0) {}
      uint16Array(0) = 50
      tag.FromUInt16(uint16Array)
      image.Tags.Add(tag)

      ' Int32
      tag = New RasterTagMetadata()
      tag.Id = tagSoftware
      tag.DataType = RasterTagMetadataDataType.Int32
      Dim intArray As Integer() = New Integer(0) {}
      intArray(0) = -1326
      tag.FromInt32(intArray)
      image.Tags.Add(tag)

      ' Uint32
      tag = New RasterTagMetadata()
      tag.Id = tagSoftware
      tag.DataType = RasterTagMetadataDataType.UInt32
      Dim uintArray As System.UInt32() = New System.UInt32(0) {}
      uintArray(0) = 1326
      tag.FromUInt32(uintArray)
      image.Tags.Add(tag)

      ' single
      tag = New RasterTagMetadata()
      tag.Id = tagSoftware
      tag.DataType = RasterTagMetadataDataType.Single
      Dim singleArray As Single() = New Single(0) {}
      singleArray(0) = 4.53F
      tag.FromSingle(singleArray)
      image.Tags.Add(tag)

      ' Double
      tag = New RasterTagMetadata()
      tag.Id = tagSoftware
      tag.DataType = RasterTagMetadataDataType.Double
      Dim doubleArray As Double() = New Double(0) {}
      doubleArray(0) = 7.1
      tag.FromDouble(doubleArray)
      image.Tags.Add(tag)

      ' Rational
      tag = New RasterTagMetadata()
      tag.Id = tagSoftware
      tag.DataType = RasterTagMetadataDataType.Rational
      Dim rational As RasterMetadataRational() = New RasterMetadataRational(0) {}
      rational(0) = New RasterMetadataRational()
      rational(0).Numerator = 3
      rational(0).Denominator = 2
      tag.FromRational(rational)
      image.Tags.Add(tag)

      ' URational
      tag = New RasterTagMetadata()
      tag.Id = tagSoftware
      tag.DataType = RasterTagMetadataDataType.URational
      Dim urational As RasterMetadataURational() = New RasterMetadataURational(0) {}
      urational(0) = New RasterMetadataURational(3, 2)
      tag.FromURational(urational)
      image.Tags.Add(tag)

      ' Save the image and its tags to the destination tiff file
      codecs.Options.Save.Tags = True
      codecs.Save(image, destFileName, RasterImageFormat.Tif, 1)

      ' Enumerate the tags from the file
      AddHandler codecs.TagFound, AddressOf codecs_TagFound
      codecs.EnumTags(destFileName, 1)

      ' clean up
      image.Dispose()
   End Sub

   Private Sub codecs_TagFound(ByVal sender As Object, ByVal e As CodecsEnumTagsEventArgs)
      Console.WriteLine("Found tag id = {0}, count = {1}, type = {2}", e.Id, e.Count, e.MetadataType)
   End Sub

Public NotInheritable Class LEAD_VARS
   Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images"
End Class
C#Copy Code
public void RasterTagMetadataExample()
   {
      RasterCodecs codecs = new RasterCodecs();
      codecs.ThrowExceptionsOnInvalidImages = true;

      string srcFileName = Path.Combine(LEAD_VARS.ImagesDir, "Image1.cmp");
      string destFileName = Path.Combine(LEAD_VARS.ImagesDir, "Image1_tags.tif");

      // Load the image
      RasterImage image = codecs.Load(srcFileName);

      // add the tags
      const int tagSoftware = 0x131;

      RasterTagMetadata tag;

      // Ascii
      tag = new RasterTagMetadata();
      tag.Id = tagSoftware;
      tag.DataType = RasterTagMetadataDataType.Ascii;
      tag.FromAscii("Test String");
      image.Tags.Add(tag);

      // Byte
      tag = new RasterTagMetadata();
      tag.Id = tagSoftware;
      tag.DataType = RasterTagMetadataDataType.Byte;
      byte[] byteArray = new byte[1];
      byteArray[0] = 10;
      tag.FromByte(byteArray);
      image.Tags.Add(tag);

      // SByte
      tag = new RasterTagMetadata();
      tag.Id = tagSoftware;
      tag.DataType = RasterTagMetadataDataType.SByte;
      sbyte[] sbyteArray = new sbyte[1];
      sbyteArray[0] = -45;
      tag.FromSByte(sbyteArray);
      image.Tags.Add(tag);

      // Int16
      tag = new RasterTagMetadata();
      tag.Id = tagSoftware;
      tag.DataType = RasterTagMetadataDataType.Int16;
      short[] shortArray = new short[1];
      shortArray[0] = 64;
      tag.FromInt16(shortArray);
      image.Tags.Add(tag);

      // Uint16
      tag = new RasterTagMetadata();
      tag.Id = tagSoftware;
      tag.DataType = RasterTagMetadataDataType.UInt16;
      ushort[] uint16Array = new ushort[1];
      uint16Array[0] = 50;
      tag.FromUInt16(uint16Array);
      image.Tags.Add(tag);

      // Int32
      tag = new RasterTagMetadata();
      tag.Id = tagSoftware;
      tag.DataType = RasterTagMetadataDataType.Int32;
      int[] intArray = new int[1];
      intArray[0] = -1326;
      tag.FromInt32(intArray);
      image.Tags.Add(tag);

      // Uint32
      tag = new RasterTagMetadata();
      tag.Id = tagSoftware;
      tag.DataType = RasterTagMetadataDataType.UInt32;
      uint[] uintArray = new uint[1];
      uintArray[0] = 1326;
      tag.FromUInt32(uintArray);
      image.Tags.Add(tag);

      // single
      tag = new RasterTagMetadata();
      tag.Id = tagSoftware;
      tag.DataType = RasterTagMetadataDataType.Single;
      float[] singleArray = new float[1];
      singleArray[0] = 4.53f;
      tag.FromSingle(singleArray);
      image.Tags.Add(tag);

      // Double
      tag = new RasterTagMetadata();
      tag.Id = tagSoftware;
      tag.DataType = RasterTagMetadataDataType.Double;
      double[] doubleArray = new double[1];
      doubleArray[0] = 7.1;
      tag.FromDouble(doubleArray);
      image.Tags.Add(tag);

      // Rational
      tag = new RasterTagMetadata();
      tag.Id = tagSoftware;
      tag.DataType = RasterTagMetadataDataType.Rational;
      RasterMetadataRational[] rational = new RasterMetadataRational[1];
      rational[0] = new RasterMetadataRational();
      rational[0].Numerator = 3;
      rational[0].Denominator = 2;
      tag.FromRational(rational);
      image.Tags.Add(tag);

      // URational
      tag = new RasterTagMetadata();
      tag.Id = tagSoftware;
      tag.DataType = RasterTagMetadataDataType.URational;
      RasterMetadataURational[] urational = new RasterMetadataURational[1];
      urational[0] = new RasterMetadataURational(3, 2);
      tag.FromURational(urational);
      image.Tags.Add(tag);

      // Save the image and its tags to the destination tiff file
      codecs.Options.Save.Tags = true;
      codecs.Save(image, destFileName, RasterImageFormat.Tif, 1);

      // Enumerate the tags from the file
      codecs.TagFound += new EventHandler<CodecsEnumTagsEventArgs>(codecs_TagFound);
      codecs.EnumTags(destFileName, 1);

      // clean up
      image.Dispose();
   }

   void codecs_TagFound(object sender, CodecsEnumTagsEventArgs e)
   {
      Console.WriteLine("Found tag id = {0}, count = {1}, type = {2}", e.Id, e.Count, e.MetadataType);
   }

static class LEAD_VARS
{
   public const string ImagesDir = @"C:\Users\Public\Documents\LEADTOOLS Images";
}
SilverlightCSharpCopy Code
public void RasterTagMetadataExample(RasterImage image, Stream destStream)
{
   RasterCodecs codecs = new RasterCodecs();
   // add the tags
   const int tagSoftware = 0x131;

   RasterTagMetadata tag;

   // Ascii
   tag = new RasterTagMetadata();
   tag.Id = tagSoftware;
   tag.DataType = RasterTagMetadataDataType.Ascii;
   tag.FromAscii("Test String");
   image.Tags.Add(tag);

   // Byte
   tag = new RasterTagMetadata();
   tag.Id = tagSoftware;
   tag.DataType = RasterTagMetadataDataType.Byte;
   byte[] byteArray = new byte[1];
   byteArray[0] = 10;
   tag.FromByte(byteArray);
   image.Tags.Add(tag);

   // SByte
   tag = new RasterTagMetadata();
   tag.Id = tagSoftware;
   tag.DataType = RasterTagMetadataDataType.SByte;
   sbyte[] sbyteArray = new sbyte[1];
   sbyteArray[0] = -45;
   tag.FromSByte(sbyteArray);
   image.Tags.Add(tag);

   // Int16
   tag = new RasterTagMetadata();
   tag.Id = tagSoftware;
   tag.DataType = RasterTagMetadataDataType.Int16;
   short[] shortArray = new short[1];
   shortArray[0] = 64;
   tag.FromInt16(shortArray);
   image.Tags.Add(tag);

   // Uint16
   tag = new RasterTagMetadata();
   tag.Id = tagSoftware;
   tag.DataType = RasterTagMetadataDataType.UInt16;
   ushort[] uint16Array = new ushort[1];
   uint16Array[0] = 50;
   tag.FromUInt16(uint16Array);
   image.Tags.Add(tag);

   // Int32
   tag = new RasterTagMetadata();
   tag.Id = tagSoftware;
   tag.DataType = RasterTagMetadataDataType.Int32;
   int[] intArray = new int[1];
   intArray[0] = -1326;
   tag.FromInt32(intArray);
   image.Tags.Add(tag);

   // Uint32
   tag = new RasterTagMetadata();
   tag.Id = tagSoftware;
   tag.DataType = RasterTagMetadataDataType.UInt32;
   uint[] uintArray = new uint[1];
   uintArray[0] = 1326;
   tag.FromUInt32(uintArray);
   image.Tags.Add(tag);

   // single
   tag = new RasterTagMetadata();
   tag.Id = tagSoftware;
   tag.DataType = RasterTagMetadataDataType.Single;
   float[] singleArray = new float[1];
   singleArray[0] = 4.53f;
   tag.FromSingle(singleArray);
   image.Tags.Add(tag);

   // Double
   tag = new RasterTagMetadata();
   tag.Id = tagSoftware;
   tag.DataType = RasterTagMetadataDataType.Double;
   double[] doubleArray = new double[1];
   doubleArray[0] = 7.1;
   tag.FromDouble(doubleArray);
   image.Tags.Add(tag);

   // Rational
   tag = new RasterTagMetadata();
   tag.Id = tagSoftware;
   tag.DataType = RasterTagMetadataDataType.Rational;
   RasterMetadataRational[] rational = new RasterMetadataRational[1];
   rational[0] = new RasterMetadataRational();
   rational[0].Numerator = 3;
   rational[0].Denominator = 2;
   tag.FromRational(rational);
   image.Tags.Add(tag);

   // URational
   tag = new RasterTagMetadata();
   tag.Id = tagSoftware;
   tag.DataType = RasterTagMetadataDataType.URational;
   RasterMetadataURational[] urational = new RasterMetadataURational[1];
   urational[0] = new RasterMetadataURational(3, 2);
   tag.FromURational(urational);
   image.Tags.Add(tag);

   // Save the image and its tags to the destination tiff file
   codecs.Options.Save.Tags = true;
   codecs.Save(image, destStream, RasterImageFormat.Tif, 1);

   // Enumerate the tags from the file
   codecs.TagFound += new EventHandler<CodecsEnumTagsEventArgs>(codecs_TagFound);
   codecs.EnumTags(destStream, 1);

   // clean up
   image.Dispose();
}

void codecs_TagFound(object sender, CodecsEnumTagsEventArgs e)
{
   Debug.WriteLine("Found tag id = {0}, count = {1}, type = {2}", e.Id, e.Count, e.MetadataType);
}
SilverlightVBCopy Code
Public Sub RasterTagMetadataExample(ByVal image As RasterImage, ByVal destStream As Stream)
   Dim codecs As RasterCodecs = New RasterCodecs()
   ' add the tags
   Const tagSoftware As Integer = &H131

   Dim tag As RasterTagMetadata

   ' Ascii
   tag = New RasterTagMetadata()
   tag.Id = tagSoftware
   tag.DataType = RasterTagMetadataDataType.Ascii
   tag.FromAscii("Test String")
   image.Tags.Add(tag)

   ' Byte
   tag = New RasterTagMetadata()
   tag.Id = tagSoftware
   tag.DataType = RasterTagMetadataDataType.Byte
   Dim byteArray As Byte() = New Byte(0){}
   byteArray(0) = 10
   tag.FromByte(byteArray)
   image.Tags.Add(tag)

   ' SByte
   tag = New RasterTagMetadata()
   tag.Id = tagSoftware
   tag.DataType = RasterTagMetadataDataType.SByte
   Dim sbyteArray As SByte() = New SByte(0){}
   sbyteArray(0) = -45
   tag.FromSByte(sbyteArray)
   image.Tags.Add(tag)

   ' Int16
   tag = New RasterTagMetadata()
   tag.Id = tagSoftware
   tag.DataType = RasterTagMetadataDataType.Int16
   Dim shortArray As Short() = New Short(0){}
   shortArray(0) = 64
   tag.FromInt16(shortArray)
   image.Tags.Add(tag)

   ' Uint16
   tag = New RasterTagMetadata()
   tag.Id = tagSoftware
   tag.DataType = RasterTagMetadataDataType.UInt16
   Dim uint16Array As UShort() = New UShort(0){}
   uint16Array(0) = 50
   tag.FromUInt16(uint16Array)
   image.Tags.Add(tag)

   ' Int32
   tag = New RasterTagMetadata()
   tag.Id = tagSoftware
   tag.DataType = RasterTagMetadataDataType.Int32
   Dim intArray As Integer() = New Integer(0){}
   intArray(0) = -1326
   tag.FromInt32(intArray)
   image.Tags.Add(tag)

   ' Uint32
   tag = New RasterTagMetadata()
   tag.Id = tagSoftware
   tag.DataType = RasterTagMetadataDataType.UInt32
   Dim uintArray As UInteger() = New UInteger(0){}
   uintArray(0) = 1326
   tag.FromUInt32(uintArray)
   image.Tags.Add(tag)

   ' single
   tag = New RasterTagMetadata()
   tag.Id = tagSoftware
   tag.DataType = RasterTagMetadataDataType.Single
   Dim singleArray As Single() = New Single(0){}
   singleArray(0) = 4.53f
   tag.FromSingle(singleArray)
   image.Tags.Add(tag)

   ' Double
   tag = New RasterTagMetadata()
   tag.Id = tagSoftware
   tag.DataType = RasterTagMetadataDataType.Double
   Dim doubleArray As Double() = New Double(0){}
   doubleArray(0) = 7.1
   tag.FromDouble(doubleArray)
   image.Tags.Add(tag)

   ' Rational
   tag = New RasterTagMetadata()
   tag.Id = tagSoftware
   tag.DataType = RasterTagMetadataDataType.Rational
   Dim rational As RasterMetadataRational() = New RasterMetadataRational(0){}
   rational(0) = New RasterMetadataRational()
   rational(0).Numerator = 3
   rational(0).Denominator = 2
   tag.FromRational(rational)
   image.Tags.Add(tag)

   ' URational
   tag = New RasterTagMetadata()
   tag.Id = tagSoftware
   tag.DataType = RasterTagMetadataDataType.URational
   Dim urational As RasterMetadataURational() = New RasterMetadataURational(0){}
   urational(0) = New RasterMetadataURational(3, 2)
   tag.FromURational(urational)
   image.Tags.Add(tag)

   ' Save the image and its tags to the destination tiff file
   codecs.Options.Save.Tags = True
   codecs.Save(image, destStream, RasterImageFormat.Tif, 1)

   ' Enumerate the tags from the file
   AddHandler codecs.TagFound, AddressOf codecs_TagFound
   codecs.EnumTags(destStream, 1)

   ' clean up
   image.Dispose()
End Sub

Private Sub codecs_TagFound(ByVal sender As Object, ByVal e As CodecsEnumTagsEventArgs)
   Debug.WriteLine("Found tag id = {0}, count = {1}, type = {2}", e.Id, e.Count, e.MetadataType)
End Sub

Remarks

The TIFF file formats support a number of comments that are saved and loaded using predefined tags.

If the comments do not meet your needs, you can define your own tag for saving additional non-raster data in a TIFF file. For example, you may want to define a tag to save annotations.

The TIFF 6.0 Specification sets aside a range of private tags that developers can define. To avoid conflicts with files created by other developers, you can register your tag by contacting Adobe Developer Relations. The E-Mail address posted on The Unofficial TIFF Home Page is gapdevsup@adobe.com.

Some restrictions apply to this function if you use an IFD to indicate to which page to write the metadata. See the Loading And Saving Large TIFF Files topic for more information.

Inheritance Hierarchy

System.Object
   Leadtools.RasterMetadata
      Leadtools.RasterTagMetadata

Requirements

Target Platforms: Silverlight, Windows XP, Windows Server 2003 family, Windows Server 2008 family, Windows Vista, Windows 7, MAC OS/X (Intel Only), Windows Phone 7

See Also