注意:
有很多不同的模型可以用來指定顏色。在印刷業(yè)中最常用的模型為CMYK模型?!癈MYK”是“Cyan(青色)、Magenta(洋紅)、Yellow(黃色)與Key-black(黑色)”的縮寫。青色,洋紅與黃色是減色法三基色—— 這樣命名是因為當(dāng)加大顏色用量時,會減少反射光,從而形成一個更暗的顏色。在計算機中最常用的模型是RGB模型,是“Red(紅色)、Green(綠色)與Blue(藍(lán)色)”的縮寫。紅、綠、藍(lán)是三原色,當(dāng)將這三種顏色混合到一起會增強其亮度(所以,事實上,三原色混合到一起為白色)。.NET framework支持使用RGB模型來指定顏色。
三原色中的每個顏色分量都有256個色階,所以我們可以從一個總共包含了16 777 216種不同顏色的色板上創(chuàng)建顏色(256×256×256 = 16 777 216)。這與現(xiàn)在幾乎所有的PC桌面顯示器所支持的色彩范圍相同。由于每個顏色通道需要8位數(shù)據(jù)(用于存儲0~255之間的值),所以被稱為24位色。
然而,Windows Mobile設(shè)備通常使用不了全部這些顏色。雖然犧牲了色彩的細(xì)節(jié),但避免了過度處理,并且減少了用來保存這些顏色所需的內(nèi)存。這些設(shè)備的顯示屏絕大部分是65 536色或262 244色。要得到65 536色,總共需要16位,用于紅、綠、藍(lán)的位數(shù)分別為5、6、5(綠色占的位數(shù)多是因為人眼對綠色比對藍(lán)色和紅色要敏感)。而262 244色總共需要18位,則每個顏色分量都為6位。
這樣做盡管降低了顏色的細(xì)節(jié),但為了一致性及將來的考慮,.NET顏色函數(shù)中紅、綠、藍(lán)各色的強度都為8位值。顏色精度的損失由設(shè)備自行處理,并不受操作系統(tǒng)的影響。將來更加快速和功能強大的設(shè)備出現(xiàn)后,我們可能會看到調(diào)色板中的顏色增加了,通過這種方式創(chuàng)建的顏色將自動利用那些可用的新增的顏色。
實際上在大多數(shù)情況下,16位色、18位色以及完整模式的24位色是很難區(qū)分的。
要使用RGB值來創(chuàng)建顏色,可以調(diào)用System.
Drawing.Color.FromArgb靜態(tài)函數(shù)。該函數(shù)有不同的重載,我們這里要使用的函數(shù)是采用red、green以及blue作為參數(shù)。將各個顏色分量的值通過參數(shù)傳入,就會得到您想要的Color對象。必須確保各個顏色分量的值都位于0~255之間,否則系統(tǒng)會拋出一個ArgumentOutOfRange異常。
本章配套下載代碼中的3_1_ColorFromArgb項目演示了使用RGB值來創(chuàng)建顏色,并使用這些顏色在窗體中創(chuàng)建了一個漸變??梢杂貌藛雾梺磉x擇漸變中使用哪種顏色。圖3-2展示了一個程序的運行結(jié)果。
利用平滑的顏色漸變,使得有限的調(diào)色板看上去更加直觀和清晰。您很可能會注意到漸變不是完全平滑的,而是由很多個幾個像素寬的色帶組成的。
最后要介紹的是FromArgb函數(shù)中的神秘參數(shù)分量A,它表示alpha值,用于控制顏色的透明度:完全不透明的顏色將會把后面的顏色遮蓋掉,而半透明的顏色會使背景色仍然能夠被看到。Windows Mobile中的GDI不支持alpha透明度,所以我們這里就不對它進(jìn)行更詳細(xì)地討論了。在第10章介紹OpenGL ES時再對alpha的值進(jìn)行仔細(xì)的研究。