從靜態到動態 閑話Windows 7啟動畫面
MSDNE7博客最近的一篇文章《EngineeringtheWindows7BootAnimation》介紹了Windows7的動態啟動畫面(BootAnimation)一些設計細節,寫得很詳細,推薦大家閱讀。筆者認為,Windows7的BootAnimation相比早期版本Windows的啟動畫面,已經逐步完成了由全靜態到半動態、再到全動態的進化過程。在此,筆者并不想簡單地直接翻譯E7博客的原文,而是想結合對歷代Windows啟動畫面發展歷程的回顧,談一談筆者對Windows7BootAnimation的一些看法。
Windows啟動畫面的***形態:純靜態(Windows1.0-Windows3.0、WindowsNT3/4)
這一階段的Windows啟動畫面都是不具有任何動態效果的純靜態畫面,區別僅僅是顏色數的不同,從雙色到16色而已。特別是WindowsNT根本就沒有設置啟動畫面,僅有一個顯示CPU及內存信息的藍屏。
Windows啟動畫面的第二形態:半動態(Windows9X/ME、Windows2000/XP/Server2003、WindowsVista/Server2008)
從Windows95的啟動滾動條開始,啟動畫面開始加入了動態效果。但是這一階段包括WindowsVista/Server2008在內的所有Windows啟動畫面,充其量只能算是半動態。為什么這么說呢?
《多啦A夢》一集中,大雄借用多啦A夢的“動畫片制作機”自己制作動畫片。多啦A夢問大雄:你知道動畫片是怎么動起來的么?大雄回答:我不知道,大概是手里拿著一幅畫,在鏡頭前來回晃悠吧。多啦A夢暈倒~-_-
Windows第二形態的半動態啟動畫面實際采用的就是這種來回晃悠式的“大雄原理”。看似動態的滾動條其實本身只是一幅靜態的位圖,只不過在規定的滾動條軌道范圍內不停地做著從左至右的晃悠動作而已。
Windows9X/ME的啟動畫面實際是一幅320×400、256色的BMP位圖,在畫面下方的小窄條范圍內,設置這一范圍內的位圖顏色表有規律地不停變換,使得這一小窄條范圍內的滾動條看起來好像在連續不斷地從左向右滾動。在Windows9X/ME時代很多人將自己修改的256色BMP位圖重命名為C:LOGO.SYS以替換默認啟動畫面,替換后卻發現新啟動畫面丟失了滾動條動畫效果,原因就是新位圖沒有設置顏色表的自動變化。
Windows2000/XP/Server2003則將啟動畫面背景與滾動條分為兩個靜態的BMP位圖,分別保存在NTOSKRNL.EXE的位圖資源里。啟動Windows時,NTOSKRNL.EXE將把640×480、16色的靜態位圖設置為啟動畫面背景,也就是我們看到的黑色背景、WindowsLOGO及滾動條軌道框,然后再將滾動條的靜態位圖放置在軌道框范圍內,令其不停地從左至右晃悠。這樣就拼成了一幅半動態Windows啟動畫面。
WindowsVista/Server2008的啟動畫面與Windows2000/XP/Server2003如出一轍。***的改動我們眾所周知,就是刪除了背景圖片中的WindowsLOGO,變成了一大片黑屏,僅僅剩下了一個光禿禿的MicrosoftCorporation字樣及滾動條。另外,滾動條的顏色數則由16色提升至16位色,但是這也無關緊要了,一般用戶只能對大面積的黑屏留下深刻印象,根本看不出小小的滾動條提升至16位色有何變化。
Windows啟動畫面的第三形態:全動態(Windows7)
看過Windows7那個紅黃綠藍四個小球逐漸融合變化為WindowsLOGO的BootAnimation的朋友們都知道,這種復雜的動畫效果肯定無法用“大雄原理”將靜態位圖來回晃悠著實現。復雜的動畫效果必須采用動畫片真正的制作原理,即以不低于25FPS的頻率將彼此之間相差較小的一系列位圖按順序依次播放,利用人眼的視覺延遲產生動畫效果。
根據E7博客提供的信息,Windows7BootAnimation分辨率由640×480提升至1024×768、顏色數則擴展為32位真彩色。但是,與早期版本的Windows一樣,Windows7BootAnimation依然只提供一種固定的分辨率,如果我們的液晶顯示器標準分辨率不是1024×768,甚至不是4:3顯示比例,那么就只能拉伸畫面以充滿整個屏幕,這將不可避免地造成畫質下降與變形(寬屏顯示器)。另外,如果顯示器的標準分辨率低于1024×768(包括長寬只有一個低于的情況,例如1024×600的小尺寸NetBook),那么Windows7BootAnimation也將無法顯示,只能顯示WindowsVista的640×480的半動態啟動滾動條畫面(估計沒有比640×480再小的NetBook了)。
由于顯示BootAnimation時Windows7尚未完成啟動,顯示驅動程序也未初始化,所以BootAnimation將不依靠顯卡、而是由CPU來實現,通過更新緩沖區完成圖形顯示。這樣做肯定會加重CPU的工作負擔,因此Windows7采用了一系列優化措施以改善此問題:
1.設置CPU使用寫聚合緩存(Write-CombinedCaching)加速圖形處理;
2.采用BMP資源整合的方式壓縮保存BootAnimation所需圖片資源,然后再經過WIM壓縮以減少資源文件體積及讀取時所需的I/O操作;
3.為了盡量適用于各種高低檔次不同的硬件配置,BootAnimation采用了異步運行的啟動方式,在關鍵I/O操作完畢之后再加載BootAnimation以避免拖慢啟動,因此在某些配置較低的計算機中,可能會看到BootAnimation在系統啟動了一段時間后才出現;
4.BootAnimation首先顯示面積較小的四個小球、然后再逐漸融合為完整的WindowsLOGO的設計也有其獨到之處,四個小球小空間的限制可以減少CPU的工作量、盡量避免剛剛啟動加載系統文件時的延遲,等到初步的系統文件加載完畢后再顯示空間較大的WindowsLOGO(這個設計令人叫絕);
5.盡量減少可能會延遲圖形模式子系統及WindowsShell初始化的圖形模式轉換,這可以有效減少WindowsVista在啟動畫面與歡迎屏幕之間的黑屏延遲現象。
此外,Windows7還取消了WindowsVista介于啟動畫面與歡迎屏幕之間的PearlAnimation,就是那個具有動態效果并伴隨有悅耳啟動提示音的WindowsLOGOPearlAnimation,這主要是出于節省啟動時間考慮(怪不得Windows7總自夸比WindowsVista啟動得快,這部分時間應該算作弊^_^)。WindowsVista受限于自身的限制,這個PearlAnimation只能在全部啟動步驟完成之后才能運行。現在,既然Windows7已經在啟動畫面中實現了全動態、也就沒有必要再保留這個PearlAnimation了。
至于那個悅耳的啟動提示音,Windows7也將其改為異步啟動方式,它將受計算機配置高低影響,在歡迎屏幕出現之前隨機播放出來。在WindowsVista中,啟動提示音是固定與PearlAnimation一同出現的,在某些啟動較慢的低配置計算機中,可能會出現影音不同步的問題,即已經聽到了提示音、但PearlAnimation還沒有顯示出來。筆者安裝在虛擬機中的WindowsVista就經常出現這種問題。Windows7的異步啟動方式是一個明顯的改進。
當然,如果我們還想在Windows7中使用PearlAnimation也不是沒有辦法,下載本文附件處提供的PearlAnimation小程序,通過組策略編輯器將其添加至系統啟動腳本即可(注意不是用戶登錄腳本,否則無法在登錄之前運行)。通過這種方法,我們甚至可以為WindowsXP也添加上PearlAnimation。不過,筆者提供的這個PearlAnimation小程序沒有聲音,對Windows7影響不大,至于WindowsXP就只能運行無聲的PearlAnimation了。
【編輯推薦】