Чтение изображения из папки на Silverlight (из приложения браузера) - PullRequest
1 голос
/ 28 ноября 2011

Для чтения изображения из папки с помощью моего приложения Silverlight я устанавливаю источник растрового изображения с потоком файла.См. Приведенный ниже код:

string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Images", String.Format("{0}.jpg", _imageName));
if (File.Exists(path))
{
    Image = new BitmapImage();
    Image.SetSource(new MemoryStream(File.ReadAllBytes(path)));
}

Проблема в том, что для отображения изображения требуется много времени, и при загрузке большого количества изображений (> 400) я могу получить недостаточно памяти.У меня никогда не было этой ошибки при загрузке изображения по URI, и мне было интересно, можно ли загрузить его по URI из пути.Код, который я пробовал:

string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Images", String.Format("{0}.jpg", _imageName));
if (File.Exists(path))
{
    Image = new BitmapImage()
                {
                    UriSource = new Uri(path),
                    CreateOptions = BitmapCreateOptions.DelayCreation
                };
}

Есть ли у вас какие-либо подсказки, чтобы предоставить?

Спасибо!

Филипп

Ответы [ 3 ]

0 голосов
/ 28 ноября 2011

Загрузите изображение в ваше свойство, измените его размер и установите его в качестве предварительного просмотра, затем удалите изображение из папки и перейдите к следующему.

Итак, вкратце, вы должны создать миниатюры изображений в этоми покажите их в своем приложении.

Теперь вы сохраняете все изображения в своей памяти, все большие изображения, поэтому вы получаете исключение из памяти.

0 голосов
/ 01 декабря 2011

Я понял, что загрузка, даже когда я загружал картинки по URI, загружала не все картинки.Программное обеспечение перестало загружать фотографии, когда оно потребляло 1,6 ГБ оперативной памяти (из 6 ГБ).Разница с загрузкой изображения потоком заключается в том, что, похоже, нет защиты от недостатка памяти.

Поскольку я не отображаю все изображения (я понял, что у меня более 8000 изображений, когда они загружены правильно), я загружаю в память только то изображение, которое мне нужно отобразить.

Поэтому каждый раз, когда я хочу фотографию, я загружаю ее с жесткого диска.Когда картинки больше не отображаются, сборщик мусора избавляется от них.Таким образом, память приложения всегда стабильна и составляет около 300 мегабайт.

0 голосов
/ 28 ноября 2011

Полагаю, вы загружаете фотографии из локальной файловой системы с гораздо более высоким разрешением, чем изображения, которые вы загружаете через URL.

Вы хотите загрузить 400 из них, да, вам не хватит памяти.

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

...