使用动态捕获检测和提取条形码——WinForms c#

本教程展示了如何使用LEADTOOLS多媒体SDK创建一个c# WinForms应用程序使188宝金博怎么下载用CaptureCtrl领先的视频调滤波器现场表演捕捉条形码的使用支持视频设备,像一个摄像头。

领先的视频调滤波器是一个就地过滤器调用一个方法或一个用户每次回调接口接收一个框架。它可以用来访问图像数据进行处理和识别。

概述
总结 本教程介绍了如何实现现场捕获的条形码支持视频设备(例如,摄像头)在WinForms c#应用程序。
完成时间 30分钟
Visual Studio项目 下载教程项目(KB) 11日
平台 WinForms c#应用程序
IDE Visual Studio 2019
开发许可 下载LEADTOOLS

所需的知识

熟悉基本的步骤创建一个项目的审查添加引用和设置一个许可证教程,在工作之前使用动态捕获检测和提取条形码——WinForms c#教程。

创建项目并添加LEADTOOLS引用

从项目中创建的副本添加引用和设置一个许可证教程。如果你没有这个项目,按照这个教程中的步骤创建它。

的引用需要取决于项目的目的。由当地DLL可以添加引用的引用。

本教程需要以下地方dll,位于< INSTALL_DIR > \ LEADTOOLS22 \ Bin \ Dotnet4 \ x64:

本教程还需要添加一个引用COM库如下:

请注意

不同的SDK功能要求不同的引用。对于一个完整的列表,请参考188宝金博怎么下载多媒体文件必须包括与您的应用程序。需要哪些non-Multimedia dll的完整列表对于您的应用188宝金博怎么下载程序,请参考文件包含在您的应用程序

设置许可文件

许可解锁项目需要的特性。它必须设置工具箱函数被调用之前。详情,包括教程为不同的平台,请参考设置一个运行时许可

有两种类型的运行时许可证:

请注意

添加LEADTOOLS NuGet和本地引用设置许可中会详细介绍添加引用和设置一个许可证教程。

创建回调滤波器接口实现

与项目创建、添加引用,许可,可以开始编码。

解决方案资源管理器,右键单击项目并选择添加- >新项目。选择选择和名称LMVMyUserCallback.cs,然后单击添加

LMVMyUserCallback类将使用框架接收到回调实例化一个过滤器RasterImage对象与图像数据和使用BarcodeReader实例发现任何条码图像中。如果发现,检测到BarcodeData将被传递给事件处理程序的形式。

添加以下语句的使用块的顶部LMVMyUserCallback类。

c#
使用系统;使用Leadtools;使用Leadtools.Barcode;使用LMVCallbackLib;

添加以下代码来创建事件参数类,将用于通过检测BarcodeData的形式。

c#
公共BarcodeFoundEventArgs: EventArgs{公共{BarcodeData数据得到;私人;}公共BarcodeFoundEventArgs (BarcodeData BarcodeData){数据= barcodeData;}}

使用下面的代码LMVMyUserCallback,这是一个自定义的界面ILMVUserCallback过滤器接口。

c#
公共LMVMyUserCallback: ILMVUserCallback{/ /事件的形式用于当一个条码公共委托无效BarcodeFoundHandler (对象发送方,BarcodeFoundEventArgs e);公共事件BarcodeFoundHandler OnBarcodeFound;私人BarcodeEngine引擎=BarcodeEngine ();私人RasterImage img =;公共LMVMyUserCallback (){engine.Reader。ImageType = BarcodeImageType.Picture;}公共无效ReceiveProc (intpData,intlWidth,intlHeight,intlBitCount,intlSize,intbTopDown){试一试{/ /使用框架创建新的RasterImage对象属性RasterViewPerspective viewPerspective;如果(bTopDown = = 1)viewPerspective = RasterViewPerspective.TopLeft;其他的viewPerspective = RasterViewPerspective.BottomLeft;如果(img = =| | img.IsDisposed){img =RasterImage (RasterMemoryFlags.User,lWidth,lHeight,lBitCount,RasterByteOrder.Bgr,viewPerspective,,IntPtr.Zero,0);}/ /复制图像数据的回调img.SetUserData (IntPtr (pData) lSize);/ /检测和读条码图像vardata = engine.Reader。ReadBarcode (img LeadRect。空,BarcodeSymbology.Unknown);/ /当发现,将数据传递给事件处理程序如果(数据! =){varbarcodeFoundEvent =BarcodeFoundEventArgs(数据);OnBarcodeFound (,barcodeFoundEvent);}}(异常交货){MessageBox.Show (ex.Message);}最后{如果(img ! =)img.Dispose ();}}}

创建并初始化捕获控制

解决方案资源管理器,右键单击Form1.cs并选择视图代码显示后台代码的形式。添加以下语句的使用块顶部。

c#
使用系统;使用先;使用System.Windows.Forms;使用Leadtools;使用Leadtools.Barcode;使用Leadtools.188宝金博怎么下载Multimedia;使用LMVCallbackLib;

