MFC联合HAlcon双相机单帧采集图片

这里写自定义目录标题


问题:程序运行时首次采集都能行,再次点击CCD1,CCD2采集按钮,MFC界面的Picture Contrl控件直接黑屏了,但是我在if(CCD1==0){ }内增加了状态显示程序,显示已经进入到了if(){}语句内,但是图像就是显示不了,不清楚为什么?有木有大神知道原因
//CCD1采集按钮的程序
void CCounterPointsDlg::OnBnClickedCcd1PictureGet()
{
// TODO: 在此添加控件通知处理程序代码

//CCD1相机打开
OpenFramegrabber("DahengCAM", 1, 1, 0, 0, 0, 0, "interlaced", 8, "gray", -1, "false",
	"HV-13xx", "1", 1, -1, &hv_AcqHandle_CCD1);

//CCD1相机准备采集
GrabImageStart(hv_AcqHandle_CCD1, -1);
GrabImageAsync(&ho_Image_UP, hv_AcqHandle_CCD1, -1);

GetImageSize(ho_Image_UP, &hv_Width_CCD1, &hv_Height_CCD1);

if (HDevWindowStack::IsOpen())
	SetPart(HDevWindowStack::GetActive(), 0, 0, hv_Height_CCD1 - 1, hv_Width_CCD1 - 1);
//CCD1显示窗口大小设置
HTuple hv_Expection;
//CCD1显示窗口不为空,则关闭窗口
if (m_CCD1 != 0)
{
	HDevWindowStack::SetActive(hv_WindowHandle);
	ClearWindow(HDevWindowStack::GetActive());
	m_CCD1 = FALSE;
	CString str;
	str.Format(_T("CCD1窗口已清空"), str);
	m_status.SetPaneText(0, str, TRUE);
}
//CCD1显示窗口为空,则打开窗口显示
if (m_CCD1 == 0)
{
	m_CCD1 = TRUE;
	HWND CCD1_hwndl;
	CRect Rect_CCD1;
	GetDlgItem(IDC_CCD1_Picture_Show)->GetWindowRect(&Rect_CCD1);
	CCD1_hwndl = GetDlgItem(IDC_CCD1_Picture_Show)->m_hWnd;
	Hlong lWWindow_CCD1_ID = (Hlong)CCD1_hwndl;
	Width = Rect_CCD1.Width();
	Height = Rect_CCD1.Height();

	OpenWindow(0, 0, Width, Height, lWWindow_CCD1_ID, "", "", &hv_WindowHandle);
	HDevWindowStack::Push(hv_WindowHandle);
	HDevWindowStack::SetActive(hv_WindowHandle);
	
	//if (HDevWindowStack::IsOpen())
		DispObj(ho_Image_UP, hv_WindowHandle);
	UpdateData(TRUE);
	CString str;
	str.Format(_T("CCD1窗口已显示"), str);
	m_status.SetPaneText(0, str, TRUE);
}
//关闭相机CCD1句柄
CloseFramegrabber(hv_AcqHandle_CCD1);

//使得匹配按键可用
::EnableWindow(GetDlgItem(IDC_Picture_Match)->GetSafeHwnd(), TRUE);

}
//CCD2采集按钮的程序
void CCounterPointsDlg::OnBnClickedCcd2PictureGet()
{
// TODO: 在此添加控件通知处理程序代码

//CCD2相机打开
OpenFramegrabber("DahengCAM", 1, 1, 0, 0, 0, 0, "interlaced", 8, "gray", -1, "false",
	"HV-13xx", "2", 1, -1, &hv_AcqHandle_CCD2);
//CCD2相机准备采集
GrabImageStart(hv_AcqHandle_CCD2, -1);
GrabImageAsync(&ho_Image_DOWN, hv_AcqHandle_CCD2, -1);
GetImageSize(ho_Image_DOWN, &hv_Width_CCD2, &hv_Height_CCD2);

if (HDevWindowStack::IsOpen())
	SetPart(HDevWindowStack::GetActive(), 0, 0, hv_Height_CCD2 - 1, hv_Width_CCD2 - 1);
//CCD1显示窗口大小设置
//CCD1显示窗口不为空,则关闭窗口
if (m_CCD2 != 0)
{
	HDevWindowStack::SetActive(hv_WindowHandle1);
	ClearWindow(HDevWindowStack::GetActive());
	m_CCD2 = FALSE;
	CString str;
	str.Format(_T("CCD2窗口已清空"), str);
	m_status.SetPaneText(0, str, TRUE);
}
//CCD1显示窗口为空,则打开窗口显示
if (m_CCD2 == 0)
{
	m_CCD2 = TRUE;
	HWND CCD2_hwndl;
	CRect Rect_CCD2;
	GetDlgItem(IDC_CCD2_Picture_Show)->GetWindowRect(&Rect_CCD2);
	CCD2_hwndl = GetDlgItem(IDC_CCD2_Picture_Show)->m_hWnd;
	Hlong lWWindow_CCD2_ID = (Hlong)CCD2_hwndl;
	Width = Rect_CCD2.Width();
	Height = Rect_CCD2.Height();
	
	OpenWindow(0, 0, Width, Height, lWWindow_CCD2_ID, "", "", &hv_WindowHandle1);
	HDevWindowStack::Push(hv_WindowHandle1);
	HDevWindowStack::SetActive(hv_WindowHandle1);
	//if (HDevWindowStack::IsOpen())
		DispObj(ho_Image_DOWN, hv_WindowHandle1);
	UpdateData(TRUE);
	CString str;
	str.Format(_T("CCD2窗口显示"), str);
	m_status.SetPaneText(0, str, TRUE);
}
//关闭相机CCD2句柄
CloseFramegrabber(hv_AcqHandle_CCD2);

}
附上我用MFC做的UI界面,刚学MFC没多久,让各位大神见笑了
MFC联合HAlcon双相机单帧采集图片_第1张图片

你可能感兴趣的:(MFC联合HAlcon双相机单帧采集图片)