这几天公司做项目,需要用到WPF和Halcon结合使用,因为以前都是使用C++/C# Winfform,所以一直没有什么问题。但是到了WPF发现不一样的,发现HWindowControl会遮挡其他的WPF元素。其原因我想大家都知道,由于Winform控件采用的是GDI方式绘制,而WPF是采用DirectX绘制,GDI总是后绘制,导致覆盖WPF元素。结果就是如下图,很丑陋。
当然中间也试过用普通控件做显示,普通控件做显示有需要知道句柄,WPF中哪有句柄呀,此方法也做罢。也试过将HObject转为Bitmap用WPF的Image控件显示,但是无奈C#处理图片的速度非常慢,不适合生产使用。也做罢。难道就没有其他好的办法了吗?
可是这该如何解决呢,我查了一下,网上很多都建议使用WinformHost元素包一下,但是我并不建议如此。这样也非常麻烦,后来经过我司领导提醒说Halcon13带有WPF控件,于是就去看了一下,果然很爽。看来halcon官网还是积极的体察到了民间疾苦。效果如下
并且Halcon10升级到halcon13也不是很困难的事情,所以非常建议小伙伴们升级到halcon13和谐版做WPF项目。
但是有同学会发现,使用HSmartWindow时候是不能使用Hoperator.DrawCircle等绘制算子的,一绘制便会窗口崩溃,这个问题我也很无解,我试过了halcon13,17基本上都会有这个问题。这边我推荐一种方法,当需要绘制图形的时候使用HalconWindow绘制,需要显示的时候使用HSmartWindow显示,毕竟绘制图形的情况不多,只是在调试的时候会用到,一般用在建模版,绘制ROI的时候。
写这篇文章只是记录一下,防止忘记。如果大家有更好的解决办法,希望大家能一起探讨一下。