Считывание цвета пикселя с экрана. Выбрать наиболее оптимальный код из двух предложенных - C#

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

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

Возникла потребность считывать цвет пикселя, сейчас приведу 2 подхода к решению етой задачи. При чем частота вызовов метода вариируеться(от 1 до 20) раз в секунду. От вас требуеться обоснованный ответ на вопрос "какой из методов быстрее при многократном вызове?".
Листинг программы
  1. [DllImport("user32.dll")]
  2. public static extern IntPtr GetDC(IntPtr hwnd);
  3. [DllImport("user32.dll")]
  4. public static extern int ReleaseDC(IntPtr hwnd, IntPtr hDC);
  5. [DllImport("gdi32.dll")]
  6. public static extern uint GetPixel(IntPtr hDC, int x, int y);IntPtr hDC = GetDC(IntPtr.Zero);
  7. uint pixel = GetPixel(hDC, x, y);
  8. ReleaseDC(IntPtr.Zero, hDC);byte r = (byte)(pixel & 0x000000FF);
  9. byte g = (byte)((pixel & 0x0000FF00) >> 8);
  10. byte b = (byte)((pixel & 0x00FF0000) >> 16);
, спасибо

Ilya81

Листинг программы
  1. static Color GetPixel(Point position)
  2. {
  3. using (var bitmap = new Bitmap(1, 1))
  4. {
  5. using (var graphics = Graphics.FromImage(bitmap))
  6. {
  7. graphics.CopyFromScreen(position, new Point(0, 0), new Size(1, 1));
  8. }
  9. return bitmap.GetPixel(0, 0);
  10. }
  11. }

Решение задачи: «Считывание цвета пикселя с экрана. Выбрать наиболее оптимальный код из двух предложенных»

textual
Листинг программы
  1. using System;
  2. using System.Diagnostics;
  3. using System.Drawing;
  4. using System.Runtime.InteropServices;
  5.  
  6. class Program
  7. {
  8.     [DllImport("user32.dll")]
  9.     public static extern IntPtr GetDC(IntPtr hwnd);
  10.  
  11.     [DllImport("user32.dll")]
  12.     public static extern int ReleaseDC(IntPtr hwnd, IntPtr hDC);
  13.  
  14.     [DllImport("gdi32.dll")]
  15.     public static extern uint GetPixel(IntPtr hDC, int x, int y);
  16.  
  17.     static Color GetPixel(Point position)
  18.     {
  19.         using (var bitmap = new Bitmap(1, 1))
  20.         {
  21.             using (var graphics = Graphics.FromImage(bitmap))
  22.             {
  23.                 graphics.CopyFromScreen(position, new Point(0, 0), new Size(1, 1));
  24.             }
  25.             return bitmap.GetPixel(0, 0);
  26.         }
  27.     }
  28.  
  29.     static void Main(string[] args)
  30.     {
  31.         Stopwatch sw = new Stopwatch();
  32.         sw.Start();
  33.         for (int i = 0; i < 10; i++)
  34.             GetPixel(new Point(i, i));
  35.         sw.Stop();
  36.         Console.WriteLine("{0}:{1}", sw.Elapsed.Seconds, sw.Elapsed.Milliseconds);
  37.         sw.Reset();
  38.         sw.Start();
  39.         for (int i = 0; i < 10; i++)
  40.         {
  41.             IntPtr dc = GetDC(IntPtr.Zero);
  42.             GetPixel(dc, i, i);
  43.             ReleaseDC(IntPtr.Zero, dc);
  44.         }
  45.         sw.Stop();
  46.         Console.WriteLine("{0}:{1}", sw.Elapsed.Seconds, sw.Elapsed.Milliseconds);
  47.         Console.ReadKey(true);
  48.     }
  49. }

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


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

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

12   голосов , оценка 3.5 из 5

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

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

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