【问题标题】:C# How to get pixel color/data from the screen? [duplicate]C#如何从屏幕获取像素颜色/数据? [复制]
【发布时间】:2025-12-06 07:30:01
【问题描述】:

好的,所以我在这里尝试更高级一些,我想学习的其中一件事是从屏幕上的某个位置获取像素颜色或数据。我搜索了很多,但似乎大多数人都想在 c 或 c++ 中执行此操作。

我正在制作一个程序,用于扫描屏幕上某个位置的某种颜色。如果该位置包含任何带有橙色的东西,那么我窗口中的数字将变为 1 表示真或 0 表示假。 我的窗口的背景是透明的,如果这很重要的话。

我只遇到过 Graphics.CopyFromScreen() 和 bitmap.GetPixel();

谢谢

【问题讨论】:

  • 这有帮助吗:- *.com/questions/1483928/…
  • 哇,谢谢,我以前找不到。虽然我担心我会再次遇到旧的 [DLLImport] user32.dll 的东西。我讨厌搞乱那些原生的 win32 功能,因为它比我想去的要先进得多,但是谢谢,我试试看。

标签: c# colors screen pixel


【解决方案1】:

要从屏幕上捕获特定的矩形,请使用以下代码

    public Bitmap CaptureFromScreen(Rectangle rect)
    {
        Bitmap bmpScreenCapture = null;

        if (rect == Rectangle.Empty)//capture the whole screen
        {
            rect = Screen.PrimaryScreen.Bounds;
        }

        bmpScreenCapture = new Bitmap(rect.Width,rect.Height);

        Graphics p = Graphics.FromImage(bmpScreenCapture);


            p.CopyFromScreen(rect.X,
                     rect.Y,
                     0, 0,
                     rect.Size,
                     CopyPixelOperation.SourceCopy);


        p.Dispose();

        return bmpScreenCapture;
    }

使用函数获取特定位置的颜色

    public Color GetColorFromScreen(Point p)
    {
        Rectangle rect = new Rectangle(p, new Size(2, 2));

        Bitmap map = CaptureFromScreen(rect);

        Color c = map.GetPixel(0, 0);

        map.Dispose();

        return c;
    }

【讨论】:

  • 我仍在测试,看看什么可行,什么不可行。谢谢,我也试试看。
  • 为什么会有重复的代码?只需检查矩形是否为空,如果是,则将屏幕矩形分配给它。然后你可以只使用“只是矩形”部分。
  • @JamesCoyle 谢谢,我已经更新了代码。
【解决方案2】:

请看下面的参考资料,我想这是你需要的:

http://www.codeproject.com/Articles/24850/Geting-pixel-color-from-screen-shoot-image

【讨论】: