如何使用?确定图像是否包含特定颜色?

时间:2012-12-04 14:13:27

标签: c# .net system.drawing

我需要确定图像是否包含特定颜色:

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;
        }

3 个答案:

答案 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倍。