Просмотр файла изображения без его блокировки.(Копировать в память?) - PullRequest
4 голосов
/ 01 февраля 2012

Я хочу иметь возможность открывать / просматривать изображение (.jpg) без блокировки файла.В основном у меня есть программа, которая позволяет пользователю выбрать изображение, которое будет перезаписывать изображение.Но проблема в том, что я отображаю изображение, которое перезаписывается.Итак, как мне загрузить изображение, не блокируя его?

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

Image1.Source = new BitmapImage( new Uri( myFilePath ) ) ); 

myFilePath равен строке, которая будет выглядеть примерно так: C: \ Users * \ Мои Фотографии \ Sample.jpg "

Ответы [ 3 ]

8 голосов
/ 01 февраля 2012

myBitmap.CacheOption = BitmapCacheOption.OnLoad - это строка, которую вы ищете. Он «кэширует все изображение в памяти во время загрузки. Все запросы данных изображения заполняются из хранилища памяти». От MSDN

Примерно так:

BitmapImage bmi = new BitmapImage();
bmi.BeginInit();
bmi.UriSource = new Uri(myFilePath);
bmi.CacheOption = BitmapCacheOption.OnLoad;
bmi.EndInit();
Image1.Source = bmi;
1 голос
/ 01 февраля 2012

Я думаю, что StreamSource - это свойство, которое вы ищете. Вы считали изображение в MemoryStream, а затем задали MemoryStream в качестве значения StreamSImage BitmapImage:

var memStream = new MemoryStream(File.ReadAllBytes(myFilePath));
Image1.Source = new BitmapImage() { StreamSource = memStream };

РЕДАКТИРОВАТЬ: я пробовал этот код, и похоже, что вам нужно вызвать BitmapImage.BeginInit и BitmapImage.EndInit для установки источника:

var memStream = new MemoryStream(File.ReadAllBytes(@"C:\Users\Public\Pictures\Sample Pictures\Koala.jpg"));
var img = new BitmapImage();
img.BeginInit();
img.StreamSource = memStream;
img.EndInit();
myImage.Source = img;
0 голосов
/ 01 февраля 2012

Когда вы открываете файл, вы также можете выбрать долю файла, чтобы определить его поведение, когда другой файл требует этот файл:

(из MSDN: http://msdn.microsoft.com/en-us/library/y973b725.aspx)

Метод File.Open (String, FileMode, FileAccess, ** FileShare **)

Параметры
путь
Тип: System.String
Файл, который нужно открыть.

режим
Тип: System.IO.FileMode
Значение FileMode, которое указывает, создается ли файл, если он не существует, и определяет, будет ли содержимое существующих файлов сохранено или перезаписано.

доступ
Тип: System.IO.FileAccess
Значение FileAccess, которое указывает операции, которые можно выполнить с файлом.

* доля
* Тип: System.IO.FileShare *
Значение FileShare, указывающее тип доступа, который другие потоки имеют к файлу.

...