Я пытаюсь использовать следующий код, чтобы скопировать часть экрана в новое место в моей форме Windows.
private void Form1_Paint(object sender, PaintEventArgs e)
{
var srcPoint = new Point(0,0);
var dstPoint = new Point(Screen.PrimaryScreen.Bounds.Width/2, Screen.PrimaryScreen.Bounds.Height/2);
var copySize = new Size(100, 100);
e.Graphics.CopyFromScreen(srcPoint, dstPoint, copySize, CopyPixelOperation.SourceCopy);
}
Функция CopyFromScreen игнорирует все клипы, установленные перед ней.
e.SetClip(new Rectangle(srcPoint.X, srcPoint.Y, 20, 20));
Я делаю что-то не так или это просто неправильный подход.
Для контекста: я пытаюсь смягчить проблему с широкоэкранным игровым интерфейсом, скопировав HUD по краям и расположив его по центру ближе к середине.
Я знаю о FlawlessWidescreen, но он не поддерживает многие менее популярные игры. Я полагаю, что ковыряние в памяти (что делает безупречный) также может сработать, но почти всегда против TOS.
Изменить: конечная цель - скопировать произвольный путь в виде формы, а не простого прямоугольника (я надеялся, что это маска изображения).
Редактировать № 2: Итак, каждые 100 мс рисуется неправильная форма. Оказывается, это просто тормозит игру, пока я не замедляю ее до каждых 500 мс. Но все же игра не гладкая. Будет ли эта операция копирования и рисования изображения слишком тяжелой для GDI+? Я думал, что это достаточно просто, чтобы ничего не увязнуть.
Что вы думаете, прежде чем я отмечу ответ как принятый?