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

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

2016-12-04 20:11 362人阅读 评论(4) 收藏 举报

 分类:

Halcon

版权声明:本文为博主原创文章,未经博主允许不得转载。

目录(?)[+]

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

  呃….悲剧了….好像不能添加附件,程序源代码找机会再上传到下载那边。

时间: 2024-10-05 20:13:59

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

在C# WinForm程序中创建控件数组及相应的事件处理

控件数组是VB提供的一个优秀的设计解决方案,它能很方便快捷的处理大批同类控件的响应和时间处理,但不知为什么在C#中这个优秀特性没有传承下来,甚为可惜,本文将要探讨就是如何在C# WinForm程序实现它.首先请看界面 在上面的界面中,本人想实现一个42个元素的Button数组来实现一个日历的功能,上面显示出了一部分. 其中采用了网格布局来放置这些按钮.手工创建为全部按钮后,在窗体类中代码中定义成员变量控件数组: private Button[] btns;然后在构造函数中初始化: btns =

Atitit. Gui控件and面板----程序快速启动区--最佳实践Launchy ObjectDock-o0g

Atitit.  Gui控件and面板----程序快速启动区--最佳实践Launchy ObjectDock-o0g 两个方式::: 键盘式::先用热键呼叫出QS,然后开始输入程序中的部分字母,按Enter就 是启动这个程序 鼠标式::mouse左的呼叫出面板,分组,点击启动... 作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:[email protected] 转载请注明来源: http://blog.csdn.net/attilax 1. ===Launchy Quicksil

Windows Phone 8.1 新特性 - 控件之应用程序栏

2014年4月3日的微软Build 2014 大会上,Windows Phone 8.1 正式发布.相较于Windows Phone 8,不论从用户还是开发者的角度,都产生了很大的变化.接下来我们会用几篇文章来了解一下这些变化给开发者带来的影响,以及我们如何更好的利用WP8.1 的新特性. WP8.1 最大的变化就是与Windows Store App 的结合,我们把它们统称为Windows RunTime apps.WP8.1 中的控件位于Windows.UI.XAML.Controls 命名

Xceed WPF 主题皮肤控件Xceed Professional Themes for WPF详细介绍

Xceed Professional Themes for WPF是一款为你的整个应用程序提供完美WPF主题风格的控件,包含Office 2007和Windows 7,可以应用到任何微软官方的WPF控件. 具体功能: WPF/.NET技术: 完全基于WPF创建,由C#和XAML编写,适用于.NET 3.5和4.0 完整的XAML源代码可用 兼容CLS 完全整合帮助文档到Visual Studio里 主要功能: 提供了7种预定义WPF主题风格 Glass 主题风格 Media 主题风格,使您的应用

在注册控件时出现对DllRegisterServer的调用失败的解决办法

最近做了一个控件,在WIN7 32位机子上注册控件时出现如下提示: 这样的问题明白人一看就知道这是dll或ocx控件未正确注册的原因,但是怎样解决这个问题,确是比较棘手. 遇到这个问题的时候大家首先能想到的是手动注册该控件.一般有两种方法(1)调用系统本身自带的regsvr32.exe注册器进行注册,但是注册后发现提示注册错误,未能成功注册.这是什么原因呢?难道是没有管理员权限?可我明明是以管理员身份登录电脑的啊.然后便是发送该程序快捷方式到桌面,右键该快捷方式,单击"以管理员身份运行"

Delphi中WebBrowser控件打开部分网站报&quot;Invalid floating point operation”解决

Delphi中WebBrowser控件打开部分网站报"Invalid floating point operation”解决 EmbeddedWBWebBrowserDelphi 最近用EmbeddedWB控件做浏览器相关应用的时候,发现有些网页只要一打开就一定会蹦出一个“Invalid floating point operation”异常(关掉异常对话框以后,浏览器无响应),而程序仅仅是一句 WebBrowser1.Navigate(Edit1.Text);貌似很多含有Silverlight

在Winform程序中设置管理员权限及为用户组添加写入权限

在我们一些Winform程序中,往往需要具有一些特殊的权限才能操作系统文件,我们可以设置运行程序具有管理员权限或者设置运行程序的目录具有写入的权限,如果是在操作系统里面,我们可以设置运行程序以管理员身份运行,或者设置Users用户组在运行目录中具有写入权限都可以解决问题,不过如果我们想通过C#代码进行自动的处理,那么应该如何实现呢? 1.系统设置管理员权限或者目录写入权限 如果我们需要让程序以管理员身份运行,那么可以通过设置快捷方式的属性或者应用程序的属性为[以管理员身份运行此程序]即可实现,如

【WinRT】让控件飞,WinRT 中实现 web 中的 dragable 效果

由于在 xaml 体系中,控件没有传统 WebForm 中的 Left.Top.Right.Bottom 这些属性,取而代之的是按比例(像 Grid)等等的响应布局.但是,传统的这些设置 Left.Top 的硬编码的需求仍然存在,所以,在所有的 xaml 体系中,均存在一个代替的控件——Canvas.本文基于 Canvas 来实现控件的拖拉效果. 在整个控件拖拉的过程当中,可以分解为 3 个部分,第一个部分是输入设备点击控件,第二个部分是保持按下的状态下移动输入设备,第三个部分是释放输入设备.那

combobox和textbox中输入数据为非数字leave时的公用事件,只需要在控件的leave事件中选择本事件即可

private void tbORcbb_leave(object sender, EventArgs e)        {            if (typeof(TextBox).IsInstanceOfType(sender))            {                if (((TextBox)sender).Text.IsNumeric() != true)                {                    ((TextBox)sender)