WPF和超大图像

时间:2010-06-01 12:16:40

标签: wpf image

我能做些什么来帮助管理WPF用于渲染巨大图像的大量内存 - 可能是高达10,000 x 10,000的内存?

我需要保持质量,因为缩放是关键,但加载Image控件似乎需要50到700MB的内存使用量:S

我现在没有做任何特别聪明的加载图片的事情:

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

image.Source = imageSource;

3 个答案:

答案 0 :(得分:4)

您可以使用BitmapImage.DecodePixelHeightBitmapImage.DecodePixelWidth以较低的质量渲染图像,并根据对话框的大小进行优化。在XAML中它看起来像这样:

<Image>
    <Image.Source>
        <BitmapImage UriSource="http://server/image.jpg" DecodePixelWidth="400" />
    </Image.Source>
</Image>

答案 1 :(得分:1)

因此,网络堆栈似乎存在一些内存泄漏/问题,因为将映像下载到本地磁盘然后加载它会使内存使用量减少约40%。

我现在已经阅读了许多确认这一点的博客。我还使用了Jakob提到的DecodePixelWidth / Height进行了延迟加载,但我很高兴找到了一种以更小的内存占用来加载全部质量图像的方法:)

答案 2 :(得分:0)

您也可以尝试使用CacheMode方式。

cachemode方式以2048x2048的最大分辨率创建控件的位图版本。 CacheMode还在视频内存中加载缓存的位图。您可以选择设置缓存行为。 要使用它,只需在图像xaml定义中设置CacheMode属性,如下所示:

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

HTH 洛伦佐