Initializes the buffered decompression engine.
public object StartDecompress(
CodecsStartDecompressOptions options
)
Public Function StartDecompress( _
ByVal options As CodecsStartDecompressOptions _
) As Object
- (nullable NSObject *)startDecompress:(LTCodecsStartDecompressOptions *)decompressOptions error:(NSError **)error
public Object startDecompress(CodecsStartDecompressOptions options)
public:
Object^ StartDecompress(
CodecsStartDecompressOptions options
)
options
Provides input parameters for the decompression process.
An object that identifies the decompression process. This same object must be passed to the Decompress and StopDecompress methods.
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.
using Leadtools;
using Leadtools.Codecs;
using Leadtools.ImageProcessing;
using Leadtools.ImageProcessing.Color;
using Leadtools.Svg;
using LeadtoolsExamples.Common;
// 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 codecs = new RasterCodecs();
string destFileName = Path.Combine(LEAD_VARS.ImagesDir, "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();
}
// 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;
}
static class LEAD_VARS
{
public const string ImagesDir = @"C:\Users\Public\Documents\LEADTOOLS Images";
}
Imports Leadtools
Imports Leadtools.Codecs
Imports Leadtools.ImageProcessing
Imports Leadtools.ImageProcessing.Color
Imports Leadtools.Drawing
Imports Leadtools.Svg
' 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)
Dim codecs As RasterCodecs = New RasterCodecs()
Dim destFileName As String = Path.Combine(LEAD_VARS.ImagesDir, "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()
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
Public NotInheritable Class LEAD_VARS
Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images"
End Class
Help Collections
Raster .NET | C API | C++ Class Library | HTML5 JavaScript
Document .NET | C API | C++ Class Library | HTML5 JavaScript
Medical .NET | C API | C++ Class Library | HTML5 JavaScript
Medical Web Viewer .NET
Multimedia
Direct Show .NET | C API | Filters
Media Foundation .NET | C API | Transforms
Supported Platforms
.NET, Java, Android, and iOS/macOS Assemblies
Imaging, Medical, and Document
C API/C++ Class Libraries
Imaging, Medical, and Document
HTML5 JavaScript Libraries
Imaging, Medical, and Document