C#開發執行個體-訂製螢幕剪取工具(五)針對拖拽時閃爍卡頓的最佳化

來源:互聯網
上載者:User
由於在實現的時候偷了個賴,沒有使用主表單的地區重繪技術,而是使用一個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();                }            }        }

經過測試發現,拖拽時閃爍及卡頓的現象明顯改善。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.