gpt4 book ai didi

WPF图像缓存

转载 作者:行者123 更新时间:2023-12-04 05:38:04 24 4
gpt4 key购买 nike

我有一个WPF应用程序,可以从视频文件中获取快照图像。用户可以定义从中获取图像的时间戳。然后将图像保存到磁盘上的临时位置,然后渲染为<image>元素。

然后,用户应该能够选择其他时间戳,然后覆盖磁盘上的临时文件-然后应在<image>元素中显示该文件。

使用Image.Source = null;,我可以从<image>元素中清除图像文件,因此它显示空白。但是,如果源图像文件随后被新图像(具有相同名称)覆盖并加载到<image>元素中,则仍显示旧图像

我正在使用以下逻辑:

// Overwrite temporary file file here

// Clear out the reference to the temporary image
Image_Preview.Source = null;

// Load in new image (same source file name)
Image = new BitmapImage();
Image.BeginInit();
Image.CacheOption = BitmapCacheOption.OnLoad;
Image.UriSource = new Uri(file);
Image.EndInit();
Image_Preview.Source = Image;

即使原始文件已被完全替换, <image>元素中显示的图像也不会更改。这里有我不知道的图像缓存问题吗?

最佳答案

默认情况下,WPF缓存从URI加载的BitmapImage。

您可以通过设置BitmapCreateOptions.IgnoreImageCache标志来避免这种情况:

var image = new BitmapImage();

image.BeginInit();
image.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
image.CacheOption = BitmapCacheOption.OnLoad;
image.UriSource = new Uri(file);
image.EndInit();

Image_Preview.Source = image;

或者您直接从Stream加载BitmapImage:
var image = new BitmapImage();

using (var stream = new FileStream(file, FileMode.Open, FileAccess.Read))
{
image.BeginInit();
image.CacheOption = BitmapCacheOption.OnLoad;
image.StreamSource = stream;
image.EndInit();
}

Image_Preview.Source = image;

关于WPF图像缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30164042/

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