GetPixel (gdi32)
Last changed: -188.246.251.25

.
Summary

C# Signature:

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

VB.NET Signature

<DllImport("gdi32.dll", SetLastError:=True)> _
Public Function  GetPixel(hdc As IntPtr , nXPos As Integer, nYPos as Integer) As UInteger
End Function

VB Signature:

Public Declare Function GetPixel Lib "gdi32" Alias "GetPixel" (ByVal hdc As IntPtr, ByVal X As Int32, ByVal Y As Int32) As Int32

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..

Wrapper Class

  using System;
  using System.Drawing;
  using System.Runtime.InteropServices;

  sealed class Win32
  {
      [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);

      static public System.Drawing.Color GetPixelColor(int x, int y)
      {
       IntPtr hdc = GetDC(IntPtr.Zero);
       uint pixel = GetPixel(hdc, x, y);
       ReleaseDC(IntPtr.Zero, hdc);
       Color color = Color.FromArgb((int)(pixel & 0x000000FF),
                    (int)(pixel & 0x0000FF00) >> 8,
                    (int)(pixel & 0x00FF0000) >> 16);
       return color;
      }
   }

Alternative Managed API:

Do you know one? Please contribute it!

Documentation
GetPixel on MSDN