2009-06-11 1 views
0

Как я могу это сделать?Преобразование метода RGB?

int blue = Color.Blue.ToArgb(); 
int yellow = Color.Yellow.ToArgb(); 

blue = (blue + yellow)/2; 

Color Blue = ConvertFromRGB(blue); 
+0

Это психическое отладочное разборки между Нолдорином и Джейсоном Гейне. Кто победит? Не оставляйте свое место –

+0

Lol. Да, это не совсем ясно, что OP хочет делать, но я стараюсь изо всех сил. – Noldorin

+0

:) полностью согласен, какой способ просыпаться этим утром! – CodeLikeBeaker

ответ

8

Я думаю, что вы ищете это:

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 типа здесь.)

+0

+1 для четкого объяснения цвета смешивания – CodeLikeBeaker

+0

Cheers. :) И да, вы, по общему признанию, ответили на (прямой) вопрос, хотя важно, чтобы ОП осознавал, что он на самом деле делает, как вы, кажется, понимаете. – Noldorin

3

Я думаю, что это то, что вы могли бы искать:

int blue = Color.Blue.ToArgb(); 
int yellow = Color.Yellow.ToArgb(); 

blue = (blue + yellow)/2; 

Color Blue = Color.FromArgb(blue); 
+0

Я действительно не думаю, что это даст правильный результат, хотя это может быть то, чего хочет OP. Обычно это * не * правильный способ смешивания цветов. (Также, как голоса этого ответа ракеты, когда мой был первоначально эквивалентен и в первую очередь?) – Noldorin

+0

Это на самом деле что-то сделает, но в каждом случае это не усреднит цветные компоненты. – PeterAllenWebb

+0

Я просто ответил, что он появился, они искали. В вопросе о смешивании нет ничего. – CodeLikeBeaker

1

Просто усреднить цвета покомпонентно, если это то, что вы пытаетесь сделать:

Color average = ConvertFromRGB((Color.Blue.R + Color.Yellow.R)/2), (Color.Blue.G + Color.Yellow.G)/2), (Color.Blue.B + Color.Yellow.B)/2)); 
+0

Да, точно. Это правильный способ смешивания цветов, как я указал в своем посте. Примечание. Я думаю, вы хотите использовать 'Color.FromArgb' вместо' ConvertFromRGB'. – Noldorin

0

было бы полезно знать, что вы ожидаете от второго, наделяет «синим» - вы, конечно, не будете получать оттенок синий (более красный).

Проблема заключается в том, что класс 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, а не неожиданный цвет (который вы, скорее всего, получите с помощью некомпонентного подхода).

Смежные вопросы