【问题标题】:Graphics DrawImage causes error with big red X图形 DrawImage 导致大红色 X 错误
【发布时间】:2013-01-30 00:48:23
【问题描述】:

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

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

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

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

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

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

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

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

但是如果我像这样设置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);
            };

【问题讨论】:

    标签: c# windows graphics bitmap drawimage


    【解决方案1】:

    您在 using 语句中定义了 Bitmap schedule

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

    【讨论】:

    • 我在离开 using 语句之前设置了 pricturebox.image 属性。
    • 没关系。您没有将位图的单独副本分配给 picturebox.image - picturebox.image 和 schedule 都引用同一个对象,该对象将被释放。
    猜你喜欢
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 2022-11-11
    相关资源
    最近更新 更多