Как я могу это сделать?Преобразование метода RGB?
int blue = Color.Blue.ToArgb();
int yellow = Color.Yellow.ToArgb();
blue = (blue + yellow)/2;
Color Blue = ConvertFromRGB(blue);
Как я могу это сделать?Преобразование метода RGB?
int blue = Color.Blue.ToArgb();
int yellow = Color.Yellow.ToArgb();
blue = (blue + yellow)/2;
Color Blue = ConvertFromRGB(blue);
Я думаю, что вы ищете это:
var blueColor = Color.FromArgb((blue + yellow)/2);
Однако я не думаю, что это даст вам результат вы на самом деле хотите.
Вы должны быть очень осторожны в смешении цветов таким образом. Значение int
, представляющее цвет в форме ARGB, довольно произвольно по отношению к кодеру. Это, вероятно, лучше смешать компоненты RGB индивидуально, как:
var color1 = Color.Blue;
var color2 = Color.Yellow;
var blueColor = Color.FromArgb((color1.R + color2.R)/2,
(color1.G + color2.G)/2, (color1.B + color2.B)/2);
эту интерполирует (с точки центра) между двумя цветами, и должно дать вам то, что выглядит гораздо более похожим на смесь двух цветов.
(Обратите внимание, что я предполагаю, что вы имеете в виду System.Drawing.Color
типа здесь.)
+1 для четкого объяснения цвета смешивания – CodeLikeBeaker
Cheers. :) И да, вы, по общему признанию, ответили на (прямой) вопрос, хотя важно, чтобы ОП осознавал, что он на самом деле делает, как вы, кажется, понимаете. – Noldorin
Я думаю, что это то, что вы могли бы искать:
int blue = Color.Blue.ToArgb();
int yellow = Color.Yellow.ToArgb();
blue = (blue + yellow)/2;
Color Blue = Color.FromArgb(blue);
Я действительно не думаю, что это даст правильный результат, хотя это может быть то, чего хочет OP. Обычно это * не * правильный способ смешивания цветов. (Также, как голоса этого ответа ракеты, когда мой был первоначально эквивалентен и в первую очередь?) – Noldorin
Это на самом деле что-то сделает, но в каждом случае это не усреднит цветные компоненты. – PeterAllenWebb
Я просто ответил, что он появился, они искали. В вопросе о смешивании нет ничего. – CodeLikeBeaker
Просто усреднить цвета покомпонентно, если это то, что вы пытаетесь сделать:
Color average = ConvertFromRGB((Color.Blue.R + Color.Yellow.R)/2), (Color.Blue.G + Color.Yellow.G)/2), (Color.Blue.B + Color.Yellow.B)/2));
Да, точно. Это правильный способ смешивания цветов, как я указал в своем посте. Примечание. Я думаю, вы хотите использовать 'Color.FromArgb' вместо' ConvertFromRGB'. – Noldorin
было бы полезно знать, что вы ожидаете от второго, наделяет «синим» - вы, конечно, не будете получать оттенок синий (более красный).
Проблема заключается в том, что класс Color сохраняет свои значения ARGB как Int32, потому что каждый из 4 байтов представляет одно из значений Alpha, Red, Blue и Green.
Просить, чтобы добавить вместе два цвета в форме их Int32 будет вызывать неожиданные значения, как один байт «перетекает» в следующее (что происходит, когда вы добавляете 255 и 1?)
Color.Blue, для Например, есть -16776961. Это потому, что он имеет 4 байта, которые выглядят следующим образом:
0: 255
1: 0
2: 0
3: 255
Или:
11111111 00000000 00000000 11111111
Вы увидите, что гораздо понятнее разбить компоненты ARGB на отдельные байты, System.Drawing.Color позволяет вы сделать это с помощью свойства его экземпляра:
blue.A
blue.R
blue.G
blue.B
вы можете безопасно управлять этим, но помните, что они экземпляр Byte, поэтому вы не можете присвоить значение из диапазона 0-255. Для того, чтобы создать цвет из составных байтов, используйте:
Color.FromArgb(a, r, g, b);
Где a, r, g, b
байты.
Несколько путано, Color.FromArgb принимает параметры int, а не байты. Боюсь, я понятия не имею, почему кто-то лучше меня должен будет ответить на это, но приведение байта в int с производством int со значением от 0 до 255, поэтому безопасно использовать это.Цвет также имеет частный класс CheckByte, который передает каждый аргумент, чтобы вы получили исключение ArgumentException, а не неожиданный цвет (который вы, скорее всего, получите с помощью некомпонентного подхода).
Это психическое отладочное разборки между Нолдорином и Джейсоном Гейне. Кто победит? Не оставляйте свое место –
Lol. Да, это не совсем ясно, что OP хочет делать, но я стараюсь изо всех сил. – Noldorin
:) полностью согласен, какой способ просыпаться этим утром! – CodeLikeBeaker