c# - 图片尺寸调整过程的优化
问题描述
我需要加载几个图像(最多 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;
}
解决方案
推荐阅读
- java - java.lang.NoClassDefFoundError: org/apache/logging/log4j/core/Layout 在使用 ESIntegTestCase 运行集成测试时
- import - 在带有 ReactJS.NET 的 ASP NET CORE 3.1 中如何引用多个 .JSX 文件中的组件
- java - 在 Android Studio 3.6.1 中获取 java.lang.NoClassDefFoundError: com/android/resources/ResourceFolderType
- image - 如何运行 PATCHMATCH 源代码进行修复
- javascript - 合并 JSON 数据
- systemd - 使用 systemctl enable 启用 Unit 时是否调用 daemon-reload?
- amazon-redshift - 在 aws redshift 中获取最近 20 个星期二的数据
- php - PHP 转义所有特殊字符
- java - 为什么我的数据库数组列表填充算法会引发错误?
- oauth-2.0 - 代表受信任实体的 Active Directory 访问