图形DrawImage导致大红色X出错

时间:2013-01-30 00:48:23

标签: c# windows graphics bitmap drawimage

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

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

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

现在,如果我只是将PictureBox.Image设置为图像集合中的一个图像而没有循环并绘制到新的位图上,一切正常。

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

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

下面的代码是需要工作的,但会引发错误。

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

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

this.picBx.Image = schedule [0] .Door;它运作得很好。

  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);
            };

enter image description here

1 个答案:

答案 0 :(得分:1)

您在使用声明中定义了Bitmap schedule

当使用块结束时,会丢弃位图。