新问题:如何解决大图和显示区不匹配问题?
转载自:http://www.cnblogs.com/oucsheep/p/5911839.html
解决问题从图1到图2
图1(下面是hi)
图2
点击按钮会弹出一个窗口显示图片,但是这样显示并不美观,而且。。。于是我决定把显示窗口做在MFC的窗体内部。
具体的方案是:使用一个Picture Control 控件,调用Halcon中的OpenWindow函数,将其参数中的父窗口设为Picture Control 的句柄,就可以在控件内显示我们的照片了,同时要注意缩放一下图片以适应控件大小。
OpenWindow
OpenWindow这个函数的用法可以在Halcon的帮助中找到,注意要看C++函数而非HDevelop函数。
函数原型如下,使用这个函数无需再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。
正如上一篇中一样,首先在对话框类的头文件和cpp文件中包含halcon的头文件和命名空间
#include "halconcpp.h"
using namespace HalconCpp;
然后双击按钮填写按钮的响应函数,这里为了方便把halcon的变量直接定义在了响应函数中:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
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); } 其中, |
1
|
使用OpenWindow时将PictureControl控件的大小传进去,作为开辟的Halcon窗口的大小,这样两个窗口叠加在一起了。 |
1
|
SetPart是Halcon函数,作用是调整图片在窗口中的位置(设定图片左上角坐标和右下角坐标) |
1
|
实现的效果如下: |
1
|
<a href= "http://images2015.cnblogs.com/blog/495890/201609/495890-20160927102501985-191726113.png" ><img style= "background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title= "image" src= "http://images2015.cnblogs.com/blog/495890/201609/495890-20160927102505375-1338811149.png" alt= "image" width= "584" height= "359" border= "0" ></a> |
试着将OpenWindow语句改为
OpenWindow(50,20,Rect.Width()-100,Rect.Height()-100,HWindowID,"visible","",&m_HWindowID );
结果如下: