使用Halcon库,在MFC界面打开显示图片,可实现多次打开不同图片

简介: 使用Halcon库,在MFC界面打开显示图片,可实现多次打开不同图片

网上有很多博客介绍使用Halcon库,在MFC界面打开显示图片。图片显示在静态图片控件,STATIC PICTURE CTRL。


但是网上的案例都没有实现多次点击"打开"按钮,使得可以在PIC控件里显示不同的图片;即,打开一张图片可以显示在PIC控件,再打开第二张图片时,PIC控件没有刷新,还是显示第一张图。


这里笔者分享一下自己的方法,我和他们的不同之处在于实现了C++异常处理和连续打开并显示不同的图片:

//构造文件对话框对象
  CFileDialog readfileDlg(TRUE, NULL, NULL, 0, _T("图像文件(*.bmp)|*.bmp||"), this);
  if (IDOK == readfileDlg.DoModal())
  {
    m_strPathTemplateOk = readfileDlg.GetPathName();
    //声明标识,函数T2A和W2A均支持ATL和MFC中的字符
  USES_CONVERSION;
  std::string s(W2A(m_strPathTemplateOk));
  const char *filename = s.c_str();
  try
  {
    ReadImage(&m_ImageOK, filename);//文件如果不存在会抛出异常
  }
  catch (HException* e)//很奇怪,这里捕获不到
  {
    UNUSED_PARAMETER(e);
    return FALSE;
  }
  catch (...)//能处理任何异常的代码
  {
    return FALSE;
  }
  if (!m_ImageOK.IsInitialized())
  {
    return FALSE;
  }
  HTuple width, height;
  GetImageSize(m_ImageOK, &width, &height);
  CRect rect;
  HWND hImgWnd = GetDlgItem(IDC_STATIC_PIC_TEMPLATE)->m_hWnd;
  GetDlgItem(IDC_STATIC_PIC_TEMPLATE)->GetClientRect(&rect);
  if (HDevWindowStack::IsOpen())
  {
    close_window(HDevWindowStack::Pop());//这段话很重要,否则无法连续打开图像显示,仅仅固定显示第一幅图
  }
  HTuple hv_WindowHandle;
  OpenWindow(rect.left, rect.top, rect.Width(), rect.Height(), (Hlong)hImgWnd, "visible", "", &hv_WindowHandle);
  HDevWindowStack::Push(hv_WindowHandle);//这段话很重要,否则无法连续打开图像显示,仅仅固定显示第一幅图
  SetPart(hv_WindowHandle, 0, 0, height, width);//设置显示的图像范围
  DispObj(m_ImageOK, hv_WindowHandle);
  }


不需要依赖动态库文件hcanvas.dll,只需要halcon.dll和halconcpp.dll这两个即可。




---


姊妹篇:


《使用Halcon库,在Qt界面打开显示图片,可实现多次打开不同图片》


https://libaineu2004.blog.csdn.net/article/details/113925024


相关文章
C#WPF 图片在显示时没有问题,但在运行时图片显示不出来的解决
选中项目,点击右上角的显示全部文件按钮,会将默认隐藏的文件显示出来,选中所需图片,右键,添加到项目,然后选择图片查看属性,生成操作选择resource。完毕。本人目前的解决方案。
515 41
C#WPF 图片在显示时没有问题,但在运行时图片显示不出来的解决
|
8月前
在MFC上基于halcon库的打开图片方法实现多次打开不同的图片
在MFC上基于halcon库的打开图片方法实现多次打开不同的图片
46 0
Vs+Qt 界面添加背景图的两种方式(非常实用)
Vs+Qt 界面添加背景图的两种方式(非常实用)
EasyX添加图片+鼠标操作
EasyX添加图片+鼠标操作
213 0
|
Python
PIL(pillow)简单使用:新建画布、添加文字、画矩形、裁剪、粘贴
PIL(pillow)简单使用:新建画布、添加文字、画矩形、裁剪、粘贴
421 0
PIL(pillow)简单使用:新建画布、添加文字、画矩形、裁剪、粘贴
|
数据安全/隐私保护
Qt-网易云音乐界面实现-2 红红的程序运行图标,和相似下方音乐条
被调出来出差了,这次出差可以说是非常不开心,这次出差也算给我自己提了个醒吧,那就是注意自己的精力,自己的口碑,和比人对自己的信任。具体内容如下
145 0
Qt-网易云音乐界面实现-2 红红的程序运行图标,和相似下方音乐条
|
C# UED 自然语言处理
在WPF中实现图片一边下载一边显示
原文 在WPF中实现图片一边下载一边显示 当我们上网查看一个较大的图片时,浏览器能一边下载一边显示,这样用户体验是比较好的,但在WPF程序中,当我们通过如下方式显示一幅图片时:     img.Source = new BitmapImage(new Uri("http://localhost:8000/www/test.jpg")); 只能等到图片下载完成时才能显示出来,当图片较大时需要等待很久,即使在旁边放个进度条给人的感觉仍然不好。
1075 0
|
Windows
Win10系统怎样让图片的打开方式为照片查看器?
在Win10系统中有一个最不方便的地方就是图片的打开方式没有照片查看器,如果想恢复传统的照片查看器该怎么操作呢? 方法步骤:   1. 首先,我们需要使用 注册表编辑器 来开启Win10系统照片查看器功能,因为其实这个功能是被隐藏了,那么按下 Windows徽标键+R键 ,打开运行命令窗口,输入 regedit 命令。
1231 0
|
C# 缓存
WPF中删除打开过的图片
原文:WPF中删除打开过的图片 在WPF中,当我们删除打开过的图片时,往往会遇到"...无法删除,文件正在被另一个进程使用"的异常。即使当前文件是打开后关闭过的也不行。 这个问题的原因很简单,是因为WPF的缓存策略导致图片被锁定了,解决的方式不是用默认的ImageSource的构造方法,改用如下...
1412 0