2017-02-15 39 views
0

То, что я сейчас делаю это:Преобразование растрового изображения в DotImaging формате IImage

  • Capture Некоторые снимки экрана
  • Копирование всех захваченных Снимки экрана в списке Bitmap: Список
  • Сохранить Все скриншоты в Список на жесткий диск
  • Feed Все фотографии в каталоге 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 
     } 
    } 
} 

То, что я хочу сделать, это:

  • Пропустить сохранение скриншотов в жестком диске.
  • Передайте список объекту Video Writer напрямую.

Я не могу этого сделать, потому что он принимает путь к каталогу, а не непосредственно изображения. Я хочу сделать это из-за того, что писать все изображения на жесткий диск, а затем делать видео намного медленнее, любые альтернативы DotImaging тоже хороши.
Или, может быть, вы можете сообщить мне, могу ли я разобрать растровые изображения в формате IImage, который принимает в качестве параметра метод VideoWriter.Write().

+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()); 
    } 
}