Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 找到一种颜色';s像素坐标_C#_Image Processing_Rgb_Pixels_Argb - Fatal编程技术网

C# 找到一种颜色';s像素坐标

C# 找到一种颜色';s像素坐标,c#,image-processing,rgb,pixels,argb,C#,Image Processing,Rgb,Pixels,Argb,我正在Visual Studio C#中制作一个程序,可以检测颜色,然后找到该颜色像素的x,y坐标。我已经做了研究,但我能找到的只是你已经给出了坐标,它感觉到了颜色,这不是我想要的,我想给出颜色,它找到了坐标。有人知道怎么做吗?谢谢1)以字节数组的形式加载纹理。例如,如果纹理大小为2x2, 它应该看起来像: 000111222333 哪里: 000-在(0,0)处的RGB 111-在(1,0)处的RGB 222-在(0,1)处的RGB 333-RGB at(1,1) 000或111表示它有3个字

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

1)以字节数组的形式加载纹理。例如,如果纹理大小为2x2, 它应该看起来像: 000111222333 哪里: 000-在(0,0)处的RGB 111-在(1,0)处的RGB 222-在(0,1)处的RGB 333-RGB at(1,1) 000或111表示它有3个字节,其中 每个字节都是红色、绿色或蓝色。 一旦你这样做了,你就可以循环通过所有的x和y, 并检查当前位置的颜色是否与搜索的颜色匹配。

1)将纹理加载为字节数组。例如,如果纹理大小为2x2, 它应该看起来像: 000111222333 哪里: 000-在(0,0)处的RGB 111-在(1,0)处的RGB 222-在(0,1)处的RGB 333-RGB at(1,1) 000或111表示它有3个字节,其中 每个字节都是红色、绿色或蓝色。 一旦你这样做了,你就可以循环通过所有的x和y,
并检查当前位置的颜色是否与搜索的颜色匹配。

您可以将图像馈送到位图对象,然后调用getPixel(x,y)方法以获取特定点的像素。因为位图对象具有图像的尺寸,所以可以迭代每个像素(YIKES!),测试是否与所需颜色匹配。getPixel()返回可以使用的颜色对象。这里有一件事我做得非常快。pictureBox1是我表单上的PictureBox元素

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

但是,请记住,搜索匹配像素的情况更糟,即O(n),其中n是图像中的像素数。对于小型或中型图片,这并不太糟糕,但对于大型图片,您可能会注意到程序挂起。

您可以将图像馈送到位图对象,然后调用getPixel(x,y)方法以获取特定点的像素。因为位图对象具有图像的尺寸,所以可以迭代每个像素(YIKES!),测试是否与所需颜色匹配。getPixel()返回可以使用的颜色对象。这里有一件事我做得非常快。pictureBox1是我表单上的PictureBox元素

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

但是,请记住,搜索匹配像素的情况更糟,即O(n),其中n是图像中的像素数。对于小型或中型图片,这并不太糟糕,但是对于大型图片,您可能会注意到程序挂起。

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

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

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

    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));
            }
        }
    }
private void GetPixels()
{
位图b=新位图(pictureBox1.Image);
列表颜色列表=新列表
{
};
对于(int y=0;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
    }
}
for(int i=0;i
您可以按照@kevin628所说的去做,但是为
语句添加一个
,这样它就