You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现屏幕中心10x10像素区域扫描 检测指定Color颜色是否存在

实现方案

你可以直接一次性捕获10x10的完整区域再遍历像素,相比循环调用单像素捕获的方案性能提升非常明显,具体实现如下:

核心思路

  • 仅调用一次CopyFromScreen捕获屏幕中心10x10的完整区域,避免重复调用API产生性能损耗
  • 遍历捕获到的位图所有像素,只要存在任意一个匹配的指定紫色就返回true,否则返回false

完整代码

using System.Drawing;
using System.Windows.Forms;

// 方法返回值表示是否检测到目标紫色
bool CheckCenter10x10HasPurple()
{
    Color targetPurple = Color.FromArgb(255, 254, 93, 255);
    Rectangle screenBounds = Screen.PrimaryScreen.Bounds;
    
    // 计算10x10区域的左上角坐标:以中心为基准向左、向上各偏移5像素
    int centerX = screenBounds.Width / 2;
    int centerY = screenBounds.Height / 2;
    int captureX = Math.Max(0, centerX - 5);
    int captureY = Math.Max(0, centerY - 5);
    // 边界兼容:避免区域超出屏幕范围触发异常
    int captureWidth = Math.Min(10, screenBounds.Width - captureX);
    int captureHeight = Math.Min(10, screenBounds.Height - captureY);

    // 一次性捕获目标区域
    using (Bitmap captureBmp = new Bitmap(captureWidth, captureHeight))
    {
        using (Graphics g = Graphics.FromImage(captureBmp))
        {
            g.CopyFromScreen(captureX, captureY, 0, 0, new Size(captureWidth, captureHeight));
        }

        // 遍历所有像素匹配目标色
        for (int x = 0; x < captureWidth; x++)
        {
            for (int y = 0; y < captureHeight; y++)
            {
                if (captureBmp.GetPixel(x, y).Equals(targetPurple))
                {
                    return true;
                }
            }
        }
    }
    return false;
}

// 调用示例
if (CheckCenter10x10HasPurple())
{
    // 存在指定紫色的业务逻辑
}

注意事项

  • .NET Core/.NET 5+ 环境需要先安装System.Drawing.Common NuGet包即可正常使用
  • 10x10的像素量级下直接用GetPixel完全满足性能需求,无需额外使用LockBits做复杂优化

内容的提问来源于stack exchange,提问作者Triptox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 13:24:05