Introduction
Barcode is undoubtedly a welcomed way to record and track
data. It can represent data including pricing, inventory, user
info and a variety of others. Because of this, barcode reading became one of
the essential features for an image processing application, for instance,
reading the enrollment info of a student, and tracking the book lending history
in a library. Similar usages can also be found in banks, hospitals and other
organizations and companies. In this article, I’ll introduce Dynamic .NET TWAIN
and its Barcode Reader SDK add-on provided by Dynamsoft, and show you how to
implement the above mentioned features in your .NET application. If you are
interested in customizing the functions, both the sample code and the 30-day
free trial of the SDK are provided.
Key Features
Here is a list of features available in the SDKs.
- Easy integration with your .NET application.
- Support comprehensive image sources, including webcams, scanners,
local folders and more.
- Support reading dozens of different barcode types and sub-types.
1-D barcode: Code
93, Code 128, EAN – 8, EAN -13, ITF (Interleaved 2 of 5), UPC-A, UPC-E,
Codabar, RSS-14
2-D barcode:
Aztec, DataMatrix, MaxiCode, QR Code, PDF417
- Great Recognition Accuracy. It is capable of reading barcode
symbols at any orientation and rotation angle.
- Support variety of channels to store the attracted barcode info
as well the barcode image itself. It includes database, web server, FTP site,
SharePoint and more.
Sample Code
In this section, I’ll share with you the sample code on how
to capture images from webcams and read barcode symbols embedded.
- Embed
Dynamic .NET TWAIN to your .NET application.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Dynamsoft.DotNet.TWAIN.Enums;
using Dynamsoft.DotNet.TWAIN.Enums.Barcode;
using Dynamsoft.DotNet.TWAIN.Barcode;
using Dynamsoft.DotNet.TWAIN.WebCamera;
- Capture
images embedding barcode symbols from a webcam.
The first step is to detect the webcams available on the
machine. The SelectSource
method enables you to get a list of drivers for
selection. The SDK also allows you to hardcode the selection and enforce the
end users to capture images from a required webcam.
Based on your requirements you can adjust the image
properties (resolution, pixel type, etc.), either to hardcode these properties
or set IfShowUI
to true to show the user interface of the driver, and provide
your customers the most flexibility.
private void btnSelectSource_Click(object sender, EventArgs e)
{
try
{
if (this.chkIfThrowException.Checked)
dynamicDotNetTwain1.IfThrowException = true;
else
dynamicDotNetTwain1.IfThrowException = false;
dynamicDotNetTwain1.SelectSource();
EnumSupportedDeviceType en = dynamicDotNetTwain1.SupportedDeviceType;
dynamicDotNetTwain1.IfShowUI = true;
dynamicDotNetTwain1.SetVideoContainer(this.pictureBox1);
dynamicDotNetTwain1.OpenSource();
int count = dynamicDotNetTwain1.ResolutionForCamList.Count;
for (int j = 0; j < count; j++)
{
string tempHeight = dynamicDotNetTwain1.ResolutionForCamList[j].Height.ToString();
string tempWidth = dynamicDotNetTwain1.ResolutionForCamList[j].Width.ToString();
string tempResolution = tempWidth + "X" + tempHeight;
comboResolution.Items.Insert(j, tempResolution);
comboResolution.SelectedIndex = 0;
}
}
catch (Exception exp)
{
MessageBox.Show(exp.Message);
}
}
Once everything is ready for image acquisition, you can call
EnableSource()
to capture images or video streams from the device. It’s always neat
to display the error messages when any exception occurs.
private void btnAcquireSource_Click(object sender, EventArgs e)
{
try
{
if (this.chkIfThrowException.Checked)
dynamicDotNetTwain1.IfThrowException = true;
else
dynamicDotNetTwain1.IfThrowException = false;
dynamicDotNetTwain1.EnableSource();
}
catch (Exception exp)
{
MessageBox.Show(exp.Message);
}
}
- Read
barcode info.
Now we are going to read the barcode info from the captured
images. The ReadBarcode
method enables you to do that. In the method,
barcodeFormat.All
means the application will read the embedded barcode symbol
and check with all the supported barcode types, including Code 93, Code 128,
EAN – 8, EAN -13, ITF (Interleaved 2 of 5), UPC-A, UPC-E, Codabar, RSS-14, Aztec,
DataMatrix, MaxiCode, QR Code and PDF417.
This is perfect if you are not sure what kind of barcode
you’ve already got. However, matching through the above list to determine the barcode
type significantly reduces the detection performance. Thus, if you are sure
that your customers are using, for instance, QR Code, it’s better to specify
the barcode format in your source code.
private void btnReadBarcode_Click(object sender, EventArgs e)
{
this.txtBarcode.Text = "";
Result[] aryResult = this.dynamicDotNetTwain1.ReadBarcode(this.dynamicDotNetTwain1.CurrentImageIndexInBuffer, BarcodeFormat.All);
StringBuilder strText = new StringBuilder();
strText.AppendFormat(aryResult.Length + " total barcode" + (aryResult.Length == 1 ? "" : "s") + " found.\r\n");
for (int i = 0; i < aryResult.Length; i++)
{
Result objResult = aryResult[i];
strText.AppendFormat(" Result " + (i + 1) + "\r\n");
strText.AppendFormat(" BarcodeFormat: " + objResult.BarcodeFormat.ToString() + "\r\n");
strText.AppendFormat(" Text read: " + objResult.Text + "\r\n");
}
this.txtBarcode.Text = strText.ToString();
}
The Barcode Reader SDK is also capable of detecting multiple
barcode symbols in one image. By adding Error Correcting Codes (ECC), barcodes
can be read even when they are partially damaged.
Get Samples
To try out the above mentioned
features by yourself, you can download the 30-day free trial of Dynamic .NET
TWAIN below.
Dynamic
.NET TWAIN 30-day Free Trial
Besides the sample code provided
in the article, you can also try out more samples at the following page:
Dynamic
.NET TWAIN Demo
If you have any questions, you
can contact our support team at nettwain@dynamsoft.com.