Как сравнить цвет с помощью метода GetPixel и цвет, передаваемый в методе, подобном Color.Black? - PullRequest
4 голосов
/ 19 сентября 2011

У меня есть цикл, который получает пиксельные цвета из изображения и пытаюсь определить, совпадают ли они с цветом, который я передал в метод в качестве параметра.

Я попробовал метод Equals, но он не работает. Я также попробовал метод ToKnown. Похоже, что совпадение не работает, потому что значения, которые синтезируют два цвета, не совпадают.

Пример:

С GetPixel:

{Name=ff000000, ARGB=(255, 0, 0, 0)}

Color.Black:

{Name=Black, ARGB=(255, 0, 0, 0)}
if (pixelColor.ToArgb().Equals(startingOffsetColor.ToArgb())) { }

Приведенный выше код работает, но я все еще хочу знать, есть ли какой-нибудь лучший метод или любой метод, который может уменьшить любую нагрузку на процессор, потому что я использую это внутри оператора цикла.

1 Ответ

16 голосов
/ 19 сентября 2011

Согласно MSDN , оператор Color.Equality ...

... сравнивает больше, чем значения ARGB структур Color. Это также делает сравнение некоторых государственных флагов. Если вы хотите сравнить только значения ARGB двух цветовых структур, сравните их, используя метод ToArgb

Таким образом, метод, который вы используете, является правильным для сравнения необработанных значений

EDIT

.ToArgb() возвращает int, поэтому вы можете просто использовать == для сравнения, вам не нужно использовать .Equals(), если вы найдете его слишком многословным.

...