我在Visual Studio C#中创建一个可以检测颜色的程序,然后用该颜色找到该像素的x,y坐标。我已经做过研究,但我能找到的就是你已经给出了坐标,并且它感知了颜色,这不是我想要的颜色,我想要给出颜色,它找到了坐标。有人知道怎么做吗?感谢
答案 0 :(得分:3)
您可以将图像提供给Bitmap对象,然后调用getPixel(x,y)方法以获取特定点的像素。由于Bitmap对象具有图像的尺寸,因此您可以迭代每个像素(YIKES!),测试具有所需颜色的匹配。 getPixel()返回一个Color对象,您可以使用它。这是我非常快速地工作的东西。 pictureBox1是我表单上的PictureBox元素。
Bitmap b = new Bitmap(pictureBox1.Image);
Color c = b.GetPixel(0,0);
但请记住,搜索匹配像素的情况更糟O(n),其中n是图像中的像素数。对于小尺寸和中等尺寸的照片,这不是太糟糕,但对于巨大的图像,您可能会注意到您的程序挂起。
答案 1 :(得分:3)
您可以执行@ 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));
}
}
}
然后使用this image,你得到这样的东西(不是全部,因为它是~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
}
}
答案 2 :(得分:0)
1)将纹理加载为字节数组。例如,如果您的纹理是2x2大小, 它应该看起来像: 000111222333 哪里: 000 - RGB at(0,0) 111 - RGB(1,0) 222 - RGB at(0,1) 333 - RGB at(1,1) 000或111表示它有3个字节,其中 每个字节都是红色,绿色或蓝色。 完成后,您可以循环遍历所有x和y, 并检查当前位置的颜色是否与搜索到的颜色相符。
答案 3 :(得分:0)
您可以使用您已经找到的方法。检查每个坐标处的每个像素,以找到与用户输入的颜色相等的颜色。从0开始,然后递增X值,直到它位于像素行的末尾。每次X值位于行的末尾时,递增Y值并将X重置为0.一旦获得的颜色值等于用户输入的颜色值,最后使用的X和Y坐标在找到匹配之前,将回馈给用户。