LEADTOOLS画像ファイルサポート(Leadtools.Codecsアセンブリ)

フレームを表示

StartDecompressメソッド








入力パラメータを伸長プロセスに提供します。
バッファーに入れられた伸長エンジンを初期化します。
構文
public object StartDecompress( 
   CodecsStartDecompressOptions options
)
'Declaration
 
Public Function StartDecompress( _
   ByVal options As CodecsStartDecompressOptions _
) As Object
'Usage
 
Dim instance As RasterCodecs
Dim options As CodecsStartDecompressOptions
Dim value As Object
 
value = instance.StartDecompress(options)
public object StartDecompress( 
   CodecsStartDecompressOptions options
)
- (nullable NSObject *)startDecompress:(LTCodecsStartDecompressOptions *)decompressOptions error:(NSError **)error
public Object startDecompress(CodecsStartDecompressOptions options)
 function Leadtools.Codecs.RasterCodecs.StartDecompress( 
   options 
)
public:
Object^ StartDecompress( 
   CodecsStartDecompressOptions options
) 

パラメーター

オプション
入力パラメータを伸長プロセスに提供します。

戻り値

伸長プロセスを識別するオブジェクト。この同じオブジェクトは、デコンプレッションStopDecompressメソッドに渡されなければなりません。
解説

バッファーに入れられた伸長エンジンを初期化します。伸長は、デコンプレッションメソッドを用いてその後行われます。それは、StopDecompressメソッドによって終わります。

現時点では、生のJPEGは、エンコードされるすべてのHuffmanテーブルを格納しなければなりません。つまり、それは読み出し可能なJPEGファイルでなければなりません。

サンプル
Copy Code  
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
using Leadtools;
using Leadtools.Codecs;
using Leadtools.ImageProcessing;
using Leadtools.ImageProcessing.Color;
using 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
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";
}
using Leadtools;
using Leadtools.Codecs;
using Leadtools.ImageProcessing;
using Leadtools.ImageProcessing.Color;

// 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
async Task LoadRawPackbitsStrips(string packTifFile)
{
   RasterCodecs codecs = new RasterCodecs();
   string destFileName = "Decompress.bmp";

   IStorageFile loadFile = await Tools.AppInstallFolder.GetFileAsync(packTifFile);
   CodecsImageInfo imageInfo = await codecs.GetInformationAsync(LeadStreamFactory.Create(loadFile), false, 1);

   // StartDecompress
   CodecsStartDecompressOptions options = new CodecsStartDecompressOptions();
   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 = await ReadTag(codecs, packTifFile, TAG_STRIPOFFSETS, stripOffsets);
   await ReadTag(codecs, packTifFile, TAG_STRIPBYTECOUNTS, stripSizes);
   await ReadTag(codecs, packTifFile, TAG_ROWSPERSTRIP, rowsPerStripBuffer);
   int rowsPerStrip = rowsPerStripBuffer[0];

   Stream fs = await loadFile.OpenStreamForReadAsync();

   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.Dispose();

   // StopDecompress
   RasterImage image = codecs.StopDecompress(decompressObject);

   // 'image' contains the uncompressed image
   IStorageFile saveFile = await Tools.AppLocalFolder.CreateFileAsync(destFileName);
   await codecs.SaveAsync(image, LeadStreamFactory.Create(saveFile), RasterImageFormat.Bmp, 24);
   image.Dispose();

   // Clean up
   codecs.Dispose();
}

// Returns maximum index
async Task<int> ReadTag(RasterCodecs codecs, string fileName, int tagId, int[] stripArray)
{
   StorageFile loadFile = await Tools.AppInstallFolder.GetFileAsync(fileName);
   RasterTagMetadata tag = await codecs.ReadTagAsync(LeadStreamFactory.Create(loadFile), 1, tagId);
   int[] data = tag.ToInt32();
   data.CopyTo(stripArray, 0);
   return tag.Count;
}
必要条件

ターゲットプラットホーム

参照

参照

RasterCodecsクラス
RasterCodecsメンバ
バッファの圧縮と解凍
1ビット画像処理の高速化