本教程展示了如何使用LEADTOOLS多媒体SDK创建一个c# WinForms应用程序使188宝金博怎么下载用CaptureCtrl
与领先的视频调滤波器现场表演捕捉条形码的使用支持视频设备,像一个摄像头。
的领先的视频调滤波器是一个就地过滤器调用一个方法或一个用户每次回调接口接收一个框架。它可以用来访问图像数据进行处理和识别。
概述 | |
---|---|
总结 | 本教程介绍了如何实现现场捕获的条形码支持视频设备(例如,摄像头)在WinForms c#应用程序。 |
完成时间 | 30分钟 |
Visual Studio项目 | 下载教程项目(KB) 11日 |
平台 | WinForms c#应用程序 |
IDE | Visual Studio 2019 |
开发许可 | 下载LEADTOOLS |
熟悉基本的步骤创建一个项目的审查添加引用和设置一个许可证教程,在工作之前使用动态捕获检测和提取条形码——WinForms c#教程。
从项目中创建的副本添加引用和设置一个许可证教程。如果你没有这个项目,按照这个教程中的步骤创建它。
的引用需要取决于项目的目的。由当地DLL可以添加引用的引用。
本教程需要以下地方dll,位于< INSTALL_DIR > \ LEADTOOLS22 \ Bin \ Dotnet4 \ x64
:
Leadtools.dll
Leadtools.Barcode.dll
Leadtools.188宝金博怎么下载Multimedia.dll
本教程还需要添加一个引用COM库如下:
领先的视频调滤波器(2.0)图书馆
请注意
不同的SDK功能要求不同的引用。对于一个完整的列表,请参考188宝金博怎么下载多媒体文件必须包括与您的应用程序。需要哪些non-Multimedia dll的完整列表对于您的应用188宝金博怎么下载程序,请参考文件包含在您的应用程序。
许可解锁项目需要的特性。它必须设置工具箱函数被调用之前。详情,包括教程为不同的平台,请参考设置一个运行时许可。
有两种类型的运行时许可证:
请注意
添加LEADTOOLS NuGet和本地引用设置许可中会详细介绍添加引用和设置一个许可证教程。
与项目创建、添加引用,许可,可以开始编码。
在解决方案资源管理器,右键单击项目并选择添加- >新项目。选择类
选择和名称LMVMyUserCallback.cs
,然后单击添加。
的LMVMyUserCallback
类将使用框架接收到回调实例化一个过滤器RasterImage
对象与图像数据和使用BarcodeReader
实例发现任何条码图像中。如果发现,检测到BarcodeData
将被传递给事件处理程序的形式。
添加以下语句的使用
块的顶部LMVMyUserCallback
类。
使用系统;
使用Leadtools;
使用Leadtools.Barcode;
使用LMVCallbackLib;
添加以下代码来创建事件参数类,将用于通过检测BarcodeData
的形式。
公共类BarcodeFoundEventArgs: EventArgs
{
公共{BarcodeData数据得到;私人集;}
公共BarcodeFoundEventArgs (BarcodeData BarcodeData)
{
数据= barcodeData;
}
}
使用下面的代码LMVMyUserCallback
,这是一个自定义的界面ILMVUserCallback
过滤器接口。
公共类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
并选择视图代码显示后台代码的形式。添加以下语句的使用
块顶部。
使用系统;
使用先;
使用System.Windows.Forms;
使用Leadtools;
使用Leadtools.Barcode;
使用Leadtools.188宝金博怎么下载Multimedia;
使用LMVCallbackLib;
添加一个CaptureCtrl
控制,LMVCallback
回调,LMVMyUserCallback
自定义接口作为全局变量。
/ /添加这些全局变量
私人CaptureCtrl capture1;
私人LMVCallback LMVCallback;
私人LMVMyUserCallback LMVMyUserCallback;
boolIsCapturing =假;
添加CaptureCtrl
控制形式和调用InsertCallbackFilter ()
方法来插入lmvCallBack
过滤器。
公共Form1 ()
{
InitializeComponent ();
SetLicense ();
/ /添加捕获控制
capture1 =新CaptureCtrl {= DockStyle停靠。填补};
capture1.VideoDevices。选择= 1;
Controls.Add (capture1);
InsertCallbackFilter ();
}
创建一个新的命名方法InsertCallbackFilter ()
,这将被称为内部Form1 ()
如上所示。将下面的代码添加到插入lmvCallBack
过滤和分配一个OnBarcodeFound
事件处理程序时将触发条形码检测。
私人无效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
事件显示条码信息给用户。
私人无效LmvMyUserCallback_OnBarcodeFound (对象发送方,BarcodeFoundEventArgs e)
{
MessageBox.Show (e.data.Symbology.ToString () +“条形码。价值:“+ e.data.Value);
StopCapture ();
}
在解决方案资源管理器,双击Form1.cs
来显示它设计师。单击事件图标属性窗口。然后,双击负载事件创建一个事件处理程序,如果一个人不存在。
添加以下代码内部Form1_Load
事件处理程序。这将所有可用的捕获设备的名称添加到菜单在用户界面上。点击设备的名称将它捕获设备CaptureCtrl
控制。
私人无效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
控制。
私人无效videoDevices_click (对象发送方的EventArgs e)
{
ToolStripItem ti = (ToolStripItem)发送者;
capture1.EnterEdit ();
试一试
{
capture1.VideoDevices。选择= (ti.OwnerItem作为ToolStripMenuItem) .DropDownItems.IndexOf (ti);
}
抓(异常)
{
MessageBox.Show (“这视频捕捉设备不可用。确保没有其他程序使用设备或尝试改变显示分辨率”,“错误”);
}
}
开放Form1.cs
的设计师。在工具箱,双击MenuStrip将添加一个菜单形式。
添加两个菜单项的文本视频及元件和开始。离开新物品的名字videoDeviceToolStripMenuItem
和startCaptureToolStripMenuItem
。
双击开始菜单项来创建事件处理程序。添加以下代码:
私人无效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
。
私人无效StopCapture ()
{
startCaptureToolStripMenuItem。文本=“开始”;
capture1.StopCapture ();
IsCapturing =假;
}
按运行项目F5,或通过选择调试- >开始调试。
如果步骤正确之后,应用程序运行和形式出现。测试,遵循以下步骤:
点击视频设备获取下拉菜单,并选择您的首选设备。
点击开始弹出CaptureCtrl
预览。这个时候应用程序将开始收集设备的帧RasterImages
和运行条形码检测。
把条形码你想认识在镜头面前。
当你完成,选择停止停止捕获。
本教程展示了如何检测条形码的帧捕获视频设备使用CaptureCtrl
和BarcodeReader
类。