Как узнать цвета каждого пикселя на экране - 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;
}

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


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

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

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