查找颜色的像素坐标

本文关键字:坐标 像素 颜色 查找 | 更新日期: 2023-09-27 18:33:38

我正在用Visual Studio C#制作一个程序,它可以检测一种颜色,然后找到该像素的x,y坐标。我做过研究,但我能找到的只是你已经给出了坐标,它感觉到了颜色,这不是我想要的,我想给出颜色,它找到了坐标。有人知道如何做到这一点吗?谢谢

查找颜色的像素坐标

可以将图像提供给位图对象,然后调用 getPixel(x, y( 方法来获取特定点的像素。 由于位图对象具有图像的尺寸,因此您可以遍历每个像素(YIKES!(,测试与所需颜色的匹配。 getPixel(( 返回一个 Color 对象,您可以使用该对象。 这是我超快完成的事情。 pictureBox1 是我的窗体上的 PictureBox 元素。

Bitmap b = new Bitmap(pictureBox1.Image);
Color c = b.GetPixel(0,0);

但请记住,搜索匹配像素的情况是 O(n(,其中 n 是图像中的像素数。 对于小型和中型图片,这还不错,但对于大图像,您可能会注意到程序挂起。

您可以按照@kevin628所说的操作,但添加一个for语句,这样它就会像这样搜索每个像素:

    private void GetPixels()
    {
        Bitmap b = new Bitmap(pictureBox1.Image);
        List<Color> colorList = new List<Color>
        {
        };
        for (int y = 0; y < b.Height; y++)
        {
            for (int x = 0; x < b.Width; x++)
            {
                colorList.Add(b.GetPixel(x, y));
            }
        }
    }

然后使用这个图像,你会得到这样的东西(不是整个,因为它是~50000行(:

颜色 [A=255, R=247, G=240, B=136]
颜色 [A=255, R=252, G=247, B=155]
颜色 [A=255, R=242, G=238, B=164]
颜色 [A=255, R=79, G=124, B=103]
颜色 [A=255, R=79, G=124, B=103]
颜色 [A=255, R=0, G=42, B=17]
颜色 [A=255, R=16, G=104, B=90]
颜色 [A=255, R=15, G=114, B=109]
颜色 [A=255, R=33, G=125, B=124]
颜色 [A=255, R=11, G=83, B=80]
颜色 [A=255, R=36, G=72, B=68]
颜色 [A=255, R=151, G=156, B=150]
颜色 [A=255, R=90, G=70, B=59]
颜色 [A=255, R=147, G=109, B=88]
颜色 [A=255, R=252, G=204, B=164]
颜色 [A=255, R=220, G=175, B=134]
颜色 [A=255, R=219, G=187, B=162]
颜色 [A=255, R=126, G=104, B=91]
颜色 [A=255, R=108, G=94, B=93]
颜色 [A=255, R=241, G=235, B=239]
颜色 [A=255, R=139, G=137, B=142]
颜色 [A=255, R=83, G=92, B=101]
颜色 [A=255, R=146, G=172, B=187]
颜色 [A=255, R=17, G=62, B=85]
颜色 [A=255, R=40, G=106, B=138]
颜色 [A=255, R=33, G=116, B=146]
颜色 [A=255, R=5, G=96, B=117]
颜色 [A=255, R=0, G=79, B=84]
颜色 [A=255, R=6, G=94, B=80]
颜色 [A=255, R=27, G=114, B=98]
颜色 [A=255, R=40, G=130, B=131]
颜色 [A=255, R=19, G=116, B=125]
颜色 [A=255, R=21, G=128, B=134]
颜色 [A=255, R=5, G=119, B=120]
颜色 [A=255, R=8, G=120, B=121]
颜色 [A=255, R=11, G=107, B=105]
颜色 [A=255, R=46, G=113, B=106]
颜色 [A=255, R=21, G=70, B=49]
颜色 [A=255, R=45, G=123, B=99]

然后要测试颜色,只需执行以下操作:

for (int i = 0; i < colorList.Count; i++)
{
    Color c = Color.Black;
    if (c == colorList[i])
    {
        //do something
    }
}

1(将纹理加载为字节数组。例如,如果您的纹理大小为 2x2,它应该看起来像这样:000111222333哪里:000 - RGB 在 (0,0( 处111 - RGB 在 (1,0( 处222 - RGB 在 (0,1(333 - RGB 在 (1,1(000 或 111 表示它有 3 个字节,其中每个字节都是红色、绿色或蓝色。完成此操作后,您可以遍历所有 x 和 y,并检查当前位置的颜色是否与您搜索的颜色匹配。

您可以使用已经找到的方法。检查每个坐标处的每个像素,以找到与用户输入的颜色相等的颜色。从 0、0 开始。然后递增 X 值,直到它位于像素行的末尾。每次 X 值位于行尾时,递增 Y 值并将 X 重置为 0。获得的颜色值等于用户输入的颜色值后,在找到匹配项之前最后使用的 X 和 Y 坐标将返回给用户。