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




options
Provides input parameters for the decompression process.
Initializes the buffered decompression engine.

Syntax

Visual Basic (Declaration) 
Public Function StartDecompress( _
   ByVal options As CodecsStartDecompressOptions _
) As Object
Visual Basic (Usage)Copy Code
Dim instance As RasterCodecs
Dim options As CodecsStartDecompressOptions
Dim value As Object
 
value = instance.StartDecompress(options)
C# 
public object StartDecompress( 
   CodecsStartDecompressOptions options
)
Managed Extensions for C++ 
public: Object* StartDecompress( 
   CodecsStartDecompressOptions options
) 
C++/CLI 
public:
Object^ StartDecompress( 
   CodecsStartDecompressOptions options
) 

Parameters

options
Provides input parameters for the decompression process.

Return Value

An object that identifies the decompression process. This same object must be passed to the Decompress and StopDecompress methods.

Example

Visual BasicCopy Code
RasterCodecs.Decompress
      ' This sample loads raw data from a PackBits TIF file
      ' PackBits.tif is a 24-bit tif packbits compressed file
      ' PackBits.tif has 46 strips of packbits data
      ' The strip information is obtained by reading the TIF tags TAG_STRIPOFFSETS and TAG_STRIPBYTECOUNTS
      ' The strips are directly read and fed to the Compress method
      Private Sub LoadRawPackbitsStrips(ByVal packTifFile As String)
         RasterCodecs.Startup()
         Dim codecs As RasterCodecs = New RasterCodecs()
         Dim destFileName As String = "C:\Program Files\LEAD Technologies\LEADTOOLS 15\Images\Decompress.bmp"

         Dim imageInfo As CodecsImageInfo = codecs.GetInformation(packTifFile, False)

         ' StartDecompress
         Dim options As CodecsStartDecompressOptions = CodecsStartDecompressOptions.Empty
         options.DataType = CodecsStartDecompressDataType.Strips
         options.Format = RasterImageFormat.RawPackBits
         options.Width = imageInfo.Width
         options.Height = imageInfo.Height
         options.BitsPerPixel = imageInfo.BitsPerPixel
         options.ViewPerspective = imageInfo.ViewPerspective
         options.RawOrder = imageInfo.Order
         options.LoadOrder = CodecsLoadByteOrder.BgrOrGray
         options.XResolution = imageInfo.XResolution
         options.YResolution = imageInfo.YResolution
         options.TiffPhotometricInterpretation = CodecsTiffPhotometricInterpretation.Rgb

         Dim decompressObject As Object = codecs.StartDecompress(options)

         ' Decompress

         Const TAG_STRIPOFFSETS As Integer = &H111
         Const TAG_STRIPBYTECOUNTS As Integer = &H117
         Const TAG_ROWSPERSTRIP As Integer = &H116
         Const MAX_STRIPS As Integer = 1000

         Dim stripOffsets As Integer() = New Integer(MAX_STRIPS - 1) {}
         Dim stripSizes As Integer() = New Integer(MAX_STRIPS - 1) {}
         Dim rowsPerStripBuffer As Integer() = New Integer(0) {}

         Dim maxIndex As Integer = ReadTag(codecs, packTifFile, TAG_STRIPOFFSETS, stripOffsets)
         ReadTag(codecs, packTifFile, TAG_STRIPBYTECOUNTS, stripSizes)
         ReadTag(codecs, packTifFile, TAG_ROWSPERSTRIP, rowsPerStripBuffer)
         Dim rowsPerStrip As Integer = rowsPerStripBuffer(0)

         Dim fs As FileStream = File.OpenRead(packTifFile)

         Const row As Integer = 0 ' Note: this parameter is ignored for strips
         Const column As Integer = 0 ' Column offset of tile
         Dim index As Integer = 0
         Do While index < maxIndex
            ' seek to the first strip
            fs.Seek(stripOffsets(index), SeekOrigin.Begin)

            Dim buffer As Byte() = New Byte(stripSizes(index) - 1) {}
            fs.Read(buffer, 0, buffer.Length)

            ' Calculate the height of uncompressed strip/tile
            Dim height As Integer = rowsPerStrip
            If index = (maxIndex - 1) Then
               ' fewer rows per strip
               height = imageInfo.Height - (maxIndex - 1) * rowsPerStrip
            End If

            codecs.Decompress(decompressObject, buffer, 0, buffer.Length, imageInfo.Width, height, row, column, CodecsDecompressDataFlags.Complete)
            index += 1
         Loop

         fs.Close()

         ' StopDecompress
         Dim image As RasterImage = codecs.StopDecompress(decompressObject)

         ' 'image' contains the uncompressed image
         codecs.Save(image, destFileName, RasterImageFormat.Bmp, 24)
         image.Dispose()

         ' Clean up
         codecs.Dispose()
         RasterCodecs.Shutdown()
      End Sub

      ' Returns maximum index
      Private Function ReadTag(ByVal codecs As RasterCodecs, ByVal fileName As String, ByVal tagId As Integer, ByVal stripArray As Integer()) As Integer
         Dim tag As RasterTagMetadata = codecs.ReadTag(fileName, 1, tagId)
         Dim data As Integer() = tag.ToInt32()
         data.CopyTo(stripArray, 0)
         Return tag.Count
      End Function
