簡體   English   中英

圖片框滯后的位圖重繪

[英]Bitmap repaint in picturebox lagging

我有一個應用程序,您可以在其中繪制一些形狀,通過頂點捕捉它們並移動頂點。 我將形狀的頂點存儲在List並在分配給PictureBox.Image的位圖中重新繪制對象的整個列表(當頂點為catch和鼠標移動時)。 當我添加5個以上的形狀時,移動的頂點滯后。 這是一段代碼:

    private void DrawFullList()
    {
        if (pictureBox2.Image != null)
        {
            pictureBox2.Image.Dispose();
            g.Dispose();
        }
        graphic = new Bitmap(pictureBox2.Width, pictureBox2.Height);
        g = Graphics.FromImage(graphic);
        pictureBox2.Image = graphic;
        for (int i = 0; i < PointsList.Count; i++)
            Draw(BrushList[i], PointsList[i]);
    }
    private void Draw(Brush brush, Point[] points)
    {
        Pen PathPen = new Pen(brush);
        PathPen.Width = 3;
        if (points.Length == 2)
            g.DrawLine(PathPen, points[0], points[1]);
        else
            g.FillPolygon(brush,points);
        pictureBox2.Image = graphic;
    }

反正有沒有改善呢? 我正在嘗試graphic.Clear(Color.Transparent)但是無法更改位圖的大小(在調整窗口大小時使用該函數)。

有小費嗎?

我發現一個簡單的錯誤實際上導致了延遲。 pictureBox2.Image = graphic; 連續執行兩次,當PointsList.Count != 0會導致滯后。

您的代碼看起來過於復雜且無效。 另外,您的代碼過於依賴垃圾回收器(在使用后立即處置GraphicsBrushPen類是一種很好的做法)。

我認為在您的情況下,最好的主意是避免完全創建和放置位圖。 您可以將PictureBox替換為例如Panel類,訂閱其Paint事件並在此方法內繪制形狀。 當頂點位置改變時,只需調用Invalidate方法即可在面板內重新繪制形狀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM