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

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

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

Мне нужно оптимизировать код. У меня в нескольких потоках постоянно узнается цвет конкретного пикселя на экране, но скорость вычисления цвета пикселя слишком медленная, подскажите пожалуйста как можно ускорить этот процесс.
Листинг программы
  1. class BitmapDropper : IDropper
  2. {
  3. public System.Windows.Media.Color GetColor()
  4. {
  5. Rectangle bounds = Screen.PrimaryScreen.Bounds;
  6. Bitmap bmp = new Bitmap(bounds.Width, bounds.Height);
  7. Graphics graph = Graphics.FromImage(bmp);
  8. graph.CopyFromScreen(0, 0, 0, 0, bmp.Size);
  9. var color = bmp.GetPixel(bounds.Width / 2, bounds.Height / 2);
  10. var mColor = new System.Windows.Media.Color()
  11. {
  12. A = 255,
  13. R = color.R,
  14. G = color.G,
  15. B = color.B
  16. };
  17. return mColor;
  18. }
  19. }

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

textual
Листинг программы
  1.     class WinApiDropper : IDropper
  2.     {
  3.         public System.Windows.Media.Color GetColor()
  4.         {
  5.             Rectangle bounds = Screen.PrimaryScreen.Bounds;
  6.  
  7.             IntPtr hDC = GetDC(IntPtr.Zero);
  8.             uint pixel = GetPixel(hDC, bounds.Width / 2, bounds.Height / 2);
  9.             ReleaseDC(IntPtr.Zero, hDC);
  10.  
  11.             byte r = (byte)(pixel & 0x000000FF);
  12.             byte g = (byte)((pixel & 0x0000FF00) >> 8);
  13.             byte b = (byte)((pixel & 0x00FF0000) >> 16);
  14.  
  15.  
  16.             var mColor = new System.Windows.Media.Color()
  17.             {
  18.                 A = 255,
  19.                 R = r,
  20.                 G = g,
  21.                 B = b
  22.             };
  23.  
  24.             return mColor;
  25.         }
  26.  
  27.         [DllImport("user32.dll")]
  28.         public static extern IntPtr GetDC(IntPtr hwnd);
  29.  
  30.         [DllImport("user32.dll")]
  31.         public static extern int ReleaseDC(IntPtr hwnd, IntPtr hDC);
  32.  
  33.         [DllImport("gdi32.dll")]
  34.         public static extern uint GetPixel(IntPtr hDC, int x, int y);
  35.  
  36.     }

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


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

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

14   голосов , оценка 4.143 из 5

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

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

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