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

C# 中的网络摄像头:从网络摄像头捕捉图像的最简单方法

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2012年11月6日

CPOL

3分钟阅读

viewsIcon

141609

downloadIcon

15898

获取在 .NET 应用程序中集成从摄像头获取图像的解决方案。只需几行代码即可实现此功能。

摄像头是一种简单且经济高效的视频流图像获取方式,在商业世界中得到广泛应用。 以下是该设备的一些常见用途

  • 在医院中,拍摄患者的照片并将其与其病历文件一起上传到服务器。
  • 在银行中,代表使用网络摄像头扫描客户的身份证。

尽管摄像头在上述场景中非常有用,但从头开始开发一个用于图像获取、编辑、保存和上传的应用程序并非易事。

为了节省您的时间和精力,Dynamsoft 开发了 SDK Dynamic .NET TWAIN,它可以自行处理上述所有任务。 基于 .NET 框架,您只需几行 C# 代码即可开发自己的应用程序。

如果您想尝试这种组合,您可以从本文下载示例代码和 30 天免费试用版。

主要特点

  • 简单。Dynamic .NET TWAIN 专为 C# 和 VB.NET 设计,非常易于使用。 您只需几行代码即可完成工作。
  • 强大。Dynamic .NET TWAIN 以多种方式处理图像的获取、编辑、保存和上传。 您总能找到最适合您应用程序的解决方案。
  • 灵活。同时支持 WinForm 和 WPF。 除了摄像头之外,.NET 控件还兼容扫描仪和其他成像设备。

Procedure

步骤 1. 创建自己的 C# 摄像头应用程序

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

将 Dynamic .NET TWAIN 添加到工具箱:假设您已安装它,您可以浏览并添加 DynamicDotNetTWAIN.dll,位于 C:\Program Files (x86)\Dynamsoft\Dynamic .NET TWAIN 4.1 Trial。(如果您尚未在开发机器上安装它,您可以从 Dynamic .NET TWAIN 30 天免费试用版 下载试用版。)

将 DynamicDotNetTwain 拖放到您的窗体上以创建一个控件:

步骤 2. 添加视频容器和必要的按钮

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

步骤 3. 添加按钮代码

初始化

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.WebCamera;

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

选择一个摄像头并启动视频流

//Select a source
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);
    }
}

更改分辨率

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

以上是最简单的。 根据您的要求,除了分辨率之外,您还可以在实际获取图像之前调整亮度、对比度、清晰度等。

从视频流中获取图像

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

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

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

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

将获取的图像本地保存

//Save images
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 提供内部编码器。

删除图像 

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

上传图像

//Upload all images
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 服务器。

// SaveToFile.aspx.cs
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);
        }
    }
}

获取示例

可以从本文下载详细的示例代码。 同时,您也可以获得 Dynamic .NET TWAIN 的 30 天免费试用版

Dynamic .NET TWAIN 30 天免费试用版

如果您有任何问题,可以通过 support@dynamsoft.com 联系我们的支持团队。

© . All rights reserved.