C# 在picturebox中重新绘制位图
我有一个应用程序,你可以画一些形状,捕捉它们的顶点和移动垂直。我将形状的顶点存储在C# 在picturebox中重新绘制位图,c#,winforms,drawing,C#,Winforms,Drawing,我有一个应用程序,你可以画一些形状,捕捉它们的顶点和移动垂直。我将形状的顶点存储在列表中并在分配给PictureBox.Image的位图中重新绘制整个对象列表(当捕捉到顶点并移动鼠标时)。当我添加5个以上的形状时,移动的垂直面是滞后的。下面是一段代码: private void DrawFullList() { if (pictureBox2.Image != null) { pictureBox2.Image.Dispos
列表中
并在分配给PictureBox.Image
的位图中重新绘制整个对象列表(当捕捉到顶点并移动鼠标时)。当我添加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;
}
private void DrawFullList()
{
if(pictureBox2.Image!=null)
{
pictureBox2.Image.Dispose();
g、 处置();
}
图形=新位图(pictureBox2.Width,pictureBox2.Height);
g=图形。FromImage(图形);
pictureBox2.图像=图形;
for(int i=0;i
如果有什么好办法的话?我试图graphic.Clear(Color.Transparent)
但无法更改位图的大小(调整窗口大小时使用该函数)
有什么建议吗?我发现了一个简单的错误,这就是造成滞后的原因<代码>pictureBox2.Image=图形当
PointsList.Count!=0
是什么造成了滞后。您的代码看起来过于复杂且无效。此外,您的代码过于依赖垃圾收集器(最好在使用后立即处理图形
、画笔
和画笔
类)
我认为在您的情况下,最好的办法是避免完全创建和处理位图。例如,您可以使用Panel
类替换PictureBox
,订阅其Paint
事件并在此方法内绘制图形。当顶点的位置发生变化时,只需调用Invalidate
方法在面板内重新绘制形状。可能重复的