Определение цвета пикселей на экране - C#
Формулировка задачи:
Тут миллион тем уж создано по этому вопросу но у меня не работает.
Нужно определить прямоугольник из пикселей размером 3х2 цвет в определенном месте экрана например в точке 400х500. А именно зеленый цвет, если все пиксели зеленые то делать действие. Ресурсоемко сильно получается если каждые 0.1 секунды делать скриншот экрана и проверять там цвет. Не могли бы вы предложить какието наброски кода?
Это обязательно в коде должно быть?
И я нашел одну ссылку про это, но там всё сложно описано GetPixel.html
[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);Решение задачи: «Определение цвета пикселей на экране»
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("Область белая");
}