←Select platform

ReadComment(string,int,RasterCommentMetadataType) Method

Summary

Gets a comment field from a file.

Syntax
C#
VB
Objective-C
C++
Public Overloads Function ReadComment( _ 
   ByVal fileName As String, _ 
   ByVal pageNumber As Integer, _ 
   ByVal type As RasterCommentMetadataType _ 
) As RasterCommentMetadata 
- (nullable LTRasterCommentMetadata *)readCommentFromFile:(NSString *)file  
                                               pageNumber:(NSInteger)pageNumber  
                                                     type:(LTRasterCommentMetadataType)type  
                                                    error:(NSError **)error 

Parameters

fileName
A String containing the input file name.

pageNumber
1-based index of the page from which to read the comment.

type
The type of comment. Refer to Types of File Comments.

Return Value

A RasterCommentMetadata object containing the comment field information. If no such comment is found in the file, this method will return a null reference.

Remarks

Some file formats can contain comments, and some cannot, and each file format has its own set of comment types. When you save a file, the comments in the RasterImage object can be saved in the file. The index into the array (specified using a constant) determines the type of comment.

You can use CommentsSupported to determine whether a certain file format supports tags.

To read all the comments stored in a file, use ReadComments.

Example

This example demonstrates all of the methods related to comments for TIFF files. It saves a few comments to a file before loading them back

C#
VB
using Leadtools; 
using Leadtools.Codecs; 
using Leadtools.ImageProcessing; 
using Leadtools.ImageProcessing.Color; 
using Leadtools.Svg; 
using LeadtoolsExamples.Common; 
 
public void CommentsExample() 
{ 
   RasterCodecs codecs = new RasterCodecs(); 
 
   string srcFileName = Path.Combine(LEAD_VARS.ImagesDir, "Image1.cmp"); 
   string destFileName = Path.Combine(LEAD_VARS.ImagesDir, "Image1_Comments.tif"); 
 
   // Convert the source file to TIF 
   Console.WriteLine("Converting the source file to TIF"); 
   codecs.Convert(srcFileName, destFileName, RasterImageFormat.Tif, 0, 0, 24, null); 
 
   // Add the artist comment 
   RasterCommentMetadata writeComment = new RasterCommentMetadata(); 
   writeComment.Type = RasterCommentMetadataType.Artist; 
   writeComment.FromAscii("LEADTOOLS"); 
 
   Console.WriteLine("Writing the following comment:"); 
   Console.WriteLine(" Type:{0}, Data:{1}", writeComment.Type, writeComment.ToAscii()); 
 
   codecs.WriteComment(destFileName, 1, writeComment); 
 
   // Read the comment back 
   RasterCommentMetadata readComment = codecs.ReadComment(destFileName, 1, RasterCommentMetadataType.Artist); 
   Console.WriteLine("The following comment has been read:"); 
   Console.WriteLine(" Type:{0}, Data:{1}", readComment.Type, readComment.ToAscii()); 
 
   // Write a few comments to the file in one pass 
   IList<RasterCommentMetadata> comments = new List<RasterCommentMetadata>(); 
   writeComment = new RasterCommentMetadata(); 
   writeComment.Type = RasterCommentMetadataType.Artist; 
   writeComment.FromAscii("LEADTOOLS Again"); 
   comments.Add(writeComment); 
 
   writeComment = new RasterCommentMetadata(); 
   writeComment.Type = RasterCommentMetadataType.Copyright; 
   writeComment.FromAscii("(c) 2006"); 
   comments.Add(writeComment); 
 
   Console.WriteLine("Writing the following comments to the file:"); 
   foreach (RasterCommentMetadata comment in comments) 
      Console.WriteLine(" Type:{0}, Data:{1}", comment.Type, comment.ToAscii()); 
 
   codecs.WriteComments(destFileName, 1, comments); 
 
   // Now get all the comments in the file and show them: 
   Console.WriteLine("Reading all comments from the file:"); 
 
   RasterCommentMetadataType[] tifComments = 
   { 
      RasterCommentMetadataType.Artist, 
      RasterCommentMetadataType.Copyright, 
      RasterCommentMetadataType.DateTime, 
      RasterCommentMetadataType.Description, 
      RasterCommentMetadataType.HostComputer, 
      RasterCommentMetadataType.Make, 
      RasterCommentMetadataType.Model, 
      RasterCommentMetadataType.NameOfDocument, 
      RasterCommentMetadataType.NameOfPage, 
      RasterCommentMetadataType.Software, 
   }; 
 
   foreach (RasterCommentMetadataType tifComment in tifComments) 
   { 
      RasterCommentMetadata comment = codecs.ReadComment(destFileName, 1, tifComment); 
      if (comment != null) 
      { 
         Console.Write("Found comment, Type:{0}, Data:", comment.Type); 
 
         RasterCommentMetadataDataType dataType = RasterCommentMetadata.GetDataType(comment.Type); 
 
         byte[] byteData; 
         short[] shortData; 
         RasterMetadataRational[] rationalData; 
         RasterMetadataURational[] urationalData; 
 
         switch (dataType) 
         { 
            case RasterCommentMetadataDataType.Ascii: 
               Console.WriteLine(comment.ToAscii()); 
               break; 
 
            case RasterCommentMetadataDataType.Byte: 
               byteData = comment.ToByte(); 
               for (int i = 0; i < byteData.Length; i++) 
                  Console.Write("{0:X} ", byteData[i]); 
               Console.WriteLine(); 
               break; 
 
            case RasterCommentMetadataDataType.Int16: 
               shortData = comment.ToInt16(); 
               for (int i = 0; i < shortData.Length; i++) 
                  Console.Write("{0:X} ", shortData[i]); 
               Console.WriteLine(); 
               break; 
 
            case RasterCommentMetadataDataType.Rational: 
               rationalData = comment.ToRational(); 
               for (int i = 0; i < rationalData.Length; i++) 
                  Console.Write(@"{0}/{1) ", rationalData[i].Numerator, rationalData[i].Denominator); 
               Console.WriteLine(); 
               break; 
 
            case RasterCommentMetadataDataType.URational: 
               urationalData = comment.ToURational(); 
               for (int i = 0; i < urationalData.Length; i++) 
                  Console.Write(@"{0}/{1) ", urationalData[i].Numerator, urationalData[i].Denominator); 
               Console.WriteLine(); 
               break; 
         } 
      } 
   } 
 
   // Clean up 
   codecs.Dispose(); 
} 
 
