C# Graphics DrawImage使用大红色X导致错误

C# Graphics DrawImage使用大红色X导致错误,c#,windows,graphics,bitmap,drawimage,C#,Windows,Graphics,Bitmap,Drawimage,我有一个位图图像的集合,我正在循环并将它们全部写入一个新的位图。基本上,我是一个松散的位图集合,并将它们一个接一个地写入一个位图,以便它们作为一个图像可见 当我从集合中的一个位图调用dc.DrawImage到新位图时,我的winform在窗体中显示一个大的红色X。当我将PictureBox.Image设置为新绘制的位图时,我得到了一个大的红色X 由于某种原因,我在任何地方都找不到错误。我无法通过调试找到错误 现在,如果我只是将PictureBox.Image设置为图像集合中的一个图像,而不进行外

我有一个位图图像的集合,我正在循环并将它们全部写入一个新的位图。基本上,我是一个松散的位图集合,并将它们一个接一个地写入一个位图,以便它们作为一个图像可见

当我从集合中的一个位图调用dc.DrawImage到新位图时,我的winform在窗体中显示一个大的红色X。当我将PictureBox.Image设置为新绘制的位图时,我得到了一个大的红色X

由于某种原因,我在任何地方都找不到错误。我无法通过调试找到错误

现在,如果我只是将PictureBox.Image设置为图像集合中的一个图像,而不进行外循环并绘制到新的位图上,那么一切都可以正常工作

为了使一切变得简单,我只使用集合中的一个位图,并将一个位图绘制到新位图中。所以我知道我只有一个位图可以工作,然后我可以添加其他的

在下面的图像中,如果我只设置集合中图像的picturebox.image,则表单看起来是什么样子。 第二个图像是在我循环并将集合中的位图绘制到另一个位图后显示的错误

下面的代码是需要工作的,但会抛出一个错误

注意我在哪里设置PictureBox.Image的属性,如下所示: this.picBx.Image=时间表;这会导致错误

但是如果我这样设置picturebox.image:

this.picBx.Image=明细表[0]。门;它很好用

  DoorSchedules schedules = GetDoorDrawing(elev, projInfo.ProjectName);
            int prevWidth = 0;
            //
            using (Bitmap schedule = new Bitmap(schedules.Width + 50, schedules.Height + 50))
            {
                using (Graphics dc = Graphics.FromImage(schedule))
                {
                    using (Pen pen = new Pen(LINE_COLOR))
                    {
                        pen.Width = 4;
                        pen.Color =
                            Color.FromArgb(50, LINE_COLOR.R, LINE_COLOR.G, LINE_COLOR.B);
                        //
                        for (byte i = 0; i < schedules.Count; i++)
                        {
                            if (i > 0)
                            {
                                dc.DrawLine(pen, prevWidth - 25, 0,
                                                 prevWidth - 25, schedule.Height);
                            };

                            dc.DrawImage(schedules[i].Door, prevWidth, 0);

                            prevWidth += schedules[i].Door.Width;
                        };
                    };
                };
                this.picBx.Image = schedule;
                this.picBx.BackColor = BACK_COLOR;
                this.Size = new System.Drawing.Size(schedule.Width, schedule.Height);
            };
DoorSchedules=GetDoorDrawing(elev,projInfo.ProjectName);
int-prevWidth=0;
//
使用(位图明细表=新位图(schedules.Width+50,schedules.Height+50))
{
使用(Graphics dc=Graphics.FromImage(明细表))
{
使用(画笔=新画笔(线条颜色))
{
笔宽=4;
笔,颜色=
Color.FromArgb(50,LINE\u Color.R,LINE\u Color.G,LINE\u Color.B);
//
for(字节i=0;i0)
{
直流抽绳(钢笔,宽度-25,0,
(宽度-25,附表。高度);
};
DrawImage(明细表[i]。门,宽度,0);
prevWidth+=明细表[i].Door.Width;
};
};
};
this.picBx.Image=时间表;
this.picBx.BackColor=背色;
this.Size=new System.Drawing.Size(schedule.Width,schedule.Height);
};

在using语句中定义了
位图计划


当using块结束时,位图被释放。

在我离开using语句之前,我正在设置pricturebox.image属性。没关系。您没有将位图的单独副本分配给picturebox.image-picturebox.image和schedule都引用同一个对象,该对象将被释放。