我需要确定图像是否包含特定颜色:
r:255
g:0
b:192
我发现了这一点,但如果图像包含上述颜色,我需要返回一个布尔值,而不是返回点。
public static List<Point> FindAllPixelLocations(this Bitmap img, Color color)
{
var points = new List<Point>();
int c = color.ToArgb();
for (int x = 0; x < img.Width; x++)
{
for (int y = 0; y < img.Height; y++)
{
if (c.Equals(img.GetPixel(x, y).ToArgb())) points.Add(new Point(x, y));
}
}
return points;
}
答案 0 :(得分:4)
听起来你只需要替换
if (c.Equals(img.GetPixel(x, y).ToArgb())) points.Add(new Point(x, y));
通过
if (c.Equals(img.GetPixel(x, y).ToArgb())) return true;
答案 1 :(得分:1)
这样的事情:
public static bool HasColor(this Bitmap img, Color color)
{
for (int x = 0; x < img.Width; x++)
{
for (int y = 0; y < img.Height; y++)
{
if (img.GetPixel(x, y) == color)
return true;
}
}
return false;
}
答案 2 :(得分:0)
两个答案都是正确的,但您必须知道GetPixel(x, y)
和SetPixel(x, y)
颜色非常慢,而且对于高分辨率的图像来说效果不佳。
为此,您可以在此使用LockBitmap
课程:Work with bitmaps faster
这大约快5倍。