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

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

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

  1. WPF控件--利用Winform库中的NotifyIcon实现托盘小程序

    WPF控件--NotifyIcon   运行界面如下所示:            图1                                             图2 代码很少,如下所示 ...

  2. C#与Halcon联合编程之用PictureBox控件替代HWindowControl控件

    在使用HALCON和C#联合编程,有时候要使用halcon的HWindowControl控件,但是我发现,HWindowControl的图片显示控件,不能使用GDI+绘制ROI,不知道为什么,反正我测 ...

  3. Halcon - 图像随 HWindowControl 控件缩放的同时,保持图像的长宽比例不变

    背景 通常情况下,图像是填充满 HWindowControl 控件,并随其缩放的.此时只需要将 set_part 的参数设置成图像的大小即可. 不过,有时候,在一些测量任务中,我们对原始图像的长宽比敏 ...

  4. .NET混合开发解决方案7 WinForm程序中通过NuGet管理器引用集成WebView2控件

    系列目录     [已更新最新开发文章,点击查看详细] WebView2组件支持在WinForm.WPF.WinUI3.Win32应用程序中集成加载Web网页功能应用.本篇主要介绍如何在WinForm ...

  5. .NET混合开发解决方案8 WinForm程序中通过设置固定版本运行时的BrowserExecutableFolder属性集成WebView2控件

    系列目录     [已更新最新开发文章,点击查看详细] 在我的博客<.NET混合开发解决方案7 WinForm程序中通过NuGet管理器引用集成WebView2控件>中介绍了WinForm ...

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

    2014年4月3日的微软Build 2014 大会上,Windows Phone 8.1 正式发布.相较于Windows Phone 8,不论从用户还是开发者的角度,都产生了很大的变化.接下来我们会用 ...

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

    Atitit.  Gui控件and面板----程序快速启动区--最佳实践Launchy ObjectDock-o0g 两个方式::: 键盘式::先用热键呼叫出QS,然后开始输入程序中的部分字母,按En ...

  8. C#中Winform程序中如何实现多维表头【不通过第三方报表程序】

    问题:C#中Winform程序中如何实现多维表头. 在网上搜了很多方法,大多数方法对于我这种新手,看的都不是很懂.最后在新浪博客看到了一篇比较易懂的文章:[DataGridView二维表头与合并单元格 ...

  9. Scroll View 控件以Thumbnail的方式显示一个目录的全部图片,相似图片浏览器

    MAC : XCode -> Scroll View 控件以Thumbnail的方式显示一个目录的全部图片,类似图片浏览器 STEP1:将两个目录复制到project里面ImageBrowser ...

随机推荐

  1. SPI笔记

    sclk(serial clock):串行时钟 MOSI(master out slave input)  (master   主机) (slave 从机) MISO(master int slave ...

  2. TCPL学习笔记:4-12以及4-13。关于使用递归的问题。

    4-12.写一个函数itoa,通过递归调用将整数转换成为字符串. #include <stdio.h> #include <stdlib.h> void Itoa(int nu ...

  3. 在一个Activity中启动另一个Activity

    一.新建一个空的工程 二.添加一个Activity并命名为BAty 三.在activity_main.xml中添加一个按钮,设置id号为btnStartB <Button android:lay ...

  4. OC-常见归档总结

    /*****  该文一共总结了以下六种文件操作   1.NSKeyedArchiver. 2.对类对象进行归档 <NSCoder>协议 3.文件管理类 NSFileManger  4.对文 ...

  5. NSPredicate(正则表达式)

    1. 正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.通常被用来检索.替换那些符合某个模式的文本. 2. iOS中正则使用 有三种(NSPredicate, rangeOfStri ...

  6. 简述Java面向对象三大特征:封装、继承、多态

    封装: 把对象的全部属性和服务结合在一起,形成不可分割的独立单位: 尽可能隐藏内部细节.(数据隐藏.隐藏具体实现的细节)     public.private.protected.default pu ...

  7. 【整理】石子合并问题(四边形不等式DP优化)

    有很多种算法: 1,任意两堆可以合并:贪心+单调队列. 2,相邻两堆可合并:区间DP    (O(n^3)) ). 3,相邻,四边形不等式优化DP (O(n^2) ). 4,相邻,GarsiaWach ...

  8. vs中删除nuget包

    最近发现有些解决方案都是用来nuget包,这个偶尔能跑,但是有一个爱抽风的毛病,生成解决方案的时候报错:无法连接到远程服务器,真几把蛋疼.... 就是下图的情况 网上找了下不是很容易找到处理这个问题的 ...

  9. Django-rest-framework多条件查询/分页/多表Json

    http://www.mamicode.com/info-detail-1648765.html

  10. ④SpringBoot之thymeleaf使用

    本文介绍SpringBoot使用的模板技术thymeleaf以及通过webJar进行前端资源的引入以及使用thymeleaf介绍简单说, Thymeleaf 是一个跟 Velocity.FreeMar ...