Leadtools Namespace > RasterImage Class > GetRowCompressed Method : GetRowCompressed(IntPtr,IntPtr,Int32,Int32) Method |
'Declaration Public Overloads Sub GetRowCompressed( _ ByVal workBuffer As IntPtr, _ ByVal runBuffer As IntPtr, _ ByVal row As Integer, _ ByVal lines As Integer _ )
'Usage Dim instance As RasterImage Dim workBuffer As IntPtr Dim runBuffer As IntPtr Dim row As Integer Dim lines As Integer instance.GetRowCompressed(workBuffer, runBuffer, row, lines)
public void getRowCompressed( byte[] workBuffer, short[] runBuffer, int row, int lines )
function Leadtools.RasterImage.GetRowCompressed(IntPtr,IntPtr,Int32,Int32)( workBuffer , runBuffer , row , lines )
This method is available in the (Document/Medical only) Toolkits.
This method is useful for working with 1-bit images that are loaded in their compressed formats for faster loading and display.
For more information, refer to Speeding Up 1-Bit Documents.
Imports Leadtools Imports Leadtools.Codecs Imports Leadtools.ImageProcessing Imports Leadtools.ImageProcessing.Core Imports Leadtools.ImageProcessing.Color Imports Leadtools.WinForms Imports Leadtools.Dicom Imports Leadtools.Drawing Public Sub GetRowCompressedExample() Dim codecs As RasterCodecs = New RasterCodecs() ' Load the bitmap, at 1 bit per pixel, compressed codecs.Options.Load.Compressed = True Dim image As RasterImage = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir, "OCR1.TIF"), 1, CodecsLoadByteOrder.Bgr, 1, 1) ' This example does not work with rotated view perspectives. If (image.ViewPerspective <> RasterViewPerspective.TopLeft) OrElse (image.ViewPerspective <> RasterViewPerspective.BottomLeft) Then image.ChangeViewPerspective(RasterViewPerspective.TopLeft) End If ' Adjust the YOffset if the view perspective is bottom left. Dim nRow As Integer = 500 ' first row to get. Dim nYSize As Integer = 500 ' number of rows to get. If image.ViewPerspective = RasterViewPerspective.BottomLeft Then nRow = image.Height - nRow - nYSize End If ' Allocate the buffers. Dim pBuffer As Byte() = New Byte(Convert.ToInt32((((image.Width + 31) And Not (31)) / 8)) * nYSize - 1) {} ' Buffer to hold the expanded row. Dim pRunBuffer As System.UInt16() = New System.UInt16(((image.Width + 3) * 2) * nYSize - 1) {} ' Buffer to hold the compressed row. If image.IsGlobalMemory Then image.Access() End If ' Get the top nRow lines. image.GetRowCompressed(Nothing, pRunBuffer, 0, nRow, nYSize) ' Expand the compressed data. RasterRleCompressor.ExpandRows(pRunBuffer, pBuffer, 0, image.Width, nYSize) ' Invert the data. Dim n As Integer = 0 Do While n < (image.BytesPerLine * nYSize) pBuffer(n) = pBuffer(n) Xor Convert.ToByte(&HFF) n += 1 Loop ' Compress the inverted data. RasterRleCompressor.CompressRows(pRunBuffer, pBuffer, 0, image.Width, nYSize) ' Put the inverted, compressed data back into the image. image.SetRowCompressed(Nothing, pRunBuffer, 0, nRow, nYSize) If image.IsGlobalMemory Then image.Release() End If codecs.Save(image, Path.Combine(LEAD_VARS.ImagesDir, "IMAGE1_getrowcompresed.BMP"), RasterImageFormat.Bmp, 0) image.Dispose() codecs.Dispose() End Sub 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.Core; using Leadtools.ImageProcessing.Color; using Leadtools.WinForms; using Leadtools.Dicom; using Leadtools.Drawing; public void GetRowCompressedExample() { RasterCodecs codecs = new RasterCodecs(); // Load the bitmap, at 1 bit per pixel, compressed codecs.Options.Load.Compressed = true; RasterImage image = codecs.Load(Path.Combine(ImagesPath.Path, "OCR1.TIF"), 1, Leadtools.Codecs.CodecsLoadByteOrder.Bgr, 1, 1); // This example does not work with rotated view perspectives. if((image.ViewPerspective != RasterViewPerspective.TopLeft) || (image.ViewPerspective != RasterViewPerspective.BottomLeft)) image.ChangeViewPerspective(RasterViewPerspective.TopLeft); // Adjust the YOffset if the view perspective is bottom left. int nRow = 500; // first row to get. int nYSize = 500; // number of rows to get. if(image.ViewPerspective == RasterViewPerspective.BottomLeft) nRow = image.Height - nRow - nYSize; // Allocate the buffers. byte[] pBuffer = new byte[Convert.ToInt32((((image.Width + 31) & ~(31)) / 8)) * nYSize]; // Buffer to hold the expanded row. ushort[] pRunBuffer = new ushort[((image.Width + 3) * 2) * nYSize]; // Buffer to hold the compressed row. if(image.IsGlobalMemory) image.Access(); // Get the top nRow lines. image.GetRowCompressed(null, pRunBuffer, 0, nRow, nYSize); // Expand the compressed data. RasterRleCompressor.ExpandRows(pRunBuffer, pBuffer, 0, image.Width, nYSize); // Invert the data. for(int n = 0; n < (image.BytesPerLine * nYSize); n++) pBuffer[n] ^= 0xff; // Compress the inverted data. RasterRleCompressor.CompressRows(pRunBuffer, pBuffer, 0, image.Width, nYSize); // Put the inverted, compressed data back into the image. image.SetRowCompressed(null, pRunBuffer, 0, nRow, nYSize); if(image.IsGlobalMemory) image.Release(); codecs.Save(image,Path.Combine(ImagesPath.Path,"IMAGE1_getrowcompresed.BMP"), RasterImageFormat.Bmp, 0); image.Dispose(); codecs.Dispose(); }