【发布时间】:2018-12-14 00:53:52
【问题描述】:
代码很简单:我按下按钮,图片被加载到PictureBox中。
private void button1_Click(object sender, EventArgs e)
{
using (FileStream stream = File.OpenRead(FullName))
{
pictureBox1.Image = (Bitmap)Bitmap.FromStream(stream).Clone();
stream.Close();
stream.Dispose();
}
}
但是当我在 PictureBox'e 上使用其他函数\事件时,它发誓在 Graphics.FromImage 上没有足够的内存。不管我用这个时间表做什么。示例:
using (Graphics g = Graphics.FromImage(pictureBox1.Image))
{
g.Clear(Color.FromArgb(0, 255, 255, 255));
pictureBox1.Invalidate();
}
问题是,为什么我可以在将图片上传到 PictureBox 之前对 Graphics 做任何我想做的事情:剪切、填充、绘制;但是上传图片后我不能? p.s.图片尝试了不同的尺寸。同一张图片在上传前有效(已在默认图片框中),上传到图片框后无效。走了很多关于这个主题的论坛,但没有找到我的案例(或最相似的案例)。
【问题讨论】:
-
在你的第一个例子中,如果你有用于 FileStream 的 using() 块,那么你不需要调用 Close()、Dispose()。正如我在第一个示例中看到的那样,您正在调用 Clone() ,因此您有另一个对象,但第二个处理了该对象。看看这些:stackoverflow.com/questions/25723855/…
-
我认为解决方案是这样的:在图形中,“内存不足”异常主要发生在 image.propertyitems 抛出一些异常时。这时,我们需要将图像存储在流中,然后再次从流中获取图像。
标签: c# graphics picturebox