绘制其他窗口 刷新_halcon教程之防止多窗口闪烁

    32fca1b6764adbfa582f0e6034c0f5d0.gif  

在使用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设置系统级参数导致多窗口显示不理想的问题。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值