winform二进制数组转图片报内存不足 图片二进制winform内存不足二进制转图片 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 本来是方法内的局域变量来着,连Image也是,也报这错误来着。 public bool SetPic(byte[] filebytes) { MemoryStream ms = new MemoryStream(filebytes); Image img = Image.FromStream(ms); ms.Close(); ms.Dispose();} 试试 GDI+报的内存不足基本都不是内存不足,而是因为GDI+对内存的使用和.net的GC机制一直都有些冲突。如果是用MemoryStream创建image,不要手动close或者dispose它,很可能会出错的(也有办法能让它100%重现out of memory),你的代码里把if (ms != null) ms.Close();去掉说不定就好了。如果不行,那需要保持对ms的引用,不要让它被GC。 这让我想起了MSDN里FromStream的一段话:You must keep the stream open for the lifetime of the Image. 将图像以二进制流形式存储到数据库中示例 protected void imgbtnCreate_Click(object sender, ImageClickEventArgs e) { string PerHomeName=tbPerHomeName.Text;//获取空间名 string PerHomeSign=txtPerSign.Text; //获取个性签名 string imgPath = uploadFile.PostedFile.FileName;//获取文件件名 string lastName = imgPath.Substring(imgPath.LastIndexOf(".") + 1);//获取文件上传后缀名 SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["conStr"]); conn.Open(); if (uploadFile.PostedFile.FileName != "" && lastName.ToLower() == "jpg" || lastName.ToLower() == "gif") { if (uploadFile.PostedFile.ContentLength > 40960) { Response.Write("<script language='javaScript'>alert('你上传的图片超过了40KB!')</script>"); return; } int imgLength = uploadFile.PostedFile.ContentLength;//获取上传文件大小 Byte[] imageData = new Byte[imgLength]; //定义Byte数组 HttpPostedFile hp = uploadFile.PostedFile;//创建访问客户端上传文件的对象 Stream imagestream = hp.InputStream;//创建数据流对象 //将图片数据放到image数据对象实例中,其中0代表数组指针的起始位置,imagelength表示要读取流的长度 imagestream.Read(imageData, 0, imgLength); string sqlstr = "insert into PerHomeDetail(PerHomeName,PerHomeSign,PerHomeLogo)values('" + PerHomeName + "','" + PerHomeSign + "',@ImageData)"; SqlCommand comm = new SqlCommand(sqlstr, conn); comm.Parameters.Add("@ImageData", SqlDbType.Image); comm.Parameters["@ImageData"].Value = imageData; comm.ExecuteNonQuery(); conn.Close(); Response.Write("<Script>alert('个人空间创建成功!')</Script>"); } else { Response.Write("<script>alert('上传头像不能为空,且格式必须为gif或jpg!');location='javascript:history.go(-1)'</script>"); } } 图片用完记得dispose就可以了。 我的貌似是解决了,不是没对流和图片释放的问题。应该是被PictureEdit控件占住了图片和流,无法进行彻底释放。我把这控件的Image给释放,目前尝试存了百来张5MB的,没在溢出。如果你也是有用控件将图片给显示出来,也尝试下在流和图片都关闭之后,将这个图片显示控件在窗体关闭前也做一次累死Dispose的操作吧 Winform怎么保存当前打开的整个文件夹? 关于DLL中如何触发(调用此dll的应用程序中的)事件 Managed DirectX 双声道处理 CS_Test2005_07_07, MS有没有带项目的例子,在MSDN什么地方呢? 制作安装程序时,通过regasm.exe注册程序集。安装时弹出dos窗口,能否隐藏 C#基于USB2.0的高速图像显示 请教DataReader 关于委托的一个问题 求用鼠标绘两个矩形并判断两个矩形是否有重叠的方法!可再加一百! 关于图标的使用问题! 写了一个应用程序 需要自己写注册表么?注册表具体是什么意思? wpf应用程序
{
MemoryStream ms = new MemoryStream(filebytes);
Image img = Image.FromStream(ms); ms.Close();
ms.Dispose();
} 试试
这让我想起了MSDN里FromStream的一段话:You must keep the stream open for the lifetime of the Image.
protected void imgbtnCreate_Click(object sender, ImageClickEventArgs e)
{
string PerHomeName=tbPerHomeName.Text;//获取空间名
string PerHomeSign=txtPerSign.Text; //获取个性签名
string imgPath = uploadFile.PostedFile.FileName;//获取文件件名
string lastName = imgPath.Substring(imgPath.LastIndexOf(".") + 1);//获取文件上传后缀名
SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["conStr"]);
conn.Open();
if (uploadFile.PostedFile.FileName != "" && lastName.ToLower() == "jpg" || lastName.ToLower() == "gif")
{
if (uploadFile.PostedFile.ContentLength > 40960)
{
Response.Write("<script language='javaScript'>alert('你上传的图片超过了40KB!')</script>");
return;
}
int imgLength = uploadFile.PostedFile.ContentLength;//获取上传文件大小
Byte[] imageData = new Byte[imgLength]; //定义Byte数组
HttpPostedFile hp = uploadFile.PostedFile;//创建访问客户端上传文件的对象
Stream imagestream = hp.InputStream;//创建数据流对象
//将图片数据放到image数据对象实例中,其中0代表数组指针的起始位置,imagelength表示要读取流的长度
imagestream.Read(imageData, 0, imgLength);
string sqlstr = "insert into PerHomeDetail(PerHomeName,PerHomeSign,PerHomeLogo)values('" + PerHomeName + "','" + PerHomeSign + "',@ImageData)";
SqlCommand comm = new SqlCommand(sqlstr, conn);
comm.Parameters.Add("@ImageData", SqlDbType.Image);
comm.Parameters["@ImageData"].Value = imageData;
comm.ExecuteNonQuery();
conn.Close();
Response.Write("<Script>alert('个人空间创建成功!')</Script>");
}
else
{
Response.Write("<script>alert('上传头像不能为空,且格式必须为gif或jpg!');location='javascript:history.go(-1)'</script>");
}
}
我的貌似是解决了,不是没对流和图片释放的问题。应该是被PictureEdit控件占住了图片和流,无法进行彻底释放。我把这控件的Image给释放,目前尝试存了百来张5MB的,没在溢出。如果你也是有用控件将图片给显示出来,也尝试下在流和图片都关闭之后,将这个图片显示控件在窗体关闭前也做一次累死Dispose的操作吧