Создание скриншота - C#
Формулировка задачи:
Доброго времени.
Есть такой кодУ меня матрица FullHD, разрешение тоже 1920х1080. При коде (с пометкой "//*" скриншот получается обрезанным - вместо 1920х1080 выходит 1536х864 (Вообще странное разрешение).
А если выбрать код (с пометкой "//**"), то все работает вроде нормально, но как быть, если программу надо запускать еа разных компьютерах с разными разрешениями?
пробовал несколько кодов, но результата нет.
Такой, к примеру, тоже не работает:и этот тоже не работает
Graphics graph = null;
var bmp = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); //*
// var bmp = new Bitmap(1920, 1080); //**
graph = Graphics.FromImage(bmp);
graph.CopyFromScreen(0, 0, 0, 0,bmp.Size);
bmp.Save("filename.bmp");string arg = DateTime.Now.ToString("dd.MM.yyyy_HH.mm.ss");
Thread.Sleep(300);
Size size = Screen.PrimaryScreen.Bounds.Size;
Bitmap bitmap = new Bitmap(size.Width, size.Height);
using (Graphics graphics = Graphics.FromImage(bitmap))
{
graphics.CopyFromScreen(Point.Empty, Point.Empty, size);
string filename = string.Format("{0}\\{1}.jpg", Environment.GetFolderPath(Environment.SpecialFolder.Desktop), arg);
bitmap.Save(filename, ImageFormat.Jpeg);
}Bitmap bmp = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height,
PixelFormat.Format32bppRgb);
using (Graphics gr = Graphics.FromImage(bmp))
{
gr.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y,
0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
}
return bmp;Решение задачи: «Создание скриншота»
textual
Листинг программы
using Microsoft.Win32;
...
static Size GetTrueScreenSize(Screen screen)
{
//get system DPI
var systemDPI = (int)Registry.GetValue("HKEY_CURRENT_USER\\Control Panel\\Desktop", "LogPixels", 96);
using (var graphics = Graphics.FromHwnd(IntPtr.Zero))
{
//get graphics DPI
var dpiX = graphics.DpiX;
var dpiY = graphics.DpiY;
//get true screen size
var w = (int)Math.Round(screen.Bounds.Width * systemDPI / dpiX);
var h = (int)Math.Round(screen.Bounds.Height * systemDPI / dpiY);
return new Size(w, h);
}
}