WPF и очень большие изображения - PullRequest
3 голосов
/ 01 июня 2010

Могу ли я что-нибудь сделать, чтобы помочь в управлении огромным объемом памяти, используемой WPF для рендеринга огромных изображений - возможно, до 10 000 x 10 000?

Мне нужно поддерживать качество, так как масштабирование является ключевым, но загрузка элемента управления изображением требует от 50 до 700 МБ памяти: S

На данный момент я не делаю ничего особенно умного с загрузкой изображения:

BitmapImage imageSource = new BitmapImage();
imageSource.BeginInit();
imageSource.UriSource = new Uri(imageUrl, UriKind.Absolute);
imageSource.CacheOption = BitmapCacheOption.OnLoad;
imageSource.EndInit();

image.Source = imageSource;

Ответы [ 3 ]

4 голосов
/ 01 июня 2010

Вы можете использовать BitmapImage.DecodePixelHeight или BitmapImage.DecodePixelWidth для рендеринга изображения с более низким качеством, оптимизированным под размер вашего диалога. В XAML это выглядит так:

<Image>
    <Image.Source>
        <BitmapImage UriSource="http://server/image.jpg" DecodePixelWidth="400" />
    </Image.Source>
</Image>
1 голос
/ 02 июня 2010

Таким образом, возникает небольшая утечка памяти / проблема с сетевым стеком, связанная с загрузкой образа на локальный диск и последующей загрузкой, которая, по-видимому, сокращает использование памяти примерно на 40%.

Я сейчас прочитал множество блогов, подтверждающих это. Я также использовал форму отложенной загрузки с использованием DecodePixelWidth / Height, о которой упоминал Якоб, но я рад, что нашел способ загрузки полноразмерного изображения со значительно меньшим объемом памяти:)

0 голосов
/ 05 марта 2014

Вы также можете попробовать способ CacheMode.

Способ кеш-режима создает битовую версию вашего элемента управления с максимальным разрешением 2048x2048. CacheMode также загружает кэшированное растровое изображение в видеопамять. У вас есть возможность установить поведение кэширования. Чтобы использовать его, просто установите свойство CacheMode в определении xaml вашего изображения следующим образом:

<Image Source="...">
    <Image.CacheMode>
        <BitmapCache ... />
    </Image.CacheMode>
</Image>

НТН Lorenzo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...