2016-06-21 3 views
0

Это мой код для изменения размера изображения. Он отлично работает, но когда я пытаюсь удалить ранее созданный, у меня есть ошибка «файл используется другим процессом». Это код:Измененное изображение заблокированное изображение

try 
{ 
    int newHeight = width * fromStream.Height/fromStream.Width; 

    Image newImage = new Bitmap(width, newHeight); 
    using (Graphics graphicsHandle = Graphics.FromImage(newImage)) 
    { 
     graphicsHandle.InterpolationMode = InterpolationMode.HighQualityBicubic; 
     graphicsHandle.DrawImage(fromStream, 0, 0, width, newHeight); 
    } 
    string processedFileName = String.Concat(Configuration.CoverLocalPath, @"\Processed\res_", Path.GetFileName(imageFile)); 
    newImage.Save(processedFileName, ImageFormat.Jpeg); 
    newImage.Dispose(); 

    return processedFileName; 
} 
catch (Exception ex) 
{ 
    Configuration.Log.Debug("Utility.cs", "ResizeMainCover", ex.Message); 
    return string.Empty; 
} 

Я попытался уничтожить объект изображения, но безуспешно. Любые намеки?

+0

У вас может быть выход открытым в некотором просмотре ... –

+0

На самом деле это изображение находится внутри ячейки datagridView ... – Ras

ответ

1

Без кода, его трудно сказать, но, скорее всего, виновником является ваш fromStream, который не закрывается и не устанавливается надлежащим образом. Я предполагаю, что «ранее созданный» означает ваш исходный поток. Попытайтесь обернуть его в операторе using, обратите внимание, что я также завернул newImage, чтобы он был правильно утилизирован в случае исключения.

using(var fromStream = GetSourceImageStream()) 
{ 
    try 
    { 
     int newHeight = width * fromStream.Height/fromStream.Width; 

     using(Image newImage = new Bitmap(width, newHeight)) 
     { 
     using (Graphics graphicsHandle = Graphics.FromImage(newImage)) 
     { 
      graphicsHandle.InterpolationMode = InterpolationMode.HighQualityBicubic; 
      graphicsHandle.DrawImage(fromStream, 0, 0, width, newHeight); 
     } 
     string processedFileName = String.Concat(Configuration.CoverLocalPath, @"\Processed\res_", Path.GetFileName(imageFile)); 
     newImage.Save(processedFileName, ImageFormat.Jpeg); 
     }  
     return processedFileName; 
    } 
    catch (Exception ex) 
    { 
     Configuration.Log.Debug("Utility.cs", "ResizeMainCover", ex.Message); 
     return string.Empty; 
    } 
    finally 
    { 
     fromStream.Close(); 
    } 
} 
Смежные вопросы