将位图图像转换为DotImaging IImage格式

时间:2017-02-15 11:18:07

标签: c# .net screenshot accord.net

我目前正在做的是:

  • 捕捉一些屏幕截图
  • 将所有捕获的屏幕截图复制到位图列表:列表
  • 将列表中的所有屏幕截图保存到硬盘
  • 将目录中的所有图片都归档到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的任何替代品都很好。
或者,如果我可以将位图图像解析为VideoWriter.Write()方法接受的IImage格式,您可以告诉我。

1 个答案:

答案 0 :(得分: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());
    }
}