“System.ArgumentException”出现在“System.Drawing.dll”中。

3

我有一个类似于“画板”的简单程序,我在一个位图中进行绘制,该位图设置为pictureBox.Image。我可以在这里绘制多边形,并在顶点处捕捉它们并移动,因此位图必须重新绘制。 有一个重新绘制的方法。

private void DrawFullList()
    {
        if(pictureBox2.Image != null)
            pictureBox2.Image.Dispose();
        graphic = new Bitmap(pictureBox2.Width, pictureBox2.Height); // exception here
        g = Graphics.FromImage(graphic);
        pictureBox2.Image = graphic;
        for (int i = 0; i < PointsList.Count; i++)
        {
            bool yellowframe = false;
            if (i == dblclck)
                yellowframe = true;
            Draw(BrushList[i], PointsList[i], yellowframe);
        }
    }

所以如果我捕捉顶点并移动鼠标,函数DrawFullList()将在pictureBox_MouseMove(object sender, MouseEventArgs e)函数中被激活。当我移动一个顶点几秒钟(例如画圆)时,会抛出异常'System.ArgumentException'。 这里有什么提示吗? :) 编辑: 关于异常的额外信息: 参数无效

有伴随它的特定信息吗? - rory.ap
参数无效。 - Blabla
无效值是什么?你有开启异常中断吗?通过查询该值来查看它不喜欢什么。 - rory.ap
宽度=1328,高度=1162; 但是在移动顶点时位图的大小不会改变,并且在几秒钟内正确创建。 - Blabla
1个回答

4
你需要从g - g.dispose() 处理以释放内存。由于你的 bmp 可能太大而实际上没有足够的内存,缺乏内存可能会导致此类异常。

谢谢!这对我有效。花了很多时间找解决办法,以为如果我释放图片框中的图像,它也会自动释放 :)) - Blabla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接