2

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

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

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

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

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

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

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

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

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

this.picBx.Image = schedules[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);
            };

在此处输入图像描述

4

1 回答 1

1

您已Bitmap schedule在 using 语句中定义。

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

于 2013-01-30T00:59:50.070 回答