2013-08-31 4 views
3

Я использую класс BitmapSource для чтения изображения из моей временной папки, а затем чтения метаданных с использованием класса BitmapMetadata.Как избавиться от bitmapsource

BitmapSource img = BitmapFrame.Create(new Uri(filepath)); 
BitmapMetadata meta = (BitmapMetadata)img.Metadata; 
DateTime datetaken = DateTime.Parse(meta.DateTaken); 
System.IO.File.Delete(filepath); 

В то время как я пытался удалить утра изображения получаю исключение, говоря «Процесс не может получить доступ к файлу„Filepath/имя_файла“, так как он используется другим процессом.». Я подумал о размещени BitmapSource до того удаление изображения. В то время как я искал решение, я получил информацию, подобную «Вам не нужно Dispose() BitmapSource. В отличие от некоторых других« образных »классов в Framework, он не переносит никаких собственных ресурсов.

Просто позвольте выйти из сферы действия, и сборщик мусора освободит свою память ». в следующей ссылке Proper way to dispose a BitmapSource. Я просто хочу удалить файл, который существует в физической папке. Есть ли подходящий способ для удаления физического пути. Спасибо заранее.

+0

Вы можете посмотреть здесь, это может быть полезно http://stackoverflow.com/questions/542217/load-a-bitmapsource -and-save-using-the-same-name-in-wpf-ioexception, в частности, третий ответ – ameer

+0

** @ ameer ** Третий ответ в этой ссылке: image.CacheOption = BitmapCacheOption.OnLoad; ', is not Это? Но у BitmapSource нет свойства CacheOption или так. Я ошибаюсь везде, пожалуйста, предлагайте. – shivasai

ответ

1

Вы можете сделать верхний предложенный ответ here и скопировать файл в поток сначала и инициализировать источник растрового изображения из потока, например.

 MemoryStream memoryStream = new MemoryStream(); 

     byte[] fileBytes = File.ReadAllBytes(filepath); 
     memoryStream.Write(fileBytes, 0, fileBytes.Length); 
     memoryStream.Position = 0; 

     BitmapSource img = BitmapFrame.Create(memoryStream); 
     BitmapMetadata meta = (BitmapMetadata)img.Metadata; 
     DateTime datetaken = DateTime.Parse(meta.DateTaken); 
     System.IO.File.Delete(filepath); 

Я попробовал это, и это работает для меня

+1

Спасибо ** ameer **, он отлично работал для меня. – shivasai

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