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 に答える