How to read barcodes from an image if image data is stored in a byte array?
In This Topic
Here is C#/VB.NET code that demonstrates how to read barcodes from image if image data are stored in a byte array:
/// <summary>
/// Reads barcodes from an image. Image data are stored in a byte array.
/// </summary>
/// <param name="reader">The barcode reader.</param>
/// <param name="width">The image width.</param>
/// <param name="height">The image height.</param>
/// <param name="stride">The image stride.</param>
/// <param name="format">The image format.</param>
/// <param name="pixelData">The image pixel data.</param>
public static Vintasoft.Barcode.IBarcodeInfo[] ReadBarcodes(
Vintasoft.Barcode.BarcodeReader reader,
int width,
int height,
int stride,
System.Drawing.Imaging.PixelFormat format,
byte[] pixelData)
{
// lock managed data
System.Runtime.InteropServices.GCHandle bitmapDataHandle =
System.Runtime.InteropServices.GCHandle.Alloc(pixelData, GCHandleType.Pinned);
if (!bitmapDataHandle.IsAllocated)
throw new InvalidOperationException();
// get IntPtr to managed data
IntPtr pixelDataPtr = System.Runtime.InteropServices.Marshal.UnsafeAddrOfPinnedArrayElement(pixelData, 0);
try
{
// read barcodes
return ReadBarcodes(reader, width, height, stride, format, pixelDataPtr);
}
finally
{
// free GCHandle
bitmapDataHandle.Free();
}
}
/// <summary>
/// Reads barcodes from an image. Image data are stored in an unmanaged memory.
/// </summary>
/// <param name="reader">The barcode reader.</param>
/// <param name="width">The image width.</param>
/// <param name="height">The image height.</param>
/// <param name="stride">The image stride.</param>
/// <param name="format">The image format.</param>
/// <param name="pixelDataScan0">The Scan0 pointer to an image pixel data.</param>
public static Vintasoft.Barcode.IBarcodeInfo[] ReadBarcodes(Vintasoft.Barcode.BarcodeReader reader, int width,
int height, int stride, System.Drawing.Imaging.PixelFormat format, IntPtr pixelDataScan0)
{
using (System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(width, height, stride, format, pixelDataScan0))
{
// read barcodes
return reader.ReadBarcodes(bitmap);
}
}
''' <summary>
''' Reads barcodes from an image. Image data are stored in a byte array.
''' </summary>
''' <param name="reader">The barcode reader.</param>
''' <param name="width">The image width.</param>
''' <param name="height">The image height.</param>
''' <param name="stride">The image stride.</param>
''' <param name="format">The image format.</param>
''' <param name="pixelData">The image pixel data.</param>
Public Shared Function ReadBarcodes(reader As Vintasoft.Barcode.BarcodeReader, width As Integer, _
height As Integer, stride As Integer, format As System.Drawing.Imaging.PixelFormat, _
pixelData As Byte()) As Vintasoft.Barcode.IBarcodeInfo()
' lock managed data
Dim bitmapDataHandle As System.Runtime.InteropServices.GCHandle = _
System.Runtime.InteropServices.GCHandle.Alloc(pixelData, GCHandleType.Pinned)
If Not bitmapDataHandle.IsAllocated Then
Throw New InvalidOperationException()
End If
' get IntPtr to managed data
Dim pixelDataPtr As IntPtr = System.Runtime.InteropServices.Marshal.UnsafeAddrOfPinnedArrayElement(pixelData, 0)
Try
' read barcodes
Return ReadBarcodes(reader, width, height, stride, format, pixelDataPtr)
Finally
' free GCHandle
bitmapDataHandle.Free()
End Try
End Function
''' <summary>
''' Reads barcodes from an image. Image data are stored in an unmanaged memory.
''' </summary>
''' <param name="reader">The barcode reader.</param>
''' <param name="width">The image width.</param>
''' <param name="height">The image height.</param>
''' <param name="stride">The image stride.</param>
''' <param name="format">The image format.</param>
''' <param name="pixelDataScan0">The Scan0 pointer to an image pixel data.</param>
Public Shared Function ReadBarcodes(reader As Vintasoft.Barcode.BarcodeReader, width As Integer, _
height As Integer, stride As Integer, format As System.Drawing.Imaging.PixelFormat, _
pixelDataScan0 As IntPtr) As Vintasoft.Barcode.IBarcodeInfo()
Using bitmap As New System.Drawing.Bitmap(width, height, stride, format, pixelDataScan0)
' read barcodes
Return reader.ReadBarcodes(bitmap)
End Using
End Function