错误是关闭时无法访问内存流。当我尝试将图像控件的上一个图像设置回 Gif 时会发生这种情况。当之前的图像是 gif 时,我将其转换为带有内存流的位图。上一张图片为普通png或jpg时,可以成功显示。
我试图研究如何修复错误。我尝试过的一个解决方案是将图像转换为 byte[] ,但是 gif 并没有像它们被转换为静态图像那样设置动画。
为了显示 gif,我使用了一个名为 WPFAnimatedGif 的 NuGet 包,为了使 Wpf 看起来更好,我使用了 NuGet 包 Materialdesigntheme
这是拖动离开时触发的事件代码
if (previousIcon != null)
{
ToggleButton buttonControl = (ToggleButton)sender;
Image imageControl = (Image)((Grid)buttonControl.Content).Children[1];
if (previousIcon.ContainsKey(buttonControl))
ImageBehavior.SetAnimatedSource(imageControl, previousIcon[buttonControl]);
}
我如何转换它
BitmapImage bmImage = new BitmapImage();
using (MemoryStream stream = new MemoryStream())
{
PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(wbm));
encoder.Save(stream);
bmImage.BeginInit();
bmImage.CacheOption = BitmapCacheOption.OnLoad;
bmImage.StreamSource = stream;
bmImage.EndInit();
bmImage.Freeze();
}
有关完整代码,请访问这些 Pastebin:
编辑
更新了基于响应的转换函数
public BitmapImage ConvertWriteableBitmapToBitmapImage(WriteableBitmap wbm)
{
BitmapImage bmImage = new BitmapImage();
MemoryStream stream = new MemoryStream();
PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(wbm));
encoder.Save(stream);
//stream.Position = 0;
bmImage.BeginInit();
bmImage.CacheOption = BitmapCacheOption.OnLoad;
bmImage.StreamSource = stream;
bmImage.EndInit();
bmImage.Freeze();
return bmImage;
}