static class LEAD_VARS 
{ 
   public const string ImagesDir = @"C:\Users\Public\Documents\LEADTOOLS Images"; 
} 
Imports Leadtools 
Imports Leadtools.Codecs 
Imports Leadtools.ImageProcessing 
Imports Leadtools.ImageProcessing.Color 
Imports Leadtools.Drawing 
Imports Leadtools.Svg 
 
Public Sub CommentsExample() 
   Dim codecs As RasterCodecs = New RasterCodecs() 
 
   Dim srcFileName As String = Path.Combine(LEAD_VARS.ImagesDir, "Image1.cmp") 
   Dim destFileName As String = Path.Combine(LEAD_VARS.ImagesDir, "Image1_Comments.tif") 
 
   ' Convert the source file to TIF 
   Console.WriteLine("Converting the source file to TIF") 
   codecs.Convert(srcFileName, destFileName, RasterImageFormat.Tif, 0, 0, 24, Nothing) 
 
   ' Add the artist comment 
   Dim writeComment As RasterCommentMetadata = New RasterCommentMetadata() 
   writeComment.Type = RasterCommentMetadataType.Artist 
   writeComment.FromAscii("LEADTOOLS") 
 
   Console.WriteLine("Writing the following comment:") 
   Console.WriteLine(" Type:{0}, Data:{1}", writeComment.Type, writeComment.ToAscii()) 
 
   codecs.WriteComment(destFileName, 1, writeComment) 
 
   ' Read the comment back 
   Dim readComment As RasterCommentMetadata = codecs.ReadComment(destFileName, 1, RasterCommentMetadataType.Artist) 
   Console.WriteLine("The following comment has been read:") 
   Console.WriteLine(" Type:{0}, Data:{1}", readComment.Type, readComment.ToAscii()) 
 
   ' Write a few comments to the file in one pass 
   Dim comments As IList(Of RasterCommentMetadata) = New List(Of RasterCommentMetadata)() 
   writeComment = New RasterCommentMetadata() 
   writeComment.Type = RasterCommentMetadataType.Artist 
   writeComment.FromAscii("LEADTOOLS Again") 
   comments.Add(writeComment) 
 
   writeComment = New RasterCommentMetadata() 
   writeComment.Type = RasterCommentMetadataType.Copyright 
   writeComment.FromAscii("(c) 2006") 
   comments.Add(writeComment) 
 
   Console.WriteLine("Writing the following comments to the file:") 
   For Each comment As RasterCommentMetadata In comments 
      Console.WriteLine(" Type:{0}, Data:{1}", comment.Type, comment.ToAscii()) 
   Next comment 
 
   codecs.WriteComments(destFileName, 1, comments) 
 
   ' Now get all the comments in the file and show them: 
   Console.WriteLine("Reading all comments from the file:") 
 
   Dim tifComments As RasterCommentMetadataType() = 
   { 
      RasterCommentMetadataType.Artist, 
      RasterCommentMetadataType.Copyright, 
      RasterCommentMetadataType.DateTime, 
      RasterCommentMetadataType.Description, 
      RasterCommentMetadataType.HostComputer, 
      RasterCommentMetadataType.Make, 
      RasterCommentMetadataType.Model, 
      RasterCommentMetadataType.NameOfDocument, 
      RasterCommentMetadataType.NameOfPage, 
      RasterCommentMetadataType.Software 
   } 
 
   For Each tifComment As RasterCommentMetadataType In tifComments 
      Dim comment As RasterCommentMetadata = codecs.ReadComment(destFileName, 1, tifComment) 
      If Not comment Is Nothing Then 
         Console.Write("Found comment, Type:{0}, Data:", comment.Type) 
 
         Dim dataType As RasterCommentMetadataDataType = RasterCommentMetadata.GetDataType(comment.Type) 
 
         Dim byteData As Byte() 
         Dim shortData As Short() 
         Dim rationalData As RasterMetadataRational() 
         Dim urationalData As RasterMetadataURational() 
 
         Select Case dataType 
            Case RasterCommentMetadataDataType.Ascii 
               Console.WriteLine(comment.ToAscii()) 
 
            Case RasterCommentMetadataDataType.Byte 
               byteData = comment.ToByte() 
               Dim i As Integer = 0 
               Do While i < byteData.Length 
                  Console.Write("{0:X} ", byteData(i)) 
                  i += 1 
               Loop 
               Console.WriteLine() 
 
            Case RasterCommentMetadataDataType.Int16 
               shortData = comment.ToInt16() 
               Dim i As Integer = 0 
               Do While i < shortData.Length 
                  Console.Write("{0:X} ", shortData(i)) 
                  i += 1 
               Loop 
               Console.WriteLine() 
 
            Case RasterCommentMetadataDataType.Rational 
               rationalData = comment.ToRational() 
               Dim i As Integer = 0 
               Do While i < rationalData.Length 
                  Console.Write("{0}/{1) ", rationalData(i).Numerator, rationalData(i).Denominator) 
                  i += 1 
               Loop 
               Console.WriteLine() 
 
            Case RasterCommentMetadataDataType.URational 
               urationalData = comment.ToURational() 
               Dim i As Integer = 0 
               Do While i < urationalData.Length 
                  Console.Write("{0}/{1) ", urationalData(i).Numerator, urationalData(i).Denominator) 
                  i += 1 
               Loop 
               Console.WriteLine() 
         End Select 
      End If 
   Next tifComment 
 
   ' Clean up 
   codecs.Dispose() 
