官术网_书友最值得收藏!

1.12 表示顏色

數字的另一個常見用途是表示顏色。大家知道,數字可以用來表示圖形中的坐標。計算機圖形學通過在電子圖紙上繪制色塊的方式繪圖。每一對坐標上的色塊被稱作像素

計算機顯示器通過使用RGB顏色模型,將紅、綠、藍三色光混合在一起產生各種顏色,RGB模型的名字為紅綠藍三色首字母組成。顏色可以用一個顏色立方體來表示,其中每個軸代表一個原色,如圖1-18所示。值為0表示該顏色的光亮度為0,值為1表示該顏色的亮度達到了極限。

圖1-18 RGB顏色立方體

可以看到,如果沒有任何一個色燈亮著,則產生黑色,如果所有色燈的亮度都處于最大,則產生白色。如果只有紅燈亮起,就會產生紅色的陰影。將紅色和綠色光混合在一起會產生黃色。將三原色的色燈都設置為同一水平的亮度會產生灰色。由于添加不同的原色會產生不同的顏色,這種混合顏色的方式稱為加色法系統。圖1-19展示了顏色立方體中幾種顏色的坐標。

圖1-19 RGB顏色立方體示例

如果你曾經嘗試過繪畫,你可能對減色法系統比較熟悉,在這個系統中,三原色是藍綠、品紅和黃色。減色法系統是通過去除白光中的波長來產生不同顏色,而不是像加色法系統通過增加顏色來得到不同顏色。雖然這兩種顏色系統都不能產生出所有人眼可見的顏色,但減色法系統能比加色法系統產生更豐富的顏色。一整套印前技術的存在,使那些在計算機顯示器前操作的藝術家們的設計在印刷到雜志上時仍能保持顏色無偏差。如果你對色彩感興趣,推薦你閱讀Maureen Stone的A Field Guide to Digital Color

人眼是非常復雜的機器,它為了生存而進化,并不是為了計算而進化的。人眼可以分辨出大約1 000萬種顏色,但人眼的分辨能力不是線性的;光照度增加一倍并不一定會導致人眼能感知到的亮度增加一倍。更糟糕的是,隨著時間的推移,眼睛的反應會隨著整體光照亮度的變化而緩慢改變。這就是所謂的暗適應。而且人眼對不同顏色的反應不同,眼睛對綠色的變化非常敏感,對藍色的變化相對不敏感,國家電視系統委員會(National Television System Committee, NTSC)標準就利用了這一現象。現代計算機選擇將1 000萬四舍五入到最接近2的冪,并使用24位來表示顏色。這24位被分成3個8位的字段,每種原色占有一個字段。

可以看到,表1-10中沒有給出24位的名稱。這是因為現代計算機并不是設計為在24位的單元上運行的(盡管還是有些24位的機器,比如霍尼韋爾公司的DDP-224)。因此,表示顏色的位按照最接近的標準尺寸——32位(長字)——封裝,如圖1-20所示。

圖1-20 RGB顏色封裝

可以看到,這個封裝標準下每種顏色都會留下8個未使用的位。8位一個很大的數量,考慮到現在的計算機顯示器有超過800萬的像素,我們不能浪費這些位,那么可以用這8個位做什么?答案是,我們可以用這8個位來表示一些上文中沒提到的:透明度(也就是能“看穿”顏色的程度)。到目前為止,我們只討論過不透明的顏色,可是這些不透明的顏色不能用于制作玫瑰色眼鏡等物品。

1.12.1 增加透明度

在早期的動畫電影中,每一幀都是手繪的。這不僅是一項非常繁重的工作,而且由于不可能在每一幀上精確地重現背景,還會有很多視覺“抖動”。美國動畫師John Bray(1879—1978)和Earl Hurd(1880—1940)在1915年發明了“賽璐珞動畫”,解決了這個問題。在“賽璐珞動畫”中,移動的角色畫在透明的賽璐珞片上,且可以在靜態背景圖像上移動。

雖然計算機動畫的起源可以追溯到20世紀40年代,但它真正騰飛是在20世紀70年代和80年代。當時的計算機速度還不夠快,無法實現電影導演想要的效果。而且需要一種機制將不同算法產生的對象組合起來。就像“賽璐珞動畫”一樣,透明度允許影像合成,或者將不同來源的圖像組合在一起。如果你用過GIMP或Photoshop這樣的圖像編輯器,可能對圖像組合這個概念很熟悉。

1984年,盧卡斯電影公司的Tom Duff和Thomas Porter發明了一種實現一定透明度和影像合成的方法,這種方法后來成了行業標準。他們給每一個像素添加了一個透明度值,稱為αα是一個介于0和1之間的值,其中0表示顏色完全透明,1表示顏色完全不透明。一組合成代數方程定義了具有不同α的顏色如何結合產生新的顏色。

Duff和Porter的實現方式很巧妙。他們沒有使用浮點系統,而是用數字255表示α的值為1,充分利用了圖1-20所示的多出來的8位。Duff和Porter用各顏色的值乘以α存儲顏色,而不是直接存儲紅色、綠色、藍色值。例如,如果顏色為中等紅色,那么它對應的紅色值為200,綠色值和藍色值為0。如果是不透明的紅色,那么紅色值為200,因為α為1(α值用255表示)。但是半透明的中等紅色的α將是0.5,所以儲存的紅色的值為200×0.5=100,存儲的α為127(255×0.5≈127)。圖1-21展示的是帶透明度值α的像素的存儲安排。

圖1-21 RGB α顏色封裝

因此,合成圖像需要將顏色值乘以α。以預乘形式存儲顏色意味著我們不需要每次在使用像素點時都做一次這樣的乘法。

1.12.2 編碼顏色

因為網頁主要是文本文檔,這意味著它們往往是用UTF-8編碼的人類可讀字符序列,我們需要一種方法使文本可以表示顏色。

我們用類似于URL編碼的方式來實現文本表示顏色,使用十六進制三聯體指定顏色。十六進制三聯體是一個#后面有6個十六進制的值。其格式為#rrggbb,其中rr是紅色值,gg是綠色值,bb是藍色值。例如,#ffff00為黃色,#000000為黑色,#ffffff則是白色。三個8位顏色值中的每一個都轉換為兩個字符表示的十六進制值。

雖然α在網頁中也可用,但沒有簡明的格式可以表示它,它的表示完全使用了另一套方案。

主站蜘蛛池模板: 长子县| 正宁县| 思南县| 双牌县| 建宁县| 朝阳县| 邵阳市| 买车| 兰考县| 赞皇县| 攀枝花市| 萨嘎县| 南京市| 从化市| 深州市| 金堂县| 莫力| 淮南市| 康定县| 河北省| 肥城市| 尚义县| 巴林左旗| 政和县| 平江县| 睢宁县| 涟水县| 明溪县| 巩义市| 仁化县| 漳州市| 德清县| 太仆寺旗| 德昌县| 共和县| 巴青县| 酒泉市| 都江堰市| 沅江市| 库伦旗| 赣州市|