2010-07-31 3 views
1

Я хотел бы создать растровое изображение из коллекции 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); 

и

private void OnFrameChangedInMainThread() 
{ 
    DrawingCtrl.ImageAnimator.UpdateFrames(_Bitmap); 
    Source = GetBitmapSource(_Bitmap); 
    InvalidateVisual(); 
} 

Но это показывает "Exception has been thrown by the target of an invocation.". Может ли кто-нибудь мне помочь?

+0

Как общее правило, 'TargetInvocationException' (который говорит:«Исключение было брошено в целью вызова») является лишь исключением обертка. Если вы поймаете это исключение и посмотрите на свойство InnerException на объекте исключения, оно содержит исключение * actual *. Конечно, в некоторых случаях у вас может быть несколько слоев этой упаковки, поэтому используйте цикл while, чтобы получить самое внутреннее исключение. – Timwi

ответ

0

Я не знаю, о BitmapSources в WPF, но я заметил ошибку в том, как вы используете MemoryStream, поэтому, возможно, это вопрос:

enCoder.Save(memStream); 

Это запишет содержимое в поток памяти и оставить указатель потока в конце.

_Bitmap = new DrawingCtrl.Bitmap(memStream); 

Это будет пытаться читать растровое изображение из потока, начиная с конца потока. Конечно, это не сработает. Попробуйте добавить искать между ними:

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

Я попробовал ваш ответ. Но после создания растрового изображения снова отображается только один кадр. но мне нужна коллекция фреймов. –

Смежные вопросы