End Sub 
 
Public NotInheritable Class LEAD_VARS 
   Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images" 
End Class 
c#[Silverlight C# Example] 
using Leadtools; 
using Leadtools.Codecs; 
using Leadtools.Examples; 
using Leadtools.ImageProcessing; 
using Leadtools.ImageProcessing.Color; 
using Leadtools.Windows.Media; 
 
public void CommentsExample(Stream inStreamCmp, Stream outStreamTif) 
{ 
   RasterCodecs codecs = new RasterCodecs(); 
 
   // Convert the source file to TIF 
   Debug.WriteLine("Converting the source file to TIF"); 
   codecs.Convert(inStreamCmp, outStreamTif, RasterImageFormat.Tif, 0, 0, 24, null); 
 
   // Add the artist comment 
   RasterCommentMetadata writeComment = new RasterCommentMetadata(); 
   writeComment.Type = RasterCommentMetadataType.Artist; 
   writeComment.FromAscii("LEADTOOLS"); 
 
   Debug.WriteLine("Writing the following comment:"); 
   Debug.WriteLine(" Type:{0}, Data:{1}", writeComment.Type, writeComment.ToAscii()); 
 
   codecs.WriteComment(outStreamTif, 1, writeComment); 
 
   // Read the comment back 
   RasterCommentMetadata readComment = codecs.ReadComment(outStreamTif, 1, RasterCommentMetadataType.Artist); 
   Debug.WriteLine("The following comment has been read:"); 
   Debug.WriteLine(" Type:{0}, Data:{1}", readComment.Type, readComment.ToAscii()); 
 
   // Write a few comments to the file in one pass 
   RasterCollection<RasterCommentMetadata> comments = new RasterCollection<RasterCommentMetadata>(); 
   writeComment = new RasterCommentMetadata(); 
   writeComment.Type = RasterCommentMetadataType.Artist; 
   writeComment.FromAscii("LEADTOOLS Again"); 
   comments.Add(writeComment); 
 
   writeComment = new RasterCommentMetadata(); 
   writeComment.Type = RasterCommentMetadataType.Copyright; 
   writeComment.FromAscii("(c) 2006"); 
   comments.Add(writeComment); 
 
   Debug.WriteLine("Writing the following comments to the file:"); 
   foreach (RasterCommentMetadata comment in comments) 
      Debug.WriteLine(" Type:{0}, Data:{1}", comment.Type, comment.ToAscii()); 
 
   codecs.WriteComments(outStreamTif, 1, comments); 
 
   // Now get all the comments in the file and show them: 
   Debug.WriteLine("Reading all comments from the file:"); 
 
   RasterCommentMetadataType[] tifComments = 
   { 
      RasterCommentMetadataType.Artist, 
      RasterCommentMetadataType.Copyright, 
      RasterCommentMetadataType.DateTime, 
      RasterCommentMetadataType.Description, 
      RasterCommentMetadataType.HostComputer, 
      RasterCommentMetadataType.Make, 
      RasterCommentMetadataType.Model, 
      RasterCommentMetadataType.NameOfDocument, 
      RasterCommentMetadataType.NameOfPage, 
      RasterCommentMetadataType.Software, 
   }; 
 
   foreach (RasterCommentMetadataType tifComment in tifComments) 
   { 
      RasterCommentMetadata comment = codecs.ReadComment(outStreamTif, 1, tifComment); 
      if (comment != null) 
      { 
         Debug.WriteLine("Found comment, Type:{0}, Data:", comment.Type); 
 
         RasterCommentMetadataDataType dataType = RasterCommentMetadata.GetDataType(comment.Type); 
 
         byte[] byteData; 
         short[] shortData; 
         RasterMetadataRational[] rationalData; 
         RasterMetadataURational[] urationalData; 
 
         switch (dataType) 
         { 
            case RasterCommentMetadataDataType.Ascii: 
               Debug.WriteLine(comment.ToAscii()); 
               break; 
 
            case RasterCommentMetadataDataType.Byte: 
               byteData = comment.ToByte(); 
               for (int i = 0; i < byteData.Length; i++) 
                  Debug.WriteLine("{0:X} ", byteData[i]); 
               Debug.WriteLine(""); 
               break; 
 
            case RasterCommentMetadataDataType.Int16: 
               shortData = comment.ToInt16(); 
               for (int i = 0; i < shortData.Length; i++) 
                  Debug.WriteLine("{0:X} ", shortData[i]); 
               Debug.WriteLine(""); 
               break; 
 
            case RasterCommentMetadataDataType.Rational: 
               rationalData = comment.ToRational(); 
               for (int i = 0; i < rationalData.Length; i++) 
                  Debug.WriteLine(@"{0}/{1) ", rationalData[i].Numerator, rationalData[i].Denominator); 
               Debug.WriteLine(""); 
               break; 
 
            case RasterCommentMetadataDataType.URational: 
               urationalData = comment.ToURational(); 
               for (int i = 0; i < urationalData.Length; i++) 
                  Debug.WriteLine(@"{0}/{1) ", urationalData[i].Numerator, urationalData[i].Denominator); 
               Debug.WriteLine(""); 
               break; 
         } 
      } 
   } 
} 
vb[Silverlight VB Example] 
Imports Leadtools 
Imports Leadtools.Codecs 
Imports Leadtools.ImageProcessing 
Imports Leadtools.ImageProcessing.Color 
Imports Leadtools.Windows.Media 
 
