Как узнать цвета каждого пикселя на экране - C#
Формулировка задачи:
хочу сделать типа бот для игры, нужно находить на экране красный треугольник, хочу проверять на экране цвет каждого пикселя, как это можно сделать?
Решение задачи: «Как узнать цвета каждого пикселя на экране»
textual
Листинг программы
public const int SRCCOPY = 13369376;
[DllImport("gdi32.dll",EntryPoint="DeleteDC")]
public static extern IntPtr DeleteDC(IntPtr hDc);
[DllImport("gdi32.dll",EntryPoint="DeleteObject")]
public static extern IntPtr DeleteObject(IntPtr hDc);
[DllImport("gdi32.dll",EntryPoint="BitBlt")]
public static extern bool BitBlt(IntPtr hdcDest,int xDest, int yDest,int wDest,int hDest,IntPtr hdcSource, int xSrc,int ySrc,int RasterOp);
[DllImport ("gdi32.dll",EntryPoint="CreateCompatibleBitmap")]
public static extern IntPtr CreateCompatibleBitmap(IntPtr hdc, int nWidth, int nHeight);
[DllImport ("gdi32.dll",EntryPoint="CreateCompatibleDC")]
public static extern IntPtr CreateCompatibleDC(IntPtr hdc);
[DllImport ("gdi32.dll",EntryPoint="SelectObject")]
public static extern IntPtr SelectObject(IntPtr hdc,IntPtr bmp);
public const int SM_CXSCREEN=0;
public const int SM_CYSCREEN=1;
[DllImport("user32.dll", EntryPoint="GetDesktopWindow")]
public static extern IntPtr GetDesktopWindow();
[DllImport("user32.dll",EntryPoint="GetDC")]
public static extern IntPtr GetDC(IntPtr ptr);
[DllImport("user32.dll",EntryPoint="GetSystemMetrics")]
public static extern int GetSystemMetrics(int abc);
[DllImport("user32.dll",EntryPoint="GetWindowDC")]
public static extern IntPtr GetWindowDC(Int32 ptr);
[DllImport("user32.dll",EntryPoint="ReleaseDC")]
public static extern IntPtr ReleaseDC(IntPtr hWnd,IntPtr hDc);
public void Main()
{
SIZE size;
IntPtr hBitmap;
IntPtr hDC = GetDC(GetDesktopWindow());
IntPtr hMemDC = CreateCompatibleDC(hDC);
size.cx = GetSystemMetrics(SM_CXSCREEN);
size.cy = GetSystemMetrics(SM_CYSCREEN);
hBitmap = CreateCompatibleBitmap(hDC, size.cx, size.cy);
if (hBitmap!=IntPtr.Zero)
{
IntPtr hOld = (IntPtr) SelectObject(hMemDC, hBitmap);
BitBlt(hMemDC, 0, 0,size.cx,size.cy, hDC, 0, 0, SRCCOPY);
SelectObject(hMemDC, hOld);
DeleteDC(hMemDC);
ReleaseDC(GetDesktopWindow(), hDC);
Bitmap bmp = System.Drawing.Image.FromHbitmap(hBitmap);
DeleteObject(hBitmap);
GC.Collect();
}
}
public struct SIZE
{
public int cx;
public int cy;
}