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

这一阵一直在做海康威视的摄像头的调试工作,根据官方给的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;
}




全部评论

相关推荐

沉淀一会:**圣经 1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
一名愚蠢的人类:多少games小鬼留下了羡慕的泪水
投递荣耀等公司10个岗位
点赞 评论 收藏
分享
蚂蚁 基架java (n+6)*16 签字费若干
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务