0
protected void btnCropIt_Click(object s, EventArgs e)
{
    System.Drawing.Image img = System.Drawing.Image.FromFile(Server.MapPath("../upload/" + u.Avatar));
    var m = cropImage(img, new Rectangle(0, 0, 50, 50));
    System.IO.File.Delete(Server.MapPath("../upload/" + u.Avatar));
    m.Save(Server.MapPath("../upload/" + u.Avatar));
}


private static System.Drawing.Image cropImage(System.Drawing.Image img, Rectangle cropArea)
{
    Bitmap bmpImage = new Bitmap(img);
    Bitmap bmpCrop = bmpImage.Clone(cropArea, bmpImage.PixelFormat);
    return (System.Drawing.Image)(bmpCrop);
}

System.IO.File.Delete(Server.MapPath("../upload/" + u.Avatar)); 

这行代码抛出无法删除图像的异常,它被另一个进程使用。任何想法?如何覆盖它?

4

1 回答 1

1

您的代码仍在使用它。 FromFile()保持锁定状态,直到图像被处理。这是一种晦涩难懂的语义,但MSDN 文档确实提到了它。

作为一个简单的修复,img.Finalize()您可以立即尝试。cropImage()如果这不起作用,请使用FileStream将其拉入,使用System.Drawing.Bitmap Stream 构造函数重载,然后立即关闭 FileStream。

于 2012-10-23T18:35:36.770 回答