返回首頁 hi, 歡迎來到機器人在線 請登錄/ 免費注冊 訂閱郵件
  • 【大恒】輕松學HALCON(七)——HDevelop圖形窗口操作(下)

    發布時間:2019年11月05日

    二、通過代碼打開HDevelop窗口


    1 dev系列函數


    在HDevelop中我們會看到很多dev開頭的函數,這些函數一般都會存在一個不帶有dev前綴且名稱相同、參數相近的算子,這兩種算子的區別在于,前者作用范圍僅限于HDevelop在導出為其他語言代碼時將被忽略,后者則可以被成功導出為C、C++、CSharp等代碼。


    2 打開窗口


    我們可以通過代碼的方式創建窗口,具體函數如下。





    正如我們之前所說的dev_open_window會創建一個HDevelop的圖形窗口,它擁有HDevelop圖形窗口的所有功能,但該代碼不會被導出。由open_window創建的窗口可以被導出,但關閉操作必須通過調用函數close_window (WindowHandle1)實現。


    3 激活窗口


    在HDevelop中dev函數只會對激活窗口起作用,因此在調用這些函數之前我們需要通過dev_set_window (WindowHandle)設置窗口為激活狀態,然后再調用相應的dev函數進行設置或繪圖。對于新建程序后自帶的窗口,可以在腳本第一行添加dev_get_window (WindowHandle)語句,獲取當前激活的窗口句柄。


    4 打開緩存窗口


    我們可以使用open_window創建一個緩沖窗口,具體代碼如下

    open_window (0, 0, 256, 256, 0, ' buffer', '', WindowHandle1)

    此窗口不會被顯示出來,但是卻擁有可見窗口所有的顯示存儲功能,這其中也包括了窗口截圖存儲功能,如果你在導出程序中希望在不顯示窗口的情況下存儲一些處理過程,它將是不錯的選擇。


    5 窗口參數


    創建好窗口后我們可以通過相應的函數改變窗口的尺寸和顯示范圍。

     修改窗口尺寸

    我們可以使用dev_set_window_extents設置激活窗口的尺寸,具體代碼如下:



     修改顯示區域

    默認情況下,當調用繪圖函數時,顯示的圖像會以拉伸的方式填滿整個窗口。我們也可以使用dev_set_part函數,將原圖的某個特定區域以拉伸的方式填充整個窗口。

    具體代碼如下:



    ?示例:

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

    三 繪制HObject對象


    1 繪制對象到窗口


    我們可以使用dev_display (Image)或disp_obj (Image, WindowHandle)刷新任意圖形對象(圖像、邊緣、區域)到圖形窗口上。


    2 設置繪制屬性


    通過窗口右鍵菜單修改的數據絕大部分都可以使用代碼實現,詳見下表:



    四 繪制文字


    在HDevelop中我們有3種方式在窗口上繪制文字:


    1 write_string

    write_string需配合set_tposition或new_line函數可以在窗體任意位置繪圖。set_tposition可用于指定文字繪制位置,new_line可以根據字體高度自動計算并設置字符下一行的繪制位置。字體顏色則可通過dev_set_color設置。

    示例:循環打印0到5數組元素的內容


    2 dev_disp_text


    dev_disp_text可以一次性繪制數組中的數據,并可為字符添加文本框,數組各元素之間用換行的形式分割。通過函數參數,我們可以修改字符顏色、位置、文本框屬性等。具體參數如下:

    ? ? ? ? ??


     輸出數組

    該參數支持對字符和數據混合類型的tuple數組進行繪制

     參考坐標系

    ‘window’ 繪制坐標基于窗體左上角

    ‘image’ ? ?繪制坐標基于圖像左上角

     繪制位置X、Y

    該參數用于設置字符繪制的起始位置,除了填寫固定數值,我們還可以,填寫’left’,’top’,’center’等參數,實現文本框停靠效果。


    示例:

    HDevelop腳本代碼:

    dev_clear_window ()

    dev_get_window (WinID)

    tup:=['center','150']

    dev_disp_text ('(top, left)', 'window', 'top', 'left', 'black', [], [])

    dev_disp_text ('(top, center)', 'window', 'top', 'center', 'black', [], [])

    dev_disp_text ('(top, right)', 'window', 'top', 'right', 'black', [], [])

    dev_disp_text ('(center, left)', 'window', 'center', 'left', 'black', [], [])

    dev_disp_text ('(center, center)', 'window', 'center', 'center', 'black', [], [])

    dev_disp_text ('(center, right)', 'window', 'center', 'right', 'black', [], [])

    dev_disp_text ('(bottom, left)', 'window', 'bottom', 'left', 'black', [], [])

    dev_disp_text ('(bottom, center)', 'window', 'bottom', 'center', 'black', [], [])

    dev_disp_text ('(bottom, right)', 'window', 'bottom', 'right', 'black', [], [])

    dev_disp_text ('(100, 200)', 'window', 50, 200, '#df00df', [], [])

    dev_disp_text (tup, 'window', 'center', 150, '#df00df', [], [])

    dev_set_window_extents (-1, -1, 600, 220)

    stop()

    dev_set_window_extents (-1, -1, 700, 300)

    不同尺寸窗體顯示效果:

    窗體尺寸600x220

    窗體尺寸700x300


     字符顏色

    Halcon為我們提供了一些預設字符顏色,大家可以通過字符串設置,此外我們還可以使用數值的方式設置顏色,設置格式為#RGB[A],所有數據的范圍均為0-255,最后一項A為透明度,可以不寫,默認為ff不透明。例如紅色為’#ff0000’或’#ff0000ff’。

    下圖是Halcon為我們提供的顏色對照表。

    ?Halcon顏色對照表

     繪制屬性、值

    屬性和值用于設置文本框的相關參數。兩個參數均為數組,在兩個數組中,待設置的屬性名稱和屬性值需要一一對應。如果我們希望文本框背景色為綠色且陰影為藍色,則需通過如下代碼實現(以下函數中‘\’用于實現代碼換行)。

    示例代碼:

    dev_disp_text ('(test)', 'window', 12, 12, 'black'\

    , ['box_color','shadow_color'], ['green','blue'])

    顯示效果:

    具體參數設置效果詳見下表:

    文本框屬性及設置效果


    3 disp_message

    該函數是對disp_text的封裝,簡化了陰影以及邊框圓角的設置。

    ??

    此函數最后一個參數可用于設置文本框的有無以及顏色,具體格式如下。

    示例:

    HDevelop代碼:

    dev_open_window (0, 0, 512, 512, 'white', WindowHandle)

    Col:=12

    Row:=12

    Dy:=50

    Text:='測試'

    *輸入單元素表示是否顯示邊框默認為’true’

    disp_message (WindowHandle, Text, 'window', Row, Col, 'black', [])

    Row:=Row+40

    disp_message (WindowHandle, Text, 'window', Row, Col, 'black', 'false')

    Row:=Row+40

    *輸入多元素時,元素0表示文本框背景設置,元素1表示陰影設置

    disp_message (WindowHandle, Text, 'window', Row, Col, 'black', ['true','false'])

    Row:=Row+40

    *可通過數組直接設置文本框背景色以及陰影顏色

    disp_message (WindowHandle, Text, 'window', Row, Col, 'black', ['green','#ff11ff'])

    ?執行結果: ? ?

    ? ? ? ? ? ??

    4 字體設置

    ? 獲取當前窗口字體

    通過get_font (WindowHandle, Font1)函數,我們可獲取窗口當前字體腳本Font1。

    ? 設置字體

    使用函數set_font (WindowHandle, '宋體-20')可設置窗口字體。在Halcon中字體腳本的格式為:字體[-字體風格]-字號。其中“字體風格”包括Normal(默認)、Bold(加粗)、Italic(傾斜)以及BoldItalic(傾斜加粗),在腳本中該項可以省略。

    示例:

    ? 獲取可用字體

    不同的系統搭載的字體有所不同,通過query_font (WindowHandle, Font)函數,我們可以獲得當前系統可用字體數組Font。


    五 窗口截圖

    1 使用菜單截圖

    圖形窗口右鍵菜單的最后一項可幫助我們保存當前窗口中的圖像,保存圖像的分辨率與窗口大小一致。

    2 使用函數截圖

    Halcon為我們提供了兩個截圖函數dump_window_image和dump_window。兩者都可對窗體進行截圖,不同的是,前者截圖后轉換為HObject圖像,后者則直接保存為本地圖像文件。

    示例:

    dev_get_window (WindowHandle)

    read_image (Image, 'printer_chip/printer_chip_01')

    binary_threshold (Image, Region, 'max_separability', 'light', UsedThreshold)

    connection (Region, ConnectedRegions)

    dump_window_image (Image1,WindowHandle)

    dump_window (WindowHandle, 'bmp', 'halcon_dump')


    以上就是本期關于深度學習HDevelop圖形窗口操作的全部內容,請關注“大恒圖像”微信公眾號,視覺學院→大恒課堂欄目下閱讀其他關于深度學習的文章,如需購買或試用,請直撥銷售熱線010-82828878。


  • 獲取驗證碼
    经典斗地主