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