1. 注册 halcon 窗口:
CRect rt;
GetDlgItem(IDC_IMAGESHOW)->GetClientRect(&rt);
SetCheck("~father");
OpenWindow(0,0,rt.Width(),rt.Height(),(Hlong)GetDlgItem(IDC_IMAGESHOW)-
>GetSafeHwnd(),"visible","",&m_htWindowHandle);
SetCheck("father");
SetPart(m_htWindowHandle,0,0,(Hlong)m_pCamera.m_nImageHeight,(Hlong)m_pCamera.m_n
ImageWidth);
2. 在回调里进行 bayer 格式转换得到图像,并且 发送 mfc 自定义消息:
::PostMessage(pDlg->GetSafeHwnd(), WM_DISP, NULL,NULL);
3. 在消息函数里面,将图像转换为 halcon 的图像格式 Hobject,并进行显示:
{
try
HObject ho_Image;
if(m_pCamera.m_bIsColor==true)
{
//int width = m_pCamera.m_nImageWidth;
//int height = m_pCamera.m_nImageWid
GenImageInterleaved(&ho_Image, (Hlong)m_pCamera.m_pImgBuf, "bgr",
(int)m_pCamera.m_nImageWidth, (int)m_pCamera.m_nImageHeight, 0,
"byte", (int)m_pCamera.m_nImageWidth,
(int)m_pCamera.m_nImageHeight, 0, 0, -1, 0);
}
else
{
(int)m_pCamera.m_nImageHeight,(Hlong)m_pCamera.m_pImgBuf);
GenImage1(&ho_Image, "byte", (int)m_pCamera.m_nImageWidth,
}
HObject
ho_Image1, ho_GrayImage, ho_region;
Rgb1ToGray(ho_Image, &ho_GrayImage);
Threshold(ho_GrayImage, &ho_region, 125, 255);
DispObj(ho_GrayImage, m_htWindowHandle);
}
catch(HException& HDevExpDefaultException)
{
HTuple hv_Exception,hv_ErrMsg;
HDevExpDefaultException.ToHTuple(&hv_Exception);
}
HException::GetExceptionData(hv_Exception,"error_msg",&hv_ErrMsg);
TRACE("%s\n\r",(CString)hv_ErrMsg.S());
//
AfxMessageBox((CString)hv_ErrMsg.S());
我不懂为什么这么多人喜欢用 HImage,我没用过。我把相机 buffer 转成 halcon 图像对象是这
样处理的:
HOperatorSet.GenEmptyObj(out ImageTemp);
ImageTemp.Dispose();
//把图像数据生成 halcon 图像
//pData:图像数据地址;
if (!m_Cam.m_bIsColor)
{
//如果是黑白相机,
HOperatorSet.GenImage1(out ImageTemp, "byte", m_Cam.m_nImageWidth,
m_Cam.m_nImageHeight, (HTuple)pData);
}
else
//如果相机是彩色,需要把 pixel format 改成 RGB8Packed 并保存
{
HOperatorSet.GenImageInterleaved(out ImageTemp, (HTuple)pData, "rgb",
m_Cam.m_nImageWidth,m_Cam.m_nImageHeight, 0, "byte",0, 0, 0, 0, 8, 0);
}