2013-04-12 10 views
6

Chciałbym wygenerować środkowy kolor z dwóch kolorów:dodawania i dzielenia kolor w C#

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

Ten kod nie będzie kompilować bo FromRGB() potrzebuje byte.

Więc próbowałem to:

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); 

Ale pojawia się ten sam błąd. Czy ktoś może mi pomóc?

Odpowiedz

9

Operacje arytmetyczne w bajtach (i krótkich) dają wynik typu int. Musisz umieścić całego wyrażenia w nawiasach i oddać, że:

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

Twój kod będzie czystsze jeśli wyodrębnić to funkcję:

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

Następnie kod wygląda następująco:

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

Perfect Man! Dzięki :) –

4

Jeśli używasz System.Windows.Media.Color, myślę, że można to zrobić:

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

Uwaga, nie próbowałem tego, ale ja nie dostać go z MSDN:

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

UPDATE

Ja testowałem moją najnowszą edycję i to działa.

+0

+1, ucz się czegoś nowego każdego dnia. Dodałem kilka brakujących nawiasów. – phoog

Powiązane problemy