生成缩略图后,再对这张图片操作,就出错:该进程无法访问文件“”,因为该文件正由另一进程使用。
代码如下://从文件取得图片对象
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();是否没有完全释放资源?

解决方案 »

  1.   

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

  2.   

    省略的代码是这样的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);请指点一下
      

  3.   

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

  4.   

    今天刚刚写完,顺便给你吧 :)/// <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);
          }
        }
      }
    }
      

  5.   

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