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
的内容。