1. 程式人生 > >編碼的奧祕:圖形化革命

編碼的奧祕:圖形化革命

轉自:《編碼的奧祕》    第二十五章

 

 

           1 9 4 5年9月 1 0日, 《L i f e》雜誌的讀者看到的大多是平常的一些文章和照片:有關第二次世界大戰結束的故事,舞蹈家 Vaslav Nijinsky在維也納生活的報道,一則有關美國汽車工人的圖片報道。但那一期的雜誌也有意想不到的東西:一篇 Vannevar Bush( 1 8 9 0- 1 9 7 4)的關於科學研究的未來的展望性文章。 Van Bush(人們這樣稱呼他)在計算機歷史上寫下了重要的一
筆。在 1 9 2 7年~ 1 9 3 1 年任麻省理工學院工程教授期間,他設計了一種具有重大意義的模擬計算機—微分分析器。 1 9 4 5年,在《 L i f e》雜誌發表這篇文章的時候, B u s h是科學研究和發展部的主管,負責協調美國在戰爭期間的科學活動,包括曼哈頓計劃。

           通過對兩個月前第一次發表在《 The AtLantic Monthly》上的那篇文章的精簡, B u s h在《 L i f e》雜誌上的文章《 As We May Think》描述了未來一些假想發明,希望科學家和研究人員解決日益增多的技術雜誌及文章。 B u s h談到了作為一種解決方案的微縮膠片,勾劃出了一種他稱之為 Memex 的裝置來儲存書、文章、記錄和書中的圖片。 M e m e x也可根據人們所想到的關係在這些東西之間建立有關某個主題的聯絡。他甚至設想出了一個新的職業群體,他們可在大量的資訊載體之間牢固地建立起聯絡。

           儘管描繪未來光輝前景的文章在 2 0世紀很普遍,但《 As We May Think》則不同,它描述的既不是關於減輕家務負擔的裝置的故事,也不是關於未來交通運輸或機器人的故事,而是關於資訊及如何用新技術處理資訊的故事。

          從第一臺繼電器計算器製造出來已經歷了 6 5 年,計算機變得越來越小、越來越快,也越來越便宜。這種趨勢已改變了計算機的本質。當計算機越來越便宜時,每一個人都可擁有自己的計算機。計算機越小、越快,軟體則變得越高階,同時機器可以完成更多的工作。

         更好地利用這些額外功能和速度的一種方法就是改進計算機系統中至關重要的部分,即使用者介面 — 人和計算機的互動點。人和計算機是差別很大的兩種物質,但不幸的是,說服人們調整以適應計算機的特性是比其他方法更容易的方法。

          早先,數字計算機根本上不是互動式的。有些使用開關和電纜程式設計,有些使用穿孔紙帶或膠片程式設計。到 2 0世紀5 0年代和 6 0年代(甚至延續到 7 0年代) ,計算機進化到使用批處理:程式和資料穿孔成卡片,然後讀入到計算機記憶體,程式分析資料,得出一些結論,再在紙上打印出結果。

          最早的互動式計算機使用的是電傳打字機。如前一章講到的 D a r t m o u t h分時作業系統(始於2 0世紀 6 0年代早期)支援多個電傳打字機,可以同時使用。在這樣的系統裡,使用者在打字機上敲一行,計算機以回答一行或多行作為響應。打字機和計算機之間的資訊交流全部是A S C I I碼流(或其他字符集) ,除了像回車換行這樣簡單的控制碼外,差不多全是字元程式碼。事務只是按紙卷的方向進行。

           然而,陰極射線管(在 7 0年代就已經很普遍了)則沒有這些限制。可以用軟體以更靈活的方式來處理整個螢幕。然而,可能是為了設法保持顯示器輸出符合作業系統的顯示輸出邏輯,早先為小型計算機編寫的軟體不斷地把 C RT顯示器作為“玻璃打字機” —一行一行地顯示直到佈滿整個螢幕,當有字元到達螢幕底端時,螢幕的內容要向上翻滾。 C P / M和 M S - D O S中的實用程式都是以電傳打字機的模式來使用視訊顯示器。也許原型電傳打字機的作業系統是U N I X,它仍然保持著這種傳統。

           令人感興趣的是, A S C I I碼字符集並不都適用於陰極射線管顯示。在最初設計 A S C I I碼時,程式碼 1Bh標識為 Escap e,專門處理字符集的擴充。 1 9 7 9年, A N S I印發了一個標準,題為“使用 A S C I I碼的附加控制”。該標準的目的是“為了適應可預見的有關二維字元影象裝置輸入輸出控制的要求,包括有陰極射線管和印表機在內的互動終端…”

          當然, E s c a p e的程式碼 1 B h只有 1 個位元組,且只有一個含義。 E s c a p e通過作為可變長序列的開端來表達不同的功能。例如,以下這個序列:

 

