2017-02-15 5 views
0

내가 현재하고있는 중이 야 것은 :변환 비트 맵 이미지

  • 캡처 일부 스크린 샷 캡처 한 모든 스크린 샷 비트 맵 목록
  • 복사 : 목록
  • 저장 모든 스크린 샷에 하드 드라이브 목록
  • 피드 VideoWriter 개체의 디렉터리에있는 모든 그림 DotImaging 라이브러리. 비디오를 작성하기위한

내 소스 코드는 다음과 같습니다

private void MakeVideo() 
{ 
    var saveDialog = new SaveFileDialog { Filter = @"AVI Video(.avi)|*.avi" }; 
    if (saveDialog.ShowDialog() == DialogResult.OK) 
    { 
     using (var videoWriter = new VideoWriter(saveDialog.FileName, new Size(_screenWidth, _screenHeight), FrameRate, true)) 
     { 
      var ir = new ImageDirectoryCapture(_path, "*.jpg"); 

      while (ir.Position < ir.Length) 
      { 
       IImage image = ir.Read(); 
       videoWriter.Write(image); 
      } 

      videoWriter.Close(); 
      DeleteFiles(); // Deletes The Files from hard drive 
     } 
    } 
} 

내가하고 싶은 것입니다 :

  • 하드 드라이브에 저장하는 스크린 샷을 건너 뜁니다.
  • List를 Video Writer Object에 직접 보내십시오.

직접 이미지가 아닌 디렉터리 경로를 사용하기 때문에 그렇게 할 수 없습니다. 모든 이미지를 하드 드라이브에 기록한 다음 비디오를 만드는 것이 훨씬 느리다는 이유로이 작업을 수행하고 싶습니다. DotImaging의 모든 대안도 좋습니다.
아니면 VideoWriter.Write() 메서드가 매개 변수로 받아들이는 IImage 형식으로 비트 맵 이미지를 구문 분석 할 수 있는지 알려 주시기 바랍니다.

+0

:이 프로젝트에 설치 일단

, 당신은 뭔가를 쓸 수 있습니다. "[ImageIO.LoadUnchanged'] (https://github.com/dajuric/dot-imaging/blob/320d2cf1301a1b46b1d51abdcc95a7cda72f5ea0/Source/IO/ImageIO.cs)까지의 모든 리드를 'byte []'또는 대신'스트림'. –

+0

솔루션을 찾을 수 있었습니까? – CodeIt

+0

아니, 아직 고생 중입니다! @COUT – CodeIt

답변

0

DotImaging.BitmapInterop이라는 확장 라이브러리가 있습니다. 하지 불행하게도 스트림,이 라이브러리 파일을 주변에 건설 될 것으로 보인다

IEnumerable<Bitmap> frames = GetFrames(); 

using (var writer = new VideoWriter(target), new Size(width, height))) 
{ 
    foreach (var bitmap in frames) 
    { 
     var imageBuffer = bitmap.ToBgr(); 
     writer.Write(imageBuffer.Lock()); 
    } 
}