我需要将 WPF 中的 Tiff 图像中的所有帧打开到内存中,然后删除源。之后我最终需要渲染该图像(根据窗口大小调整大小)。我的解决方案非常慢,我无法在第一次请求之前删除文件源。有什么最佳实践吗?
Use CacheOption = BitmapCacheOption.OnLoad
该选项可以与BitmapImage.CacheOption
属性或作为参数BitmapDecoder.Create()
如果您想在加载图像后访问多个帧,则必须使用BitmapDecoder.Create
。在任何一种情况下,文件都将被完全加载并关闭。
另请参阅我的回答这个问题
Update
以下代码非常适合加载图像的所有帧并删除文件:
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
同时在内存中保留数据的两个副本:已解码的副本和未解码的副本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)