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
方法在面板内重新绘制形状。

可能重复的