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