C# GDI+ 内存不足 打开一个由图片转换成的二进制文件,转成png格式,在画这些图片时会报内存不足。问:为什么会报内存不足?怎么解决? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 PointF[] destinationPoints = { new PointF(_dx + _dw, _dy), new PointF(_dx, _dy), new PointF(_dx + _dw, _dy + _dh) };g.DrawImage(_img, destinationPoints, _sr, GraphicsUnit.Pixel, imageAttributes);由于代码太乱了~~只粘了画的函数,这个_img不是空,当我把这个_img保存为png格式后,再用Image.FromFile(path);打开时,就不会报内存不足.图也是对的. FileStream MemoryStream 没关闭。把代码贴出来。 当我把这个_img保存为png格式后,再用Image.FromFile(path);打开时,就不会报内存不足.图也是对的. 打开之前把前面的画图片什么的都关闭就好了 g.Dispose(); stream.Close(); _img.Save(@"d:\0.png");Image img = Image.FromFile(@"d:\0.png");PointF[] destinationPoints = { new PointF(_dx + _dw, _dy), new PointF(_dx, _dy), new PointF(_dx + _dw, _dy + _dh) };g.DrawImage(_img, destinationPoints, _sr, GraphicsUnit.Pixel, imageAttributes);这样写就不会报内存不足,为什么会这样呢? 上面写错了~~_img 应该是img “野指针” 能给点解释吗?我也觉得是对象赋值的问题,可是我用了图片的CLONE还是不行,复制BYTE[]不知道行不行? //b = Image.FromFile("C:\\13.png"); //MemoryStream ms = new MemoryStream(); //b.Save(ms, ImageFormat.Png); //byte[] bytes = ms.GetBuffer(); //FileStream fs = new FileStream(@"E:\1231.bit", FileMode.Create, FileAccess.Write); //BinaryWriter bw = new BinaryWriter(fs); //bw.Write(bytes.Length); //bw.Write(bytes); //bw.Close(); //fs.Close(); FileStream fs1 = new FileStream(@"E:\1231.bit", FileMode.Open, FileAccess.Read); BinaryReader br = new BinaryReader(fs1); int count = br.ReadInt32(); byte[] bytesArray = br.ReadBytes(count); MemoryStream ms1 = new MemoryStream(bytesArray); b1 = Image.FromStream(ms1); br.Close(); fs1.Close();这样可以画b1,我伤不起啊~~~ GDI+在绘图时做了优化,从流打开的图片并不会立即全部读入内存中。如果绘制图片有缩略,可以只读取部分数据。 感谢大牛们的金玉良言,虽没有答案,却对GDI+,IO懂了多了一些。分不多,平均分了~~ B/S编程问题 c#导出EXCEL问题 如何为局域网的一个节点(192.168.1.2:10000)配置一个在互联网中的节点呢? 比如进行qq聊天. 如何获得windows下,当前用户的Temp临时目录的路径? 一个与学生的成绩单的问题! 使用DataGrid的一个严重的问题 求一简单正则表达式 MeasureString问题,请高手指教! 准备跳槽,散分大行动!有些关于COM/DCOM,COM+,ASP.Net,WS,Remoting的请大家参与讨论!可另开贴加分! 求助选择列的问题 问一个有点弱弱的问题哈 Head first c# lab2 问题 - 请各位大虾帮忙
PointF[] destinationPoints = { new PointF(_dx + _dw, _dy), new PointF(_dx, _dy), new PointF(_dx + _dw, _dy + _dh) };
g.DrawImage(_img, destinationPoints, _sr, GraphicsUnit.Pixel, imageAttributes);由于代码太乱了~~只粘了画的函数,这个_img不是空,当我把这个_img保存为png格式后,再用Image.FromFile(path);打开时,就不会报内存不足.图也是对的.
g.Dispose();
stream.Close();
_img.Save(@"d:\0.png");
Image img = Image.FromFile(@"d:\0.png");
PointF[] destinationPoints = { new PointF(_dx + _dw, _dy),
new PointF(_dx, _dy),
new PointF(_dx + _dw, _dy + _dh) };
g.DrawImage(_img, destinationPoints, _sr, GraphicsUnit.Pixel, imageAttributes);这样写就不会报内存不足,为什么会这样呢?
“野指针” 能给点解释吗?我也觉得是对象赋值的问题,可是我用了图片的CLONE还是不行,复制BYTE[]不知道行不行?