Я делаю скриншот экрана 4k, но я хочу, чтобы он был уменьшен до 900x540, прежде чем скопировать его в заданный byte[] buffer
, чтобы сделать его быстрее.
Я не могу понять, как изменить размер снятого скриншота.
public void Screenshot(byte[] buffer)
{
//full screen width and height
using (var BMP = new Bitmap(Params.Width, Params.Height))
{
using (var g = Graphics.FromImage(BMP))
{
g.CopyFromScreen(Point.Empty, Point.Empty, new Size(Params.Width, Params.Height), CopyPixelOperation.SourceCopy);
g.Flush();
var bits = BMP.LockBits(new Rectangle(0, 0, Params.Width, Params.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppRgb);
Marshal.Copy(bits.Scan0, buffer, 0, buffer.Length);
BMP.UnlockBits(bits);
}
}
}
РЕДАКТИРОВАТЬ: После ответа Стефана я попробовал это, но это просто помещает небольшую часть всего экрана в buffer
, он просто разрезает его.
public void Screenshot(byte[] buffer)
{
using (var BMP = new Bitmap(Params.TargetWidth, Params.TargetHeight))
{
using (var g = Graphics.FromImage(BMP))
{
g.CopyFromScreen(Point.Empty, Point.Empty, new Size(Params.WidthSource, Params.HeightSource), CopyPixelOperation.SourceCopy);
g.Flush();
var bits = BMP.LockBits(new Rectangle(0, 0, Params.TargetWidth, Params.TargetHeight), ImageLockMode.ReadOnly, PixelFormat.Format32bppRgb);
Marshal.Copy(bits.Scan0, buffer, 0, buffer.Length);
BMP.UnlockBits(bits);
}
}
}
это то, что заканчивается в buffer
: