Retrieves (into an unmanaged memory buffer) one or more rows of 1-bit compressed data from an image that has been loaded in its compressed format.
public void GetRowCompressed(
IntPtr workBuffer,
IntPtr runBuffer,
int row,
int lines
)
Public Overloads Sub GetRowCompressed( _
ByVal workBuffer As IntPtr, _
ByVal runBuffer As IntPtr, _
ByVal row As Integer, _
ByVal lines As Integer _
)
public void getRowCompressed(
byte[] workBuffer,
short[] runBuffer,
int row,
int lines
)
public:
void GetRowCompressed(
IntPtr workBuffer,
IntPtr runBuffer,
int row,
int lines
)
workBuffer
Pointer to optional work unmanaged memory buffer. Allocating the work buffer speeds processing if you call this method more than once, because if you do not allocate a work buffer, the method allocates and frees a temporary buffer each time it is called. bytes required = lines * ((RasterImage-Width.html) + 3) * 2). Pass IntPtr.Zero for workBuffer if you do not want to use the work buffer
runBuffer
Pointer to the output unmanaged memory buffer, which will be filled with 1-bit compressed image data.
row
The number of the row to retrieve. The first row is 0, and the last row is 1 less than the image height.
lines
Number of rows to retrieve.
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.
This example demonstrates the low-level methods for accessing 1-bit compressed image data. It demonstrates the ability to get and put rows, and the ability to process rows in buffer-to-buffer processing. The result of the function is an the first 50 lines are inverted.
using Leadtools;
using Leadtools.Codecs;
using Leadtools.ImageProcessing;
using Leadtools.ImageProcessing.Core;
using Leadtools.ImageProcessing.Color;
using Leadtools.Dicom;
using Leadtools.Drawing;
using Leadtools.Controls;
using LeadtoolsExamples.Common;
using Leadtools.Svg;
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();
}
Imports Leadtools
Imports Leadtools.Codecs
Imports Leadtools.ImageProcessing
Imports Leadtools.ImageProcessing.Core
Imports Leadtools.ImageProcessing.Color
Imports Leadtools.Controls
Imports Leadtools.Dicom
Imports Leadtools.Drawing
Imports Leadtools.Svg
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.
image.Access()
' 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)
image.Release()
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
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