Определение цвета пикселей на экране - C#

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

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

Тут миллион тем уж создано по этому вопросу но у меня не работает. Нужно определить прямоугольник из пикселей размером 3х2 цвет в определенном месте экрана например в точке 400х500. А именно зеленый цвет, если все пиксели зеленые то делать действие. Ресурсоемко сильно получается если каждые 0.1 секунды делать скриншот экрана и проверять там цвет. Не могли бы вы предложить какието наброски кода? Это обязательно в коде должно быть?
Листинг программы
  1. [DllImport("user32.dll")]
  2. static extern IntPtr GetDC(IntPtr hwnd);
  3. [DllImport("user32.dll")]
  4. static extern Int32 ReleaseDC(IntPtr hwnd, IntPtr hdc);
  5. [DllImport("gdi32.dll")]
  6. static extern uint GetPixel(IntPtr hdc,int nXPos,int nYPos);
И я нашел одну ссылку про это, но там всё сложно описано GetPixel.html

Решение задачи: «Определение цвета пикселей на экране»

textual
Листинг программы
  1.         [DllImport("user32.dll")]
  2.         private static extern IntPtr GetDC(IntPtr hwnd);
  3.  
  4.         [DllImport("user32.dll")]
  5.         private static extern int ReleaseDC(IntPtr hwnd, IntPtr hDC);
  6.  
  7.         [DllImport("gdi32.dll")]
  8.         private static extern uint GetPixel(IntPtr hDC, int x, int y);
  9.  
  10.         public static void GetPixelsColor(int x, int y, out uint[,] pixels)
  11.         {
  12.             IntPtr hDC = GetDC(IntPtr.Zero);
  13.  
  14.             pixels = new uint[3, 2];
  15.  
  16.             for (int i = 0; i < 3; i++)
  17.                 for (int j = 0; j < 2; j++)
  18.                     pixels[i, j] = GetPixel(hDC, x + i, y + j);
  19.  
  20.             ReleaseDC(IntPtr.Zero, hDC);
  21.         }
  22.  
  23.         public static void GetColorFromUint(uint color, out byte R, out byte G, out byte B)
  24.         {
  25.             R = (byte)(color & 0x000000FF);
  26.             G = (byte)((color & 0x0000FF00) >> 8);
  27.             B = (byte)((color & 0x00FF0000) >> 16);
  28.         }
  29.  
  30.         private void button1_Click(object sender, EventArgs e)
  31.         {
  32.             uint[,] pixels = null;
  33.             GetPixelsColor(1100, 650, out pixels);
  34.  
  35.             bool white = true;
  36.  
  37.             for (int i = 0; i < 3; i++)
  38.                 for (int j = 0; j < 2; j++)
  39.                 {
  40.                     byte R, G, B;
  41.                     GetColorFromUint(pixels[i, j], out R, out G, out B);
  42.                     if (R != 246 || G != 246 || B != 246)
  43.                         white = false;
  44.                 }
  45.  
  46.             if (white)
  47.                 MessageBox.Show("Область белая");
  48.         }

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


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

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

6   голосов , оценка 3.833 из 5

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

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

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