添加一个CaptureCtrl控制,LMVCallback回调,LMVMyUserCallback自定义接口作为全局变量。

c#
/ /添加这些全局变量私人CaptureCtrl capture1;私人LMVCallback LMVCallback;私人LMVMyUserCallback LMVMyUserCallback;boolIsCapturing =;

添加CaptureCtrl控制形式和调用InsertCallbackFilter ()方法来插入lmvCallBack过滤器。

c#
公共Form1 (){InitializeComponent ();SetLicense ();/ /添加捕获控制capture1 =CaptureCtrl {= DockStyle停靠。填补};capture1.VideoDevices。选择= 1;Controls.Add (capture1);InsertCallbackFilter ();}

创建一个新的命名方法InsertCallbackFilter (),这将被称为内部Form1 ()如上所示。将下面的代码添加到插入lmvCallBack过滤和分配一个OnBarcodeFound事件处理程序时将触发条形码检测。

c#
私人无效InsertCallbackFilter (){试一试{处理器videoCallback = capture1.VideoProcessors.Callback;capture1.SelectedVideoProcessors.Add (videoCallback);lmvCallback = (lmvCallback) capture1.GetSubObject (CaptureObject.SelVideoProcessor);lmvMyUserCallback =LMVMyUserCallback ();lmvCallback。ReceiveProcObj = lmvMyUserCallback;lmvMyUserCallback。OnBarcodeFound+= LmvMyUserCallback_OnBarcodeFound;}(异常交货){MessageBox.Show (ex.Message);}}

将下面的代码添加到OnBarcodeFound事件显示条码信息给用户。

c#
私人无效LmvMyUserCallback_OnBarcodeFound (对象发送方,BarcodeFoundEventArgs e){MessageBox.Show (e.data.Symbology.ToString () +“条形码。价值:“+ e.data.Value);StopCapture ();}

解决方案资源管理器,双击Form1.cs来显示它设计师。单击事件图标属性窗口。然后,双击负载事件创建一个事件处理程序,如果一个人不存在。

创建一个加载表单的事件。

添加以下代码内部Form1_Load事件处理程序。这将所有可用的捕获设备的名称添加到菜单在用户界面上。点击设备的名称将它捕获设备CaptureCtrl控制。

c#
私人无效Form1_Load (对象发送方的EventArgs e){/ /设置捕获设备菜单foreach(设备开发capture1.VideoDevices){ToolStripItem mi =ToolStripMenuItem ();mi.Text = dev.FriendlyName;mi.Click + = videoDevices_click;videoDeviceToolStripMenuItem.DropDownItems.Add (mi);}}

将下面的代码添加到videoDevices_click事件设置选择捕获设备CaptureCtrl控制。

c#
私人无效videoDevices_click (对象发送方的EventArgs e){ToolStripItem ti = (ToolStripItem)发送者;capture1.EnterEdit ();试一试{capture1.VideoDevices。选择= (ti.OwnerItem作为ToolStripMenuItem) .DropDownItems.IndexOf (ti);}(异常){MessageBox.Show (“这视频捕捉设备不可用。确保没有其他程序使用设备或尝试改变显示分辨率”,“错误”);}}

创建用户界面

开放Form1.cs的设计师。在工具箱,双击MenuStrip将添加一个菜单形式。

添加一个MenuStrip形式。

添加两个菜单项的文本视频及元件开始。离开新物品的名字videoDeviceToolStripMenuItemstartCaptureToolStripMenuItem

双击开始菜单项来创建事件处理程序。添加以下代码:

c#
私人无效startToolStripMenuItem_Click (对象发送方的EventArgs e){如果(IsCapturing !){startCaptureToolStripMenuItem。文本=“停止”;capture1。PreviewSource = CapturePreview.Video;capture1。PreviewTap = CapturePreviewTap.Processors;capture1。预览=真正的;capture1.ReadyCapture (CaptureMode.Video);IsCapturing =真正的;}其他的StopCapture ();}

点击开始将配置CaptureCtrl控制,生成预览视频设备。这将允许传递到图像帧lmvCallBack过滤器用于条形码检测。

在创建一个新的方法Form1类命名StopCapture ()。该方法将被称为内startToolStripMenuItem_Click事件处理程序如上所示。添加下面的代码内StopCapture ()方法阻止CaptureCtrl

c#
私人无效StopCapture (){startCaptureToolStripMenuItem。文本=“开始”;capture1.StopCapture ();IsCapturing =;}

运行该项目

按运行项目F5,或通过选择调试- >开始调试

如果步骤正确之后,应用程序运行和形式出现。测试,遵循以下步骤:

  1. 点击视频设备获取下拉菜单,并选择您的首选设备。

  2. 点击开始弹出CaptureCtrl预览。这个时候应用程序将开始收集设备的帧RasterImages和运行条形码检测。

  3. 把条形码你想认识在镜头面前。

  4. 当你完成,选择停止停止捕获。

    检测和提取条码使用动态捕捉

总结

本教程展示了如何检测条形码的帧捕获视频设备使用CaptureCtrlBarcodeReader类。

另请参阅

net
iOS