请给我完整代码,要求能显示usb摄像头的画面,同时还有一个拍照按钮,拍出来的照片上传到网页
时间: 2024-03-25 11:35:34 浏览: 45
以下是一个基于AForge.NET框架的完整示例代码,可以显示USB摄像头的画面,并提供一个拍照按钮,将拍摄的照片上传到指定的Web API:
```
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
using System.Windows.Forms;
using AForge.Video;
using AForge.Video.DirectShow;
namespace WebcamDemo
{
public partial class MainForm : Form
{
private VideoCaptureDevice _videoDevice;
private Bitmap _currentFrame;
public MainForm()
{
InitializeComponent();
}
private void MainForm_Load(object sender, EventArgs e)
{
// 获取可用的视频输入设备
var devices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
if (devices.Count == 0)
{
MessageBox.Show("未检测到摄像头设备!");
return;
}
// 实例化视频输入设备
_videoDevice = new VideoCaptureDevice(devices[0].MonikerString);
_videoDevice.NewFrame += VideoDevice_NewFrame;
_videoDevice.Start();
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
// 停止视频输入设备
if (_videoDevice != null && _videoDevice.IsRunning)
{
_videoDevice.SignalToStop();
_videoDevice.WaitForStop();
}
}
private void VideoDevice_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
// 将当前帧保存为Bitmap对象
_currentFrame = (Bitmap)eventArgs.Frame.Clone();
// 在PictureBox中显示当前帧
Invoke(new Action(() =>
{
pictureBox.Image = _currentFrame;
}));
}
private async void btnCapture_Click(object sender, EventArgs e)
{
// 拍照并保存为JPEG图像
var fileName = Path.Combine(Application.StartupPath, "photo.jpg");
_currentFrame.Save(fileName, ImageFormat.Jpeg);
// 调用Web API上传照片
var apiUrl = "http://your-web-api-url";
using (var client = new HttpClient())
{
using (var content = new MultipartFormDataContent())
{
using (var fileStream = File.OpenRead(fileName))
{
content.Add(new StreamContent(fileStream), "photo", "photo.jpg");
var response = await client.PostAsync(apiUrl, content);
if (response.IsSuccessStatusCode)
{
MessageBox.Show("照片上传成功!");
}
else
{
MessageBox.Show("照片上传失败:" + response.ReasonPhrase);
}
}
}
}
}
}
}
```
上面的代码中,PictureBox控件用于显示摄像头的实时画面,btnCapture按钮用于拍照并上传照片。请将代码中的“your-web-api-url”替换为你的Web API地址。
请注意,上传照片可能会涉及敏感信息,请确保你的Web API已经实现了必要的安全措施。