资源预览内容
第1页 / 共83页
第2页 / 共83页
第3页 / 共83页
第4页 / 共83页
第5页 / 共83页
第6页 / 共83页
第7页 / 共83页
第8页 / 共83页
第9页 / 共83页
第10页 / 共83页
亲,该文档总共83页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
位图和位图和 BitbltBitblt位图是一个二维的位数组,它与图像的像素一一对应。当现实世界的图像被扫 描成位图以后,图像被分割成网格,并以像素作为取样单位。在位图中的每个 像素值指明了一个单位网格内图像的平均颜色。单色位图每个像素只需要一位, 灰色或彩色位图中每个像素需要多个位。 位图代表了 Windows 程序内储存图像信息的两种方法之一。储存图像信息的另 一种形式是 metafile。Metafile 储存的就是对图像如何生成的描述,而不是将 图像以数字化的图标代表。 以后我将更详细地讨论,Microsoft Windows 3.0 定义了一种称为设备无关位 图(DIB:device-independent bitmap)。我将在 下一章 讨论 DIB。本章主 要讨论 GDI 位图对象,这是一种在 Windows 中比 DIB 更早支持的位图形数据。 如同本章大量的范例程序所说明的,这种比 DIB 位图更早被 Windows 支持的图 形格式仍然有其利用价值。位图入门位图入门位图和 metafile 在计算机图形处理世界中都占有一席之地。位图经常用来表示 来自真实世界的复杂图像,例如数字化的照片或者视频图像。Metafile 更适合 于描述由人或者机器产生的图像,比如建筑蓝图。位图和 metafile 都能存于内 存或作为文件存于磁盘上,并且都能通过剪贴板在 Windows 应用程序之间传输。位图和 metafile 的区别在于位映像图像和向量图像之间的差别。位映像图像用 离散的像素来处理输出设备;而向量图像用笛卡尔坐标系统来处理输出设备, 其线条和填充对象能被个别拖移。现在大多数的图像输出设备是位映像设备, 这包括视频显示、点阵打印机、激光打印机和喷墨打印机。而笔式绘图机则是 向量输出设备。 位图有两个主要的缺点。第一个问题是容易受设备依赖性的影响。最明显的就 是对颜色的依赖性,在单色设备上显示彩色位图的效果总是不能令人满意的。 另一个问题是位图经常暗示了特定的显示分辨率和图像纵横比。尽管位图能被 拉伸和缩小,但是这样的处理通常包括复制或删除像素的某些行和列,这样会 破坏图像的大小。而 metafile 在放大缩小后仍然能保持图形样貌不受破坏。 位图的第二个缺点是需要很大的储存空间。例如,描述完整的 640480 像素, 16 色的视频图形数组(VGA:Video Graphics Array)屏幕的一幅位图需要大 于 150 KB(153600Byte)的空间;一幅 1024768,并且每个像素为 24 位颜色的 图像则需要大于 2 MB 的空间。Metafile 需要通常比位图来得少的空间。位图 的储存空间由图像的大小及其包含的颜色决定,而 metafile 的储存空间则由图 像的复杂程度和它所包含的 GDI 指令数决定。 然而,位图优于 metafile 之处在于速度。将位图复制给视频显示器通常比复制 基本图形文件的速度要快。最近几年,压缩技术允许压缩位图的文件大小,以 使它能有效地通过电话线传输并广泛地用于 Internet 的网页上。 位图的来源位图可以手工建立,例如,使用 Windows 附带的“画图”程序。一些人宁愿使 用位映像绘图软件也不使用向量绘图软件。他们假定:图形最后一定会复杂到 不能用线条跟填充区域来表达。 位图图像也能由计算机程序计算生成。尽管大多数计算生成的图像能按向量图 形 metafile 储存,但是高清晰度的画面或碎形图样通常还是需要位图。 现在,位图通常用于描述真实世界的图像,并且有许多硬设备能让您把现实世 界的图像输入到计算机。这类硬件通常使用 电荷耦合设备 (CCD:charge- coupled device),这种设备接触到光就释放电荷。有时这些 CCD 单元能排列 成一组,一个像素对应一个 CCD;为节约开支,只用一行 CCD 扫描图像。 在这些计算机 CCD 设备中, 扫描仪 是最古老的。它用一行 CCD 沿着纸上图像 (例如照片)的表面扫描。CCD 根据光的强度产生电荷。模拟数字转换器 (ADC:Analog-to-digital converters)把电荷转换为数字讯号,然后排列成 位图。 携带型摄像机也利用 CCD 单元组来捕捉影像。通常,这些影像是记录到录像带 上。不过,这些视频输出也能直接进入 影像捕捉器 (frame grabber),该设 备能把模拟视频信号转换为一组像素值。这些影像捕捉器与任何兼容的视频信 号来源都能同时使用,例如 VCR、光盘、DVD 播放机或有线电视译码器。 最近,数字照相机的价位对于家庭使用者来说开始变得负担得起了。它看起来 很像普通照相机。但是数字照相机不使用底片,而用一组 CCD 来拦截图像,并 且在 ADC 内部把数字图像直接储存在照相机内的内存中。通常,数字照相机与 计算机的接口要通过串行端口。位图尺寸位图呈矩形,并有空间尺寸,图像的高度和宽度都以像素为单位。例如,此网 格可描述一个很小的位图:宽度为 9 像素,高度为 6 像素,或者更简单地计为 96:习惯上,位图的速记尺寸是先给出宽度。位图总数为 96 或者 54 像素。我将 经常使用符号 cx 和 cy 来表示位图的宽度和高度。c 表示计数,因此 cx 和 cy 是沿着 x 轴(水平)和 y 轴(垂直)的像素数。 我们能根据 x 和 y 坐标来描述位图上具体的像素。一般(并不都是这样),在 网格内计算像素时,位图开始于图像的左上角。这样,在此位图右下角的像素 坐标就是(8, 5)。因为从 0 开始计数,所以此值比图像的宽度和高度小 1。 位图的空间尺寸通常也指定了分辨率,但这是一个有争议的词。我们说我们的 视频显示有 640480 的分辨率,但是激光打印机的分辨率只有每英寸 300 点。 我喜欢用后一种情况中分辨率的意思作为每单位像素的数量。位图在这种意义 上的分辨率指的是位图在特定测量单位中的像素数。不管怎样,当我使用分辨 率这个词语时,其定义的内容应该是明确的。 位图是矩形的,但是计算机内存空间是线性的。通常(但并不都是这样)位图 按列列储存在内存中,且从顶列像素开始到底列结束。(DIB 是此规则的一个主 要例外)。每一列,像素都从最左边的像素开始依次向右储存。这就好像储存 几列文字中的各个字符。 颜色和位图颜色和位图除空间尺寸以外,位图还有颜色尺寸。这里指的是每个像素所需要的位数,有 时也称为位图的 颜色深度 (color depth)、 位数 (bit-count)或 位/像 素 (bpp:bits per pixel)数。位图中的每个像素都有相同数量的颜色位。 每像素 1 位的位图称为 二阶 (bilevel)、 二色 (bicolor)或者 单色 (monochrome)位图。每像素可以是 0 或 1,0 表示黑色,1 可以表示白色,但 并不总是这样。对于其它颜色,一个像素就需要有多个位。可能的颜色值等于 2 位数值。用 2 位可以得到 4 种颜色,用 4 位可以得 16 种颜色,8 位可得到 256 种颜色,16 位可得到 65,536 种颜色,而 24 位可得到 16,777,216 种颜色。 如何将颜色位的组合与人们所熟悉的颜色相对应是目前处理位图时经常碰到 (而且常常是灾难)的问题。 实际的设备实际的设备位图可按其颜色位数来分类;在 Windows 的发展过程中,不同的位图颜色格式 取决于常用视频显示卡的功能。实际上,我们可把视频显示内存看作是一幅巨 大的位图我们从显示器上就可以看见。 Windows 1.0 多数采用的显示卡是 IBM 的彩色图像适配器(CGA:Color Graphics Adapter)和单色图形卡(HGC:Hercules Graphics Card)。HGC 是 单色设备,而 CGA 也只能在 Windows 以单色图形模式使用。单色位图现在还很 常用(例如,鼠标的光标一般为单色),而且单色位图除显示图像以外还有其 它用途。 随着增强型图形显示卡(EGA:Enhanced Graphics Adapter)的出现,Windows 使用者开始接触 16 色的图形。每个像素需要 4 个颜色位。(实际上,EGA 比这 里所讲的更复杂,它还包括一个 64 种颜色的调色盘,应用程序可以从中选择任意的 16 种颜色,但 Windows 只按较简单的方法使用 EGA)。在 EGA 中使用的 16 种颜色是黑、白、两种灰色、高低亮度的红色、绿和蓝(三原色)、青色(蓝 和绿组合的颜色)。现在认为这 16 种颜色是 Windows 的最低颜色标准。同样, 其它 16 色位图也可以在 Windows 中显示。大多数的图示都是 16 色的位图。通 常,简单的卡通图像也可以用这 16 种颜色制作。 在 16 色位图中的颜色编码有时称为 IRGB(高亮红绿蓝:Intensity-Red- Green-Blue),并且实际上是源自 IBM CGA 文字模式下最初使用的十六种颜色。 每个像素所用的 4 个 IRGB 颜色位都映像为表 14-1 所示的 Windows 十六进制 RGB 颜色。 表 14-1IRGBIRGBRGBRGB 颜色颜色 颜色名称颜色名称0000 00-00-00黑0001 00-00-80暗蓝0010 00-80-00暗绿0011 00-80-80暗青0100 80-00-00暗红0101 80-00-80暗洋红0110 80-80-00暗黄0111 C0-C0-C0亮灰1000 80-80-80暗灰1001 00-00-FF蓝1010 00-FF-00绿1011 00-FF-FF青1100 FF-00-00红1101 FF-00-FF洋红1110 FF-FF-00黄1111 FF-FF-FF白EGA 的内存组成了四个“颜色面”,也就是说,定义每个像素颜色的四位在内 存中是不连续的。然而,这样组织显示内存便于使所有的亮度位都排列在一起、 所有的红色位都排在一起,等等。这样听起来就好像一种设备依赖特性,即 Windows 程序编写者不需要了解所有细节,但这时应或多或少地知道一些。不 过,这些颜色面会出现在一些 API 调用中,例如 GetDeviceCaps 和 CreateBitmap。 Windows 98 和 Microsoft Windows NT 需要 VGA 或分辨率更高的图形卡。这是 目前公认的显示卡的最低标准。 1987 年,IBM 最早发表视频图像数组(Video Graphics Array:VGA)以及 PS/2 系列的个人计算机。它提供了许多不同的显示模式,但最好的图像模式(Windows 也使用其中之一)是水平显示 640 个像素,垂直显示 480 个像素, 带有 16 种颜色。要显示 256 种颜色,最初的 VGA 必须切换到 320240 的图形 模式,这种像素数不适合 Windows 的正常工作。 一般人们已经忘记了最初 VGA 卡的颜色限制,因为其它硬件制造商很快就开发 了“Super-VGA”(SVGA)显示卡,它包括更多的视频内存,可显示 256 种颜色 并有多于 640480 的模式。这是现在的标准,而且也是一件好事,因为对于现 实世界中的图像来说,16 种颜色过于简单,有些不适合。 显示 256 种颜色的显示卡模式采用每像素 8 位。不过,这些 8 位值都不必与实 际的颜色相符。事实上,显示卡提供了“调色盘对照表(palette lookup table)”,该表允许软件指定这 8 位的颜色值,以便与实际颜色相符合。在 Windows 中,应用程序不能直接存取调色盘对照表。实际上,Windows 储存了 256 种颜色中的 20 种,而应用程序可以通过“Windows 调色盘管理器”来自订 其余的 236 种颜色。关于这些内容,我将在 第十六章 详细介绍。调色盘管理 器允许应用程序在 256 色显示器上显示实际位图。Windows 所储存的 20
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号