如何解决此错误-“ System.ObjectDisposedException:'无法访问关闭的Stream。'”

时间:2019-10-03 09:56:23

标签: c# wpf bitmap writablebitmap

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

0 个答案:

没有答案