C#Copy Code
RasterCodecs.Decompress 
      // This sample loads raw data from a PackBits TIF file 
      // PackBits.tif is a 24-bit tif packbits compressed file 
      // PackBits.tif has 46 strips of packbits data 
      // The strip information is obtained by reading the TIF tags TAG_STRIPOFFSETS and TAG_STRIPBYTECOUNTS 
      // The strips are directly read and fed to the Compress method 
      void LoadRawPackbitsStrips(string packTifFile) 
      { 
         RasterCodecs.Startup(); 
         RasterCodecs codecs = new RasterCodecs(); 
         string destFileName = @"C:\Program Files\LEAD Technologies\LEADTOOLS 15\Images\Decompress.bmp"; 
 
         CodecsImageInfo imageInfo = codecs.GetInformation(packTifFile, false); 
 
         // StartDecompress 
         CodecsStartDecompressOptions options = CodecsStartDecompressOptions.Empty; 
         options.DataType = CodecsStartDecompressDataType.Strips; 
         options.Format = RasterImageFormat.RawPackBits; 
         options.Width = imageInfo.Width; 
         options.Height = imageInfo.Height; 
         options.BitsPerPixel = imageInfo.BitsPerPixel; 
         options.ViewPerspective = imageInfo.ViewPerspective; 
         options.RawOrder = imageInfo.Order; 
         options.LoadOrder = CodecsLoadByteOrder.BgrOrGray; 
         options.XResolution = imageInfo.XResolution; 
         options.YResolution = imageInfo.YResolution; 
         options.TiffPhotometricInterpretation = CodecsTiffPhotometricInterpretation.Rgb; 
 
         object decompressObject = codecs.StartDecompress(options); 
 
         // Decompress 
 
         const int TAG_STRIPOFFSETS = 0x111; 
         const int TAG_STRIPBYTECOUNTS = 0x117; 
         const int TAG_ROWSPERSTRIP = 0x116; 
         const int MAX_STRIPS = 1000; 
 
         int[] stripOffsets = new int[MAX_STRIPS]; 
         int[] stripSizes = new int[MAX_STRIPS]; 
         int[] rowsPerStripBuffer = new int[1]; 
 
         int maxIndex = ReadTag(codecs, packTifFile, TAG_STRIPOFFSETS, stripOffsets); 
         ReadTag(codecs, packTifFile, TAG_STRIPBYTECOUNTS, stripSizes); 
         ReadTag(codecs, packTifFile, TAG_ROWSPERSTRIP, rowsPerStripBuffer); 
         int rowsPerStrip = rowsPerStripBuffer[0]; 
 
         FileStream fs = File.OpenRead(packTifFile); 
 
         const int row = 0; // Note: this parameter is ignored for strips 
         const int column = 0; // Column offset of tile 
         for(int index = 0; index < maxIndex; index++) 
         { 
            // seek to the first strip 
            fs.Seek(stripOffsets[index], SeekOrigin.Begin); 
 
            byte[] buffer = new byte[stripSizes[index]]; 
            fs.Read(buffer, 0, buffer.Length); 
 
            // Calculate the height of uncompressed strip/tile 
            int height = rowsPerStrip; 
            if(index == (maxIndex - 1)) 
            { 
               // fewer rows per strip 
               height = imageInfo.Height - (maxIndex - 1) * rowsPerStrip; 
            } 
 
            codecs.Decompress( 
               decompressObject, 
               buffer, 
               0, 
               buffer.Length, 
               imageInfo.Width, 
               height, 
               row, 
               column, 
               CodecsDecompressDataFlags.Complete); 
         } 
 
         fs.Close(); 
 
         // StopDecompress 
         RasterImage image = codecs.StopDecompress(decompressObject); 
 
         // 'image' contains the uncompressed image 
         codecs.Save(image, destFileName, RasterImageFormat.Bmp, 24); 
         image.Dispose(); 
 
         // Clean up 
         codecs.Dispose(); 
         RasterCodecs.Shutdown(); 
      } 
 
      // Returns maximum index 
      int ReadTag(RasterCodecs codecs, string fileName, int tagId, int[] stripArray) 
      { 
         RasterTagMetadata tag = codecs.ReadTag(fileName, 1, tagId); 
         int[] data = tag.ToInt32(); 
         data.CopyTo(stripArray, 0); 
         return tag.Count; 
      }

Remarks

Initializes the buffered decompression engine. The decompression is then carried out using the Decompress method. It is ended by the StopDecompress method.

Currently, raw JPEG must contain all the Huffman tables encoded. That is, it must be a readable JPEG file.

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