wenluderen
论坛版主
论坛版主
  • 最后登录2017-11-03
  • 发帖数295
  • 金币4900枚
  • 贡献勋章0枚
  • 社区居民
  • 社区明星
  • 忠实会员
  • 喜欢达人
  • 原创写手
阅读:4719回复:27

VS2010的对话框程序,里面的Picture控件显示图片

楼主#
更多 发布于:2015-08-31 14:51
第一步:打开VS2010  新建对话框程序并且运行,用于确定没有错误。




第二步:参考http://www.ihalcon.com/read-3716.html 这个帖子配置开发环境,让HALCON的函数和数据类型在VS里面可以被识别。


第三步:

图片:2015-08-31_145233.jpg







第四步:

图片:2015-08-31_145523.jpg

最新喜欢:

yfntiancaiyfntia... cxbshucxbshu
wenluderen
论坛版主
论坛版主
  • 最后登录2017-11-03
  • 发帖数295
  • 金币4900枚
  • 贡献勋章0枚
  • 社区居民
  • 社区明星
  • 忠实会员
  • 喜欢达人
  • 原创写手
沙发#
发布于:2015-08-31 15:15
外围
第五步:在对话框的类的初始化函数里面对Picture控件做一些处理,通常来说这种处理叫控件的初始化。
 

图片:2015-08-31_145832.jpg



另外我们还需要在 初始化函数所在的实现文件里面添加HALCON的 头文件 和命名空间,
Q:为啥呢?
A:因为我们要在这个实现文件里面 写一些东西,就是定义一些数据 或是函数之类的,这些数据或是函数
需要知道他的老爹是谁。如果你不写HALCON的头文件和命名空间,那么咱们这个傻编译器就不知道到哪里
去找他们的老爹,那么那些定义的数据类型或是函数 就是没爹没娘的孩子,咱们程序员都是充满爱心的,怎么可以干这种丧心病狂的事情呢?所以 还是要加上去滴。。。。


×××××××××××××××××××××××
 

图片:2015-08-31_150711.jpg




还有命名空间

图片:2015-08-31_151502.jpg




×××××××××××××××××××××××××
之后就是在实现文件里面添加一样的东西。

图片:2015-08-31_151641.jpg

wenluderen
论坛版主
论坛版主
  • 最后登录2017-11-03
  • 发帖数295
  • 金币4900枚
  • 贡献勋章0枚
  • 社区居民
  • 社区明星
  • 忠实会员
  • 喜欢达人
  • 原创写手
板凳#
发布于:2015-08-31 18:34
以下代码的位置见图:

图片:2015-08-31_183803.jpg




//picture控件初始化*****************************************************
 CRect tmpRect;//定义一个矩形变量,用于存储Picture控件的四个点的坐标
 //获取picture控件的矩形区域
 GetDlgItem(IDC_PICTURE_GSZ)->GetClientRect(&tmpRect);
 //把picture控件和halcon关联,返回显示图形的窗口句柄


 //获取的picture控件的窗口句柄后,要强制转化为Hlong型数据,然后作为父窗口句柄使用。
  
 open_window(0,0,tmpRect.Width(),tmpRect.Height(),//窗口四个点


 (Hlong)(GetDlgItem(IDC_PICTURE_GSZ)->GetSafeHwnd()),//父窗口句柄


 "visible",//模式
 "",
 &m_hWindowHandle);//窗口句柄


 //设置填充模式
 set_draw(m_hWindowHandle,"margin");
 //设置颜色数量
 set_colored(m_hWindowHandle,12);
 //设置线条宽度
 set_line_width(m_hWindowHandle,1);


 //picture控件初始化结束*************************************************
wenluderen
论坛版主
论坛版主
  • 最后登录2017-11-03
  • 发帖数295
  • 金币4900枚
  • 贡献勋章0枚
  • 社区居民
  • 社区明星
  • 忠实会员
  • 喜欢达人
  • 原创写手
地板#
发布于:2015-08-31 18:35
然后就是:  那个打开按钮的鼠标单击事件响应程序

//添加一幅图片的按钮的鼠标左键单击事件响应函数
void CTestPictureShowGszDlg::OnBnClickedButtonAddpicture()
{
 // TODO: 在此添加控件通知处理程序代码
 //定义两个变量 用于存储将要读进来的那个图像的高度
 HTuple Width,Height;
  


 //测试通过打开对话框返回的全路径是否可以使用
 //第一步:实例化一个字符串类的对象,用于存放返回的路径
 CString  fullpath;


 //第二步:实例化 一个打开对话框, 用于浏览目前图像
 CFileDialog dlg(TRUE);


 //第三步:使用这个浏览对话框
 if (dlg.DoModal()==IDOK)
 {
 //复位显示的图像变量
 fullpath=dlg.GetPathName();
 }
 else
 {
 MessageBox(_T("打开过程异常,程序将返回!"));
 return;
 }


 ////调用HALCON的函数读取
 //read_image(&m_Image,"E:/视觉培训相关/必备专题:在Picture控件里面显示图片/TestPictureShowGsz/Debug/Koala.jpg");
 
 read_image(&m_Image,fullpath);
 //获得图像的尺寸
 get_image_size(m_Image,&Width,&Height);


 //显示全图
 set_part(m_hWindowHandle,0,0,Height-1,Width-1);
  
 //vc中要显示任何图形,一定要调用disp_obj函数来实现
 disp_obj(m_Image,m_hWindowHandle);
}
wenluderen
论坛版主
论坛版主
  • 最后登录2017-11-03
  • 发帖数295
  • 金币4900枚
  • 贡献勋章0枚
  • 社区居民
  • 社区明星
  • 忠实会员
  • 喜欢达人
  • 原创写手
