CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

生成缩略图的问题,生成后无法删除

楼主wolanda(wolanda)2005-12-16 09:37:14 在 .NET技术 / ASP.NET 提问

生成缩略图后,再对这张图片操作,就出错:该进程无法访问文件“”,因为该文件正由另一进程使用。  
  代码如下:  
   
  //从文件取得图片对象  
  System.Drawing.Image   image   =   System.Drawing.Image.FromFile(originalFilename);  
  //新建一个bmp图片  
  System.Drawing.Image   bitmap   =   new   System.Drawing.Bitmap(size.Width,size.Height);  
  //新建一个画板  
  System.Drawing.Graphics   g   =   System.Drawing.Graphics.FromImage(bitmap);  
   
  ......  
   
  //结束  
  bitmap.Dispose();  
  image.Dispose();  
  g.Dispose();  
   
  是否没有完全释放资源? 问题点数:20、回复次数:7Top

1 楼anantnt203120(阿南)回复于 2005-12-16 09:45:28 得分 0

保存到数据里,再从数据库里取,就没有这个问题。Top

2 楼wolanda(wolanda)回复于 2005-12-16 10:13:26 得分 0

保存到数据里是什么意思?  
  你是指把图片存到数据库里?  
   
  图片名称我是存到数据库里的,然后再从数据库里取出来操作的  
   
  如果我生成了这张图片,马上对它进行删除操作,就出错了  
  但过一段时间再进行删除操作就可以Top

3 楼amnoh(会走路的鱼)回复于 2005-12-16 11:19:27 得分 5

楼主,你把关键的代码给省略了,  
  bitmap.Dispose();  
  image.Dispose();  
  g.Dispose();  
  这几句释放的是图像处理相关的资源,  
  但你的图像是怎么保存的??  
  应当用Stream了吧,看看那个Stream是不是正常关闭了,否则,再操作时肯定会"该进程无法访问文件,因为该文件正由另一进程使用"的,Top

4 楼wolanda(wolanda)回复于 2005-12-16 11:36:21 得分 0

省略的代码是这样的  
   
  System.Drawing.Size   size   =   new   Size(width   ,   height);  
  //新建一个bmp图片  
  System.Drawing.Image   bitmap   =   new   System.Drawing.Bitmap(size.Width,size.Height);  
  //新建一个画板  
  System.Drawing.Graphics   g   =   System.Drawing.Graphics.FromImage(bitmap);  
  //设置高质量插值法  
  g.InterpolationMode   =   System.Drawing.Drawing2D.InterpolationMode.High;  
  //设置高质量,低速度呈现平滑程度  
  g.SmoothingMode   =   System.Drawing.Drawing2D.SmoothingMode.HighQuality;  
  //清空一下画布(指定边沿颜色)  
  g.Clear(Color.White);  
  //在指定位置画图  
  g.DrawImage(image,   new   System.Drawing.Rectangle(0,   0,   bitmap.Width,   bitmap.Height),    
  new   System.Drawing.Rectangle(0,   0,   image.Width,image.Height),  
  System.Drawing.GraphicsUnit.Pixel);  
  //保存高清晰度的缩略图  
  bitmap.Save(strGoodFile,   System.Drawing.Imaging.ImageFormat.Jpeg);  
   
  请指点一下Top

5 楼tiaoci(我挑刺,我快乐)回复于 2005-12-16 17:26:22 得分 0

这是.NET的一个BUG,你可以先把文件读取到MemoryStream中  
  再生成图象Top

6 楼tiaoci(我挑刺,我快乐)回复于 2005-12-16 17:29:18 得分 10

今天刚刚写完,顺便给你吧   :)  
   
  ///   <summary>  
  ///   装载图片并且防止图片被锁定  
  ///   http://support.microsoft.com/kb/311754/EN-US/  
  ///   </summary>  
  ///   <param   name="fileName">图片文件</param>  
  ///   <returns>返回装载的图片对象</returns>  
  public   static   Image   LoadImage(string   fileName)  
  {  
      using(FileStream   stream   =   new   FileStream(  
          fileName,   FileMode.Open,   FileAccess.Read))  
      {  
          using(BinaryReader   reader   =   new   BinaryReader(stream))  
          {  
              //   取得所有的图片数据  
              byte[]   buffer   =   new   byte[stream.Length];  
              reader.Read(buffer,   0,   (int)stream.Length);  
   
              //   然后创建一个内存中的Stream对象去生成图片  
              //   这样文件就不会被锁定了  
              using(MemoryStream   ms   =   new   MemoryStream(buffer))  
              {  
                  return   Image.FromStream(ms);  
              }  
          }  
      }  
  }Top

7 楼greennetboy(我的老婆叫静静)回复于 2005-12-17 03:10:48 得分 5

http://blog.csdn.net/greennetboy/archive/2005/12/09/547616.aspx  
  http://www.chinamacro.com/blog/visit_detail.aspx?blogID=46Top

相关问题

  • 生成缩略图出现问题,缩略图无法显示
  • 生成索略图,无法用ie打开,用photoshop打开提示错误。hlep.....
  • 生成缩略图程序
  • 一些cgi生成文件无法删除,如何办?
  • php论坛生成的文件无法删除?
  • 如何自动生成缩略图?(事先没有缩略图)
  • 如何自动生成缩略图?(事先没有缩略图)
  • 如何自动生成缩略图?(事先没有缩略图)
  • ASP怎样生成缩略图
  • 在服务器端生成缩略图?

关键词

  • .net
  • 文件
  • 数据库
  • 代码
  • 数据
  • 生成
  • 图片
  • drawing
  • 删除
  • bitmap

得分解答快速导航

  • 帖主:wolanda
  • amnoh
  • tiaoci
  • greennetboy

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo