1. 程式人生 > >對於halcon與MFC或c#編程中,當寫入滾輪放縮圖像時,圖像會閃屏的解決方法

對於halcon與MFC或c#編程中,當寫入滾輪放縮圖像時,圖像會閃屏的解決方法

lena 清除 必須 pty temporary csdn 名稱 方法 等級

//會閃屏的代碼,更新圖像函數如下(以MFC為例)*******************************************************

void CGeomLocationApp::UpdateImageEx(Hobject Image, //圖像
Hobject &objDispR, //顯示圖形紅色
Hobject &objDispG, //顯示圖形綠色
Hobject &objDispB, //顯示圖形藍色
Hobject &objDispY, //顯示圖形黃色
Hlong hWindowHandle, //窗口句柄
BOOL bInitial //是否對圖形進行初始化操作
)
{
//復位顯示圖形
if (bInitial==TRUE)
{
objDispR.Reset();
objDispG.Reset();
objDispB.Reset();
objDispY.Reset();
}
//清楚顯示窗口
clear_window(hWindowHandle);
//顯示圖像
disp_obj(Image,hWindowHandle);
//顯示圖形
if (objDispR.Id()!=H_EMPTY_REGION)
{
set_color(hWindowHandle,"red");
disp_obj(objDispR,hWindowHandle);
}
if (objDispG.Id()!=H_EMPTY_REGION)
{
set_color(hWindowHandle,"green");
disp_obj(objDispG,hWindowHandle);
}
if (objDispB.Id()!=H_EMPTY_REGION)
{
set_color(hWindowHandle,"blue");
disp_obj(objDispB,hWindowHandle);
}
if (objDispY.Id()!=H_EMPTY_REGION)
{
set_color(hWindowHandle,"yellow");
disp_obj(objDispY,hWindowHandle);
}
set_color(hWindowHandle,"red");
}

//會閃屏的代碼,更新圖像函數如下*******************************************************

如需不閃屏,只需在clear_window前後,加入兩個函數,通過設置系統的flush_graphic,來實現,其代碼如下

void CGeomLocationApp::UpdateImageEx(Hobject Image, //圖像
Hobject &objDispR, //顯示圖形紅色
Hobject &objDispG, //顯示圖形綠色
Hobject &objDispB, //顯示圖形藍色
Hobject &objDispY, //顯示圖形黃色
Hlong hWindowHandle, //窗口句柄
BOOL bInitial //是否對圖形進行初始化操作
)
{
//復位顯示圖形
if (bInitial==TRUE)
{
objDispR.Reset();
objDispG.Reset();
objDispB.Reset();
objDispY.Reset();
}
set_system("flush_graphic","false");
//清楚顯示窗口
clear_window(hWindowHandle);
set_system("flush_graphic","true");
//顯示圖像
disp_obj(Image,hWindowHandle);
//顯示圖形
if (objDispR.Id()!=H_EMPTY_REGION)
{
set_color(hWindowHandle,"red");
disp_obj(objDispR,hWindowHandle);
}
if (objDispG.Id()!=H_EMPTY_REGION)
{
set_color(hWindowHandle,"green");
disp_obj(objDispG,hWindowHandle);
}
if (objDispB.Id()!=H_EMPTY_REGION)
{
set_color(hWindowHandle,"blue");
disp_obj(objDispB,hWindowHandle);
}
if (objDispY.Id()!=H_EMPTY_REGION)
{
set_color(hWindowHandle,"yellow");
disp_obj(objDispY,hWindowHandle);
}
set_color(hWindowHandle,"red");
}

//其原因是"flush_graphic":圖形更新參數,true顯示實時更新,false不更新可提高運行速度

其默認為true,實時更新,太是當圖像太大時,一來讀取是需要,顯示時間的,二來清除圖像有黑屏這段時間,這使得我們會有閃屏的感覺,這時,我們關閉實時顯示,清除後再打更新圖像流,便使得圖像刷新時不會閃。

