Leadtools.Codecs Send comments on this topic. | Back to Introduction - All Topics | Help Version 15.12.17
ReadExtensions Method
See Also  Example
Leadtools.Codecs Namespace > RasterCodecs Class : ReadExtensions Method




Loads extensions from the specified Exif file.

Overload List

OverloadDescription
ReadExtensions(String,Int32) Loads extensions from the specified Exif file.  
ReadExtensions(Stream,Int32) Loads extensions from the specified Exif stream.  

Example

Visual BasicCopy Code
RasterCodecs.ReadExtensions
      Private Sub ExtensionsExample(ByVal exifFileName As String)
         RasterCodecs.Startup()
         Dim codecs As RasterCodecs = New RasterCodecs()
         Dim stampFileName As String = "C:\Program Files\LEAD Technologies\LEADTOOLS 15\Images\Extension.bmp"
         Dim audioFileNameTemplate As String = "C:\Program Files\LEAD Technologies\LEADTOOLS 15\Images\Extension{0}.wav"

         ' Read the extensions from the file
         Console.WriteLine("Reading the extensions from the exif file")
         Dim extensionList As CodecsExtensionList = codecs.ReadExtensions(exifFileName, 1)
         If Not extensionList Is Nothing Then
            If (extensionList.Flags And CodecsExtensionListFlags.Stamp) = CodecsExtensionListFlags.Stamp Then
               Console.WriteLine("Stamp extension: Found, saving to {0}", stampFileName)
               Dim stampImage As RasterImage = extensionList.CreateStamp()
               codecs.Save(stampImage, stampFileName, RasterImageFormat.Bmp, 24)
               stampImage.Dispose()
            Else
               Console.WriteLine("Stamp extension: Not found")
            End If

            If (extensionList.Flags And CodecsExtensionListFlags.Audio) = CodecsExtensionListFlags.Audio Then
               Console.WriteLine("Audio extension: Found, saving ...")
               Dim audioData As RasterNativeBuffer
               Dim streamIndex As Integer = 0

               Do
                  audioData = extensionList.GetAudioData(streamIndex)
                  If audioData.Data <> IntPtr.Zero Then
                     Dim audioFileName As String = String.Format(audioFileNameTemplate, streamIndex)
                     Console.WriteLine("To {0}", audioFileName)
                     Using fs As FileStream = File.Create(audioFileName)
                        Dim data As Byte() = New Byte(audioData.Length - 1) {}
                        Marshal.Copy(audioData.Data, data, 0, audioData.Length)
                        fs.Write(data, 0, audioData.Length)
                     End Using

                     streamIndex += 1
                  End If
               Loop While audioData.Data <> IntPtr.Zero

               Console.WriteLine("{0} total audio streams found", streamIndex)
            Else
               Console.WriteLine("Audio extension: Not found")
            End If

            Dim extensions As CodecsExtension() = extensionList.GetExtensions()
            Console.WriteLine("Total number of extensions found in the file: {0}", extensions.Length)

            Dim i As Integer = 0
            Do While i < extensions.Length
               Dim extension As CodecsExtension = extensions(i)
               Console.WriteLine(" {0}. Name: {1}, Clsid: {2}, UCDefault: {3}, DatLength: {4}", i, extension.Name, extension.Clsid, extension.UCDefault, extension.DataLength)
               i += 1
            Loop

            extensionList.Dispose()
         Else
            Console.WriteLine("No extensions were found in the file")
         End If

         codecs.Dispose()
         RasterCodecs.Shutdown()
      End Sub
C#Copy Code
RasterCodecs.ReadExtensions 
      void ExtensionsExample(string exifFileName) 
      { 
         RasterCodecs.Startup(); 
         RasterCodecs codecs = new RasterCodecs(); 
         string stampFileName = @"C:\Program Files\LEAD Technologies\LEADTOOLS 15\Images\Extension.bmp"; 
         string audioFileNameTemplate = @"C:\Program Files\LEAD Technologies\LEADTOOLS 15\Images\Extension{0}.wav"; 
 
         // Read the extensions from the file 
         Console.WriteLine("Reading the extensions from the exif file"); 
         CodecsExtensionList extensionList = codecs.ReadExtensions(exifFileName, 1); 
         if(extensionList != null) 
         { 
            if((extensionList.Flags & CodecsExtensionListFlags.Stamp) == CodecsExtensionListFlags.Stamp) 
            { 
               Console.WriteLine("Stamp extension: Found, saving to {0}", stampFileName); 
               RasterImage stampImage = extensionList.CreateStamp(); 
               codecs.Save(stampImage, stampFileName, RasterImageFormat.Bmp, 24); 
               stampImage.Dispose(); 
            } 
            else 
               Console.WriteLine("Stamp extension: Not found"); 
 
            if((extensionList.Flags & CodecsExtensionListFlags.Audio) == CodecsExtensionListFlags.Audio) 
            { 
               Console.WriteLine("Audio extension: Found, saving ..."); 
               RasterNativeBuffer audioData; 
               int streamIndex = 0; 
 
               do 
               { 
                  audioData = extensionList.GetAudioData(streamIndex); 
                  if(audioData.Data != IntPtr.Zero) 
                  { 
                     string audioFileName = string.Format(audioFileNameTemplate, streamIndex); 
                     Console.WriteLine("To {0}", audioFileName); 
                     using(FileStream fs = File.Create(audioFileName)) 
                     { 
                        byte[] data = new byte[audioData.Length]; 
                        Marshal.Copy(audioData.Data, data, 0, audioData.Length); 
                        fs.Write(data, 0, audioData.Length); 
                     } 
 
                     streamIndex++; 
                  } 
               } 
               while(audioData.Data != IntPtr.Zero); 
 
               Console.WriteLine("{0} total audio streams found", streamIndex); 
            } 
            else 
               Console.WriteLine("Audio extension: Not found"); 
 
            CodecsExtension[] extensions = extensionList.GetExtensions(); 
            Console.WriteLine("Total number of extensions found in the file: {0}", extensions.Length); 
 
            for(int i = 0; i < extensions.Length; i++) 
            { 
               CodecsExtension extension = extensions[i]; 
               Console.WriteLine(" {0}. Name: {1}, Clsid: {2}, UCDefault: {3}, DatLength: {4}", 
                  i, extension.Name, extension.Clsid, extension.UCDefault, extension.DataLength); 
            } 
 
            extensionList.Dispose(); 
         } 
         else 
            Console.WriteLine("No extensions were found in the file"); 
 
         codecs.Dispose(); 
         RasterCodecs.Shutdown(); 
      }

Remarks

Please note that not all Exif files have extensions.

Currently, this method works only with Exif files. Exif files can contain extra data stored as "FlashPix extensions". This method can be used to access this extra data. Leadtools refers to this extra data as "extensions".

You must dispose the CodecsExtensionList returned from this method when you are done using it.

Requirements

Target Platforms: Microsoft .NET Framework 2.0, Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 family

See Also