1

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

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

3 回答 3

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;
于 2012-12-04T14:15:39.213 回答
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;
    }
于 2012-12-04T14:19:11.420 回答
0

这两个答案都是正确的,但你必须知道, GetPixel(x, y)颜色SetPixel(x, y)很慢,对于高分辨率的图像来说是不好的。

为此,您可以LockBitmap在此处使用类:Work with bitmaps faster

这大约快 5 倍。

于 2012-12-04T14:36:08.940 回答