GDI+ 中发生一般性错误,是什么意思?

limingdedujuan 2007-05-11 04:57:11
public void SaveToFile(string fileName)
{
try
{
fs = new FileStream(fileName, FileMode.Create, FileAccess.Write);
BinaryWriter bWriter = new BinaryWriter(fs);
foreach (object per in persionList)
{
Persion p = per as Persion;
bWriter.Write(p.name);
bWriter.Write(p.age);
bWriter.Write(p.address);

//Image存入字节数组
MemoryStream ms = new MemoryStream();
p.picture.Save(ms, ImageFormat.Jpeg);//这一句的时候出错了,但是不知道为什么

byte[] buffer = new byte[ms.Length];
ms.Position = 0;
ms.Read(buffer, 0, (int)ms.Length);
ms.Flush();
ms.Close();
//写入字节数组的大小
Int32 len;
len = (Int32)buffer.Length;
bWriter.Write(len);
//字节数组写入二进制流中
bWriter.Write(buffer);
}
bWriter.Flush();
fs.Flush();
fs.Close();
bWriter.Close();
}
catch (Exception exp)
{
throw new Exception(exp.Message);
}
}
...全文
7889 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
mjp1234airen4385 2011-05-30
  • 打赏
  • 举报
回复
一般性错误,一般就是内存处理错误。
xiaozheyoutianxia 2011-05-30
  • 打赏
  • 举报
回复
抛出的是什么异常?? 你的二进制是如何处理的
effun 2011-05-30
  • 打赏
  • 举报
回复
以前有碰到过类似的情况,是因为某个GDI+对象在使用时被意外Dispose掉了。对于图片来说,如果图片对象是用Image.FromStream创建的,那有可能用于创建图片的流已经被GC释放掉了。
chentank 2011-05-30
  • 打赏
  • 举报
回复
检查一下,文件的保存路径对不对,这个问题多是因为路径不正确
rainmanstu 2011-05-30
  • 打赏
  • 举报
回复
同意没用啊,得解决
fw629 2007-06-11
  • 打赏
  • 举报
回复
同意楼上
wang51346 2007-06-11
  • 打赏
  • 举报
回复
同意
icehawk 2007-05-25
  • 打赏
  • 举报
回复
同意ls的,还有一种办法是bitmap.LockBits()

private byte[] GetByteFromImage(Image inputimage)
{
byte[] byteImage = new byte[0];
using (MemoryStream ms = new MemoryStream())
{
try
{
Bitmap bitmap = new Bitmap(inputimage);
GraphicsUnit gu = GraphicsUnit.Pixel;
RectangleF rectf = inputimage.GetBounds(ref gu);
Rectangle rect = new Rectangle((int)rectf.X, (int)rectf.Y, (int)rectf.Width, (int)rectf.Height);
System.Drawing.Imaging.BitmapData bd = bitmap.LockBits(rect,
System.Drawing.Imaging.ImageLockMode.ReadOnly, bitmap.PixelFormat);
bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
byteImage = ms.ToArray();
bitmap.UnlockBits(bd);
}
catch (Exception ex)
{
_lastError = PublicDef.Public_SystemException + ":(GetByteFromImage)" + ex.Message;
CLog.Context.WriteLine(ModuleName, _lastError);
}
}

return byteImage;
}
wang51346 2007-05-25
  • 打赏
  • 举报
回复
可参考: http://hi.baidu.com/tease/blog/item/c52b58da2aad2edbb7fd4831.html
这段程序没有问题,问题是出在你从数据库中读入图片给picture.Image的时候被锁定,
我解决方法如下,供参考:
// 取得照片 采用副本 解决GDI+ 中出现一般性错误
Image ReadImage(object img)
{
if (img is DBNull) return null;
byte[] date = (byte[])img;
MemoryStream ms = new MemoryStream(date);
Bitmap bmp = new Bitmap(ms);
ms.Close();
Bitmap bmp2 = new Bitmap(96, 128, PixelFormat.Format16bppRgb555);
Graphics g = Graphics.FromImage(bmp2);
g.DrawImage(bmp, new Rectangle(0, 0, 96, 128));
g.Dispose();
bmp.Dispose();//释放bmp文件资源
return (Image)bmp2;
}


hertcloud 2007-05-13
  • 打赏
  • 举报
回复
具体 异常是 什么?

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