2013-04-12 2 views
6

würde Ich mag eine mittlere Farbe von zwei Farben erzeugen:Hinzufügen und divide Farbe in C#

Color Middle = Color.FromRGB(Color.FromRgb(Color1.R + Color2.R)/2, (Color1.G + Color2.G)/2, (Color1.B + Color2.B)/(2); 

Dieser Code wird nicht kompiliert, da FromRGB() ein byte benötigt.

So habe ich versucht, dies:

Color myColorMiddle = Color.FromRgb((byte)(Color1.R + Color2.R)/(byte)2, (byte)(Color1.G + Color2.G)/(byte)2, (byte)(Color1.B + Color2.B)/(byte)2); 

Aber ich den gleichen Fehler. Kann mir bitte jemand helfen?

Antwort

9

Arithmetische Operationen auf Byte (und Short) ergeben ein int-Ergebnis. Sie haben den gesamten Ausdruck in Klammern zu setzen und werfen, dass:

Color myColorMiddle = Color.FromRgb((byte)((Color1.R + Color2.R)/2), (byte)((Color1.G + Color2.G)/2), (byte)((Color1.B + Color2.B)/2)); 

wird Ihr Code sauberer sein, wenn Sie diese Funktion extrahieren:

byte Average(byte a, byte b) 
{ 
    return (byte)((a + b)/2); 
} 

Dann wird Ihr Code wie folgt aussieht:

Color myColorMiddle = Color.FromRgb(Average(Color1.R, Color2.R), Average(Color1.G, Color2.G), Average(Color1.B, Color2.B)); 
+0

Perfect Man! Danke :) –

4

Wenn Sie System.Windows.Media.Color verwenden, ich glaube, Sie können dies tun:

Color start = Color.FromRgb(255, 0, 0); 
    Color end = Color.FromRgb(0, 255, 0); 
    Color middle = start + (end - start) * 0.5F; 

Hinweis, ich habe das nicht versucht, aber ich habe es von MSDN erhalten:

http://msdn.microsoft.com/en-us/library/system.windows.media.color.aspx

UPDATE

ich mein letztes bearbeiten getestet und es funktioniert.

+0

+1, lerne jeden Tag etwas Neues. Ich habe ein paar fehlende Klammern hinzugefügt. – phoog