gpt4 book ai didi

wpf - 立即将图像加载到内存中

转载 作者:行者123 更新时间:2023-12-02 07:54:24 25 4
gpt4 key购买 nike

我需要将 WPF 中的 Tiff 图像的所有帧打开到内存中,然后删除源。之后我最终需要渲染该图像(根据窗口大小调整大小)。我的解决方案很慢,我无法在第一次要求之前删除文件源。有什么最佳做法吗?

最佳答案

使用 CacheOption = BitmapCacheOption.OnLoad

此选项可与 BitmapImage.CacheOption 属性一起使用,或作为 BitmapDecoder.Create() 的参数如果您希望在加载图像后访问多个帧您必须使用 BitmapDecoder.Create。在任何一种情况下,文件都将被完全加载并关闭。

另请参阅我对 this question 的回答

更新

以下代码非常适合加载图像的所有帧并删除文件:

var decoder = BitmapDecoder.Create(new Uri(imageFileName), BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
List<BitmapFrame> images = decoder.Frames.ToList();
File.Delete(imageFileName);

当然你也可以在删除文件后访问decoder.Frames。

如果您喜欢自己打开流,此变体也适用:

List<BitmapFrame> images;
using(var stream = File.OpenRead(imageFileName))
{
var decoder = BitmapDecoder.Create(stream, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
images = decoder.Frames.ToList();
}
File.Delete(imageFileName);

在任何一种情况下,它都比创建 MemoryStream 更有效,因为 MemoryStream 在内存中同时保留两个数据副本:已解码副本和未解码副本。

关于wpf - 立即将图像加载到内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1733730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com