使用 Aforge 捕获桌面
Capture desktop with Aforge
我看过各种教程,例如 this,介绍如何从网络摄像头制作、显示和录制视频。
我现在想要的是能够对桌面执行相同的操作,以便我可以将计算机 activity 与外部世界进行交叉引用。
所以我想要的是能够使用 AForge 录制计算机上发生的事情的视频。
我没有找到相关的参考资料,因此无法使用 Aforge 吗?
--添加--
我已经实施了以下建议的解决方案:
谢谢
但是当我看 png 时全是黑色的。
保存过程是正确的,当我保存网络摄像头框架时就可以了。你能告诉我我根据你的代码改编有什么问题吗?
谢谢
它可能不是专业的解决方案,也不是实时的,但它适用于像您这样的简单场景。它是一个使用 Net Framework 4.7.2 构建的控制台应用程序。我使用它的源代码重建了程序集Aforge.Video.FFMPEG
,以便它可以与 Net Framework 4.0+ 一起使用。
using AForge.Video.FFMPEG;
using System;
using System.Diagnostics;
using System.Drawing;
using System.Threading;
using System.Windows.Forms;
class Program
{
static VideoFileWriter VideoFileWriter;
static Stopwatch stopwatch = new Stopwatch();
static void Main(string[] args)
{
VideoFileWriter = new VideoFileWriter();
Size screenSize = Screen.PrimaryScreen.Bounds.Size;
VideoFileWriter.Open("test.mp4", screenSize.Width, screenSize.Height, 30, VideoCodec.MPEG4, 19200000);
Bitmap bitmap = new Bitmap(screenSize.Width, screenSize.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
Graphics g = Graphics.FromImage(bitmap);
stopwatch.Start();
while (stopwatch.Elapsed < TimeSpan.FromSeconds(10)) // Record for ten seconds.
{
g.CopyFromScreen(0, 0, 0, 0, screenSize, CopyPixelOperation.SourceCopy);
VideoFileWriter.WriteVideoFrame(bitmap, stopwatch.Elapsed);
Thread.Sleep(29);
}
VideoFileWriter.Close();
g.Dispose();
}
}
我看过各种教程,例如 this,介绍如何从网络摄像头制作、显示和录制视频。 我现在想要的是能够对桌面执行相同的操作,以便我可以将计算机 activity 与外部世界进行交叉引用。 所以我想要的是能够使用 AForge 录制计算机上发生的事情的视频。 我没有找到相关的参考资料,因此无法使用 Aforge 吗?
--添加--
我已经实施了以下建议的解决方案:
谢谢
但是当我看 png 时全是黑色的。 保存过程是正确的,当我保存网络摄像头框架时就可以了。你能告诉我我根据你的代码改编有什么问题吗?
谢谢
它可能不是专业的解决方案,也不是实时的,但它适用于像您这样的简单场景。它是一个使用 Net Framework 4.7.2 构建的控制台应用程序。我使用它的源代码重建了程序集Aforge.Video.FFMPEG
,以便它可以与 Net Framework 4.0+ 一起使用。
using AForge.Video.FFMPEG;
using System;
using System.Diagnostics;
using System.Drawing;
using System.Threading;
using System.Windows.Forms;
class Program
{
static VideoFileWriter VideoFileWriter;
static Stopwatch stopwatch = new Stopwatch();
static void Main(string[] args)
{
VideoFileWriter = new VideoFileWriter();
Size screenSize = Screen.PrimaryScreen.Bounds.Size;
VideoFileWriter.Open("test.mp4", screenSize.Width, screenSize.Height, 30, VideoCodec.MPEG4, 19200000);
Bitmap bitmap = new Bitmap(screenSize.Width, screenSize.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
Graphics g = Graphics.FromImage(bitmap);
stopwatch.Start();
while (stopwatch.Elapsed < TimeSpan.FromSeconds(10)) // Record for ten seconds.
{
g.CopyFromScreen(0, 0, 0, 0, screenSize, CopyPixelOperation.SourceCopy);
VideoFileWriter.WriteVideoFrame(bitmap, stopwatch.Elapsed);
Thread.Sleep(29);
}
VideoFileWriter.Close();
g.Dispose();
}
}