Создание скриншота - 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);
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д