2012-10-23 2 views
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)); 

Эта строка кода исключает исключение, что она не может удалить изображение, оно используется другим процессом. Есть идеи? Как переписать его?Как обрезать изображение и перезаписывать

+0

попытайтесь сделать Image.Clone перед прохождением изображения в cropImage function ... –

ответ

1

Ваш код по-прежнему использует его. FromFile() держит его запертым до тех пор, пока изображение не будет расположено. Это своего рода неясная семантика, но об этом упоминает MSDN documentation.

Вы можете попробовать img.Finalize() сразу после cropImage() как простое исправление. Если это не сработает, потяните его на FileStream, используйте перегрузку конструктора потока System.Drawing.Bitmap, затем немедленно закройте FileStream.

Смежные вопросы