C# 从BitmapSources集合创建位图

C# 从BitmapSources集合创建位图,c#,C#,我想从BitmapSource集合创建位图,每个源应该是一帧 我编写了以下代码 MemoryStream memStream = new MemoryStream(); BitmapEncoder enCoder = new GifBitmapEncoder(); foreach (BitmapSource source in BitmapSources) enCoder.Frames.Add(BitmapFrame.Create(source)); enCoder.Save(memS

我想从BitmapSource集合创建位图,每个源应该是一帧

我编写了以下代码

MemoryStream memStream = new MemoryStream();
BitmapEncoder enCoder = new GifBitmapEncoder();

foreach (BitmapSource source in BitmapSources)
    enCoder.Frames.Add(BitmapFrame.Create(source));
enCoder.Save(memStream);
_Bitmap = new DrawingCtrl.Bitmap(memStream);

DrawingCtrl.ImageAnimator.Animate(_Bitmap, OnFrameChanged);


但它显示调用的目标已引发异常。。有人能帮我吗?

我不知道WPF中的BitmapSources,但我注意到在如何使用MemoryStream时出现了一个错误,所以可能这就是问题所在:

enCoder.Save(memStream);
这会将内容写入内存流,并将流指针保留在末尾

_Bitmap = new DrawingCtrl.Bitmap(memStream);
然后,从流的末尾开始,尝试从流中读取位图。那当然不行。尝试在以下两者之间添加搜索:

enCoder.Save(memStream);
memStream.Seek(0, SeekOrigin.Begin);
_Bitmap = new DrawingCtrl.Bitmap(memStream);

一般来说,TargetInvocationException表示“异常已由调用的目标抛出”只是一个包装异常。如果捕获此异常并查看异常对象上的InnerException属性,则它包含实际异常。当然,在某些情况下,这种包装可能有几层,所以使用while循环来获取最内层的异常。我尝试了您的答案。但在再次创建位图后,它只显示一帧。但我需要收集相框。
enCoder.Save(memStream);
memStream.Seek(0, SeekOrigin.Begin);
_Bitmap = new DrawingCtrl.Bitmap(memStream);