- 4
- 0
- 约 19页
- 2016-08-21 发布于重庆
- 举报
第19章位图和图像
第19章 位图和图像 位图图像由像素组成,每个像素都被分配一个特定位置和颜色值。图像用数字描述像素点、强度和颜色。位图和图像是用图形、图像表示特定含义的表现形式之一。本章将详细讲解Visual C++6.0如何处理位图和进行图像处理。本章知识点包括: 调色板 位图 位图动画 图像的显示 图像的几何变换 19.1 调色板 调色板是绘画时用以调和颜料的平板形画具。常见的IBM兼容视频系统上的颜色由RGB三色体现。RGB三色中的每一个颜色都包含颜色中的红色、绿色和蓝色成份。这三部分值组合在一起确定屏幕上所显示的颜色。RGB是常见的颜色空间。红、绿、蓝被认为是基本色,不能够再分解。色彩系统一般有两种:加法色彩系统和减法色彩系统。例如,加法系统中添加的颜色越多,结果颜色就趋于白色,足够的主要颜色可以创建出纯白色,缺少主要颜色只能够得到纯黑色。 常见的RGB宏描述RGB三色。RGB宏将0~255之间的三字节值转换为COLORREF值。宏的第一个参数是红色,第二个参数是绿色,第三个参数是蓝色。每个值的范围都在0~255之间。默认的调色板中包含了10种颜色,在后面介绍。 19.1.1 逻辑调色板 逻辑调色板是通过LOGPALETTE结构创建的。在LOGPALETTE结构内是PALETTEENTRY结构列表。PALETTEENTRY列表中包含了Windows可用来设置硬件调色板的RGB值。列表中PALETTEENTRY结构数的范围从1到256。如果视频系统支持256及以上的调色板条目,逻辑调色板会更多。 被设置为16、24和32位显示的视频系统通过将RGB值存储到视频内存中,来确定单个像素在屏幕上的显示方式。被设置为8位显示的更小的视频系统需要更间接的方式执行操作,在很多情况下认为是调色设备。 19.1.2 使用调色板 编写调色板应用程序时,应该明白其他应用程序可能接收焦点,并以不同方式设置调色板。当应用程序重新获得焦点时,图形可能和预期的就不同,因此需要增加一些事件,在适当的时候恢复调色板。 当调色板实现引起系统调色板发生改变时,WM_QUERYNEWPALETTE消息被发送到应用程序的窗口中,一般就是CMainFrame对象。调色板实现使窗口将驻留在所选择调色板中的应用程序中的数据发送到影响变化的视频硬件中。WM_PALETTECHANGED消息在接收焦点后,被发送到CMainFrame类,对于维护不同调色板的多文档界面程序,每一个子窗口都应该查找WM_GETFOCUS消息,使得子窗口能够设置自己的调色板。 19.2 位图 本节将讲述如何在Visual C++ 6.0中使用位图。主要涉及GDI位图和设备无关图的内容。 19.2.1 GDI位图 GDI是图形设备接口的缩写。GDI位图是一种GDI对象,在MFC库中用CBitmap类表示。CBitmap类的对象包含一种和Windows的GDI模块有关的Windows数据结构,该数据结构是与设备相关的。应用程序可以得到GDI位图数据的一个备份,其中位的安排则完全依赖于显示设备。将GDI位图数据在同一台计算机内的不同应用程序间任意传递,由于其对设备的依赖性,在不同类型计算机间的传递没有意义。 CBitmap类封装了Windows GDI位图,同时提供操作位图的成员函数。在使用CBitmap对象时,要创建一个CBitmap类的对象,再选进设备环境中,然后调用成员函数进行处理,使用完毕以后,将其从设备环境中选出并删除。 19.2.2 设备无关位图 设备无关位图的英文缩写是DIB。它自带颜色信息,调色板管理非常容易。DIB使位图打印时的灰色阴影控制更加容易。任何安装Windows操作系统的计算机都可以处理DIB,它通常以BMP文件的形式被保存在磁盘中或者作为资源保存在EXE文件或者DLL中。DIB是标准的Windows位图格式,BMP文件中包含了一个DIB。一个BMP文件大体分四部分:位图文件头,位图信息头,调色板,DIB图像数据。Windows支持一些重要的DIB访问函数,这些函数还没有被封装到MFC中。下面介绍常用的函数: SetDIBitsToDevice函数 //设置DIB设备 StretchDIBits函数 //拷贝位图 GetDIBits函数 //取得位图句柄 CreateDIBitmap函数 //创建DIB位图 CreateDIBSection函数 //创建DIB块 LoadImage函数 //加载位图 DrawDibDraw函数
原创力文档

文档评论(0)