C#如何从屏幕获取像素颜色/数据?

3

好的,我正在尝试更加高级的操作,其中一件事是学习如何从屏幕上的特定位置获取像素颜色或数据。我已经搜索了很多,但似乎大多数人都想在c或c++中完成这个操作。

我正在制作一个程序,用于扫描屏幕上的某个位置以查找特定颜色。如果该位置包含任何橙色,则我的窗口中的数字变为1(真)或0(假)。 我的窗口背景是透明的,如果这有影响的话。

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

谢谢


这个有帮助吗:- https://dev59.com/7nM_5IYBdhLWcg3wMgAF - user3414693
哇,谢谢,我之前找不到这个。虽然我担心会再次遇到旧的[DLLImport] user32.dll问题。我讨厌搞那些本地Win32函数,因为它比我想要的更高级,但是谢谢,我会尝试一下。 - IzzM
2个回答

2

若要从屏幕中捕获特定矩形,请使用以下代码:

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

我仍在测试各种可能性,看哪些可行,哪些不行。谢谢,我也会尝试这个的。 - IzzM
为什么会有重复的代码?只需检查矩形是否为空,如果是,则将屏幕矩形分配给它。然后您可以只使用“仅矩形”部分。 - James Coyle
@JamesCoyle 谢谢,我已经更新了代码。 - yazan

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接