上周做的。版本:VS2015,Halcon2012
效果:读取文件夹中的图片(文件夹的路径是从其他函数传过来的,图片格式可以自己设置,但是图片的名称一定要有规律,比如说我是Image_01这样),在MFC界面上的static text或picture control控件中依次显示,时间间隔自己设(我是0.5s)。
思路:刚开始想用C++直接写,调用一些MFC的函数之类的。网上查了特别久,大体是用定时器之类,我也忘了,总之是特别麻烦。折腾了好几个小时以后我放弃了,转念一想可以用Halcon,因为我在做的这个项目本来就要和Halcon联调,最终的程序一定会包含Halcon的库,不用白不用。
循环显示参照的是这个帖子: http://blog.csdn.net/machaoyu86/article/details/50470116。非常简洁。
直接导出cpp之后,配置一下我的MFC工程:http://www.cnblogs.com/tmdsleep/p/5485882.html。
代码:
- Halcon部分
Path:='D:/QQ/494890599/FileRecv/FPC/FPC/Image_'
dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
for f:=1 to 6 by 1
read_image(Image,Path+f$'.2i')
zoom_image_size(Image, ImageZoom, 512, 512, 'constant')
dev_display(ImageZoom)
endfor
- MFC部分
该包含的头文件还是要包含,还有命名空间,参照上面那个链接。
void CDlgImage::OnBnClickedButton1()
{
UpdateData();
// TODO: 在此添加控件通知处理程序代码
// Default settings used in HDevelop (can be omitted)
int ret = 0;
SetSystem("width", 512);
SetSystem("height", 512);
#if defined(_WIN32)
SetSystem("use_window_thread", "true");
#elif defined(__linux__)
XInitThreads();
#endif
#ifndef __APPLE__
// Local iconic variables
HObject ho_Image, ho_ImageZoom1;
// Local control variables
HTuple hv_Path, hv_f;
hv_Path = "D:/zqq2014/重要的文件夹/savedimage/Image_";
// hv_Path = SavedFileName; 如果有这样一个全局变量的话 就不用指定路径了
SetWindowAttr("background_color", "black");
CRect rtWindow;
HWND hImgWnd = GetDlgItem(IDC_STATICImage)->m_hWnd;
GetDlgItem(IDC_STATICImage)->GetClientRect(rtWindow);
HTuple m_htWindow;
OpenWindow(rtWindow.left, rtWindow.top, rtWindow.Width(), rtWindow.Height(), (Hlong)hImgWnd, "visible", "", &m_htWindow);
SetPart(m_htWindow, 0, 0, 512, 512);
//
HDevWindowStack::Push(m_htWindow);
for (hv_f = 1; hv_f <= 7; hv_f += 1)
{
ReadImage(&ho_Image, hv_Path + (hv_f.TupleString(".2i")));
ZoomImageSize(ho_Image, &ho_ImageZoom1, 512, 512, "constant");
if (HDevWindowStack::IsOpen())
ClearWindow(HDevWindowStack::GetActive());
if (HDevWindowStack::IsOpen())
DispObj(ho_ImageZoom1, m_htWindow);
WaitSeconds(0.5);
}
//action()替换完毕
#else
ret = apple_main(argc, argv);
#endif
UpdateData(FALSE);
}