【发布时间】:2011-12-08 05:58:51
【问题描述】:
我编写了一个从文件中读取 png 图像并通过控制显示的代码。
我想从流中读取图像并设置
control.BackgroundImage = Image.FromStream(memStream);
但是在使用这段代码时,会出现"out of memory"异常。但是在使用时
control.Image = Image.FromStream(memStream);
或
control.BackgroundImage = Image.FromFile(fileSource);
,这是工作。
图像文件大小为 5KB。
if (System.IO.File.Exists(imgSource))
{
using (FileStream localFileStream = new FileStream(imgSource, FileMode.Open))
{
using (MemoryStream memStream = new MemoryStream())
{
int bytesRead;
byte[] buffer = new byte[1024];
while ((bytesRead = localFileStream.Read(buffer, 0, buffer.Length)) > 0)
{
memStream.Write(buffer, 0, bytesRead);
}
retIMG = Image.FromStream(memStream);
pictureBox1.Image = retIMG; // is work
label1.Image = retIMG; // is work
button1.Image = retIMG; // is work
button1.BackgroundImage = retIMG; // don't work
groupBox1.BackgroundImage = retIMG; // don't work
panel1.BackgroundImage = retIMG; // don't work
}
}
}
我认为是 .net 框架中的一个错误。 请你帮帮我?
【问题讨论】:
-
哪一部分有问题?我建议您先将图像放入变量中,然后在第二次操作中赋值。图片有多大? 5ggb 文件大小可以是 50.000x50.000 像素 ;)
-
图像报告“内存不足”,几乎所有出现问题。
-
就像 Henk 所说的那样,GDI+(以及
System.Drawing)在许多情况下会抛出 OutOfMemory 错误,而实际上并不是内存不足,例如无效参数。我猜这是其中之一。
标签: c# winforms image exception