2010-07-31 4 views
1

BitmapSource 컬렉션에서 비트 맵을 만들고 싶습니다. 각 소스 소스는 하나의 프레임이어야합니다. BitmapSources 컬렉션에서 비트 맵 만들기

는 다음 코드를

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."을 보여줍니다. 누구든지 나를 도울 수 있을까?

enCoder.Save(memStream); 

이 메모리 스트림에 컨텐츠를 작성하고 떠날 것이다 :

+0

일반적으로 'TargetInvocationException' ("호출 대상에 의해 예외가 발생했습니다")는 래퍼 예외 일뿐입니다. 이 예외를 잡아 예외 객체의'InnerException' 속성을 보면 * 실제 * 예외가 포함됩니다. 물론 어떤 경우에는이 래핑의 여러 레이어가있을 수 있으므로 while 루프를 사용하여 가장 안쪽 예외를 가져옵니다. – Timwi

답변

0

내가 WPF에서 BitmapSources에 대해 잘 모르지만, 난 당신이 MemoryStream을 사용하는 방법에 오류가있는 것을 발견, 그래서 어쩌면이 문제입니다 마지막에 스트림 포인터.

_Bitmap = new DrawingCtrl.Bitmap(memStream); 

이는 스트림의 에서 시작하여 스트림에서 비트 맵을 읽으려고합니다. 물론 그것은 작동하지 않습니다. 그 사이에 탐색을 추가해보십시오.

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

나는 당신의 답을 시도했다. 그러나 다시 비트 맵을 생성 한 후에는 단 하나의 프레임만을 보여준다. 하지만 프레임 모음이 필요합니다. –