C# 将位图图像转换为点成像IImage格式

C# 将位图图像转换为点成像IImage格式,c#,.net,screenshot,accord.net,C#,.net,Screenshot,Accord.net,我目前正在做的是: 捕获一些屏幕截图 复制位图列表中所有捕获的屏幕快照:列表 将列表中的所有屏幕截图保存到硬盘 将目录中的所有图片馈送到dotmaging库的VideoWriter对象 我编写视频的源代码是: private void MakeVideo() { var saveDialog = new SaveFileDialog { Filter = @"AVI Video(.avi)|*.avi" }; if (saveDialog.ShowDial

我目前正在做的是:

  • 捕获一些屏幕截图
  • 复制位图列表中所有捕获的屏幕快照:列表
  • 将列表中的所有屏幕截图保存到硬盘
  • 将目录中的所有图片馈送到
    dotmaging
    库的
    VideoWriter
    对象
我编写视频的源代码是:

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
        }
    }
}
private void MakeVideo()
{
var saveDialog=new SaveFileDialog{Filter=@“AVI视频(.AVI)|*.AVI”};
if(saveDialog.ShowDialog()==DialogResult.OK)
{
使用(var videoWriter=newvideowriter(saveDialog.FileName,新大小(_screenWidth,_screenHeight),帧速率,true))
{
var ir=新ImageDirectoryCapture(_路径,*.jpg”);
而(红外位置<红外长度)
{
IImage image=ir.Read();
录像机。书写(图像);
}
videoWriter.Close();
DeleteFiles();//从硬盘删除文件
}
}
}
我想做的是:

  • 跳过在硬盘中保存屏幕截图
  • 将列表直接馈送到视频写入器对象
我无法这样做,因为它直接采用目录路径,而不是图像本身。 我之所以想这样做,是因为将所有图像写入硬盘,然后制作视频的速度要慢得多,任何替代点成像的方法都是好的。

或者,您可以告诉我是否可以将位图图像转换为IImage格式,
VideoWriter.Write()
方法接受该格式作为参数。

有一个名为dotmaging.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());
    }
}
IEnumerable frames=GetFrames();
使用(var writer=新的VideoWriter(目标)、新的大小(宽度、高度)))
{
foreach(帧中的var位图)
{
var imageBuffer=bitmap.ToBgr();
Write.Write(imageBuffer.Lock());
}
}

不幸的是,这个库似乎是围绕文件而不是流构建的。也许您可以修改导致使用
byte[]
Stream
的内容。