C# 连续拍摄屏幕截图以创建图像序列的好方法?

C# 连续拍摄屏幕截图以创建图像序列的好方法?,c#,image,timer,stopwatch,C#,Image,Timer,Stopwatch,我想以20毫秒的时间间隔拍摄屏幕截图。我不认为我可以使用Timer类,因为它的最大分辨率约为15毫秒可能会有问题。然而,我最大的问题是截图花费的时间太长: Stopwatch myStopwatch = new Stopwatch(); myStopwatch.Start(); Bitmap printscreen = new Bitmap(1280, 720); Graphics graphics = Graphics.FromImage(printscreen as Image); gra

我想以20毫秒的时间间隔拍摄屏幕截图。我不认为我可以使用Timer类,因为它的最大分辨率约为15毫秒可能会有问题。然而,我最大的问题是截图花费的时间太长:

Stopwatch myStopwatch = new Stopwatch();
myStopwatch.Start();

Bitmap printscreen = new Bitmap(1280, 720);
Graphics graphics = Graphics.FromImage(printscreen as Image);
graphics.CopyFromScreen(200, 200, 0, 0, new Size(1280, 720));
printscreen.Save(myOutputLocation + "image" + myImageCount.ToString() + ".png");
myImageCount += 1;

myStopwatch.Stop();
MessageBox.Show(myStopwatch.Elapsed.TotalMilliseconds.ToString());
// Elapsed time is anywhere between 60 - 95 ms

高精度计时器能够提供我需要的精度,但我已经读到您执行的代码应该是。如何提高代码速度?

您不应该尝试按顺序保存映像,因为即使使用SSD,IO操作也非常昂贵。 您可以将每个图像插入队列并启动一个线程,该线程轮询该队列并异步保存图像。
在C#中,您可以在插入和读取时使用线程安全。

您想每秒向磁盘写入50个文件吗?你疯了吗?@Phylogenesis噢,也许这不可能?根据你的分辨率是1280x720的事实,我假设这是在一台相当便宜的笔记本电脑上。你的硬盘几乎肯定是5400rpm的,绝对没有办法处理这种负载。这背后的原因是什么?如果你需要一个屏幕录音机,有一百万种不同的免费现有产品可以做到这一点。这可能是XY的问题。仅供参考,根据您之前的评论,每20毫秒一次,持续1-20分钟,您将看到6万到120万张图片……请不要发布非英语网站的链接。我已将您的链接更改为英文版(en-us而不是de-de),您将看到一个等待写入磁盘的队列,您只是将问题推到另一组代码上。您知道其他方法吗?他想捕捉更多的图片,而不是他的实现。他没有提供这些图像是否完美无瑕或是否可以压缩的信息。其次,他可以尝试将数据直接编码成视频格式。但是他也需要一个队列来填满视频编码器。你说的关键部分是他没有提供信息,这意味着你根本无法回答问题,所以你应该不愿意发帖。还有,有时候,有些事情是不可能的,这里似乎真的是这样。@Auskenfuchs我会看看你的建议。我想在无损或压缩图像之间做出选择。目前,我使用ImageFormat类来完成这项工作。