GetPixel (gdi32)
Last changed: -188.246.251.25

.
Summary

C# Signature:

[DllImport("gdi32.dll")]
static extern uint GetPixel(IntPtr hdc, int nXPos, int nYPos);

User-Defined Types:

None.

Notes:

None.

Tips & Tricks:

Please add some!

Sample Code:

  [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);

  // Print out the RGB value of the pixel which is under the mouse cursor.
  // NB: BLUE and RED components will be swapped because GetPixel returns ABGR
  static private void myControl_MouseMove(object sender,System.Windows.Forms.MouseEventArgs e)
  {
    IntPtr hdc = GetDC(IntPtr.Zero);
    uint pixel = GetPixel(hdc, Cursor.Position.X, Cursor.Position.Y);
    ReleaseDC(IntPtr.Zero,hdc);
    Color color = Color.FromArgb((int)pixel);
    Console.WriteLine("Color is {0}",color);
  }

2nd Example (above did not work for me, here is my solution):

    [DllImport("gdi32.dll")]
    static extern IntPtr CreateDC(string strDriver,
      string strDevice, string strOutput, IntPtr pData);

    [DllImport("gdi32.dll")]
    static extern bool DeleteDC(IntPtr hdc);

    [DllImport("gdi32.dll")]
    static extern int GetPixel(IntPtr hdc, int nXPos, int nYPos);

    // ...
    IntPtr hdcScreen = CreateDC("Display", null, null, IntPtr.Zero);
    int cr = GetPixel(hdcScreen, x, y);
    Color color = Color.FromArgb((cr & 0x000000FF),
        (cr & 0x0000FF00) >> 8,
        (cr & 0x00FF0000) >> 16);
    DeleteDC(hdcScreen);
    // ... and apply the color to Bitmap-struct via SetPixel() or whatever else you want to do with it..

Alternative Managed API:

Do you know one? Please contribute it!

Documentation
GetPixel on MSDN