建立属于自己的原创信息品牌站 了解企业站
返回首页 hi, 欢迎来到机器人在线 请登录/ 免费注册 扫码关注
  • 【大恒】轻松学HALCON(七)——HDevelop图形窗口操作(下)

    发布时间:2019年11月05日

    二、通过代码打开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')


    以上就是本期关于深度学习HDevelop图形窗口操作的全部内容,请关注“大恒图像”微信公众号,视觉学院→大恒课堂栏目下阅读其他关于深度学习的文章,如需购买或试用,请直拨销售热线010-82828878。


  • 获取验证码