海康摄像头保存jpg图像 C#实现
时间: 2024-09-24 18:03:56 浏览: 24
在C#中,海康威视(Hikvision)摄像头抓取并保存JPG图片通常涉及到实时视频流处理和文件操作。首先,你需要一个支持访问摄像头的库,如AForge.NET或者OpenCV.NET,它们提供了处理视频流的功能。下面是一个简单的示例,展示了如何使用AForge.NET获取帧并保存为JPG:
```csharp
using AForge.Video;
using AForge.Video.DirectShow;
using System.Drawing;
using System.IO;
public void SaveCamImage(string cameraUrl, string outputFolder)
{
// 创建视频捕获器
VideoCaptureDevice videoSource = new VideoCaptureDevice(cameraUrl);
try
{
// 设置帧率
videoSource.NewFrame += Source_NewFrame;
// 开始捕获
videoSource.Start();
// 循环读取并保存图像
while (true)
{
Bitmap frameBitmap = null;
if (videoSource.IsRunning)
{
NewFrameEventArgs eventArgs = videoSource.NewFrameEvent;
frameBitmap = (Bitmap)eventArgs.Frame.Clone();
// 裁剪或缩放图像以适应需求
// frameBitmap = ResizeImage(frameBitmap, desiredWidth, desiredHeight);
// 保存到本地
string imagePath = Path.Combine(outputFolder, $"{DateTime.Now.Ticks}.jpg");
frameBitmap.Save(imagePath, ImageFormat.Jpeg);
}
else
{
break;
}
// 稍微延迟以减少CPU负担,这可以根据实际情况调整
System.Threading.Thread.Sleep(500); // 500毫秒
}
// 关闭设备
videoSource.Stop();
}
finally
{
// 清理资源
videoSource.Dispose();
}
}
// 辅助函数:图像大小调整
private Bitmap ResizeImage(Bitmap source, int width, int height)
{
// 使用高质量缩放算法
var ratioX = (double)width / source.Width;
var ratioY = (double)height / source.Height;
double ratio = Math.Min(ratioX, ratioY);
return source.Resize(new Size((int)(source.Width * ratio), (int)(source.Height * ratio)), Imaging.ResizeMode.HighQuality);
}
// 视频捕获器新帧事件处理器
void Source_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
// 这里就是处理新帧的地方,例如处理异常等
}
```
注意,这个例子假设你已经安装了AForge.NET库,并且摄像头URL正确无误。实际使用时可能需要处理网络连接、权限等问题。