Я делаю снимок экрана, уменьшаю его до 50% разрешения, чтобы занять меньше места, а затем помещаю байты в buffer
, однако, к сожалению, этот процесс занимает слишком много времени.
В настоящее время для разрешения источника 1920x1080 требуется от 60 до 100 мс, из-за чего ускоряется вывод видео с частотой 30 кадров в секунду, поскольку я не создаю скриншоты достаточно быстро.Мне нужно около 40 мс, чтобы сделать видео, которое я делаю из него плавным.
Вопрос: Как я могу применить более быстрый алгоритм интерполяции или ограничить требуемую операцию, чтобы ускорить его?
public void Screenshot(byte[] buffer)
{
using (var bmp = new Bitmap(Params.SourceWidth, Params.SourceHeight))
{
using (var g = Graphics.FromImage(bmp))
{
g.CopyFromScreen(Point.Empty, Point.Empty, new Size(Params.SourceWidth, Params.SourceHeight), CopyPixelOperation.SourceCopy);
g.Flush();
using (Bitmap resized = new Bitmap(bmp, new Size(Params.TargetWidth, Params.TargetHeight)))
{
var bits = resized.LockBits(new Rectangle(0, 0, Params.TargetWidth, Params.TargetHeight), ImageLockMode.ReadOnly, PixelFormat.Format32bppRgb);
Marshal.Copy(bits.Scan0, buffer, 0, buffer.Length);
resized.UnlockBits(bits);
}
}
}
}