Я написал функцию, которая возьмет элемент управления и назначение файла и сохранит область формы, которую охватывает элемент управления.
Моя проблема в том, что, когда я переместил свой монитор со своих внешних мониторов на главный экран моего ноутбука, область захвата была смещена на непоследовательную величину. Я наконец-то понял, что виновато масштабирование (DPI). Когда я изменил его на 100% (96 DPI), он работал на экране ноутбука. Все остальные экраны уже были установлены на 100%. Вернуться к 125%, и это была только проблема на экране ноутбука. Как мне разрешить 125%?
Находясь на экране ноутбука, чем ближе к верхнему левому краю экрана находится форма, тем точнее местоположение изображения. Размер сгенерированного изображения одинаков на любом экране, только местоположение меняется на экране ноутбука. Кроме того, форма изменяется при переходе с внешнего монитора на дисплей ноутбука. Именно после этого изменения размера я получаю эту проблему.
private void capture(Control ctrl, string fileName)
{
Rectangle bounds = ctrl.Bounds;
Point pt = ctrl.PointToScreen(bounds.Location);
Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height);
using (Graphics g = Graphics.FromImage(bitmap))
{
g.CopyFromScreen(new Point(pt.X - ctrl.Location.X, pt.Y - ctrl.Location.Y), Point.Empty, bounds.Size);
}
string filetype = fileName.Substring(fileName.LastIndexOf('.')).ToLower();
switch (filetype)
{
case ".png":
bitmap.Save(fileName, ImageFormat.Png);
break;
case ".jpeg":
bitmap.Save(fileName, ImageFormat.Jpeg);
break;
case ".bmp":
bitmap.Save(fileName, ImageFormat.Bmp);
break;
default:
break;
}
}