2012-04-14 3 views
2

"라이브"창에서 실행할 때 완벽하게 작동하는 매우 복잡한 Storyboard이 있지만이 스토리 보드를 수동으로 애니메이션화하여 개별적으로 저장할 수있는 프레임 별 애니메이션을 얻는 데 어려움이 있습니다. PNG 파일. 생성 된 이미지는 모두 첫 번째 애니메이션 프레임입니다.WPF 애니메이션/스토리 보드에서 비디오 저장

나는 this, this, this 및 궁극적으로는 this입니다. this MSDN sample도 있지만 모두 DependencyProperty 단일 애니메이션에 대해 이야기합니다. 내가 원했던 것은 단지 하나의 DP가 아닌 이라는 복잡한 프레임 단위로 단계를 밟을 수있는 능력이다.

나는 행운도없이 어디에서나 검색했습니다. 또한 나의 실험은 모두 실패했다. 어떤 도움을 주셔서 감사합니다. 비 기능 코드가 약간 있습니다.

  storyboard.Begin(grid, true); 
      //storyboard.Pause(); 
      //var clock = storyboard.CreateClock(); 
      //clock.Controller.Pause(); 
      var secs = Enumerable.Range(0, totalFrames).Select(t => (((double)t)/FPS)); 

      grid.Measure(new Size(480, 340)); 
      grid.Arrange(new Rect(grid.DesiredSize)); 

      foreach (var sec in secs) 
      { 
       //clock.Controller.SeekAlignedToLastTick(TimeSpan.FromSeconds(sec), TimeSeekOrigin.BeginTime); 
       storyboard.SeekAlignedToLastTick(TimeSpan.FromSeconds(sec), TimeSeekOrigin.BeginTime); 
       grid.InvalidateVisual(); 
       grid.UpdateLayout(); 

       var filename = Path.Combine(tempFolder, string.Format("image{0}.png", sec)); 
       var rtb = new RenderTargetBitmap((int) grid.ActualWidth, (int) grid.ActualHeight, 96, 96, PixelFormats.Pbgra32); 
       rtb.Render(grid); 

       var png = new PngBitmapEncoder(); 
       png.Frames.Add(BitmapFrame.Create(rtb)); 

       using (var stream = new FileStream(filename, FileMode.Create, FileAccess.ReadWrite)) 
       { 
        png.Save(stream); 
       } 
      } 
+0

안녕하세요 ... 비슷한 문제가 있습니다. 큐브를 애니메이션하여 Z 축을 따라 변환합니다. 이제 애니메이션의 비디오를 만들고 싶지만 그저 하나의 이미지 만 보여주고 싶습니다. 흥미롭게도 같은 코드는 캔버스에서 타원처럼 움직이는 단순한 애니메이션의 비디오를 만들 수 있습니다. 게시 한 지 2 년이 넘은 것을 알고 있지만 샘플 코드를 공유하거나 올바른 방향으로 나를 가리킬 수 있다면 정말 도움이 될 것입니다. – zizouraj

답변

0

유용한 다른 접근 방법이 있습니다. XAML 스토리 보드 애니메이션을 프레임 단위로 애니메이션화하는 데 필요한 모든 옵션을 모두 사용했다면 탐색 할 수있는 다른 옵션은 대신 코드로 스토리 보드를 만드는 것입니다. 예를 들면 다음과 같습니다. Animation in codebehind for loop, using RenderTransform

그 이점은 ' 스토리 보드를 프로그래밍 방식으로 제어하여 개별 키 프레임을 하나씩 단계별로 실행하여 각 프레임 후에 이미지를 저장할 수 있습니다.

나는 jQuery에서 개념적으로 비슷한 것을했다. 기본적으로 좌표 데이터 포인트를 저장 한 선 그리기 서명 앱을 작성했습니다. 그런 다음 알고리즘에 데이터 포인트를 다시로드하고 애니메이션을 재현 할 수있었습니다. http://kodekreachor.com/prototypes/

필자는이 기술이 매우 다르다는 것을 알고 있지만 테이크 어웨이가되어야하는 코드에서 순차 애니메이션을 완벽하게 제어 할 수 있다는 아이디어를 가지고 있으며, 영감을 얻고 싶습니다.

1

@wpfwannabe : 통찰력에 대해 감사드립니다.

내가 코드를 사용하고 약간의 수정과 함께 다음과 같이 비록 그것이 밖으로 일 :

rootStoryBoard.SeekAlignedToLastTick(Program.AnimPlots.canvs, TargetTmspn, System.Windows.Media.Animation.TimeSeekOrigin.BeginTime); 

을 위의 코드에서 : Program.AnimPlots.canvs는 그것이 귀하의 경우, 스냅 샷의 영역입니다 gridTargetTmspnTimeSpan 유형의 개체입니다.

호프가 도움이 되길 바랍니다. :)

관련 문제