Нет, в .NET не существует такой вещи, как GreyColor. GreyColor - это частный случай цвета, точно так же, как зеленый лайм является частным случаем цвета. Нет необходимости усложнять модель.
Есть некоторые предопределенные цвета , которые вы можете использовать, если сможете найти нужный вам цвет. Они просто возвращают объект Color, значение ARGB которого совпадает с предопределенным цветом, поэтому они на самом деле не делают ничего, отличного от того, что делает ваш код выше. Они просто для удобства программиста, который не может или не хочет запоминать не очень интуитивную цветовую модель RGB.
Кажется, вы обеспокоены потенциальными расходами или избыточностью создания объекта Color, но есть несколько причин, по которым это не должно вызывать беспокойства. Вы можете думать о методе FromArgb как о перегруженном конструкторе для объекта Color
: это способ создания цвета, отличного от предопределенных. Он просто создает цветовой объект, который определяется как заданные вами значения RGB. На самом деле нет другого способа представления цвета (кроме альтернативных цветовых моделей, таких как HSV, но даже тогда вам придется указывать три отдельных значения: оттенок 0, насыщенность 0 и значение 39 ). Мы, люди, можем описывать цвета гораздо более абстрактными способами, но компьютер на самом деле не понимает и не заботится об этих вещах. Документация для самой структуры Color объясняет, что она просто представляет значения RGB вместе со значением альфа (прозрачности). Это очень маленький объект, который содержит около 4 байтовых значений. И именно так метод, которым вы передаете цвет (Bitmap.SetPixel
), будет рисовать цвет, основываясь на этих значениях красного, зеленого и синего.
Стоит также отметить, что Color
является структурой, которая является типом значения, а не ссылочным типом. Это означает, среди прочего , что он живет inline, где бы ни была определена ваша переменная. Он не указывает на другой объект, он живет локально в стеке, а не в куче, и стек дешев . Это делает его как минимум несколько менее дорогим, чем ссылочный тип, такой как класс.
Наконец, я был бы упущен, если бы не указал, что этот тип микрооптимизации редко будет иметь какое-либо значение для производительности вашего кода.
Короче говоря, нет такой вещи, но беспокоиться не о чем.