Leadtools.Codecs Send comments on this topic. | Back to Introduction - All Topics | Help Version 16.5.9.25
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
)
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
' 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 = LeadtoolsExamples.Common.ImagesPath.Path + "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
// 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 = LeadtoolsExamples.Common.ImagesPath.Path + "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 3.0, Windows XP, Windows Server 2003 family, Windows Server 2008 family

See Also