全国服务热线:

15861139266

halcon教程之防止多窗口闪烁,苏州上位机培训,苏州机器视觉培训,苏州工业机器人培训
发布时间:2024-03-18 13:44:04 点击次数:169

在使用Halcon进行图像显示时窗口图像会闪烁,为了解决这个问题,Halcon提供了防止闪烁的函数:

即Halcon的系统设置参数设置函数set_system。

set_system具有参数值' flush_graphic '设置为’False’则窗口暂停刷新,将需要显示的内容存放到显示队列中。

当绘制完要显示的内容时将' flush_graphic '设置为’True’即可将显示队列中的值统一显示。

该方法确实在防止单窗口闪烁是非常有效,但是因为这个参数的设置属于系统级的,假如我们的系统存在两个甚至多个窗口,且每个窗口随机更新图像,无法做到每个每个窗口同时更新,则这个方法就无能为力了。


为了解决多窗口防止闪烁的问题,可以采用双窗口缓存的办法。


1)获取显示窗口的尺寸

window.GetWindowExtents(out hv_WindowRow, outhv_WindowColumn, out hv_WindowWidth, out hv_WindowHeight);


2)采用Open_Window打开一个缓冲窗口;

windowBuffer.OpenWindow(hv_WindowRow, hv_WindowColumn,hv_WindowWidth, hv_WindowHeight, 0, "buffer","");



看一下Halcon中关于这个函数的定义:

void HWindow.OpenWindow(int row,int column,int width,int height, HTuple fatherWindow,string mode,string machine)

前四个参数:int row, int column, int width, int height,为窗口的位置和尺寸;

HTuple fatherWindow:该缓存窗口隶属的窗口号;

string mode:打开窗口的模式;

'visible':正常的图像显示模式

'invisible':顾名思义该窗口是隐藏区,用于后台记录用,不显示;

'transparent':图像窗口是透明的,不显示图像,但是可以接受鼠标信息,可输出信息;

'buffer':这个模式也是不显示的,显示是需要将结果复制到显示窗口

string machine:计算机名称,默认为空即可


3)将显示内容显示到缓存窗口;

  windowBuffer.SetPart(viewPort.ImagePart.Y,viewPort.ImagePart.X, viewPort.ImagePart.Bottom, viewPort.ImagePart.Right);

SetPart函数比较简单,不在多做介绍。


4)将缓存窗口的可视化结果复制到要显示的窗口中;

 windowBuffer.CopyRectangle(window, 0, 0,hv_WindowHeight-1, hv_WindowWidth-1, 0,  0);

该方法采用缓存窗口的方式防止图像窗口闪烁,避免了采用set_system设置系统级参数导致多窗口显示不理想的问题。


立即咨询
  • 品质服务

    服务贴心周到

  • 快速响应

    全天24小时随时沟通

  • 专业服务

    授权率高,保密性强

  • 完善售后服务

    快速响应需求,及时性服务

直播课程
软件开发基础课程
上位机软件开发课
机器视觉软件开发课
专题课
联系方式
电话:15861139266
邮箱:75607082@qq.com
地址:苏州吴中区木渎镇尧峰路69号
关注我们

版权所有:江苏和讯自动化设备有限公司所有 备案号:苏ICP备2022010314号-1

技术支持: 易动力网络