HDevelop图形窗口操作(下)

1 dev系列函数

在HDevelop中我们会看到很多dev开头的函数,这些函数一般都会存在一个不带有dev前缀且名称相同、参数相近的算子,这两种算子的区别在于,前者作用范围仅限于HDevelop在导出为其他语言代码时将被忽略,后者则可以被成功导出为C、C++、CSharp等代码。

2 打开窗口

我们可以通过代码的方式创建窗口,具体函数如下。





正如我们之前所说的dev_open_window会创建一个HDevelop的图形窗口,它拥有HDevelop图形窗口的所有功能,但该代码不会被导出。由open_window创建的窗口可以被导出,但关闭操作必须通过调用函数close_window (WindowHandle1)实现。


3 激活窗口

在HDevelop中dev函数只会对激活窗口起作用,因此在调用这些函数之前我们需要通过dev_set_window (WindowHandle)设置窗口为激活状态,然后再调用相应的dev函数进行设置或绘图。对于新建程序后自带的窗口,可以在脚本第一行添加dev_get_window (WindowHandle)语句,获取当前激活的窗口句柄。


4 打开缓存窗口

我们可以使用open_window创建一个缓冲窗口,具体代码如下

open_window (0, 0, 256, 256, 0, ' buffer', '', WindowHandle1)

此窗口不会被显示出来,但是却拥有可见窗口所有的显示存储功能,这其中也包括了窗口截图存储功能,如果你在导出程序中希望在不显示窗口的情况下存储一些处理过程,它将是不错的选择。


5 窗口参数

创建好窗口后我们可以通过相应的函数改变窗口的尺寸和显示范围。

 修改窗口尺寸

我们可以使用dev_set_window_extents设置激活窗口的尺寸,具体代码如下:



 修改显示区域

默认情况下,当调用绘图函数时,显示的图像会以拉伸的方式填满整个窗口。我们也可以使用dev_set_part函数,将原图的某个特定区域以拉伸的方式填充整个窗口。

具体代码如下:



 示例:

                                                                          

三 绘制HObject对象


1 绘制对象到窗口

我们可以使用dev_display (Image)或disp_obj (Image, WindowHandle)刷新任意图形对象(图像、边缘、区域)到图形窗口上。


2 设置绘制属性

通过窗口右键菜单修改的数据绝大部分都可以使用代码实现,详见下表:


四 绘制文字


在HDevelop中我们有3种方式在窗口上绘制文字:


1 write_string

write_string需配合set_tposition或new_line函数可以在窗体任意位置绘图。set_tposition可用于指定文字绘制位置,new_line可以根据字体高度自动计算并设置字符下一行的绘制位置。字体颜色则可通过dev_set_color设置。

示例:循环打印0到5数组元素的内容


2 dev_disp_text


dev_disp_text可以一次性绘制数组中的数据,并可为字符添加文本框,数组各元素之间用换行的形式分割。通过函数参数,我们可以修改字符颜色、位置、文本框属性等。具体参数如下:

          


 输出数组

该参数支持对字符和数据混合类型的tuple数组进行绘制

 参考坐标系

‘window’ 绘制坐标基于窗体左上角

‘image’    绘制坐标基于图像左上角

 绘制位置X、Y

该参数用于设置字符绘制的起始位置,除了填写固定数值,我们还可以,填写’left’,’top’,’center’等参数,实现文本框停靠效果。


示例:

HDevelop脚本代码:

dev_clear_window ()
dev_get_window (WinID)
tup:=['center','150']
dev_disp_text ('(top, left)', 'window', 'top', 'left', 'black', [], [])
dev_disp_text ('(top, center)', 'window', 'top', 'center', 'black', [], [])
dev_disp_text ('(top, right)', 'window', 'top', 'right', 'black', [], [])
dev_disp_text ('(center, left)', 'window', 'center', 'left', 'black', [], [])
dev_disp_text ('(center, center)', 'window', 'center', 'center', 'black', [], [])
dev_disp_text ('(center, right)', 'window', 'center', 'right', 'black', [], [])
dev_disp_text ('(bottom, left)', 'window', 'bottom', 'left', 'black', [], [])
dev_disp_text ('(bottom, center)', 'window', 'bottom', 'center', 'black', [], [])
dev_disp_text ('(bottom, right)', 'window', 'bottom', 'right', 'black', [], [])
dev_disp_text ('(100, 200)', 'window', 50, 200, '#df00df', [], [])
dev_disp_text (tup, 'window', 'center', 150, '#df00df', [], [])
dev_set_window_extents (-1, -1, 600, 220)
stop()
dev_set_window_extents (-1, -1, 700, 300)

