Halcon的HWindowControl控件在WinForm程序中的使用介绍(重点解决图片缩放的问题)
Halcon的HWindowControl控件在WinForm程序中的使用介绍(重点解决图片缩放的问题)

版权声明:本文为博主原创文章,未经博主允许不得转载。
HWindowControl控件初步使用
最近在学习新的视觉处理工具–Halcon软件包,本人学习的主要是HDevelop、Halcon与C#混编以及Halcon与C++混编。这里再多缀一句:11版本后C++编程,包含的是halconcpp文件夹,10版本前包含的是cpp文件夹,我主要学习的是11版本以后的C++编程。
此篇文章是为了记录学习过程中的一些知识点而已,当然后续的文章也都是如此。好了,废话不多说了,直奔主题吧。在WinForm中使用HWindowControl控件显示图片时,大伙最关心的应该就是图像能否完全显示出来的问题。下面将介绍下我学习过程中的收获,最后会附上程序源码。
HWindowControl控件和控件中的显示区域认识
HWindowControl是显示控件,但关系到显示图像部分的是此控件的“子窗口”HWindowControl.HalconWindow。下面我将用“控件”和“显示区域”来分别代称上述二位。
其实,可以将“控件”和“显示区域”两者分开来看。“控件”是控件,“显示区域”是显示区域,两者相互独立,互不干扰。为什么这样说,因为这样非常有助于理解以下两个概念:“控件”的大小和“显示区域”的大小。另,可以将“显示区域”理解成控件中的黑色区域。
下面我将直接用实例说明。
HWindowControl的实例应用
首先,看下图的红色标记区域:
注意图中的红色标记处,两处都是关于大小的属性。标记1处的属性是ImagePart,这个其实是“显示区域”的大小(默认的好像是640×480,这里我也没去修改它,因为我程序就是来说明这点的),代码里也需要使用“显示区域”去设置,“控件”自身不能设置。标记2处有两个属性,这两个属性的值是一起变化的(相同的),用来表示“控件”的大小。这里我设置的是512×512,因为我程序是来显示经典的lena照片,其大小正是512×512。
以上部分是为了给大家一个直观印象,下面就直接进入程序介绍。下图是程序界面。
程序中共两个Button,标记1处的Button(OpenImage)的功能是打开图像并显示图像,标记3处的Button(SetImagePart)的功能是修改“显示区域大小”并显示图像。标记2处是用来设置“显示区域”的Width和Height。对了,初次打开软件时,标记2处显示的是当前HWindowControl中显示区域的Width和Height。此处显示的是640×480,和我刚才控件属性(ImagePart)那边一致。此时,SetImagePart也处于禁用状态,因为还没有图像传进来啦。
单击标记1处Button(OpenImage),效果如下图所示。
成功打开图像后,SetImagePart按钮生效。下面我们就来修改显示区域。首先将“显示区域”设置成lena图像的实际大小512×512,然后单击SetImagepart按钮。效果如下图所示:
此时lena图像已经完整的现实出来了。Ok,我们再将“显示区域”设置成256×256,看会是什么结果?设置好值后,单击SetImagePart按钮。效果如下图所示:
此时,“显示区域”只显示了图像的四分之一。是否已经理解了显示区域大小的概念了?….无论理解与否,我们继续设置“显示区域”为1024×1024,然后单击SetImagePart按钮。效果如下图所示:
此时,完整的图像只能占据“显示区域”的四分之一。至此,小程序介绍完毕。
关键代码片段
第一次打开程序时,获取控件中“显示区域”大小。代码如下:
textBox_Width.Text = hWindowControl1.ImagePart.Width.ToString();
textBox_Height.Text = WindowControl1.ImagePart.Height.ToString();
- 1
- 2
- 1
- 2
SetImagePart按钮功能。代码如下:
int dWidth = Convert.ToInt32(textBox_Width.Text.Trim());
int dHeight = Convert.ToInt32(textBox_Height.Text.Trim());
if (dWidth > 0 && dHeight > 0)
{
hoWindow.ClearWindow();
hoWindow.SetPart(0, 0, dHeight - 1, dWidth - 1);
hoImage.DispObj(hoWindow);
}
else
{
MessageBox.Show("The width of ImagePart is <= 0 or The height of ImagePart is <= 0");
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12

- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
呃….悲剧了….好像不能添加附件,程序源代码找机会再上传到下载那边。
Halcon的HWindowControl控件在WinForm程序中的使用介绍(重点解决图片缩放的问题)的更多相关文章
- WPF控件--利用Winform库中的NotifyIcon实现托盘小程序
WPF控件--NotifyIcon 运行界面如下所示: 图1 图2 代码很少,如下所示 ...
- C#与Halcon联合编程之用PictureBox控件替代HWindowControl控件
在使用HALCON和C#联合编程,有时候要使用halcon的HWindowControl控件,但是我发现,HWindowControl的图片显示控件,不能使用GDI+绘制ROI,不知道为什么,反正我测 ...
- Halcon - 图像随 HWindowControl 控件缩放的同时,保持图像的长宽比例不变
背景 通常情况下,图像是填充满 HWindowControl 控件,并随其缩放的.此时只需要将 set_part 的参数设置成图像的大小即可. 不过,有时候,在一些测量任务中,我们对原始图像的长宽比敏 ...
- .NET混合开发解决方案7 WinForm程序中通过NuGet管理器引用集成WebView2控件
系列目录 [已更新最新开发文章,点击查看详细] WebView2组件支持在WinForm.WPF.WinUI3.Win32应用程序中集成加载Web网页功能应用.本篇主要介绍如何在WinForm ...
- .NET混合开发解决方案8 WinForm程序中通过设置固定版本运行时的BrowserExecutableFolder属性集成WebView2控件
系列目录 [已更新最新开发文章,点击查看详细] 在我的博客<.NET混合开发解决方案7 WinForm程序中通过NuGet管理器引用集成WebView2控件>中介绍了WinForm ...
- Windows Phone 8.1 新特性 - 控件之应用程序栏
2014年4月3日的微软Build 2014 大会上,Windows Phone 8.1 正式发布.相较于Windows Phone 8,不论从用户还是开发者的角度,都产生了很大的变化.接下来我们会用 ...
- Atitit. Gui控件and面板----程序快速启动区--最佳实践Launchy ObjectDock-o0g
Atitit. Gui控件and面板----程序快速启动区--最佳实践Launchy ObjectDock-o0g 两个方式::: 键盘式::先用热键呼叫出QS,然后开始输入程序中的部分字母,按En ...
- C#中Winform程序中如何实现多维表头【不通过第三方报表程序】
问题:C#中Winform程序中如何实现多维表头. 在网上搜了很多方法,大多数方法对于我这种新手,看的都不是很懂.最后在新浪博客看到了一篇比较易懂的文章:[DataGridView二维表头与合并单元格 ...
- Scroll View 控件以Thumbnail的方式显示一个目录的全部图片,相似图片浏览器
MAC : XCode -> Scroll View 控件以Thumbnail的方式显示一个目录的全部图片,类似图片浏览器 STEP1:将两个目录复制到project里面ImageBrowser ...
随机推荐
- 【scala】继承
Scala中的继承与Java有着显著的不同. 抽象类abstract class abstract class Car{//抽象类 val carBrand:String;//抽象字段,一个没有被初始 ...
- SpringBoot_10_打成jar包后使用外部配置文件中的配置来启动工程
一.前言 三.参考资料 1.Spring Boot配置文件放在jar外部
- mysql int(3)与int(11)的区别
总结,int(M) zerofill,加上zerofill后M才表现出有点点效果,比如 int(3) zerofill,你插入到数据库里的是10,则实际插入为010,也就是在前面补充加了一个0.如果i ...
- java事务(三)——自己实现分布式事务
在上一篇<java事务(二)——本地事务>中已经提到了事务的类型,并对本地事务做了说明.而分布式事务是跨越多个数据源来对数据来进行访问和更新,在JAVA中是使用JTA(Java Trans ...
- [AOP] 6. 一些自定义的Aspect - 方法的重试(Retry)
前面的一系列文章介绍了AOP的方方面面: AOP的由来以及快速上手 AOP的两种实现-Spring AOP以及AspectJ Spring AOP中提供的种种Aspects - Tracing相关 S ...
- linux(redhat) mysql 的安装
教程链接 注意 1.检查版本32/64位的时候 输入 name -a 输出为 Linux localhost.localdomain 2.6.18-53.el5 #1 SMP Wed Oct 10 1 ...
- loader疑惑
今天写自己的loader管理类时,发现一个问题,如果证明flash是并发加载资源的呢? var loader:Loader=new Loader; loader.contentLoaderInfo.a ...
- [Luogu1527][国家集训队]矩阵乘法
luogu 题意 给你一个\(N*N\)的矩阵,每次询问一个子矩形的第K小数.(居然连修改都不带的) \(N\le500,Q\le60000\) sol 整体二分+二维树状数组裸题. 复杂度是\(O( ...
- 双色球基础分析--SQL
代码是心血来潮编写得,就象买彩票一样,为国家做贡献:首先建立一个表,表得数据可以从福利彩票网站上获得,自己一个一个得录入进去先: 表结构为: ) NOT NULL , --期数 [F1] [i ...
- UIScrollView的左右滑动和侧滑手势冲突的解决办法
转载自:https://blog.csdn.net/kst_123/article/details/77762811 当ViewController中添加了一个全屏的UIScrollView的时候,U ...