Получение размера изображения без блокировки файла в WPF

#c# #wpf #image

#c# #wpf #изображение

Вопрос:

В приложении WPF я получаю размер изображения (ширину и высоту) перед его реальной загрузкой (поскольку я загружаю его с уменьшенным размером …) и я использую этот код C # для его получения:

 BitmapFrame frame = BitmapFrame.Create(new Uri(path), BitmapCreateOptions.DelayCreation, BitmapCacheOption.None);
Size s = new Size(frame.PixelWidth, frame.PixelHeight);
  

Это работает нормально, но затем блокируется файл изображения, который я позже хочу удалить с помощью приложения, но не могу. Я знаю, если я установлю BitmapCacheOption.При загрузке это решает проблему, но затем загружает изображение, поэтому я теряю преимущество, которое я хочу получить, загружая его с уменьшенным размером (используя DecodePixelWidth и т.д.).

Итак, кто-нибудь знает, как получить размер изображения заранее, не блокируя изображение?

Ответ №1:

Возможно, вам следует использовать stream в разделе использование блока, чтобы снять блокировку после получения нужного размера изображения

 using (FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read))
{
   BitmapFrame frame = BitmapFrame.Create(fileStream , BitmapCreateOptions.DelayCreation, BitmapCacheOption.None);
   Size s = new Size(frame.PixelWidth, frame.PixelHeight); 
}
  

Комментарии:

1. Спасибо Stecya, это работает! На самом деле, тем временем я сам нашел ответ, и это та же самая буква за буквой, что и вы написали. Только одно, размер должен быть объявлен вне блока using для последующего использования (но я знаю, что вы это знаете).