第9章 位图编程
aljazeeras
贡献于2013-06-12
1941
0
0
第9章 位图编程
下载需要
2
金币
[ 金币充值 ]
服务器/托管费、人工审核、技术维护等都需要很多费用,请您支持深度开源的发展
下载PPT
标签:
C/C++开发
C/C++
PPT 内容
1. 第9章 位图编程位图可以使应用程序的界面更加美观,是用像素阵列描绘出的图像。例如,如果屏幕设成32位真彩 则位图是32位为单位(一个像素)的数组。位图的基本单元是像素,每个象素的色彩信息由RGB组合或者由灰度值来表示。像素的单位根据颜色信息可分为1、4、8、16、24及32位等,位数越高表明颜色越丰富,相应的数据量就越大。其中使用24位RGB组合数据位表示的的位图称为真彩色位图。
2. 9.1 位图的种类Windows系统使用的位图常分为设备相关位图(DDB)和设备无关位图(DIB)两种。其中DDB依赖于具体的图像输出设备,其颜色模式必须与输出设备相一致。DDB位图的显示很简单,其内部用一个Bitmap结构表示,其中包含了位图的宽度、高度、每像素的位数和设备相关的每像素的颜色等信息,将文件内容拷贝到内存中,然后可以很方便地将它粘贴到相关设备中,用BitBlt函数直接显示。但它只能存在于视频内存或系统内存中,且与输出设备紧密相关,因此程序员不会把DDB图像存储成文件,而是更多的使用DIB。
3. 9.2 位图的显示实现在窗口中显示位图的第一步就是创建位图对象,并通对该对象加载和设置位图内容,然后再创建与当前设备环境兼容的内存设备环境,并将位图选入该内存设备环境中,最后将该内存设备环境中的位图复制到当前的设备环境中,从而在当前窗口显示该位图。本节就对位图的显示过程进行详细分析。
4. 9.2.1 创建位图对象创建位图,可以先利用CBitmap类构造一个位图对象。通过CBitmap对象在首次被实例化时是空的。要使该对象有效,CBitmap类所包装的位图必须先创建。该类用于创建位图的成员函数有CreateBitmap()、CreateBitmapIndirect()和CreateComapatbleBitmap()等。 1.CreateBitmap()函数 2.CreateBitmapIndirect()函数 3.CreateComapatbleBitmap()函数
5. 9.2.2 加载和设置位图内容第二步就是加载和设置位图内容。在绘图时并不是直接绘到屏幕上,而是在内存中开辟一个缓冲区,在这个缓冲区里完成所有的绘图后,直接将其“粘贴”到屏幕上。当位图被首次创建时,其内存中包含着不可预知的数据,如果在设置数据之前就将位图显示到屏幕上,则会看到一个异常杂乱的图案。因此需要设置位图内容,然后采用SetBitmapBits()函数将内存缓冲区中的内容复制到位图内容中。
6. 9.2.3 显示位图当创建完一个有效的位图对象后,就可以采用CDC类的成员函数BitBlt()把它显示在屏幕上了。BitBlt()函数的功能就是把源设备环境的位图复制到目标设备中。也就是说,在设备之间进行复制之前,必须创建一个用于位图的设备环境,并且在进行复制前还要把位图选入设备环境中。
7. 9.2.4 创建一个动画实例当应用程序使用多次GDI调用绘制到窗口,来实现动画效果时,在窗口清除并被重新绘制时,会出现明显的闪烁,使用CBitmap类就可以轻松地消除闪烁。只需要创建一个CBitmap对象和一个内存设备环境,将位图选入设备,再复制到相应的设备环境中并显示该位图。这种方式使用GDI绘制到内存上,然后使用BilBlt()函数快速调用,将整个内存对象移到屏幕上,从而能够消除因为重绘时的闪烁现象。下面通过一个动画实例来进一步理解这种方式。
8. 9.3 调色板通常显示器的色彩是由红、绿、蓝三色组合而成的,对于RGB的选值一般在0~255之间,颜色数小于等于256色的位图一般要建立调色板,用它进行显示。调色板是改变窗体或控件的颜色并建立自定义颜色表。调色板包含两种:一种是窗体或控件显示当前选定的前景颜色和背景颜色;另一种是对窗体或控件中的任何文本显示当前选定的前景颜色和背景颜色。
9. 9.3.1 调色板的种类红、绿、蓝的不同组合共有大概1600万种颜色。对于人眼而言,这已经是“真彩色”了,也就是先前所说的24位图或其以上的位图。位图的图像数据中的每个像素都用了三个字节来描述记录RGB.,也就是对每个像素进行了(R、G、B)量化。
10. 9.3.2 调色板的操作Windows系统利用调色板管理器来管理与调色板相关的操作,通常活动窗口的调色板就是当前系统调色板,所有的非活动窗口都必须按照此系统调色板来显示自己的颜色。要想使用自己定义的逻辑调色板来显示,就必须把定义好的逻辑调色板映射给当前设备环境的系统调色板。
11. 9.3.3 调色板的事件当Windows从一个应用程序的执行切换到另一个应用程序时,若使用调色板方式不同,就会使系统调色板的颜色发生改变。再次使得先前程序获得焦点,这时由于系统调色板已经放生变化,在屏幕上所看到的图案可能与预期的不同。因此,就必须在适当的时候恢复调色板。
12. 9.4 设备无关类位图设备相关类位图(DDB)主要用来保存来自资源位图或者绘制的位图,以及用来在特定设备环境中进行位图的显示。它的格式依赖于当前的设备环境,不太适用于进行图像交换。针对DDB的不足,Windows系统引入了设备无关类位图(DIB),它自带颜色信息,与当前设备无关,通常用于交换的图像格式,例如BMP格式。
13. 9.4.1 BMP图像文件的结构在Windows系统中,常用的图像文件格式是BMP格式。BMP图像文件可以用来存储和设备及应用程序无关的图像。本节主要讨论BMP的文件结构。 1.BMP文件头 2.位图信息 3.位图数据
14. 9.4.2 位图操作MFC提供了一些函数,用来对位图进行操作,例如位图的显示、伸缩及裁剪等等。本节就对几种常用操作简述一下。 1.位图的显示与裁剪 2.位图的伸缩 3.DIB的显示 4.DIB转DDB 5.DDB转DIB
15. 9.4.3 CImage类CImage是MFC和ATL共享的新类,它能从外部磁盘中调入一个JPEG、GIF、BMP和PNG格式的图像文件加以显示,而且这些文件格式可以相互转换。
16. 9.5 小结本章首先阐述了MFC中位图的种类,然后讨论了如何利用CBitmap类来创建并使用设备相关类位图,特别是利用内存设备环境实现消除因多次重绘造成的闪烁现象。然后对调色板的种类、操作及事件进行了详细介绍。最后对设备无关类图的文件结构及操作进行了阐述,并对一个Visual C++中的新功能CImage类进行了简述。
PPT 图集
相关PPT
第9章 位图编程
第8章 图形编程
Window编程实战 - 第9章图形和文本
第9章+jquery
Delphi数据库编程-第9章_使用TQuery组件和SQL
第9章 决策树算法
Window编程实战 - 第8章文档和视图 - 第6章常用控件
第9章 Java异常
第 9 章 java网络
C#程序设计第9章 - 用户界面设计