4楼#
发布于:2015-08-31 18:38

图片:2015-08-31_184716.jpg






不然报错,就是那个read_image  里有未重载的什么什么的。。
wenluderen
论坛版主
论坛版主
  • 最后登录2017-11-03
  • 发帖数295
  • 金币4900枚
  • 贡献勋章0枚
  • 社区居民
  • 社区明星
  • 忠实会员
  • 喜欢达人
  • 原创写手
5楼#
发布于:2015-08-31 18:56
最后一步:

图片:2015-08-31_185420.jpg






全部配套资料:链接: http://pan.baidu.com/s/1mgnb2ru 密码: q5sc
怀着梦想去远方
助理工程师
助理工程师
  • 最后登录2017-10-31
  • 发帖数68
  • 金币535枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
6楼#
发布于:2015-08-31 19:17
wenluderen:不然报错,就是那个read_image  里有未重载的什么什么的。。回到原帖
楼主,你好!这个在VS2012里面需要改成多字符集和未设置才能运行正确,但是改成unicode类型的就不可以了,是什么原因呢?
wenluderen
论坛版主
论坛版主
  • 最后登录2017-11-03
  • 发帖数295
  • 金币4900枚
  • 贡献勋章0枚
  • 社区居民
  • 社区明星
  • 忠实会员
  • 喜欢达人
  • 原创写手
7楼#
发布于:2015-08-31 20:25
怀着梦想去远方:楼主,你好!这个在VS2012里面需要改成多字符集和未设置才能运行正确,但是改成unicode类型的就不可以了,是什么原因呢?回到原帖
这个问题 也是困扰着我, 我的编译器是VS2010, 我一开始是Unicode 结果重载错误,后啦改成未设置就好了。  原因嘛  不是很清楚 。估计是宽字节的问题吧。
yehufeifei
助理工程师
助理工程师
  • 最后登录2017-08-31
  • 发帖数82
  • 金币436枚
  • 贡献勋章0枚
  • 社区居民
8楼#
发布于:2015-09-01 08:36
wenluderen:这个问题 也是困扰着我, 我的编译器是VS2010, 我一开始是Unicode 结果重载错误,后啦改成未设置就好了。  原因嘛  不是很清楚 。估计是宽字节的问题吧。回到原帖
版主,什么时候发表一些干货啊!
像做项目中遇到的困难啦,做项目的一些感想啊。
期待哦!
fengxiaoyun987
专家
专家
  • 最后登录2017-11-23
  • 发帖数744
  • 金币2649枚
  • 贡献勋章0枚
  • 社区居民
  • 原创写手
9楼#
发布于:2015-09-01 08:54
怀着梦想去远方:楼主,你好!这个在VS2012里面需要改成多字符集和未设置才能运行正确,但是改成unicode类型的就不可以了,是什么原因呢?回到原帖
是字符的问题,你可以在Unicode下修改简单修改下,
CString fullpath;
fullpath= dlg.GetPathName();
USES_CONVERSION;
char* c_path = T2A(fullpath);
read_image(&m_Image,c_path);这是在Unicode下就可以使用了!
wenluderen
论坛版主
论坛版主
  • 最后登录2017-11-03
  • 发帖数295
  • 金币4900枚
  • 贡献勋章0枚
  • 社区居民
  • 社区明星
  • 忠实会员
  • 喜欢达人
  • 原创写手
10楼#
发布于:2015-09-01 10:43
fengxiaoyun987:是字符的问题,你可以在Unicode下修改简单修改下,
CString fullpath;
fullpath= dlg.GetPathName();
USES_CONVERSION;
char* c_path = T2A(fullpath)...
回到原帖
多谢大神的指点。。。
fengxiaoyun987
专家
专家
  • 最后登录2017-11-23
  • 发帖数744
  • 金币2649枚
  • 贡献勋章0枚
  • 社区居民
  • 原创写手
11楼#
发布于:2015-09-01 13:04
wenluderen:多谢大神的指点。。。回到原帖
我不是什么大神,大家相互学习!
lispa
初学者
初学者
  • 最后登录2016-07-14
  • 发帖数12
  • 金币63枚
  • 贡献勋章0枚
  • 社区居民
12楼#
发布于:2015-09-01 15:25
mark一下,回头来看
907017795
禁止发言
禁止发言
  • 最后登录2016-07-13
  • 发帖数27
  • 金币1枚
  • 贡献勋章0枚
  • 社区居民
13楼#
发布于:2015-09-01 18:30
用户被禁言,该主题自动屏蔽!
907017795
禁止发言
禁止发言
  • 最后登录2016-07-13
  • 发帖数27
  • 金币1枚
  • 贡献勋章0枚
  • 社区居民
14楼#
发布于:2015-09-01 18:31
用户被禁言,该主题自动屏蔽!
上一页
游客

返回顶部