同時,也引入下halcon函數中set_system的一些常用參數的意義,其轉載自http://blog.csdn.net/xy943294069/article/details/41867973,"sunny被註冊"的文章,感謝其分享

set_system( : : SystemParameter, Value : )設定系統參數

border_shape_models:設置模板是否必須在ROI內

"flush_graphic":圖形更新參數,true顯示實時更新,false不更新可提高運行速度

"int2_bits":圖像縮放相關參數,-1為自動

"backing_store":定義是否刷新所有窗口

"icon_name":定義圖形窗口的名稱編號 "default_font" *):默認字體 "update_lut":是否使用系統默認顏色表 "use_window_thread":Windows下設置為true啟用所有halcon的圖形文本消息線程,提高運行速度 "graphic_stack_size":設定圖形堆棧大小 "x_package":數據傳輸包大小,如果包過大導致錯誤,可嘗試改小 "neighborhood", "tsp_neighborhood":設定相鄰像素為4或8,對使用相鄰像素算子產生影響 "init_new_image", "tsp_init_new_image":設定新圖像過濾前是否需要填充0,如整幅圖像過濾或圖像不過濾的區域是沒有影響的,可能用於掩蓋 "no_object_result", "tsp_no_object_result":如果圖像為空是否導致異常,true發出異常 "empty_region_result", "tsp_empty_region_result":空的Region是否導致異常 "store_empty_region", "tsp_store_empty_region":定義空的(沒有任何目標)是否作為結果輸出 "clip_region", "tsp_clip_region":定義是否修剪Region以適應圖像顯示 "int_zooming":定義圖像適應大小是整數還是浮點 "pregenerate_shape_models":定義是事先生成模板還是使用時創建 "border_shape_models":與圖像邊緣接觸模板定位目標是否有效 "opengl_context_cache_enable":使用顯卡加速如果顯卡支持,3D "opengl_hidden_surface_removal_enable":顯卡加速,3D效果 "opengl_compatibility_mode_enable":顯卡加速使能 "image_dpi":設定保存圖片時的DPI分辨率 "width", "tsp_width":系統內部圖像寬度 "height", "tsp_height":系統內部圖像高度 "current_runlength_number", "tsp_current_runlength_number":Region的最大數量 "reentrant" *):設定線程並行化是否需要同步,不同步存在線程安全危險 "thread_num" *), "tsp_thread_num":設定並行化線程數量,default為使用物理內核最大數量 "thread_pool" *):是否僅使用已有的線程,false可創建新的線程 "flush_file":文件更新,false當進入換行時才更新文件 "ocr_trainf_version":定義學習的OCR文件版本 "filename_encoding":文件名稱編碼格式 "halcon_dir" *):輸入halcon安裝根目錄 "example_dir" *):輸入範例目錄 "image_dir" *):輸入圖像目錄 "3d_model_dir" *):輸入3D模型目錄 "lut_dir" *):色彩板目錄 "help_dir" *):幫助目錄 "do_low_error":低等級錯誤的丟出 "cancel_draw_result", "tsp_cancel_draw_result":被終止算子反應方式,默認繪制終止符不返回錯誤 "clock_mode":計時方式 "timer_mode"計時方式 "max_connection":可輸出的最大Region數量,0輸出所有 "extern_alloc_funct":函數指針的使用,0使用 "image_cache_capacity" *):設定圖片空間大小上限 "global_mem_cache":緩存的使用方式 "temporary_mem_cache" *):臨時緩存的使用,true重載共享,false專有 "alloctmp_max_blocksize":定義最大的存儲塊大小,temporary_mem_cache為true有效 "database" *):數據調試時使用數據表格 "mmx_enable":顯卡加速使能,mmx_supported為false無效

對於halcon與MFC或c#編程中,當寫入滾輪放縮圖像時,圖像會閃屏的解決方法