不同尺寸窗体显示效果:

窗体尺寸600x220

窗体尺寸700x300


 字符颜色

Halcon为我们提供了一些预设字符颜色,大家可以通过字符串设置,此外我们还可以使用数值的方式设置颜色,设置格式为#RGB[A],所有数据的范围均为0-255,最后一项A为透明度,可以不写,默认为ff不透明。例如红色为’#ff0000’或’#ff0000ff’。

下图是Halcon为我们提供的颜色对照表。

 Halcon颜色对照表

 绘制属性、值

属性和值用于设置文本框的相关参数。两个参数均为数组,在两个数组中,待设置的属性名称和属性值需要一一对应。如果我们希望文本框背景色为绿色且阴影为蓝色,则需通过如下代码实现(以下函数中‘\’用于实现代码换行)。

示例代码:

dev_disp_text ('(test)', 'window', 12, 12, 'black'\
, ['box_color','shadow_color'], ['green','blue'])

显示效果:

具体参数设置效果详见下表:

文本框属性及设置效果


3 disp_message

该函数是对disp_text的封装,简化了阴影以及边框圆角的设置。

  

此函数最后一个参数可用于设置文本框的有无以及颜色,具体格式如下。

示例:

HDevelop代码:

dev_open_window (0, 0, 512, 512, 'white', WindowHandle)
Col:=12
Row:=12
Dy:=50
Text:='测试'
*输入单元素表示是否显示边框默认为’true’
disp_message (WindowHandle, Text, 'window', Row, Col, 'black', [])
Row:=Row+40
disp_message (WindowHandle, Text, 'window', Row, Col, 'black', 'false')
Row:=Row+40
*输入多元素时,元素0表示文本框背景设置,元素1表示阴影设置
disp_message (WindowHandle, Text, 'window', Row, Col, 'black', ['true','false'])
Row:=Row+40
*可通过数组直接设置文本框背景色以及阴影颜色
disp_message (WindowHandle, Text, 'window', Row, Col, 'black', ['green','#ff11ff'])

 执行结果:    

            

4 字体设置

  获取当前窗口字体

通过get_font (WindowHandle, Font1)函数,我们可获取窗口当前字体脚本Font1。

  设置字体

使用函数set_font (WindowHandle, '宋体-20')可设置窗口字体。在Halcon中字体脚本的格式为:字体[-字体风格]-字号。其中“字体风格”包括Normal(默认)、Bold(加粗)、Italic(倾斜)以及BoldItalic(倾斜加粗),在脚本中该项可以省略。

示例:

  获取可用字体

不同的系统搭载的字体有所不同,通过query_font (WindowHandle, Font)函数,我们可以获得当前系统可用字体数组Font。


五 窗口截图

1 使用菜单截图

图形窗口右键菜单的最后一项可帮助我们保存当前窗口中的图像,保存图像的分辨率与窗口大小一致。

2 使用函数截图

Halcon为我们提供了两个截图函数dump_window_image和dump_window。两者都可对窗体进行截图,不同的是,前者截图后转换为HObject图像,后者则直接保存为本地图像文件。

示例:

dev_get_window (WindowHandle)
read_image (Image, 'printer_chip/printer_chip_01')
binary_threshold (Image, Region, 'max_separability', 'light', UsedThreshold)
connection (Region, ConnectedRegions)
dump_window_image (Image1,WindowHandle)
dump_window (WindowHandle, 'bmp', 'halcon_dump')


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年3月    »
123
45678910
11121314151617
18192021222324
25262728293031
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864