您現在的位置是:首頁 > 網頁遊戲首頁網頁遊戲

C 實現儲存原圖帶字串文字提示功能

簡介實現效果:核心原理:利用Halcon自帶截圖dump_window功能,但是需要改進下程式碼Halcon如何實現:dev_get_window (WindowHandle)read_image (Image, ‘printer_chippr

字元菱形c 怎麼做

用場景:

很多時候我們需要儲存原圖的同時,對處理後的結果影象和顯示文字一起儲存,而且不能損失解析度,那麼就可以用這個小竅門來搞定,因為Halcon自帶沒有相關運算元可以合成,畢竟預設的字串顯示是外掛在指定位置上的,要合成就要想點辦法!

實現效果:

C 實現儲存原圖帶字串文字提示功能

核心原理:

利用Halcon自帶截圖dump_window功能,但是需要改進下程式碼

Halcon如何實現:

dev_get_window (WindowHandle)

read_image (Image, ‘printer_chip/printer_chip_01’)

get_image_size (Image, Width, Height)

disp_message (WindowHandle, ‘測量OK’, ‘window’, 12, 12, ‘green’, ‘true’)

edges_sub_pix (Image, Edges, ‘canny’, 1, 20, 40)

*快取視窗內容需要和主要視窗保持一致

open_window (0, 0, Width, Height, 0, ‘buffer’, ‘’, BufferWindowHandle)

set_colored (BufferWindowHandle, 12)

dev_set_window (BufferWindowHandle)

disp_obj (Image, BufferWindowHandle)

disp_obj (Edges, BufferWindowHandle)

disp_message (BufferWindowHandle, ‘測量OK’, ‘window’, 12, 12, ‘green’, ‘true’)

dump_window_image (ImageDump, BufferWindowHandle)

write_image (ImageDump, ‘bmp’, 0, ‘Dump。bmp’)

複製程式碼

C#怎麼實現:

1。新建兩個Halcon視窗,我們取名為m_WindowHandle1和m_WindowHandle2:

m_WindowHandle1 = hWindowControl1。HalconID;

m_WindowHandle2 = hWindowControl2。HalconID;

複製程式碼

注意,第二個視窗我們主要用於處理截圖,所以要單獨開闢,否則會影響第一個實際視窗的效果!

同時,設定第二個視窗的可見屬性為false,也就是Visible設定為false,這樣別人就看不到了,實際只能看到一個處理視窗。

2。讀取程式碼為:

dev_get_window (WindowHandle)

read_image (Image, ‘printer_chip/printer_chip_01’)

get_image_size (Image, Width, Height)

disp_message (WindowHandle, ‘測量OK’, ‘window’, 12, 12, ‘green’, ‘true’)

edges_sub_pix (Image, Edges, ‘canny’, 1, 20, 40)

*快取視窗內容需要和主要視窗保持一致

open_window (0, 0, Width, Height, 0, ‘buffer’, ‘’, BufferWindowHandle)

set_colored (BufferWindowHandle, 12)

dev_set_window (BufferWindowHandle)

disp_obj (Image, BufferWindowHandle)

disp_obj (Edges, BufferWindowHandle)

disp_message (BufferWindowHandle, ‘測量OK’, ‘window’, 12, 12, ‘green’, ‘true’)

dump_window_image (ImageDump, BufferWindowHandle)

write_image (ImageDump, ‘bmp’, 0, ‘Dump。bmp’)

複製程式碼

這個Buffer型別的視窗不僅可以解決視窗閃爍問題,實現雙快取效果,而且可以製作解析度一致結果影象。

3。儲存截圖程式碼為:

private void SaveImage()

{

try

{

HOperatorSet。SetWindowExtents(m_WindowHandle2, 0, 0, m_imgWidth, m_imgHeight);

HOperatorSet。SetPart(m_WindowHandle2, 0, 0, m_imgHeight - 1, m_imgWidth - 1);

set_display_font(m_WindowHandle2, 20, “mono”, “true”, “false”);

HOperatorSet。DispObj(m_Image, m_WindowHandle2);

disp_message(m_WindowHandle2, “2018-08-31 20:30:45”, “window”, 12, 12, “green”, “false”);

HOperatorSet。DumpWindow(m_WindowHandle2, “bmp”, “C:/Users/Admin/Desktop/2。bmp”);

}

catch (HalconException HDevExpDefaultException)

{

m_Image。Dispose();

throw HDevExpDefaultException;

}

m_Image。Dispose(); //儲存完了才釋放

}

複製程式碼

其中最關鍵的兩句就是:

HOperatorSet。SetWindowExtents(m_WindowHandle2, 0, 0, m_imgWidth, m_imgHeight);

HOperatorSet。SetPart(m_WindowHandle2, 0, 0, m_imgHeight - 1, m_imgWidth - 1);

複製程式碼

缺一不可,第一句是改變視窗大小為圖片大小,第二句是設定圖片大小適應視窗大小顯示,否則將導致截圖大小不一致!

4。剩下的就自己玩了,當然這個是一個小技巧,因為Halcon中文字實際上是外掛上去的,要真正合成只有dump_window了,你用其他庫也可以實現,這裡我們主要用Halcon實現,其實對程式本身影響完全沒有,而且不佔位置,不佔顯示,so easy!

5。如果覺得隱藏麻煩,可以用Halcon自帶的開啟快取視窗的方式進行操作,預設是不可見的,最後做dump_window_image即可!

open_window (0, 0, 影象寬度, 影象高度, 0, ‘buffer’, ‘’, WindowHandle)

複製程式碼

下載C#原始碼(採用VS2010 + Halcon12。0。3 x86開發):

連結:

https://pan。baidu。com/s/1jJunxvflFvcvU7_HPopU8A

密碼:0gvt

Top