Public Sub CommentsExample(ByVal inStreamCmp As Stream, ByVal outStreamTif As Stream) 
   Dim codecs As RasterCodecs = New RasterCodecs() 
 
   ' Convert the source file to TIF 
   Debug.WriteLine("Converting the source file to TIF") 
   codecs.Convert(inStreamCmp, outStreamTif, RasterImageFormat.Tif, 0, 0, 24, Nothing) 
 
   ' Add the artist comment 
   Dim writeComment As RasterCommentMetadata = New RasterCommentMetadata() 
   writeComment.Type = RasterCommentMetadataType.Artist 
   writeComment.FromAscii("LEADTOOLS") 
 
   Debug.WriteLine("Writing the following comment:") 
   Debug.WriteLine(" Type:{0}, Data:{1}", writeComment.Type, writeComment.ToAscii()) 
 
   codecs.WriteComment(outStreamTif, 1, writeComment) 
 
   ' Read the comment back 
   Dim readComment As RasterCommentMetadata = codecs.ReadComment(outStreamTif, 1, RasterCommentMetadataType.Artist) 
   Debug.WriteLine("The following comment has been read:") 
   Debug.WriteLine(" Type:{0}, Data:{1}", readComment.Type, readComment.ToAscii()) 
 
   ' Write a few comments to the file in one pass 
   Dim comments As RasterCollection(Of RasterCommentMetadata) = New RasterCollection(Of RasterCommentMetadata)() 
   writeComment = New RasterCommentMetadata() 
   writeComment.Type = RasterCommentMetadataType.Artist 
   writeComment.FromAscii("LEADTOOLS Again") 
   comments.Add(writeComment) 
 
   writeComment = New RasterCommentMetadata() 
   writeComment.Type = RasterCommentMetadataType.Copyright 
   writeComment.FromAscii("(c) 2006") 
   comments.Add(writeComment) 
 
   Debug.WriteLine("Writing the following comments to the file:") 
   For Each comment As RasterCommentMetadata In comments 
      Debug.WriteLine(" Type:{0}, Data:{1}", comment.Type, comment.ToAscii()) 
   Next comment 
 
   codecs.WriteComments(outStreamTif, 1, comments) 
 
   ' Now get all the comments in the file and show them: 
   Debug.WriteLine("Reading all comments from the file:") 
 
   Dim tifComments As RasterCommentMetadataType() = {RasterCommentMetadataType.Artist, RasterCommentMetadataType.Copyright, RasterCommentMetadataType.DateTime, RasterCommentMetadataType.Description, 
         RasterCommentMetadataType.HostComputer, RasterCommentMetadataType.Make, RasterCommentMetadataType.Model, RasterCommentMetadataType.NameOfDocument, RasterCommentMetadataType.NameOfPage, RasterCommentMetadataType.Software} 
 
   For Each tifComment As RasterCommentMetadataType In tifComments 
      Dim comment As RasterCommentMetadata = codecs.ReadComment(outStreamTif, 1, tifComment) 
      If Not comment Is Nothing Then 
         Debug.WriteLine("Found comment, Type:{0}, Data:", comment.Type) 
 
         Dim dataType As RasterCommentMetadataDataType = RasterCommentMetadata.GetDataType(comment.Type) 
 
         Dim byteData As Byte() 
         Dim shortData As Short() 
         Dim rationalData As RasterMetadataRational() 
         Dim urationalData As RasterMetadataURational() 
 
         Select Case dataType 
            Case RasterCommentMetadataDataType.Ascii 
               Debug.WriteLine(comment.ToAscii()) 
 
            Case RasterCommentMetadataDataType.Byte 
               byteData = comment.ToByte() 
               Dim i As Integer = 0 
               Do While i < byteData.Length 
                  Debug.WriteLine("{0:X} ", byteData(i)) 
                  i += 1 
               Loop 
               Debug.WriteLine("") 
 
            Case RasterCommentMetadataDataType.Int16 
               shortData = comment.ToInt16() 
               Dim i As Integer = 0 
               Do While i < shortData.Length 
                  Debug.WriteLine("{0:X} ", shortData(i)) 
                  i += 1 
               Loop 
               Debug.WriteLine("") 
 
            Case RasterCommentMetadataDataType.Rational 
               rationalData = comment.ToRational() 
               Dim i As Integer = 0 
               Do While i < rationalData.Length 
                  Debug.WriteLine("{0}/{1) ", rationalData(i).Numerator, rationalData(i).Denominator) 
                  i += 1 
               Loop 
               Debug.WriteLine("") 
 
            Case RasterCommentMetadataDataType.URational 
               urationalData = comment.ToURational() 
               Dim i As Integer = 0 
               Do While i < urationalData.Length 
                  Debug.WriteLine("{0}/{1) ", urationalData(i).Numerator, urationalData(i).Denominator) 
                  i += 1 
               Loop 
               Debug.WriteLine("") 
         End Select 
      End If 
   Next tifComment 
End Sub 

Requirements

Target Platforms

Help Version 20.0.2020.4.3
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2020 LEAD Technologies, Inc. All Rights Reserved.

Leadtools.Codecs Assembly