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