Я хочу непрерывно снимать область экрана.
Я могу сделать это, используя LockBits
, BitBlt
и т. Д., Но все мои измерения показали, что это занимает в среднем,30 миллисекунд для захвата одного кадра.Это выглядит очень похоже на VSynch ... который будет пытаться поддерживать постоянную скорость обновления экрана 30 мс ...
Однако я только что натолкнулся на следующую запись .
В нем кто-то утверждает, что получил 1000 кадров за 95 миллисекунд ... что неслыханно (для меня!).Вот код, который он опубликовал:
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Imaging;
using System.Diagnostics;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private readonly Stopwatch sw = new Stopwatch();
private static Bitmap CaptureImage(int x, int y)
{
Bitmap b = new Bitmap(100, 100);
using (Graphics g = Graphics.FromImage(b))
{
g.CopyFromScreen(x, y, 0, 0, new Size(100, 100), CopyPixelOperation.SourceCopy);
g.DrawLine(Pens.Black, new Point(0, 27), new Point(99, 27));
g.DrawLine(Pens.Black, new Point(0, 73), new Point(99, 73));
g.DrawLine(Pens.Black, new Point(52, 0), new Point(52, 99));
g.DrawLine(Pens.Black, new Point(14, 0), new Point(14, 99));
g.DrawLine(Pens.Black, new Point(85, 0), new Point(85, 99));
}
return b;
}
private void button1_Click(object sender, EventArgs e)
{
Bitmap bmp = null;
sw.Restart();
for (int i = 0; i < 1000; i++)
{
bmp = CaptureImage(390, 420);
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
}
}
}
Я попробовал это, и угадайте, что ... Я получаю ~ 30k миллисекунд, напечатанных на консоль.Ясно, что этот точно такой же код все еще только захватывает со скоростью 30 мс / кадр в моей системе.В своем посте он говорит:
в вашей системе должно быть что-то радикально неправильное, если одной и той же программе требуется 35 миллисекунд для захвата 1 кадра.
Это заставило меня задуматься, поэтому я обновил драйверы моей видеокарты.Тот же результат.Тогда я подумал, что, возможно, моя видеокарта старая ... Хорошо, это: AMD Radeon HD 5700 Series.Так как я подозревал VSync, я установил AMD Catalyst Software Suite
, отключил Vsyc и перезапустил.Запустил тест снова, и я получил тот же результат: ~ 30 тыс. Миллисекунд для 1000 кадров.
Затем я загрузил свой Amazon EC2 g2.2xlarge instance
с установленными драйверами Windows 10 и NVIDIA GRID K520 (в актуальном состоянии).Тот же результат: 30 мс на кадр.
Может кто-нибудь с немного большим опытом объяснить мне, что здесь происходит?
Разве невозможно сделать то, что утверждает автор, и захватить 1000 кадровв 95 мс?
Что-то не так с моей системой?Я не знаю, что еще попробовать.