Initializes the buffered decompression engine.
Syntax
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 Basic | Copy Code |
---|
RasterCodecs.Decompress
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)
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)
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
Const column As Integer = 0
Dim index As Integer = 0
Do While index < maxIndex
fs.Seek(stripOffsets(index), SeekOrigin.Begin)
Dim buffer As Byte() = New Byte(stripSizes(index) - 1) {}
fs.Read(buffer, 0, buffer.Length)
Dim height As Integer = rowsPerStrip
If index = (maxIndex - 1) Then
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()
Dim image As RasterImage = codecs.StopDecompress(decompressObject)
codecs.Save(image, destFileName, RasterImageFormat.Bmp, 24)
image.Dispose()
codecs.Dispose()
RasterCodecs.Shutdown()
End Sub
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
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