即 Escape 程式碼後面跟上字元 [ 2 J,定義成刪除整個螢幕並移動游標至左上角。這是在電傳打字機上所不能實現的。下面這個序列:

 

即 E s c a p e程式碼後面跟上字元 [ 5; 2 9 H,把游標移到第 5行的第 2 9列。

         由鍵盤和 C RT組合而成,對來自遠方計算機的 A S C I I碼(也可能是 E s c a p e序列集合)作出響應,這樣的裝置有時稱作啞終端。啞終端比打字機要快並且從某種意義上講也更靈活,但是它並沒有快到足以引起使用者介面的真正創新。這種創新來自於 2 0世紀 7 0年代的小計算機,正如第 2 1 章中的假想計算機,這種計算機有視訊顯示儲存器作為微處理器地址空間的一部分。

         家用計算機顯著區別於它們大而昂貴的夥伴的第一個標誌可能是 Vi s i C a l c 的使用。Vi s i C a l c由 Dan Bricklin (生於1 9 5 1 年)和Bob Frankston(生於1 9 4 9年)設計和程式設計,於 1979 年推出,用於 Apple II。 Vi s i C a l c在螢幕上呈現給使用者一個二維電子資料表。在 Vi s i C a l c出現之前,報表通常是一張紙,使用行、列來進行一系列計算。 Vi s i C a l c用視訊顯示器取代了紙,使得使用者可以移動報表,輸入資料或公式,在進行修改後重新計算每一項。

         令人吃驚的是 Vi s i C a l c是不能複製到大型機上的應用程式。像 Vi s i C a l c這樣的程式需要很快地重新整理螢幕。因此,它直接向 Apple II的視訊顯示器使用的隨機訪問儲存器寫入。該儲存器是微處理器地址空間的一部分。大型分時計算機和啞終端之間的介面速度不是很快,從而使得電子報表程式不能使用。

          計算機響應鍵盤、重新整理視訊顯示器的速度越快,使用者和計算機潛在的互動就越緊密。在IBM PC 機出現的頭 1 0年( 2 0世紀8 0年代) ,為它編寫的大多數軟體是直接寫入顯示儲存器的。由於 I B M建立了一套硬體標準,其他計算機廠商追隨這一標準,使得軟體廠商可以繞過作業系統直接使用硬體而不用擔心他們的軟體在某些機器上不能正確執行(或根本不能執行)。如果所有的 P C“克隆體”都與它們的視訊顯示器有不同的硬體介面,則對軟體廠商來說要滿足所有不同的硬體設計是非常困難的。

         IBM PC所使用的早期的應用程式大多數只有字元輸出而沒有圖形輸出。使用字元輸出同樣能使得應用程式的執行速度加快。如果視訊顯示器設計得如第 2 1 章所描述的那樣,則程式只需簡單地把某個字元的 A S C I I碼寫入記憶體就可以在螢幕上顯示出該字元。使用圖形視訊顯示的程式需要寫入 8個或更多的位元組到記憶體中才能畫出文字字元的圖形。

         從字元顯示到圖形顯示的變化是計算機革命中極其重要的一步,然而圖形方式下計算機硬體和軟體的發展比文字和數字方式下計算機硬體和軟體的發展要慢的多。早在 1 9 4 5 年,馮·諾依曼就設想了一種像示波器一樣的顯示器,可用來使資訊圖形化。但是,直到 2 0世紀5 0年代早期,計算機圖形才開始成為現實。當時麻省理工學院(得到 I B M資助)建立了林肯實驗室來開發計算機,用於美國空軍的空中防衛系統。該專案稱為 S A G E( s e m i - a u t o m a t i c ground environment) ,有一個圖形顯示屏幫助操作員分析大量資料。

         在S A G E這樣的系統中使用的早期視訊顯示器不像今天我們在 P C機中所用的顯示器。今天普通的 P C機顯示器是光柵顯示器。就像電視機,所有的影象由一系列水平光柵線組成,由一個電子槍射擊光束很快地前後移動掃過整個螢幕形成光柵。螢幕可以看成是一個大的矩形點陣,這些點稱為畫素。在計算機裡,一塊記憶體專門供視訊顯示使用,螢幕上的每一個畫素由 1 位或多位表示。這些位值決定畫素是否亮,是什麼顏色。

          例如,今天多數計算機顯示器有至少水平方向 6 4 0畫素的解析度,垂直方向 4 8 0畫素的解析度,畫素的總數是這兩個數的乘積 307 200。如果 1 個畫素只佔用 1 位記憶體,則每個畫素只侷限於兩種顏色,即通常的黑、白色。如, 0畫素為黑, 1 畫素為白。這樣的視訊顯示器需要 3 0 72 0 0位的記憶體,即 38 400位元組。

          隨著可能的顏色數目的增多,每個畫素需要更多的位,顯示介面卡也需要更多的記憶體。例如,每個畫素可以用一個位元組來編碼灰度。按照這樣的安排,位元組 00h 為黑, F F h為白,之間的值代表不同的灰度。

         C RT上的彩色由三個電子槍產生,每一個分別負責三原色紅、綠、藍中的一種(可以用放大鏡來觀察電視機或彩色計算機螢幕以驗證它的正確性。由不同的原色組合來顯示影象) ,紅色和藍色的組合是黃色,紅色與綠色的組合是洋紅色,藍色和綠色的組合是青色,三原色的組合是白色。

         最簡單的彩色影象顯示介面卡每個畫素需要 3位。畫素可以如以下這樣編碼,每一個原色對應1 位:

        

            但是,這種方式只適合於簡單的類似卡通畫的影象。許多現實世界中的顏色都是紅、綠、藍按不同級別組合而成的。如果用 2個位元組來表示一個畫素,則每一個原色可分配 5位( 1 位保留),這樣可以給出紅、綠、藍三種顏色各 3 2種不同的級別,即總共可有 32 768種不同的顏色。這種模式通常稱作高彩色或千種顏色 。

             下一步是用 3 個位元組來表示一個畫素,每種顏色佔一個位元組。這種編碼模式使紅、綠、藍三種顏色各有 2 5 6種不同的級別,這樣總共有 16 777 216 種不同的顏色,通常稱作全綵色 或百萬種顏色 。如果視訊顯示器的解析度為水平 6 4 0畫素,垂直 4 8 0畫素,則總共需要 921 600位元組的儲存容量,即將近 1 M位元組。

             每個畫素所佔的位數有時也稱作 顏色深度 或顏色解析度 。不同顏色數量與每個畫素所佔的位數的關係如下:

             視訊適配卡只有一定數量的儲存器,這樣它所能達到的解析度和顏色深度將受到限制。例如,一個具有 1 M位元組儲存器的視訊適配卡可以達到 6 4 0× 4 8 0的解析度,每個畫素佔 3 個位元組。如果想用 8 0 0× 6 0 0的解析度,則沒有足夠的儲存器給每個畫素分配 3個位元組,而要用 2個位元組來表示一個畫素。

             儘管現在使用光柵顯示器似乎是理所當然的,但在早期由於需要大量儲存器,使用光柵顯示器就不太實際。 S A G E視訊顯示器是向量顯示器,比電視機更像示波器。電子槍可以定位到顯示器上任何部分的點,並且直接畫出直線或曲線。利用螢幕上影象的可持續性使得能用這些直線和曲線來形成最基本的畫面。

             S A G E計算機也支援光筆,操作者可用來在顯示器上改變影象。光筆是特殊的裝置,看起來像一隻鐵筆,一端連有電線。執行適當的軟體後,計算機可以檢測到光筆指向的螢幕位置,並隨著光筆的移動而改變影象。

             光筆是如何工作的呢?即使是技術專家,在第一次看到光筆的時候也會迷惑不解。關鍵在於光筆不發射光—它檢測光。在 C RT中(無論是用光柵還是向量顯示) ,控制電子槍移動的電路也可以確定從電子槍射出的光何時打到光筆上,從而確定光筆正指向螢幕的什麼位置。

              Van Sutherland(生於 1 9 3 8年)是預見到新的互動式計算時代的的多個人之一,他在 1 9 6 3年示範了一個他為 S A G E計算機開發的名為 S k e t c h p a d(畫板)的具有革命性意義的圖形程式。畫板可以存放影象資訊到儲存器,並且可以把影象顯示在螢幕上。另外,還可以用光筆在顯示器上畫圖並修改,同時計算機會一直跟蹤它。

              另外一個互動式計算的設想家是 Douglas Engelbart( 生於 1 9 2 5 年)。他曾讀過 1 9 4 5 年Vannevar Bush發表的文章《 As We May Think》,並在 5年後開始用一生的時間致力於研究新的計算機介面。 2 0世紀 6 0年代中期,當他在 S a n f o r d研究院時,他徹底重新考慮了輸入裝置,提出了用有五個尖端的鍵盤 (此裝置沒有流行 )以及一個他叫作滑鼠的有輪子和按鈕的小裝置來輸入命令。滑鼠現在已廣泛用來移動螢幕上的指標,以選擇螢幕上的物件。

               恰逢光柵顯示器在經濟上切實可行,許多早期的熱衷於互動式圖形計算的人們(儘管沒有 E n g e l b a r t)也已聚集在 X e r o x公司裡。 X e r o x公司於 1 9 7 0 年建立了 Palo Alto 研究中心( PA R C),其中一項就是資助開發產品,以使得公司能進入計算機界。也許 PA R C最著名的設想家是 Alan Kay(生於 1 9 4 0年),當他 1 4歲的時候碰巧看到了 Robert Heidein 的小故事裡描述的Van Bush的微縮膠片圖書館,並已設想了一種他稱為 D y n a b o o k的輕便計算機。

               PA R C的第一個大工程是 A l t o,於 1 9 7 2年~ 1 9 7 3年期間設計和製造出來。按照那個年代的標準,這是一個給人深刻印象的產品。它是安裝在地板上的系統單元,有 1 6位處理器、 2個3 M B的磁碟驅動器、 1 2 8 K B記憶體(可以擴充到 5 1 2 K B),以及一個三個按鈕的滑鼠。在 1 6位單片微處理器之前出現, A l t o的處理器由大約 2 0 0個積體電路組成。

              A l t o的視訊顯示器是它與眾不同的地方之一。螢幕的大小和形狀與一張紙差不多—8英寸寬 1 0英寸高。它以光柵圖形模式工作,有 6 0 6個水平畫素和 8 0 8個垂直畫素,這樣總共 4 8 96 4 8個畫素。每個畫素佔 1 位儲存器,即每個畫素不是黑色就是白色。用於視訊顯示的儲存器容量是 6 4 K B,佔用部分處理器的地址空間。

          通過寫入到視訊顯示儲存器,軟體可以在螢幕上畫出圖畫或顯示不同字型和大小的文字。通過在桌上滾動滑鼠,使用者可以在螢幕上定位指標,與螢幕上的物件進行互動。視訊顯示器並非像電傳打字機那樣按行顯示使用者輸入,按行寫出程式輸出。視訊顯示器的螢幕是一個二維的、高密度的資訊陣列和更直接的使用者輸入源。

          在2 0世紀 7 0年代末期,為 A l t o所寫的程式顯示出了許多令人感興趣的特點。多個程式可放到視窗中並同時顯示在螢幕上。 A l t o的視訊影象使得軟體超出文字範疇,並真正反映使用者的思想。圖形物件(如:按鈕、選單及稱作圖示的小圖畫)成為使用者介面的一部分。滑鼠用來選擇視窗或觸發圖形物件,執行程式功能。

           這就是軟體,不僅提供了使用者介面而且已達到與使用者親密互動的程度。軟體進一步擴充套件了計算機的應用領域而不再僅進行簡單的數字操作。軟體設計出來就是—引用Douglas Engelbart在1 9 6 3年寫的論文的標題—《for the Augmentation of Man's Intellect》。

           在A l t o上開發的 PA R C只是圖形使用者介面即 G U I( graphic user interface)的開始。但 Xerox公司並沒有銷售 Alt o(如果要銷售的話,價格將在 3萬美元以上) 。經過 1 0多年,高售價的思想體現在一種成功的消費品上。

           1 9 7 9年,Steve Jobs 和來自蘋果計算機公司的小組參觀了 PA R C,看到的東西給他們留下了深刻的印象。但是,他們花費了三年多的時間才推出了具有圖形介面的計算機,這就是 1 9 8 3年1 月推出的不太受歡迎的 Apple Lisa。而在 1 年以後,蘋果公司就推出了很成功的 M a c i n t o s h。

             初始的 M a c i n t o s h配備有 Matorola 6800 微處理器、 6 4 K B的 R O M、 1 2 8 K B的 R A M、一個3 . 5英寸的磁碟驅動器(可以儲存 4 0 0 K B)、一個鍵盤、一個滑鼠和一個視訊顯示器。該視訊顯示器水平 5 1 2個畫素,垂直 3 4 2個畫素( C RT測量對角只有 9英寸),總共 175 104個畫素。每一個畫素用 1 位記憶體,顏色為黑、白,這樣視訊顯示 RAM大約需要 22KB。

              最初的 M a c i n t o s h硬體做得很好,但是很難進行變革。 1 9 8 4年,出現了使 M a c與其他計算機完全不同的 M a c i n t o s h作業系統,那時通常稱作系統軟體,後來稱為 Mac OS.

             像C P / M或M S - D O S這樣的基於字元的單使用者作業系統不是很大並且沒有擴充套件的應用程式介面( A P I)。正如第 2 2章解釋的那樣,這些基於字元的作業系統所需要的是使用檔案系統的應用程式。而像 Mac OS 這樣的圖形作業系統則非常大且有幾百個 A P I函式,每一個都由一個描述該函式功能的名稱來標識。

             像M S - D O S這樣的基於字元的作業系統只需提供幾個簡單的 A P I函式就能使得應用程式在螢幕上以電傳打字機方式顯示字元,但 Mac OS這樣的圖形作業系統必須提供一種方法才能使得程式可以在螢幕上顯示圖形。從理論上來講,可以通過實現一個 A P I函式來完成,該函式使得應用程式可以設定某個水平和垂直座標的畫素的顏色。但是,實際證明這種方法效率不高且圖形顯示的速度很慢。

              因而由作業系統提供完整的圖形程式設計系統就顯得非常有意義,這意味著作業系統需包含有畫線、畫矩形、畫橢圓(包括圓)和字元的 A P I函式。線可以由實線或虛線或點組成;矩形和橢圓可以用不同的填充模式來填充;字元可以顯示成不同字型和大小並具有不同效果,如:黑體和下劃線等。圖形系統負責確定如何在顯示器上把這些圖形物件作為點陣來顯示。

              圖形作業系統下執行的程式使用相同的 A P I在計算機視訊顯示器和印表機上畫出圖形。因此,字處理應用程式在螢幕上顯示的文件可以與打印出來的文件非常相似。這種特點稱為W Y S I W Y G,是“ What you see is what you get (所見即所得 )”的英文縮寫。這是喜劇演員Flip Wi l s o n在G e r a l d i n e角色中所貢獻的計算機行話。

              圖形使用者介面的吸引力部分體現在不同應用程式的工作大致相同,且與使用者經驗關係不大。這意味著作業系統還必須支援 A P I函式從而使得應用程式可以實現使用者介面的不同部分,如按鈕和選單等。 G U I通常看起來是友好的使用者環境,它對程式設計人員來說同樣是很重要的環境。程式設計人員在原來的基礎上就可以實現現代使用者介面。

              在M a c i n t o s h推出之前,幾家公司就已開始建立用於 IBM PC 及其相容機的圖形作業系統。從某種意義上來講, A p p l e開發人員的工作要容易一些,因為他們硬體和軟體一起設計。M a c i n t o s h系統軟體只支援一種型別的磁碟驅動器,一種型別的視訊顯示器和兩種印表機。但在P C上實現的圖形作業系統需要支援許多不同的硬體。

              另外,儘管 IBM PC 很早( 1 9 8 1 年)就已推出了,但多數人已習慣於用他們喜好的 M S D O S應用程式且沒有準備放棄它們。 P C機的圖形作業系統需要考慮的一個重要方面是,要使得M S - D O S應用程式的執行就像是專門為新的作業系統設計的應用程式一樣。 ( M a c i n t o s h上就根本不能執行 Apple II軟體,因為它採用了不同的微處理器。 )

              1 9 8 5年, Digital Research 公司( C P / M的後續公司)推出了 G E M(圖形環境管理器);Vi s i c o r p公司 (銷售 Vi s i l a l c的公司 )推出了 Vi s i O n; Microsoft 公司釋出了 Windows 1.0版,它很快被認為是“視窗戰爭”中最有可能的勝利者。然而,直到 1 9 9 0年3 月釋出 Windows 3.0 ,Wi n d o w s才開始吸引大量的使用者。從那時起,它的普及率不斷提高。到今天,已有大約 9 0 %的微機上使用的作業系統是 Wi n d o w s。 M a c i n t o s h和 Wi n d o w s除了具有相同的外在表現外,它們的A P I是非常不同的。

              理論上講,除了圖形顯示外,圖形作業系統並不比字元作業系統需要更多的硬體,甚至不需要硬碟驅動器。最初的 Macintosh 沒有, Windows 1.0也不需要。 Windows 1.0甚至不需要滑鼠,儘管每個人都認為用滑鼠操作更容易一些。

              然而(這兒一點也不奇怪 ),隨著微處理器越來越快,記憶體和外存越來越大,圖形使用者介面也越來越流行。越來越多的特點增加到圖形作業系統,至使它們越來越大。今天的圖形作業系統通常需要 2 0 0 M B的硬碟空間和 3 2 M B以上的記憶體。

              圖形作業系統的應用程式幾乎沒有是用匯編語言編寫的。早期 M a c i n t o s h上應用程式的流行語言是 P a s c a l。對於 Wi n d o w s應用程式來說,流行語言是 C。但PA R C再次使用了一種不同的方法。大約從 1 9 7 2年開始, PA R C的研究人員就在開發一種稱為 S m a l l t a l k的語言,體現了面向物件程式設計,即 O O P的概念。

             通常,高階程式設計語言的程式碼(通常以 s e t、 f o r、 if 這樣的關鍵字開頭的語句)和資料(用變數來表示的數)之間有區別。毫無疑問,這種區別源自馮·諾依曼計算機體系結構。在這種體系結構裡,要麼是機器碼,要麼是機器碼用於操作的資料。

             而在面向物件的程式設計中,物件是程式碼和資料的組合。在物件中,資料儲存的實際方法只能通過與該物件相關聯的程式碼才能理解。物件通過傳送或接收訊息來與其他物件通訊,它給一個物件傳送指令或從那裡獲得資訊。

              面嚮物件語言通常有助於編寫用於圖形作業系統的應用程式,因為程式設計人員可以用與使用者感知物件的同樣的方式來處理螢幕上的物件(如:視窗和按鈕等)。在面嚮物件語言中,按鈕是物件的一個例子。螢幕上的按鈕有一定的尺寸和位置,並顯示一些文字或小的圖畫,所有這些都是與物件相關的資料。與物件關聯的程式碼確定使用者何時用鍵盤或滑鼠按下按鈕,並且傳送一個標明該按鈕被觸發的訊息。

             然而,最流行的微機上的面嚮物件語言是傳統的類A L G O L語言的擴充套件,如C和P a s c a l。最流行的由C擴充套件的面嚮物件語言是C + +(前面講過,兩個+是增量操作)。C + +大部分是由貝爾實驗室的Bjarne stroustrup(生於1 9 5 0年)完成的,開始作為轉換程式,用來把用C + +編寫的程式轉換成C程式(儘管C程式很難看也很難讀),C程式可以像通常一樣編譯。

             當然,面嚮物件語言並不能比傳統語言多做些什麼。但是程式設計是解決問題的方式,而面嚮物件語言使得程式設計人員能夠考慮那些在結構上通常更好的不同的解決方法。也可以—儘管不是那麼容易—用面嚮物件語言編寫程式,編譯後可在M a c i n t o s h上或Wi n d o w s下執行。這樣的程式並不直接涉及到A P I而是使用稱作A P I函式的物件。兩個不同的物件定義用來編譯用於Macintosh 或Windows API的程式。

             許多小型機上的程式設計人員不再用命令列編譯程式。取而代之的是程式設計人員開始採用整合開發環境(I D E),即在一個方便的程式裡整合有所需的所有工具並且該程式可像其他圖形應用程式一樣執行。程式設計人員還利用一種稱作視覺化程式設計的技術,通過滑鼠彙集按鈕及其他元件來設計互動視窗。

             第2 2章中講到了文字檔案。這種檔案只包含有A S C I I字元,方便人們閱讀。在使用基於字元的作業系統時,文字檔案是在應用程式之間交換資訊的理想工具。文字檔案的一個最大優點就是它們是可檢索的—即程式可以檢視許多文字檔案並確定它們中的哪一個包含有某一字串。但是,一旦某個作業系統中有一個工具可用來顯示不同字型、不同大小及不同效果(如斜體、黑體和下劃線),則文字檔案似乎就很不適用了。其實,許多字處理程式以獨有的二進位制格式來儲存文件。文字檔案同樣也不適用於圖形資訊。

             但是,可以同文本一起編碼資訊(如字型定義及段落編排),且仍然得到可閱讀的文字檔案。關鍵是選用一個轉換字元來表示這些資訊。在M i c r o s o f t設計的RT F(rich text format)中,作為在應用程式之間交換格式化文字的一種方法,花括號{ }及反斜槓\用來封裝資訊,標明文字採用何種格式。

             P o s t S c r i p t是把這種概念發揮到極致的一種文字格式。P o s t S c r i p t由A d o b e系統的創始人之一John Wa r n o c k(生於1 9 4 0年)設計。這是一種通用的圖形程式語言,主要用來在高階計算機的印表機上畫出字元或圖形。

             把圖形結合到個人計算環境是越來越好、越來越便宜的硬體的直接結果。微處理器越來越快,儲存器越來越便宜,視訊顯示器及印表機解析度不斷增加且具有更多種顏色,所有這些促進了計算機圖形的使用。

            計算機圖形產生於兩種不同方式,與早些時候為區分圖形視訊顯示器所用的詞一樣:向量和光柵。

            向量圖形用直線、曲線及填充的域來生成圖形,這是計算機輔助設計(或C A D)程式的領域。向量圖形在工程和結構設計中具有重要用途。向量圖形可以按元檔案的格式存放到檔案中。元檔案是向量圖形制作命令的聚合,這些命令通常以二進位制形式編碼。

            向量圖形採用直線、曲線及填充的域,因而非常適合於橋樑設計等,但不能指望它來實際顯示建造的橋樑的效果。橋樑效果圖是現實世界的影象,用向量圖形來表示太複雜,因而很難表示出來。

            光柵(也稱作點陣圖)可用來解決這一問題。點陣圖把影象編碼成位的矩形陣列,該陣列對應於輸出裝置上的畫素。就像視訊顯示器一樣,點陣圖具有空間度(或解析度),即指影象按畫素表示的寬度和高度。點陣圖也有顏色度(或顏色解析度/顏色深度),是指每一個畫素對應的位數。點陣圖中的每一個畫素用相同的位數來表示。

             儘管點陣圖影象是二維的,但點陣圖本身只是一個位元組流—通常從最上面一行畫素開始,接著是第2行、第3行等等。

            一些點陣圖影象是使用為圖形作業系統設計的畫筆程式通過“手工”生成的,還有一些點陣圖影象由計算機程式碼來生成。現在,點陣圖經常用來表現現實世界的影象(如:照片),有幾種不同的硬體可用來把現實世界的影象輸入到計算機中,這些裝置通常用到稱作電荷耦合(C C D)的器件,它是一種半導體器件,在光照下會放電。一個C C D單元用來取樣畫素。

            掃描器是這些裝置中最古老的一種。就像影印機一樣,它用一行C C D掃過印製影象(如:照片)的表面。隨著光的強度不同, C C D具有不同的電荷積累。與掃描器一起工作的軟體把影象轉換成點陣圖存放在檔案裡。      

             視訊攝像機用二維C C D單元陣列來捕捉影象。通常這些影象錄製在錄影磁帶上。但視訊輸出也可以直接送到視訊幀輸入器,這是用來把模擬訊號轉換成畫素值陣列的一塊板。幀輸入器可以使用任何普通的視訊源,如V C R或鐳射影碟機,甚至直接來自於有限電視盒。      

             最近,數字照相機價格已適合家庭購買,它看起來很像一般的照相機。但是,數字相機不用膠片,而是用C C D陣列來捕捉影象並直接儲存到照相機的儲存器中,然後傳輸到計算機中。

             圖形作業系統常常支援某種格式的點陣圖檔案的儲存。M a c i n t o s h使用P a i n t格式,這個命名參考了創立這種格式的   M a c P a i n t程式。( M a c i n t o s h的P I C T格式綜合了點陣圖和向量圖形,是它的首選格式。)Wi n d o w s裡的格式是B M P,它是點陣圖檔案的副檔名。

            點陣圖可能很大,採用一些方法壓縮它們是很有用處的。這些工作都歸入到電腦科學中稱為資料壓縮的範疇。

           假設正在處理影象,如前所述,每個畫素佔3位。若有一個圖片有天空、一棟房子和一塊草坪,這樣的圖片可能就會有大片的藍色和綠色。也許,點陣圖的最上面一行是7 2個藍色畫素,如果有一些方法能夠在檔案中編碼這7 2個數字,以表示藍色畫素重複7 2次,則點陣圖檔案可能會變得更小。這樣的壓縮稱為行程編碼,即R L E( run-length encoding)。

           一般辦公用的傳真機採用R L E壓縮方法,在通過電話線傳送之前壓縮影象。由於傳真機只把影象看成黑色和白色而沒有灰度和彩色,因此,通常有很長串的白色畫素。

           已經流行了1 0多年的點陣圖檔案格式是圖形交換格式即G I F,由Compu Serve公司於1 9 8 7年開發出的。G I F檔案採用稱為L Z W的壓縮技術,“L Z W”代表它的建立者: L e m p l e l、Z i v和We l c h。L Z W比R L E效果更好,因為它檢測不同畫素值的模式而不僅僅是針對具有相同值的畫素的連續串。

            R L E和L Z W都是無損失的壓縮技術,因為從壓縮資料中可以重新生成完整的初始檔案。換句話說,壓縮是可逆的。很容易證明可逆的壓縮方法並不適用於所有型別的檔案。在某些情況下,“壓縮”檔案比初始檔案還要大。

            最近幾年,有損失的壓縮技術很流行。有損失的壓縮是不可逆的,因為某些初始資料被丟棄了。不要用有損失的壓縮技術來壓縮電子報表或文書處理文件,因為每一個數字或文字也許都是很重要的。但這並不妨礙用有損失的壓縮技術來壓縮影象,因為只要丟棄的資料不會使得圖片的整體效果有太大差別即可。這就是有損失的壓縮技術用於可視心理研究的原因,它可以研究人的視覺,以確定什麼重要,什麼不重要。

            最重要的用於點陣圖的有損失的壓縮技術統稱為J P E G。J P E G表示聯合影象專家組( j o i n t  photography experts group),它描述了幾種壓縮技術,一些是無損失的,一些是有損失的。

            把元檔案轉換成點陣圖檔案很簡單。因為視訊顯示儲存器與點陣圖在概念上是一致的。如果一個程式知道如何在視訊顯示儲存器中畫一個元檔案,則它也知道如何在點陣圖上畫元檔案。

            但是,把點陣圖檔案轉換成元檔案就沒那麼容易,有些複雜的影象甚至不能轉換。與這項工作相關的一項技術是光學字元識別,即O C R(optical character recognition)。如果一個位圖上有一些字元(從影印機來的,或掃描頁面得到的)並且需要轉換成A S C I I碼,就可用O C R。O C R軟體需要分析位的模式並確定它們代表什麼字元。由於這項工作的演算法很複雜, O C R軟
件並不是1 0 0 %準確。即使有些不準確, O C R軟體也試圖把手寫體轉換成A S C I I碼字元。

           點陣圖和元檔案都是用數字表示的可視資訊。音訊資訊也可以轉換成位和位元組。

           1 9 8 3年,隨著鐳射唱機的出現,數字化音響激起了消費者的熱情,它也成為了最大的電子消費品。C D由P h i l i p s和S o n y公司開發,在一個直徑1 2 c m的盤上一面可儲存7 4分鐘的數字化聲音。之所以選擇7 4分鐘是因為貝多芬的第九交響曲剛好可以放在一張C D上。

           C D上的聲音編碼採用脈衝編碼調製技術,即PCM (pulse code modulation)。不管它的名字多麼奇怪,從概念上講, P C M是很簡單的處理過程。

          聲音是振動產生的。人們的聲音是振動,大號的聲音是振動,森林裡樹倒下的聲音也是振動,它們使得空氣分子移動,空氣一會兒擠壓一會兒彈開,一會兒壓縮一會兒放鬆,一會兒向後一會兒向前,每秒鐘進行著成百上千次運動。空氣最終震動耳膜,使得我們能夠聽到聲音。

          聲波可以用1 8 7 7年愛迪生的第一臺電唱機上用來錄製和播放背景音樂的錫箔圓桶表面上的凸起和凹陷來模擬。直到出現 C D之前,這種錄製技術也很少改變,雖然圓桶換成了碟片,錫箔換成了塑性材料即塑料。早期的電唱機是全機械的,後來使用電子放大器來放大聲音。麥克風上的可變電阻把聲音轉換成電流,喇叭中的電磁鐵把電流轉換回聲音。

         代表聲音的電流並非本書中所講的1 / 0數字訊號。聲波是連續變化的,而產生這種電流的電壓也是如此。電流是聲波的模擬。一種稱作模擬數字轉換器(A D C)的器件—通常在一個晶片上實現—把模擬電壓轉換成二進位制數。A D C的輸出是若干位數字訊號—通常為8、1 2或1 6位—用來表明電壓的相對級別。例如, 1 2位A D C把電壓轉換成0 0 0 h~F F F h之間的數,從而區分4 0 9 6個不同的電壓級別。

         在脈衝編碼調製這種技術裡,代表聲波的電壓按照恆定的速率轉換成數值。這些數以小孔的形式刻在光碟表面,從而儲存在C D上。通過從CD 表面反射的鐳射可以讀出這些資訊。在播放的時候,這些數又通過數字/模擬轉換器即D A C轉換成電流。(D A C也用在彩色圖形板上,用來把畫素值轉換成模擬的彩色訊號送到顯示器。)

         聲波電壓以恆定的速率轉換成數字,該速率稱為取樣速率。1 9 2 8年,貝爾實驗室的H a r r yN y q u i s t證明了取樣速率至少為需要記錄和播放的訊號的最大頻率的兩倍。通常認為人們能聽到的聲音的頻率範圍為2 0~20 000赫茲。C D所用的取樣頻率比最大頻率的兩倍還要大一些,定義為每秒取樣44 100次。

         每個樣本所用的位數取決於C D的動態範圍,即記錄和播放的聲音的最高頻率與最低頻率之差。這有些複雜:電流不斷地變化來模擬聲波,尖峰稱為聲波的振幅。我們所感受到的聲音強度是振幅的兩倍。1貝爾(b e l)表示強度的1 0倍增強;1分貝( d e c i b e l )是1貝爾的1 / 1 0,表示人們所能感受的聲音的幾乎最小的強度變化。

          每個樣本用1 6位表示,這樣可以表示9 6分貝的動態範圍,差不多是從能聽到的聲音的閥值(低於這一值則不能聽見)到能忍受卻不感到痛苦的聲音的閥值的差。C D盤中用1 6位表示一個樣本。

          所以,C D盤中每秒聲音有44 100個取樣樣本,每個樣本2個位元組。立體聲則需要兩倍的取樣資訊即每秒總共176 400位元組,每分10 584 000位元組。(現在可以知道為什麼在2 0世紀8 0年代之前聲音的數字記錄不是很普遍。)C D上7 4分鐘的立體聲需要783 216 000位元組。

         數字化聲音與模擬聲音相比具有很多眾所周知的優點。特別是,無論何時複製模擬聲音(例如從錄音磁帶生成電唱片)都會有一些失真。而數字化聲音是數字資訊,總可以如實地轉錄和複製。過去常常是電話訊號傳輸線路越長則聲音越糟。現不再是這樣了,因為現在許多電話系統都是數字的,跨越一個國家的呼叫訊號就像跨越一條街道一樣清晰。

         C D也可像儲存聲音一樣來儲存資料。用得最廣泛的用來存放資料的C D稱作C D - R O M(C D只讀儲存器),通常C D - R O M最多可儲存約6 6 0 M B。今天,許多計算機中都裝有CD 驅動器,許多應用程式和遊戲都在C D - R O M中。

          大約1 0年前,聲音、音樂、視訊開始進入個人計算機中,這稱為多媒體。現在多媒體已經很普遍了,也不需要特別的名稱。今天出售的許多家用計算機有音效卡,內含一個A D C用來把從麥克風來的聲音錄製成數字,還有一個D A C用來通過喇叭播放錄製的聲音。聲音可以以波形檔案存放在磁碟中。

          因為在家用計算機中錄製和播放聲音並不總是需要達到C D的質量,所以M a c i n t o s h和Wi n d o w s提供低的取樣速率,如22 050、11 025和8 0 0 0赫茲,以及較小的8位樣本資訊和單頻度錄製。聲音以每秒8 0 0 0位元組來錄製,即每分480 000位元組。

          人們從科幻電影和電視中知道,未來的計算機可以用英語與使用者交談。一旦計算機有了數字化錄製和播放聲音的硬體,則所有通向這一目標的其他工作就可用軟體來完成。

           使計算機能講人們能識別的單詞和句子的方法有兩種。一種方法是讓人們錄製句子段落、短語、單詞及數字,然後儲存在檔案中,並且用不同的方法串在一起。這種方法通常用在通過電話訪問的資訊系統中,它在只需播放有限的單詞和數字組合的情況下能很好地工作。

           一種常見的聲音合成形式涉及到一個用來把A S C I I碼字元轉換成波形資料的程序。例如,由於英語拼寫並不總是一致的,所以這樣的軟體系統用一個詞典或複雜演算法來確定單詞的確切發音。基本的音節(稱作音素)組合成整個單詞。通常軟體需要做一些調整,例如,如果一個句子後面跟著問號,則最後一個單詞的聲音訊率必須增加。

           聲音識別—把波形資料轉換成A S C I I碼字元—是一個更復雜的問題。的確,許多人在理解口語的方言方面有一些問題。在個人計算中使用聽寫軟體時,通常需要訓練以便能合理轉錄某個人所說的話。其中涉及的一個問題已超出了轉換成A S C I I碼文字的範圍,即程式設計使計算機“理解”所說的話。這個問題是人工智慧的研究領域。

           今天,計算機中的音效卡也提供小的電子音樂合成器,它能模仿1 2 8種不同的音樂樂器和4 7種不同的打擊樂器,稱作M I D I合成器。M I D I即樂器數字介面,在2 0世紀8 0年代早期由電子音樂合成器製造者協會開發出來,用來把這些電子樂器互相連線起來並連到計算機中。

           不同種類的M I D I合成器用不同的方法來合成樂器的聲音,其中一些比另一些更逼真。M I D I合成器的性質已遠遠超過了M I D I定義的範疇。所要做的無非是通過演奏聲音來響應短訊息—通常長度為1、2或3位元組。M I D I訊息常常指明需要什麼樂器、將要演奏哪個音符,或正在演奏的音樂要停止演奏。

           M I D I檔案是加上時間資訊的M I D I訊息的集合。通常,一個M I D I檔案包含有計算機上的M I D I合成器所能演奏的所有音樂成分。要包含同樣的音樂,M I D I檔案通常比波形檔案小得多。按照相對大小來說,如果說一個波形檔案像點陣圖檔案,則M I D I檔案就像向量圖形元檔案。M I D I檔案的不足之處在於:以M I D I檔案編碼的音樂可能在一個M I D I合成器上演奏得很好,但在另一個合成器上演奏出來卻很糟。

           多媒體的另一個特徵是數字化電影。電影和電檢視像的移動效果可以通過快速顯示一系列靜止影象來達到。這些單個影象稱為幀。電影以每秒2 4幀的速率來播放,北美電視每秒為3 0幀,世界上其他許多地方的電視每秒為2 5幀。

          計算機中的電影檔案由一系列有聲音的點陣圖簡單組成。但如果不經過壓縮,一個電影檔案將包含大量的資料。例如,假設一個電影每一幀的大小是6 4 0×4 8 0畫素的計算機螢幕,有2 4位彩色,則每幀有921 600位元組。按每秒3 0幀,則每秒27 648 000位元組。一直乘下去,則每分鐘為1 658 880 000位元組,一個兩小時的電影有199 065 600 000位元組,大約2 0 0 G B。這就是為什麼許多在個人計算機上播放的電影又小又短又跳躍的原因。

         J E P G壓縮方法用來減少存放靜止影象所需的資料量,而M P E G壓縮方法用於存放運動影象。M P E G代表移動影象專家小組。移動影象壓縮技術利用的是這一事實,即某一幀通常包含從前一幀複製來的大量資訊。

         對不同的媒體來說,有不同的M P E G標準。M P E G - 2用於高清晰度電視(H D T V)及數字視盤(D V D),也叫數字萬用盤。D V D的大小與C D一樣,但可以兩面記錄且每一面有兩層。在D V D中,視訊資訊按照大約5 0倍這樣的因子進行壓縮,所以,一個兩小時的電影只需4 G B,且只需放在一面的一層。如果用兩面和兩層,則D V D的容量可達到大約1 6 G B,約是C D容量的2 5倍。可以預見,D V D最終將取代C D - R O M來儲存軟體。

          C D - R O M和D V D - R O M是不是Vannevar Bush的預言在今天的實現?他開始設想的M e m e x是用縮微膠片,但用C D - R O M和D V D - R O M更適合。電子媒體比物理媒體具有優越性,因為前者更容易檢索。遺憾的是,很少有人同時訪問多個C D或D V D驅動器。我們所接觸的B u s h概念中的檔案櫃並不涉及儲存桌面上所需的所有資訊,它涉及的是互連計算機使得它們共享資訊並更有效地利用儲存空間。

          公開從遠端操作計算機的第一人是G e o rge Stibitz ,正是他在1 9 3 0年設計了貝爾實驗室的繼電器計算機。繼電器計算機的遠端操作於1 9 4 0年在D a r t m o u t h進行了演示。

          電話系統是用來線上路上傳輸聲音的,而不是位。電話線路上傳輸位需要將位轉換成聲音然後再轉換回位。一種頻率和一種振幅的連續聲波(稱作載波)並不能傳送真實的資訊。但是,如果改變聲波的一些東西—換句話說,在兩種不同的狀態之間調製聲波—則可以表示0和1。在位和聲波之間的轉換由稱作調變解調器的裝置來實現。調變解調器是序列介面的一種形式,因為一個位元組的位是一個接一個傳輸的,而不是同時傳輸的。(印表機通常通過並行介面與計算機連線: 8根線同時傳輸一個位元組。)

           早先的調變解調器採用稱作頻移鍵控(F S K)的技術。以300bps 傳輸的調變解調器把0調製到1 0 7 0赫茲,把1調製到1 2 7 0赫茲。每個位元組以一個起始位開始,以一個停止位結束,所以每個位元組需要1 0位。以3 0 0 b p s的速率傳輸,每秒只傳輸3 0個位元組。許多現代調變解調器用更高階的技術能達到超過1 0 0倍的速率。

           早期家用計算機愛好者可以用計算機和調變解調器建立公告牌系統( B B S),其他計算機可以接入並下載檔案,即從遠端計算機傳輸檔案到自己的計算機。這種概念擴充套件到了如C o m p u S e r v e這樣的大型資訊服務。在大多數情形中,通訊完全採用A S C I I碼字元形式。

           I n t e r n e t則不同於這些早期的成就,因為它是分散的系統。I n t e r n e t其實就是計算機之間相互通訊的協議集合,其中最主要也是最重要的是T C P / I P,由傳輸控制協議( T C P)和網際協議(I P)組成。與通過線路只傳輸A S C I I碼字元不同, T C P / I P的傳送程式把大的資料塊分割成小的包,在傳輸線路(通常是電話線)上獨立傳輸,在另一端重新裝配。

           I n t e r n e t上流行的圖形部分是World Wide We b,採用H T T P,即超文字傳輸協議。在We b頁面上看到的資料由稱作    H T M L即超文字標記語言的格式來定義。這些名詞中超文字這個詞用來描述相關資訊的連結,非常類似於Vannevar Bush提到的M e m e x。一個H T M L檔案可以包含到其他We b頁面的連結,從而容易地訪問它們。

           H T M L與前面講到的富文字格式( RT F)很相似,都包含有帶有格式資訊的A S C I I碼文字。H T M L也可包含G I F檔案、P N G(portable network graphics)檔案和J F I F(J P E G檔案交換格式)檔案等格式的圖形。許多World Wide We b瀏覽器可以瀏覽H T M L檔案,這是文字格式的一個優點。把H T M L檔案定義成文字檔案的另一個優點是它更容易查詢。不管它的名稱如何,H T M L並不是像我們在第1 9章和第2 4章講到的那些真正的程式設計語言。We b瀏覽器讀取H T M L檔案並依照它來編排文字和圖形格式。

           當你在瀏覽某個We b頁面並在上面操作時執行一些特殊的程式程式碼是有用的,這些程式碼可以在伺服器(指那些儲存初始We b頁面的計算機)或客戶機上執行,客戶機即自己的計算機。在伺服器端,通常所要做的全部工作(例如對客戶端填寫的線上表格的解釋)可以通過公共閘道器介面(C G I)指令碼來處理。在客戶端, H T M L檔案可以包含簡單的程式設計語言,如Java Script。We b瀏覽器就像解釋H T M L文字一樣來解釋Java Script語句。

           為什麼一個We b站點不能簡單地提供一個可以在你的計算機上執行的程式呢?這涉及到一個問題,你的計算機是什麼?如果是M a c i n t o s h,則需要一個包含P o w e r P C機器碼的可執行檔案並使用Mac OS API; PC相容機需要一個包含Intel Pentium機器碼的可執行檔案,並使用Windows API。但還有其他計算機及圖形作業系統。而且,你也不想不加選擇地下載可執行檔案,它們可能來自於不值得信賴的地方且帶有某種惡意。

          對這些問題的回答可由S u n公司的J a v a語言來提供(不要與J a v a S c r i p t混淆)。J a v a是一個完美的面向物件的程式設計語言,非常像C + +。前面幾章裡已經解釋了編譯語言(產生包含機器碼的可執行檔案)和解釋語言(不產生可執行檔案)之間的區別, J a v a介於兩者之間。J a v a程式要經過編譯,但編譯的結果不是機器碼,而是J a v a位元組碼。在結構上J a v a位元組碼與機器碼很相似,但用在虛構的計算機即J a v a虛擬機器(J V M)上。執行編譯後的J a v a程式的計算機模擬J V M解釋J a v a位元組碼。J a v a程式可在不同機器上的不同圖形作業系統上執行,所以是具有平臺獨立性的程式。

          雖然本書著重講了用電訊號線上路上傳輸訊號和資訊,但一種更有效的方式是通過光纖—由玻璃或聚合體製造的小管道,可從不同角度傳輸光訊號—來傳輸光訊號。通過光纖傳輸光訊號可以達到以吉赫計算的資料傳輸速率—即每秒幾百萬位。

          所以,似乎是光子而不是電將要負責未來家庭和辦公室的大量資訊傳輸,它將比摩爾斯電碼的點劃更快,也比那些我們曾用來午夜與好朋友通訊而精心設計的閃燈更快。