Создание скриншота - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени. Есть такой код
Листинг программы
  1. Graphics graph = null;
  2. var bmp = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); //*
  3. // var bmp = new Bitmap(1920, 1080); //**
  4. graph = Graphics.FromImage(bmp);
  5. graph.CopyFromScreen(0, 0, 0, 0,bmp.Size);
  6. bmp.Save("filename.bmp");
У меня матрица FullHD, разрешение тоже 1920х1080. При коде (с пометкой "//*" скриншот получается обрезанным - вместо 1920х1080 выходит 1536х864 (Вообще странное разрешение). А если выбрать код (с пометкой "//**"), то все работает вроде нормально, но как быть, если программу надо запускать еа разных компьютерах с разными разрешениями? пробовал несколько кодов, но результата нет. Такой, к примеру, тоже не работает:
Листинг программы
  1. string arg = DateTime.Now.ToString("dd.MM.yyyy_HH.mm.ss");
  2. Thread.Sleep(300);
  3. Size size = Screen.PrimaryScreen.Bounds.Size;
  4. Bitmap bitmap = new Bitmap(size.Width, size.Height);
  5. using (Graphics graphics = Graphics.FromImage(bitmap))
  6. {
  7. graphics.CopyFromScreen(Point.Empty, Point.Empty, size);
  8. string filename = string.Format("{0}\\{1}.jpg", Environment.GetFolderPath(Environment.SpecialFolder.Desktop), arg);
  9. bitmap.Save(filename, ImageFormat.Jpeg);
  10. }
и этот тоже не работает
Листинг программы
  1. Bitmap bmp = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height,
  2. PixelFormat.Format32bppRgb);
  3. using (Graphics gr = Graphics.FromImage(bmp))
  4. {
  5. gr.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y,
  6. 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
  7. }
  8. return bmp;

Решение задачи: «Создание скриншота»

textual
Листинг программы
  1. using Microsoft.Win32;
  2. ...
  3. static Size GetTrueScreenSize(Screen screen)
  4. {
  5.     //get system DPI
  6.     var systemDPI = (int)Registry.GetValue("HKEY_CURRENT_USER\\Control Panel\\Desktop", "LogPixels", 96);
  7.  
  8.     using (var graphics = Graphics.FromHwnd(IntPtr.Zero))
  9.     {
  10.         //get graphics DPI
  11.         var dpiX = graphics.DpiX;
  12.         var dpiY = graphics.DpiY;
  13.  
  14.         //get true screen size
  15.         var w = (int)Math.Round(screen.Bounds.Width * systemDPI / dpiX);
  16.         var h = (int)Math.Round(screen.Bounds.Height * systemDPI / dpiY);
  17.  
  18.         return new Size(w, h);
  19.     }
  20. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы