错误是,关闭内存流后无法访问它。当我尝试将图像控件的前一个图像设置回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();
}
有关完整代码,请访问以下Pastebins:
修改
根据响应更新了转换功能
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;
}