我有一组循环浏览的位图图像,并将它们全部写入一个新的位图。基本上,我要收集一组松散的位图,并将它们全部一张一张地写到一张位图中,以便它们可以作为一个图像看到。
当我从集合中的一个位图调用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);
};
最佳答案
您在using语句中定义了Bitmap schedule
。
当该使用块结束时,将位图放置。
关于c# - 图形DrawImage导致红色大X错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14594886/