我該怎麼做?轉換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);
不過,我不認爲這會給你你真正想要的結果。
您必須非常小心以這種方式混合顏色。就編碼器而言,表示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 2009-06-11 13:20:18
我覺得這是你可能會尋找:
int blue = Color.Blue.ToArgb();
int yellow = Color.Yellow.ToArgb();
blue = (blue + yellow)/2;
Color Blue = Color.FromArgb(blue);
只是平均的顏色組件的方式,如果那是你正在嘗試做的:
這將是有益的知道你從第二分配期待「藍色」是什麼 - 你肯定不會得到的陰影藍色(更像紅色)。
問題是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
您可以安全地處理這些,但要記住,他們是字節的一個實例,所以你不能分配一個值超出範圍0-255的。若要從組件字節的顏色,使用方法:
Color.FromArgb(a, r, g, b);
凡a, r, g, b
是字節。
有點混淆,Color.FromArgb接受int參數,而不是字節。恐怕我不知道爲什麼,比我更好的人將不得不回答這個問題,而是將一個字節轉換爲一個int,併產生一個介於0和255之間的int值,因此使用這個值是安全的。Color也有一個私有的CheckByte類,它傳遞每個參數,所以你會得到一個ArgumentException,而不是一個意想不到的顏色(你可能會用非組件方法得到)。
這是Noldorin和Jason Heine之間的心理調試攤牌。誰會贏?不要離開你的座位 – 2009-06-11 13:01:22
哈哈。是的,OP的目標並不完全清楚,但我正盡我所能地設想。 – Noldorin 2009-06-11 13:07:43
:)完全同意,今天早上醒來的方法是什麼! – CodeLikeBeaker 2009-06-11 13:08:57