[英]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
會導致滯后。
您的代碼看起來過於復雜且無效。 另外,您的代碼過於依賴垃圾回收器(在使用后立即處置Graphics
, Brush
和Pen
類是一種很好的做法)。
我認為在您的情況下,最好的主意是避免完全創建和放置位圖。 您可以將PictureBox
替換為例如Panel
類,訂閱其Paint
事件並在此方法內繪制形狀。 當頂點位置改變時,只需調用Invalidate
方法即可在面板內重新繪制形狀。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.