Halcon flush_graphic与窗口闪烁控制

最近在读Halcon学习网上的一个大神的例程,功能是通过hWindowControl控件在C#中实现鼠标交互、Hobject对象的记忆、重绘和删除、图像的缩放等等非常实用的操作。
这篇文章讲不了这么多,只是发现了一点点有用的东西,所以记录下来。
这个有用的东西就是
set_system(“flush_graphic”, “false”)与窗口闪烁之间的关系。
首先描述一下场景:
有时候,我们需要在窗口或者控件中显示图像,以及某些region、contour,甚至是交互时才会出现的ROI选择框。
但是随着操作的频繁进行,我们在重绘窗口内容的时候,会出现并不希望出现的闪烁,比如说我希望让绘制的多个contour对象能够一次性显示,而不是每一个新的contour对象显示时,都去刷新一次窗口。
我之前一直冥思苦想,不知道怎么去控制这个问题。
读了大神的程序之后(还没读完),get到一点新知:当控制使用flush_graphic参数时,可以解决这个问题。
上例程:

read_image (Image, 'fabrik')
dev_display (Image)
* 将flush_graphic参数设置为"false"
set_system ('flush_graphic', 'false')
dev_set_color ('cyan')
gen_rectangle2_contour_xld (Rectangle, 300, 200, 0, 100.5, 20.5)
* 绘制并显示第一个contour对象Rectangle
dev_display (Rectangle)
dev_set_color ('yellow')
gen_circle_contour_xld (ContCircle, 200, 200, 100, 0, 6.28318, 'positive', 1)
* 绘制第二个contour对象 ContCircle
set_system ('flush_graphic', 'true')
* 通过一次显示,将之前绘制的多个对象同时显示出来
dev_display (ContCircle)

在这里插入图片描述
可以看到,当不希望逐对象刷新时,就把flush_graphic参数设置为false,这时候,不论你在画布上绘制了多少对象,都不会去刷新窗口。
而当flush_graphic参数重置为true时,可以通过对其中一个对象的显示,把前序绘制的所有对象全部一次性显示在窗口上,这样就可以减少窗口的刷新次数,从而解决不恰当的“闪烁”问题(其实不恰当的闪烁只是因为在不符合人类认知习惯的时候重绘了屏幕,因此这个方法实际上是按照人类的认知习惯统一了系统刷新窗口的时机)。
Ps:忘了补充一点,这个操作只对windows系统有效,如果是unix或者linux,则由于窗口显示刷新的机制不同,该方法无效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值