您現在的位置是:首頁 > 網頁遊戲首頁網頁遊戲
C 實現儲存原圖帶字串文字提示功能
- 2022-12-07
字元菱形c 怎麼做
用場景:
很多時候我們需要儲存原圖的同時,對處理後的結果影象和顯示文字一起儲存,而且不能損失解析度,那麼就可以用這個小竅門來搞定,因為Halcon自帶沒有相關運算元可以合成,畢竟預設的字串顯示是外掛在指定位置上的,要合成就要想點辦法!
實現效果:
核心原理:
利用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