windows程序设计 位图和位图动画.docx
- 文档编号:2297576
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:84
- 大小:242.08KB
windows程序设计 位图和位图动画.docx
《windows程序设计 位图和位图动画.docx》由会员分享,可在线阅读,更多相关《windows程序设计 位图和位图动画.docx(84页珍藏版)》请在冰豆网上搜索。
windows程序设计位图和位图动画
位图和Bitblt
位图是一个二维的位数组,它与图像的像素一一对应。
当现实世界的图像被扫描成位图以后,图像被分割成网格,并以像素作为取样单位。
在位图中的每个像素值指明了一个单位网格内图像的平均颜色。
单色位图每个像素只需要一位,灰色或彩色位图中每个像素需要多个位。
位图代表了Windows程序内储存图像信息的两种方法之一。
储存图像信息的另一种形式是metafile。
Metafile储存的就是对图像如何生成的描述,而不是将图像以数字化的图标代表。
以后我将更详细地讨论,MicrosoftWindows3.0定义了一种称为设备无关位图(DIB:
device-independentbitmap)。
我将在下一章讨论DIB。
本章主要讨论GDI位图对象,这是一种在Windows中比DIB更早支持的位图形数据。
如同本章大量的范例程序所说明的,这种比DIB位图更早被Windows支持的图形格式仍然有其利用价值。
位图入门
位图和metafile在计算机图形处理世界中都占有一席之地。
位图经常用来表示来自真实世界的复杂图像,例如数字化的照片或者视频图像。
Metafile更适合于描述由人或者机器产生的图像,比如建筑蓝图。
位图和metafile都能存于内存或作为文件存于磁盘上,并且都能通过剪贴板在Windows应用程序之间传输。
位图和metafile的区别在于位映像图像和向量图像之间的差别。
位映像图像用离散的像素来处理输出设备;而向量图像用笛卡尔坐标系统来处理输出设备,其线条和填充对象能被个别拖移。
现在大多数的图像输出设备是位映像设备,这包括视频显示、点阵打印机、激光打印机和喷墨打印机。
而笔式绘图机则是向量输出设备。
位图有两个主要的缺点。
第一个问题是容易受设备依赖性的影响。
最明显的就是对颜色的依赖性,在单色设备上显示彩色位图的效果总是不能令人满意的。
另一个问题是位图经常暗示了特定的显示分辨率和图像纵横比。
尽管位图能被拉伸和缩小,但是这样的处理通常包括复制或删除像素的某些行和列,这样会破坏图像的大小。
而metafile在放大缩小后仍然能保持图形样貌不受破坏。
位图的第二个缺点是需要很大的储存空间。
例如,描述完整的640×480像素,16色的视频图形数组(VGA:
VideoGraphicsArray)屏幕的一幅位图需要大于150KB(153600Byte)的空间;一幅1024×768,并且每个像素为24位颜色的图像则需要大于2MB的空间。
Metafile需要通常比位图来得少的空间。
位图的储存空间由图像的大小及其包含的颜色决定,而metafile的储存空间则由图像的复杂程度和它所包含的GDI指令数决定。
然而,位图优于metafile之处在于速度。
将位图复制给视频显示器通常比复制基本图形文件的速度要快。
最近几年,压缩技术允许压缩位图的文件大小,以使它能有效地通过电话线传输并广泛地用于Internet的网页上。
位图的来源
位图可以手工建立,例如,使用Windows附带的“画图”程序。
一些人宁愿使用位映像绘图软件也不使用向量绘图软件。
他们假定:
图形最后一定会复杂到不能用线条跟填充区域来表达。
位图图像也能由计算机程序计算生成。
尽管大多数计算生成的图像能按向量图形metafile储存,但是高清晰度的画面或碎形图样通常还是需要位图。
现在,位图通常用于描述真实世界的图像,并且有许多硬设备能让您把现实世界的图像输入到计算机。
这类硬件通常使用电荷耦合设备(CCD:
charge-coupleddevice),这种设备接触到光就释放电荷。
有时这些CCD单元能排列成一组,一个像素对应一个CCD;为节约开支,只用一行CCD扫描图像。
在这些计算机CCD设备中,扫描仪是最古老的。
它用一行CCD沿着纸上图像(例如照片)的表面扫描。
CCD根据光的强度产生电荷。
模拟数字转换器(ADC:
Analog-to-digitalconverters)把电荷转换为数字讯号,然后排列成位图。
携带型摄像机也利用CCD单元组来捕捉影像。
通常,这些影像是记录到录像带上。
不过,这些视频输出也能直接进入影像捕捉器(framegrabber),该设备能把模拟视频信号转换为一组像素值。
这些影像捕捉器与任何兼容的视频信号来源都能同时使用,例如VCR、光盘、DVD播放机或有线电视译码器。
最近,数字照相机的价位对于家庭使用者来说开始变得负担得起了。
它看起来很像普通照相机。
但是数字照相机不使用底片,而用一组CCD来拦截图像,并且在ADC内部把数字图像直接储存在照相机内的内存中。
通常,数字照相机与计算机的接口要通过串行端口。
位图尺寸
位图呈矩形,并有空间尺寸,图像的高度和宽度都以像素为单位。
例如,此网格可描述一个很小的位图:
宽度为9像素,高度为6像素,或者更简单地计为9×6:
习惯上,位图的速记尺寸是先给出宽度。
位图总数为9×6或者54像素。
我将经常使用符号cx和cy来表示位图的宽度和高度。
c表示计数,因此cx和cy是沿着x轴(水平)和y轴(垂直)的像素数。
我们能根据x和y坐标来描述位图上具体的像素。
一般(并不都是这样),在网格内计算像素时,位图开始于图像的左上角。
这样,在此位图右下角的像素坐标就是(8,5)。
因为从0开始计数,所以此值比图像的宽度和高度小1。
位图的空间尺寸通常也指定了分辨率,但这是一个有争议的词。
我们说我们的视频显示有640×480的分辨率,但是激光打印机的分辨率只有每英寸300点。
我喜欢用后一种情况中分辨率的意思作为每单位像素的数量。
位图在这种意义上的分辨率指的是位图在特定测量单位中的像素数。
不管怎样,当我使用分辨率这个词语时,其定义的内容应该是明确的。
位图是矩形的,但是计算机内存空间是线性的。
通常(但并不都是这样)位图按列储存在内存中,且从顶列像素开始到底列结束。
(DIB是此规则的一个主要例外)。
每一列,像素都从最左边的像素开始依次向右储存。
这就好像储存几列文字中的各个字符。
颜色和位图
除空间尺寸以外,位图还有颜色尺寸。
这里指的是每个像素所需要的位数,有时也称为位图的颜色深度(colordepth)、位数(bit-count)或位/像素(bpp:
bitsperpixel)数。
位图中的每个像素都有相同数量的颜色位。
每像素1位的位图称为二阶(bilevel)、二色(bicolor)或者单色(monochrome)位图。
每像素可以是0或1,0表示黑色,1可以表示白色,但并不总是这样。
对于其它颜色,一个像素就需要有多个位。
可能的颜色值等于2位数值。
用2位可以得到4种颜色,用4位可以得16种颜色,8位可得到256种颜色,16位可得到65,536种颜色,而24位可得到16,777,216种颜色。
如何将颜色位的组合与人们所熟悉的颜色相对应是目前处理位图时经常碰到(而且常常是灾难)的问题。
实际的设备
位图可按其颜色位数来分类;在Windows的发展过程中,不同的位图颜色格式取决于常用视频显示卡的功能。
实际上,我们可把视频显示内存看作是一幅巨大的位图——我们从显示器上就可以看见。
Windows1.0多数采用的显示卡是IBM的彩色图像适配器(CGA:
ColorGraphicsAdapter)和单色图形卡(HGC:
HerculesGraphicsCard)。
HGC是单色设备,而CGA也只能在Windows以单色图形模式使用。
单色位图现在还很常用(例如,鼠标的光标一般为单色),而且单色位图除显示图像以外还有其它用途。
随着增强型图形显示卡(EGA:
EnhancedGraphicsAdapter)的出现,Windows使用者开始接触16色的图形。
每个像素需要4个颜色位。
(实际上,EGA比这里所讲的更复杂,它还包括一个64种颜色的调色盘,应用程序可以从中选择任意的16种颜色,但Windows只按较简单的方法使用EGA)。
在EGA中使用的16种颜色是黑、白、两种灰色、高低亮度的红色、绿和蓝(三原色)、青色(蓝和绿组合的颜色)。
现在认为这16种颜色是Windows的最低颜色标准。
同样,其它16色位图也可以在Windows中显示。
大多数的图示都是16色的位图。
通常,简单的卡通图像也可以用这16种颜色制作。
在16色位图中的颜色编码有时称为IRGB(高亮红绿蓝:
Intensity-Red-Green-Blue),并且实际上是源自IBMCGA文字模式下最初使用的十六种颜色。
每个像素所用的4个IRGB颜色位都映像为表14-1所示的Windows十六进制RGB颜色。
表14-1
IRGB
RGB颜色
颜色名称
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。
Windows98和MicrosoftWindowsNT需要VGA或分辨率更高的图形卡。
这是目前公认的显示卡的最低标准。
1987年,IBM最早发表视频图像数组(VideoGraphicsArray:
VGA)以及PS/2系列的个人计算机。
它提供了许多不同的显示模式,但最好的图像模式(Windows也使用其中之一)是水平显示640个像素,垂直显示480个像素,带有16种颜色。
要显示256种颜色,最初的VGA必须切换到320×240的图形模式,这种像素数不适合Windows的正常工作。
一般人们已经忘记了最初VGA卡的颜色限制,因为其它硬件制造商很快就开发了“Super-VGA”(SVGA)显示卡,它包括更多的视频内存,可显示256种颜色并有多于640×480的模式。
这是现在的标准,而且也是一件好事,因为对于现实世界中的图像来说,16种颜色过于简单,有些不适合。
显示256种颜色的显示卡模式采用每像素8位。
不过,这些8位值都不必与实际的颜色相符。
事实上,显示卡提供了“调色盘对照表(palettelookuptable)”,该表允许软件指定这8位的颜色值,以便与实际颜色相符合。
在Windows中,应用程序不能直接存取调色盘对照表。
实际上,Windows储存了256种颜色中的20种,而应用程序可以通过“Windows调色盘管理器”来自订其余的236种颜色。
关于这些内容,我将在第十六章详细介绍。
调色盘管理器允许应用程序在256色显示器上显示实际位图。
Windows所储存的20种颜色如表14-2所示。
表14-2
IRGB
RGB颜色
颜色名称
00000000
00-00-00
黑
00000001
80-00-00
暗红
00000010
00-80-00
暗绿
00000011
80-80-00
暗黄
00000100
00-00-80
暗蓝
00000101
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- windows程序设计 位图和位图动画 windows 程序设计 位图 动画