前言
应为某些原因,不得不获取海康摄像头当前帧的图片,但是遇到了很多奇怪的事情,最终这版代码运行成功了,记录一下,希望也能帮助大伙少走弯路(海康门禁机、ai摄像头也知道一点、有人想知道的话也能留言一下,看到了我也会发相关的文章)
二、使用步骤
1.在海康官网下载相关sdk引入CHCNetSDK.cs
2.直接看下面代码
/// <summary>
/// 获取图片(需要先登入)
/// </summary>
/// <param name="Index">通道号(由1开始)</param>
/// <param name="Quality">图片质量系数 0-最好 1-较好 2-一般</param>
public System.Drawing.Bitmap GetBitmap(int Index, ushort Quality = 1)
{
byte[] bytes = new byte[1024 * 10000];//给10M缓冲区
var parameter = new CHCNetSDK.NET_DVR_JPEGPARA();
/*注意:当图像压缩分辨率为VGA时,支持0=CIF, 1=QCIF, 2=D1抓图,
当分辨率为3=UXGA(1600x1200), 4=SVGA(800x600), 5=HD720p(1280x720),6=VGA,7=XVGA, 8=HD900p
仅支持当前分辨率的抓图*/
/* 0=CIF, 1=QCIF, 2=D1 3=UXGA(1600x1200), 4=SVGA(800x600), 5=HD720p(1280x720),6=VGA*/
//parameter.wPicSize = 9;
/* 图片质量系数 0-最好 1-较好 2-一般 */
parameter.wPicQuality = Quality;
uint lpSizeReturned = 0;
var IsSuccess = CHCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(m_lUserID, Index, ref parameter, bytes, (uint)bytes.Length, ref lpSizeReturned);
if (!IsSuccess)
{
iLastErr = CHCNetSDK.NET_DVR_GetLastError();
OnExceptionEvent("NET_DVR_CapturePicture failed, error code= " + iLastErr);
return null;
}
var bitmap = new System.Drawing.Bitmap(new MemoryStream(bytes, 0, (int)lpSizeReturned));
//bitmap.Save(AppDomain.CurrentDomain.BaseDirectory + "Data\\111.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
return bitmap;
}
4.踩坑记录
- 如果iLastErr =43,那需要查看是不是byte[] bytes = new byte[1024 * 10000]给的缓冲区太小了