C#軟體開發例項.私人訂製自己的螢幕截圖工具(五)針對拖拽時閃爍卡頓現象的優化...
由於在實現的時候偷了個賴,沒有使用主窗體的區域重繪技術,而是使用一個Label元件來展現擷取的圖片區域,所以在拖拽將擷取區域變小或者是反向截圖的時候,閃爍及卡頓的現象會比較嚴重,這裡針對這兩個問題對行一些針對性的優化。
C#雙緩衝解釋:
簡單說就是當我們在進行畫圖操作時,系統並不是直接把內容呈現到螢幕上,而是先在記憶體中儲存,然後一次性把結果輸出來,如果沒用雙緩衝的話,你會發現在畫圖過程中螢幕會閃的很厲害,因為後臺一直在重新整理,而如果等使用者畫完之後再輸出就不會出現這種情況,具體的做法,其實也就是先建立一個點陣圖物件,然後把內容儲存在裡面,最後把圖呈現出來。
啟用雙緩衝
public Form1()
{
InitializeComponent();
// 解決視窗閃爍的問題
SetStyle(ControlStyles.UserPaint| ControlStyles.ResizeRedraw | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);
}
延時重繪
當滑鼠拖拽的時候,重繪會非常的頻繁,這裡使用時間來判斷,減少重繪的次數。
新增變數:
/// <summary>
/// 記錄滑鼠上一次移動的時間
/// </summary>
private long lastMouseMoveTime = System.DateTime.Now.Ticks;
在“UpdateCutInfoLabel”方法中新增重繪控制:
/// <summary>
/// 更新截圖資訊顯示框,截圖編輯工具框
/// </summary>
private void UpdateCutInfoLabel(UpdateUIMode updateUIMode) // UpdateUIMode updateUIMode = UpdateUIMode.None
{
//大於300毫秒或有元件顯示或隱藏才進行重繪
long mouseMoveTimeStep = System.DateTime.Now.Ticks - lastMouseMoveTime;
if (mouseMoveTimeStep < 300 && updateUIMode == UpdateUIMode.None) { return; }
lastMouseMoveTime = System.DateTime.Now.Ticks;
if (this.lbl_CutImage.Visible || (updateUIMode & UpdateUIMode.ShowCutImage) != UpdateUIMode.None)
{
this.lbl_CutImage.SetBounds(this.cutImageRect.Left, this.cutImageRect.Top, this.cutImageRect.Width, this.cutImageRect.Height, BoundsSpecified.All);
if (!this.lbl_CutImage.Visible)
{
this.lbl_CutImage.Show();
}
}
}
經過測試發現,拖拽時閃爍及卡頓的現象明顯改善。相關文章
- C#軟體開發例項.私人訂製自己的螢幕截圖工具(四)基本截圖功能實現C#
- C#軟體開發例項.私人訂製自己的螢幕截圖工具(一)功能概覽C#
- C#軟體開發例項.私人訂製自己的螢幕截圖工具(六)新增配置管理功能C#
- C#軟體開發例項.私人訂製自己的螢幕截圖工具(三)托盤圖示及選單的實現C#
- C#軟體開發例項.私人訂製自己的螢幕截圖工具(二)建立專案、註冊熱鍵、顯示截圖主視窗...C#
- SPX螢幕截圖軟體
- 用electron開發了一個螢幕截圖工具
- 最強大的螢幕截圖軟體:Snagit for macGitMac
- 直播平臺軟體開發,完整擷取整個螢幕的截圖方式
- TechSmith Snagit mac最強大的螢幕截圖軟體MITGitMac
- 高畫質螢幕截圖工具GrabIt ,體驗不一樣的截圖感受
- iSnapshot for Mac螢幕截圖工具Mac
- 少俠學截圖-C#螢幕捕捉的方式C#
- 如何解決開啟網頁螢幕不停閃爍的問題網頁
- Android 5.0 螢幕錄製/截圖Android
- iOS螢幕截圖的方法iOS
- Snagit 2023 for Mac(螢幕截圖軟體)GitMac
- 移動端ios螢幕滾動時filter發生抖動閃爍bugiOSFilter
- c#實現的破解程式--針對軟體使用時間限制C#
- Mac螢幕截圖工具——iSnapshot for MacMac
- selenium實現螢幕截圖
- javascript實現的div塊閃爍效果程式碼例項JavaScript
- 螢幕錄製軟體是怎麼錄製電腦螢幕影片的?
- 應用商店內產品螢幕截圖的10個優化思路優化
- Movavi Screen Recorder 22 Mac(螢幕錄影截圖軟體)Mac
- 電腦螢幕閃爍與電腦螢幕抖動的原因與解決辦法
- Python網頁截圖/螢幕截圖/截長圖如何實現?Python網頁
- Mac新手教程:Mac電腦如何設定出現警告聲音時閃爍螢幕?Mac
- Snagit2024 螢幕錄製與截圖軟體mac/win啟用版GitMac
- ScreenFloat for Mac(螢幕截圖軟體) 1.5.22啟用版Mac
- vuejs在解析時出現閃爍的原因及防止閃爍的方法VueJS
- 全功能的螢幕截圖軟體:Snagit 2021 for Mac中文版GitMac
- 螢幕截圖工具Snagit 2022 macGitMac
- TechSmith Snagit 2022螢幕截圖工具MITGit
- Snagit 2022 for Mac(螢幕截圖工具)GitMac
- 簡單好用的螢幕截圖工具:Screen Timelapse for MacMac
- Win10螢幕一直閃爍怎麼辦?Win10
- .NET 視窗/螢幕截圖