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

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

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

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

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

textual
Листинг программы
        [DllImport("user32.dll")]
        private static extern IntPtr GetDC(IntPtr hwnd);
 
        [DllImport("user32.dll")]
        private static extern int ReleaseDC(IntPtr hwnd, IntPtr hDC);
 
        [DllImport("gdi32.dll")]
        private static extern uint GetPixel(IntPtr hDC, int x, int y);
 
        public static void GetPixelsColor(int x, int y, out uint[,] pixels)
        {
            IntPtr hDC = GetDC(IntPtr.Zero);
 
            pixels = new uint[3, 2];
 
            for (int i = 0; i < 3; i++)
                for (int j = 0; j < 2; j++)
                    pixels[i, j] = GetPixel(hDC, x + i, y + j);
 
            ReleaseDC(IntPtr.Zero, hDC);
        }
 
        public static void GetColorFromUint(uint color, out byte R, out byte G, out byte B)
        {
            R = (byte)(color & 0x000000FF);
            G = (byte)((color & 0x0000FF00) >> 8);
            B = (byte)((color & 0x00FF0000) >> 16);
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            uint[,] pixels = null;
            GetPixelsColor(1100, 650, out pixels);
 
            bool white = true;
 
            for (int i = 0; i < 3; i++)
                for (int j = 0; j < 2; j++)
                {
                    byte R, G, B;
                    GetColorFromUint(pixels[i, j], out R, out G, out B);
                    if (R != 246 || G != 246 || B != 246)
                        white = false;
                }
 
            if (white)
                MessageBox.Show("Область белая");
        }

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


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

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

6   голосов , оценка 3.833 из 5
Похожие ответы