静态和半动态启动画面
MSDN E7 博客最近的一篇文章《Engineering the Windows 7 Boot Animation》介绍了 Windows 7 的动态启动画面(Boot Animation)一些设计细节,写得很详细,推荐大家阅读。笔者认为,Windows 7 的 Boot Animation 相比早期版本 Windows 的启动画面,已经逐步完成了由全静态到半动态、再到全动态的进化过程。在此,笔者并不想简单地直接翻译 E7 博客的原文,而是想结合对历代 Windows 启动画面发展历程的回顾,谈一谈笔者对 Windows 7 Boot Animation 的一些看法。
Windows 启动画面的第一形态:纯静态(Windows 1.0-Windows 3.0、Windows NT 3/4)
这一阶段的 Windows 启动画面都是不具有任何动态效果的纯静态画面,区别仅仅是颜色数的不同,从双色到 16 色而已。特别是 Windows NT 根本就没有设置启动画面,仅有一个显示 CPU 及内存信息的蓝屏。
Windows 启动画面的第二形态:半动态(Windows 9X/ME、Windows 2000/XP/Server 2003、Windows Vista/Server 2008)
从 Windows 95 的启动滚动条开始,启动画面开始加入了动态效果。但是这一阶段包括 Windows Vista/Server 2008 在内的所有 Windows 启动画面,充其量只能算是半动态。为什么这么说呢?
《多啦 A 梦》一集中,大雄借用多啦 A 梦的“动画片制作机”自己制作动画片。多啦 A 梦问大雄:你知道动画片是怎么动起来的么?大雄回答:我不知道,大概是手里拿着一幅画,在镜头前来回晃悠吧。多啦 A 梦晕倒~ -_-
Windows 第二形态的半动态启动画面实际采用的就是这种来回晃悠式的“大雄原理”。看似动态的滚动条其实本身只是一幅静态的位图,只不过在规定的滚动条轨道范围内不停地做着从左至右的晃悠动作而已。
Windows 9X/ME 的启动画面实际是一幅 320×400、256 色的 BMP 位图,在画面下方的小窄条范围内,设置这一范围内的位图颜色表有规律地不停变换,使得这一小窄条范围内的滚动条看起来好像在连续不断地从左向右滚动。在 Windows 9X/ME 时代很多人将自己修改的 256 色 BMP 位图重命名为 C:LOGO.SYS 以替换默认启动画面,替换后却发现新启动画面丢失了滚动条动画效果,原因就是新位图没有设置颜色表的自动变化。
Windows 2000/XP/Server 2003 则将启动画面背景与滚动条分为两个静态的 BMP 位图,分别保存在 NTOSKRNL.EXE 的位图资源里。启动 Windows 时,NTOSKRNL.EXE 将把 640×480、16 色的静态位图设置为启动画面背景,也就是我们看到的黑色背景、Windows LOGO 及滚动条轨道框,然后再将滚动条的静态位图放置在轨道框范围内,令其不停地从左至右晃悠。这样就拼成了一幅半动态 Windows 启动画面。
Windows Vista/Server 2008 的启动画面与 Windows 2000/XP/Server 2003 如出一辙。最大的改动我们众所周知,就是删除了背景图片中的 Windows LOGO,变成了一大片黑屏,仅仅剩下了一个光秃秃的 Microsoft Corporation 字样及滚动条。另外,滚动条的颜色数则由 16 色提升至 16 位色,但是这也无关紧要了,一般用户只能对大面积的黑屏留下深刻印象,根本看不出小小的滚动条提升至 16 位色有何变化。
全动态启动画面
Windows 启动画面的第三形态:全动态(Windows 7)
看过 Windows 7 那个红黄绿蓝四个小球逐渐融合变化为 Windows LOGO 的 Boot Animation 的朋友们都知道,这种复杂的动画效果肯定无法用“大雄原理”将静态位图来回晃悠着实现。复杂的动画效果必须采用动画片真正的制作原理,即以不低于 25FPS 的频率将彼此之间相差较小的一系列位图按顺序依次播放,利用人眼的视觉延迟产生动画效果。
根据 E7 博客提供的信息,Windows 7 Boot Animation 分辨率由 640×480 提升至 1024×768、颜色数则扩展为 32 位真彩色。但是,与早期版本的 Windows 一样,Windows 7 Boot Animation 依然只提供一种固定的分辨率,如果我们的液晶显示器标准分辨率不是 1024×768,甚至不是 4:3 显示比例,那么就只能拉伸画面以充满整个屏幕,这将不可避免地造成画质下降与变形(宽屏显示器)。另外,如果显示器的标准分辨率低于 1024×768(包括长宽只有一个低于的情况,例如 1024×600 的小尺寸 NetBook),那么 Windows 7 Boot Animation 也将无法显示,只能显示 Windows Vista 的 640×480 的半动态启动滚动条画面(估计没有比 640×480 再小的 NetBook 了)。
由于显示 Boot Animation 时 Windows 7 尚未完成启动,显示驱动程序也未初始化,所以 Boot Animation 将不依靠显卡、而是由 CPU 来实现,通过更新缓冲区完成图形显示。这样做肯定会加重 CPU 的工作负担,因此 Windows 7 采用了一系列优化措施以改善此问题:
1.设置 CPU 使用写聚合缓存(Write-Combined Caching)加速图形处理;
2.采用 BMP 资源整合的方式压缩保存 Boot Animation 所需图片资源,然后再经过 WIM 压缩以减少资源文件体积及读取时所需的 I/O 操作;
3.为了尽量适用于各种高低档次不同的硬件配置,Boot Animation 采用了异步运行的启动方式,在关键 I/O 操作完毕之后再加载 Boot Animation 以避免拖慢启动,因此在某些配置较低的计算机中,可能会看到 Boot Animation 在系统启动了一段时间后才出现;
4.Boot Animation 首先显示面积较小的四个小球、然后再逐渐融合为完整的 Windows LOGO 的设计也有其独到之处,四个小球小空间的限制可以减少 CPU 的工作量、尽量避免刚刚启动加载系统文件时的延迟,等到初步的系统文件加载完毕后再显示空间较大的 Windows LOGO(这个设计令人叫绝);
5.尽量减少可能会延迟图形模式子系统及 Windows Shell 初始化的图形模式转换,这可以有效减少 Windows Vista 在启动画面与欢迎屏幕之间的黑屏延迟现象。
此外,Windows 7 还取消了 Windows Vista 介于启动画面与欢迎屏幕之间的 Pearl Animation,就是那个具有动态效果并伴随有悦耳启动提示音的 Windows LOGO Pearl Animation,这主要是出于节省启动时间考虑(怪不得 Windows 7 总自夸比 Windows Vista 启动得快,这部分时间应该算作弊 ^_^)。Windows Vista 受限于自身的限制,这个 Pearl Animation 只能在全部启动步骤完成之后才能运行。现在,既然 Windows 7 已经在启动画面中实现了全动态、也就没有必要再保留这个 Pearl Animation 了。
至于那个悦耳的启动提示音,Windows 7 也将其改为异步启动方式,它将受计算机配置高低影响,在欢迎屏幕出现之前随机播放出来。在 Windows Vista 中,启动提示音是固定与 Pearl Animation 一同出现的,在某些启动较慢的低配置计算机中,可能会出现影音不同步的问题,即已经听到了提示音、但 Pearl Animation 还没有显示出来。笔者安装在虚拟机中的 Windows Vista 就经常出现这种问题。Windows 7 的异步启动方式是一个明显的改进。
当然,如果我们还想在 Windows 7 中使用 Pearl Animation 也不是没有办法,下载本文附件处提供的 Pearl Animation 小程序,通过组策略编辑器将其添加至系统启动脚本即可(注意不是用户登录脚本,否则无法在登录之前运行)。通过这种方法,我们甚至可以为 Windows XP 也添加上 Pearl Animation。不过,笔者提供的这个 Pearl Animation 小程序没有声音,对 Windows 7 影响不大,至于 Windows XP 就只能运行无声的 Pearl Animation 了。
网友评论