0

错误是关闭时无法访问内存流。当我尝试将图像控件的上一个图像设置回 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;
        }
4

0 回答 0