首页 > 解决方案 > 图片尺寸调整过程的优化

问题描述

我需要加载几个图像(最多 1000 个)并将其显示在一个列表中(图像的最长边最大 250 像素)。

由于其中许多是原始格式图像(CR2 / AWR),我无法简单地打开它们

var i = new Bitmap(x);

因此,我将其打开为BitmapImage.

其次,大小确实是一个问题,这就是为什么我必须将其缩小为一种缩略图。由于在初始化过程中无法读取高度和宽度BitmapImage,因此我先加载它,然后再缩小它。

以下代码可以解决问题,但它非常慢并且消耗大量内存。如果我忽略“最长”边并缩小 init 部分内的宽度(或高度),内存消耗将减少到大约 10%。

有人可以帮我优化它吗?

public BitmapSource getImage(string fileName, double width, double height)
{
    // Read and resize image
    BitmapImage tmpImage = new BitmapImage();

    tmpImage.BeginInit();
    tmpImage.CacheOption = BitmapCacheOption.OnLoad;
    tmpImage.UriSource = new Uri(fileName);
    tmpImage.EndInit();

    if (tmpImage.Width > tmpImage.Height)
    {
        tmpImage.DecodePixelWidth = (int)width;
    }
    else
    {
        tmpImage.DecodePixelHeight = (int)height;
    }

    return tmpImage;
}

标签: c#wpfimageperformanceoptimization

解决方案


推荐阅读