MFC&Halcon之图片显示

本文介绍如何在MFC程序中使用Halcon库显示图像。通过设置PictureControl控件为父窗口,并调整图片尺寸以适应控件大小,实现了图像的有效展示。文中详细解释了OpenWindow函数的使用方法及参数含义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇介绍了MFC调用Halcon功能的简单例子,在这个例子中,点击按钮会弹出一个窗口显示图片,但是这样显示并不美观,而且。。。于是我决定把显示窗口做在MFC的窗体内部。

具体的方案是:使用一个Picture Control 控件,调用Halcon中的OpenWindow函数,将其参数中的父窗口设为Picture Control 的句柄,就可以在控件内显示我们的照片了,同时要注意缩放一下图片以适应控件大小。

OpenWindow

OpenWindow这个函数的用法可以在Halcon的帮助中找到,注意要看C++函数而非HDevelop函数。

image

函数原型如下,使用这个函数无需再MFC中另做声明:

void OpenWindow(const HTuple& Row, const HTuple& Column, const HTuple& Width, const HTuple& Height, const HTuple& FatherWindow, const HTuple& Mode, const HTuple& Machine, HTuple* WindowHandle)

MFC程序

还是新建一个对话框程序,然后添加一个按钮和一个PictureControl控件,控件的ID默认为IDC_STATIC。

image

正如上一篇中一样,首先在对话框类的头文件和cpp文件中包含halcon的头文件和命名空间

#include "halconcpp.h"
using namespace HalconCpp;

然后双击按钮填写按钮的响应函数,这里为了方便把halcon的变量直接定义在了响应函数中:

void CHalconWindowDlg::OnBnClickedButton1()
{
    // TODO: 在此添加控件通知处理程序代码
    HObject  ho_Image;
    HTuple HWindowID;
    CRect Rect;
    HTuple m_HWindowID;
    HTuple m_ImageWidth,m_ImageHeight;

    CWnd * pWnd = GetDlgItem( IDC_STATIC);
    HWindowID = (Hlong)pWnd->m_hWnd;//获取父窗口句柄
    pWnd->GetWindowRect(&Rect);
    OpenWindow(0,0,Rect.Width(),Rect.Height(),HWindowID,"visible","",&m_HWindowID );
    //显示静态图片
    ReadImage(&ho_Image, "C:/Users/lenovo/Desktop/test.jpg");
    GetImagePointer1(ho_Image,NULL,NULL,&m_ImageWidth,&m_ImageHeight);
    SetPart(m_HWindowID,0,0,m_ImageHeight-1,m_ImageWidth-1);
    DispObj(ho_Image, m_HWindowID);
}
其中,
使用OpenWindow时将PictureControl控件的大小传进去,作为开辟的Halcon窗口的大小,这样两个窗口叠加在一起了。
SetPart是Halcon函数,作用是调整图片在窗口中的位置(设定图片左上角坐标和右下角坐标)
实现的效果如下:

试着将OpenWindow语句改为

OpenWindow(50,20,Rect.Width()-100,Rect.Height()-100,HWindowID,"visible","",&m_HWindowID );

结果如下:

image

转载于:https://www.cnblogs.com/oucsheep/p/5911839.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值