读取文件夹中的图片 依次显示

上周做的。版本: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。

代码:

  1. 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
  1. 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);

}

你可能感兴趣的:(读取文件夹中的图片 依次显示)