动态.NET TWAIN:简化摄像头图像获取与处理

在商业领域,摄像头图像获取和处理的需求日益增长。例如,在医院中,可以拍摄患者的照片并将其与医疗档案一起上传到服务器;在银行中,工作人员可以使用网络摄像头扫描客户的身份证。尽管网络摄像头在上述场景中非常有用,但从头开始开发一个图像获取、编辑、保存和上传的应用程序并非易事。为了节省您的时间和精力,Dynamsoft开发了Dynamic .NET TWAIN SDK,它可以自动处理上述任务。基于.NET框架,您可以使用C#编写自己的应用程序,仅需几行代码。

主要特点

简单。Dynamic .NET TWAIN专为C#和VB.NET设计,非常容易使用。您可以通过几行代码完成工作。

强大。Dynamic .NET TWAIN负责图像获取、编辑、保存和上传,有多种方式可供选择。您总能找到最适合您应用程序的解决方案。

灵活。支持WinForm和WPF。除了网络摄像头外,.NET控件还兼容扫描仪和其他成像设备。

操作步骤

C#中创建一个简单的Forms应用程序:

public partial class Form1 : Form { public Form1() { InitializeComponent(); dynamicDotNetTwain1.IfShowUI = true; dynamicDotNetTwain1.SupportedDeviceType = EnumSupportedDeviceType.SDT_WEBCAM; dynamicDotNetTwain1.IfThrowException = true; } }

将Dynamic .NET TWAIN添加到工具箱:

假设您已经安装了它,您可以浏览并添加位于C:\Program Files (x86)\Dynamsoft\Dynamic .NET TWAIN 4.1 Trial的DynamicDotNetTWAIN.dll。(如果您还没有在开发机器上安装它,可以从Dynamic .NET TWAIN 30-Day Free Trial下载试用版。)

将DynamicDotNetTwain拖放到表单上以创建控件:

向表单添加一个picturebox作为视频容器。添加用于选择摄像头、获取图像、保存/上传图像和删除图像的按钮。创建一个下拉框以保存分辨率。根据您的要求,可以添加更多功能。

初始化:

private void btnSelect_Click(object sender, EventArgs e) { try { dynamicDotNetTwain1.SelectSource(); dynamicDotNetTwain1.SetVideoContainer(pictureBox1); dynamicDotNetTwain1.OpenSource(); // List the source name and resolutions txtSourceName.Text = dynamicDotNetTwain1.CurrentSourceName; 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); } }

选择摄像头并开始视频流:

选择一个源:

更改分辨率:

private void comboResolution_SelectedIndexChanged(object sender, EventArgs e) { dynamicDotNetTwain1.ResolutionForCam = dynamicDotNetTwain1.ResolutionForCamList[comboResolution.SelectedIndex]; }

根据要求,除了分辨率外,您还可以在实际获取图像之前调整亮度、对比度、锐度等。

从视频流中获取图像:

private void btnAcquire_Click(object sender, EventArgs e) { try { dynamicDotNetTwain1.EnableSource(); } catch (Exception exp) { MessageBox.Show(exp.Message); } }

使用Dynamic .NET TWAIN的内置图像编辑器编辑图像:

private void btnEdit_Click(object sender, EventArgs e) { dynamicDotNetTwain1.ShowImageEditor(); }

您可以根据需要添加更多编辑功能。

将获取的图像保存在本地:

private void btnSave_Click(object sender, EventArgs e) { SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.FileName = "test.pdf"; saveFileDialog.Filter = "pdf files (*.pdf)|*.pdf|All files (*.*)|*.*"; if (saveFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { dynamicDotNetTwain1.SaveAllAsPDF(saveFileDialog.FileName); } }

Dynamic .NET TWAIN提供了BMP、JPEG、PNG、(多页)TIF和(多页)PDF的内部编码器。

删除图像:

private void btnRemove_Click(object sender, EventArgs e) { dynamicDotNetTwain1.RemoveAllImages(); }

上传图像:

private void btnUpload_Click(object sender, EventArgs e) { string serverName = "localhost"; // please update the server name accordingly string actionPagePath = "/UseWebcamInCSharp/SaveToFile.aspx"; dynamicDotNetTwain1.HTTPUploadAllThroughPostAsPDF(serverName, actionPagePath, "test.pdf"); }

有时,您可能希望将扫描的图像上传到您的系统,包括Web服务器、SQL Server、Oracle、SharePoint等。一些需求可能包括将图像和额外信息上传到不同的地方,例如,将图像上传到Web服务器,将相应的图像ID和评论上传到SQL Server数据库。这些可以通过Dynamic .NET TWAIN轻松实现。在本示例中,提供了最简单的一个。扫描的图像将作为多页PDF上传到本地Web服务器:

在服务器端,您需要添加一个操作页面来接收和处理(保存)上传的文件。如果您正在尝试从本文下载的示例代码,可以将UseWebcamInCSharp_IIS文件夹复制到您的Web服务器。

using System; using System.IO; using System.Collections.Generic; using System.Web; public partial class SaveToFile : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { String strExc = ""; try { HttpFileCollection files = HttpContext.Current.Request.Files; HttpPostedFile uploadfile = files["RemoteFile"]; uploadfile.SaveAs(System.Web.HttpContext.Current.Request.MapPath(".") + "/ImageScanned/" + uploadfile.FileName); } catch (Exception exc) { strExc = exc.ToString(); String strField1Path = HttpContext.Current.Request.MapPath(".") + "/" + "log.txt"; if (strField1Path != null) { StreamWriter sw1 = File.CreateText(strField1Path); sw1.Write(strExc); sw1.Close(); } Response.Write(strExc); } } }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485