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 |
|---|
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)
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 |
|---|
// 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
Requirements
Target Platforms: Microsoft .NET Framework 3.0, Windows XP, Windows Server 2003 family, Windows Server 2008 family
See Also