基于MFC海康威视摄像头Demo(含抓图显示|不含云台)

机器视觉学习专栏 专栏收录该内容
11 篇文章 5 订阅

这一阵一直在做海康威视的摄像头的调试工作,根据官方给的Demo,这里做了一些修改,删掉了云台的功能,添加了显示抓取图片的模块,这里话不多说,先上程序运行结果:



如果你需要的是这样的程序,那么你可以下载下来看一看,Demo是基于VS2013(X86 的SDK)开发的,加载了海康威视最新的SDK,为了防止SDK版本原因造成程序运行的问题,这里我也把我程序里使用的海康威视的SDK放出来,供大家参考:

程序下载地址

程序中使用的SDK的下载地址

程序中使用的库文件的下载地址(如果你仅仅需要导入库文件,下载这个就可以了)

好了,话不多说,具体的程序各位可以下载下来看,程序主体用的是海康威视的SDK中的MFC的Demo,然后这里仅仅说一下程序的配置以及后面添加的显示抓图的核心代码:

配置文件这里可以参考我之前的一篇博文:

海康威视网络摄像头SDK中Demo的运行(二次开发)

这里大家仅仅需要执行导入文件的那部分内容就可以了,至于官方Demo中的那个问题,我已经在上传的程序中进行了修正

然后附上抓图显示的核心代码:

void CRealPlayDlg::OnButtonCapture()
{
	if (m_lPlayHandle == -1)
	{
		MessageBox("请先选择一个通道播放");
		return;
	}
	UpdateData(TRUE);

	char PicName[256] = { 0 };

	int iPicType = m_coPicType.GetCurSel();
	if (0 == iPicType)  //bmp
	{
		CTime CurTime = CTime::GetCurrentTime();;
		sprintf(PicName, "%04d%02d%02d%02d%02d%02d_ch%02d.bmp", CurTime.GetYear(), CurTime.GetMonth(), CurTime.GetDay(), \
			CurTime.GetHour(), CurTime.GetMinute(), CurTime.GetSecond(), m_struDeviceInfo.struChanInfo[GetCurChanIndex()].iChanIndex);

		if (NET_DVR_CapturePicture(m_lPlayHandle, PicName))
		{
			MessageBox("抓图成功!");
			CString PIC = PicName;
			CImage  image;
			int cx, cy;
			CRect   rect;
			//根据路径载入图片    
			//char strPicPath[] = PicName;
			image.Load(PIC);
			//获取图片的宽 高  
			cx = image.GetWidth();
			cy = image.GetHeight();

			CWnd *pWnd = NULL;
			pWnd = GetDlgItem(IDC_IMG);//获取控件句柄  
			//获取Picture Control控件的客户区  
			pWnd->GetClientRect(&rect);

			CDC *pDc = NULL;
			pDc = pWnd->GetDC();//获取picture control的DC    
			//设置指定设备环境中的位图拉伸模式  
			int ModeOld = SetStretchBltMode(pDc->m_hDC, STRETCH_HALFTONE);
			//从源矩形中复制一个位图到目标矩形,按目标设备设置的模式进行图像的拉伸或压缩  
			image.StretchBlt(pDc->m_hDC, rect, SRCCOPY);
			SetStretchBltMode(pDc->m_hDC, ModeOld);
			ReleaseDC(pDc);
		}
	}
	else if (1 == iPicType)  //jgp
	{
		CTime CurTime = CTime::GetCurrentTime();;
		sprintf(PicName, "%04d%02d%02d%02d%02d%02d_ch%02d.jpg", CurTime.GetYear(), CurTime.GetMonth(), CurTime.GetDay(), \
			CurTime.GetHour(), CurTime.GetMinute(), CurTime.GetSecond(), m_struDeviceInfo.struChanInfo[GetCurChanIndex()].iChanIndex);

		//组建jpg结构
		NET_DVR_JPEGPARA JpgPara = { 0 };
		JpgPara.wPicSize = (WORD)m_coJpgSize.GetCurSel();
		JpgPara.wPicQuality = (WORD)m_coJpgQuality.GetCurSel();

		LONG iCurChan = m_struDeviceInfo.struChanInfo[GetCurChanIndex()].iChanIndex;

		if (NET_DVR_CaptureJPEGPicture(m_struDeviceInfo.lLoginID, iCurChan, &JpgPara, PicName))
		{
			MessageBox("抓图成功");
			CString PIC = PicName;
			CImage  image;
			int cx, cy;
			CRect   rect;
			//根据路径载入图片    
			//char strPicPath[] = PicName;
			image.Load(PIC);
			//获取图片的宽 高  
			cx = image.GetWidth();
			cy = image.GetHeight();

			CWnd *pWnd = NULL;
			pWnd = GetDlgItem(IDC_IMG);//获取控件句柄  
			//获取Picture Control控件的客户区  
			pWnd->GetClientRect(&rect);

			CDC *pDc = NULL;
			pDc = pWnd->GetDC();//获取picture control的DC    
			//设置指定设备环境中的位图拉伸模式  
			int ModeOld = SetStretchBltMode(pDc->m_hDC, STRETCH_HALFTONE);
			//从源矩形中复制一个位图到目标矩形,按目标设备设置的模式进行图像的拉伸或压缩  
			image.StretchBlt(pDc->m_hDC, rect, SRCCOPY);
			SetStretchBltMode(pDc->m_hDC, ModeOld);
			ReleaseDC(pDc);
		}
	}

	return;
}




  • 4
    点赞
  • 24
    评论
  • 16
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页

打赏

qq_15029743

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值