halcon导出的几个问题:1、set_display_font(对应halcon中dev_disp_text)函数报错 2、DispText(是dev_disp_text的衍生)函数报错


在C++中,一个dev_disp_text()函数的导出对应 set_display_font()和DispText()两个函数,一般在C++中是先调用set_display_font()设置好字体后,再调用DispText()函数,但是这里却有着致命的bug;

 

这个截图是halcon导出文件中set_display_font函数中的部分代码,原理通过QueryFont(hv_WindowHandle, &hv_AvailableFonts)这一句,将所有你系统的字体存储到hv_AvailableFonts,然后通过hv_Indices = hv_AvailableFonts.TupleFind(HTuple(hv_Fonts[hv_Fdx]))这一句来返回寻找hv_Fonts[hv_Fdx])(这是你自己定义的字体,比如halcon中的mono),如果没有找到返回-1,找到了就break,然后通过后续代码设置字体。

但是理想是美好的,这里会有很严重的bug,就是不管你怎么样,hv_Indices都是-1,也就是在你系统的字体库中没有找到你想要的字体。然后后续代码就会抛出异常。

 

解决方法:在halcon中不要使用dev_disp_message()函数,改用set_font()+set_tposition()+write_string(),这样你生成的cpp文件中就不会有set_display_font()和DispText()这两个函数了。但是有一个地方要注意,就是在halcon中比如你调用了下面这几句来设置字体样式

1 query_font (WindowHandle, Font)
2 FontWithSize := Font[0]+'-20'
3 set_font (WindowHandle, FontWithSize)

你在导出成c++文件的时候结果是

1  QueryFont(hv_WindowHandle, &hv_Font);
2  hv_FontWithSize = HTuple(hv_Font[0])+"-20";
3  SetFont(hv_WindowHandle, hv_FontWithSize);

这里的第二行会出错,必须手动改成:(这里参考了http://www.ihalcon.com/read-10972.html

1 QueryFont(hv_WindowHandle, &hv_Font);
2 hv_FontWithSize = HTuple(hv_Font[0]) + "20-";
3 SetFont(hv_WindowHandle, hv_FontWithSize);

设置完set_font()后再设置set_tposition()+write_string()就可。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM