Загрузка изображений с высоким разрешением в управление изображениями для WPF / Surface SDK - PullRequest
0 голосов
/ 17 декабря 2010

У меня есть список изображений с высоким разрешением, полученных с веб-сервера. Мне нужно заполнить их в элементе scatterview поверхности SDK. Для показа изображений я использую Контроль изображения для каждого изображения.

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

public BitmapSource FetchImage(string URLlink)
    {
        JpegBitmapDecoder decoder = null;
        BitmapSource bitmapSource = null;
        try
        {
            decoder = new JpegBitmapDecoder(new Uri(URLlink, UriKind.Absolute), BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad);
        }
        catch (Exception)
        {
            decoder = new JpegBitmapDecoder(new Uri("pack://application:,,,/Resources/ImageNotFound.jpg", UriKind.RelativeOrAbsolute), BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnDemand);
        }
        finally
        {
            bitmapSource = decoder.Frames[0];
            bitmapSource.Freeze();
        }
        return bitmapSource;
    }

Изображения загружаются с сервера и отображаются в элементе управления изображением. Однако производительность сильно снижается, и приложение просто зависает при загрузке более 10 изображений. Для изображений с низким разрешением я могу загрузить даже 20-30 изображений без зависания или замедления приложения.

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

RenderOptions.SetBitmapScalingMode(mic.ItemImage, BitmapScalingMode.HighQuality);

Есть ли лучший способ загрузки изображений. Я думал о том, чтобы сначала сохранить изображения на жесткий диск, а затем загрузить их в источник изображения. Будет ли это эффективным для повышения производительности, потому что я думал, что, когда я загружаю изображения непосредственно с URL-адреса, это сохранит их в памяти, которая в конечном итоге заканчивается. За счет сохранения изображений сначала я могу избежать этого, но есть шанс, что .NET фактически делает то же самое, сохраняя сначала во временном файле, а затем загружая.

Я также пытался изменить BitmapCacheOption на все доступные опции, но он ничего не улучшил.

1 Ответ

0 голосов
/ 24 декабря 2010

ScatterView не может беспокоить много изображений. Например, попробуйте заполнить его 1000 прямоугольником одним цветом. Это замедлит приложение. проблема не может быть решена, Microsoft должна перекодировать ScatterView. Однако вы можете отключить некоторые эффекты для scatterView.

...