[英]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.