65.9K
CodeProject 正在变化。 阅读更多。
Home

在 WinForm/WPF 应用程序中使用网络摄像头扫描条形码

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2012年11月5日

CPOL

3分钟阅读

viewsIcon

72219

downloadIcon

5974

将 Dynamic .NET TWAIN 嵌入到您的 .NET 应用程序中。 从您的网络摄像头捕获图像并读取条形码信息。

引言

条形码无疑是一种记录和跟踪数据的受欢迎的方式。 它可以表示包括价格、库存、用户信息等各种数据。 因此,条形码读取成为了图像处理应用程序的基本功能之一,例如,读取学生的入学信息,跟踪图书馆的图书借阅历史。 类似的用途也可以在银行、医院和其他组织和公司中找到。 在本文中,我将介绍 Dynamic .NET TWAIN 及其由 Dynamsoft 提供的 条形码阅读器 SDK 插件,并向您展示如何在您的 .NET 应用程序中实现上述功能。 如果您有兴趣自定义这些功能,我们将提供示例代码和 SDK 的 30 天免费试用版。

主要特点

以下是 SDK 中可用功能的列表。

  • 轻松与您的 .NET 应用程序集成。
  • 支持各种图像源,包括网络摄像头、扫描仪、本地文件夹等。
  • 支持读取数十种不同的条形码类型和子类型。
    一维条形码: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、PDF417
  • 出色的识别准确性。 能够以任何方向和旋转角度读取条形码符号。
  • 支持多种渠道存储捕获的条形码信息及其条形码图像。 包括数据库、Web 服务器、FTP 站点、SharePoint 等。

示例代码

在本节中,我将与您分享关于如何从网络摄像头捕获图像并读取嵌入的条形码符号的示例代码。

  1. 将 Dynamic .NET TWAIN 嵌入到您的 .NET 应用程序中。
    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;
  2. 从网络摄像头捕获嵌入条形码符号的图像。

第一步是检测机器上可用的网络摄像头。 SelectSource 方法使您可以获取驱动程序列表以供选择。 SDK 还允许您对选择进行硬编码,并强制最终用户从所需的网络摄像头捕获图像。

根据您的要求,您可以调整图像属性(分辨率、像素类型等),可以对这些属性进行硬编码,或者将 IfShowUI 设置为 true 以显示驱动程序的界面,并为您的客户提供最大的灵活性。

        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);

            }
        }

一旦为图像采集做好了一切准备,您就可以调用 EnableSource() 从设备捕获图像或视频流。 出现任何异常时显示错误消息总是很方便的。

        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);
            }
        }
  1. 读取条形码信息。

现在我们将从捕获的图像中读取条形码信息。 ReadBarcode 方法使您能够做到这一点。 在该方法中,barcodeFormat.All 意味着应用程序将读取嵌入的条形码符号并检查所有支持的条形码类型,包括 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 和 PDF417。

如果您不确定您已经拥有什么样的条形码,这是完美的选择。 然而,通过上述列表进行匹配来确定条形码类型会显著降低检测性能。 因此,如果您确定您的客户正在使用例如 QR 码,最好在您的源代码中指定条形码格式。

        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();
        }

条形码阅读器 SDK 还可以检测单个图像中的多个条形码符号。 通过添加纠错码 (ECC),即使条形码部分损坏,也可以读取它们。

获取示例

要亲自试用上述功能,您可以下载 Dynamic .NET TWAIN 的 30 天免费试用版。
Dynamic .NET TWAIN 30 天免费试用

除了文章中提供的示例代码外,您还可以在以下页面上尝试更多示例
Dynamic .NET TWAIN 演示

如果您有任何问题,可以联系我们的支持团队,邮箱地址是 nettwain@dynamsoft.com

© . All rights reserved.