3

我正在搜索这个网站上的帖子,我遇到了这个问题: 如何使用 c# 获取 X、Y 像素的颜色?

这种方法对于尝试获取表单内像素的颜色是否仍然有效?

如果不是,那将是一种在二维颜色值数组中“映射”表单的方法?

例如,我有一个 Tron 游戏,我想检查下一个 lightbike 的位置是否已经包含另一个 lightbike。

谢谢,伊恩

4

3 回答 3

3
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;
    }
}

使用它,您可以执行以下操作:

public static class ControlExts
{
    public static Color GetPixelColor(this Control c, int x, int y)
    {
        var screenCoords = c.PointToScreen(new Point(x, y));
        return Win32.GetPixelColor(screenCoords.X, screenCoords.Y);
    }
}

因此,在您的情况下,您可以执行以下操作:

var desiredColor = myForm.GetPixelColor(10,10);
于 2012-04-13T04:46:53.183 回答
0

您可以使用 GetPixel 方法获取颜色。

例如

// 从图像文件创建位图对象。位图 myBitmap = new Bitmap("Grapes.jpg");

// 获取 myBitmap 中像素的颜色。颜色 pixelColor = myBitmap.GetPixel(50, 50);

这可能是针对不同情况的另一种方法,详情请点击此处

  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;
      }
   }
于 2012-04-13T04:42:06.933 回答
0

您可以使用您引用的问题中的方法从表单中获取像素的颜色,您只需要首先确定像素是否在表单的范围内,并且您需要从您的表单到屏幕的坐标,反之亦然。

编辑:经过一番思考,如果有人在您的表单顶部打开另一个窗口,这将是不好的!我认为最好找出一种不同的方法......

于 2012-04-13T04:45:50.990 回答