1、摘 要本文对图形图像解决系统的发展现状和所采用的重要技术进行了具体分析,拟定了相应的结构和重要功能,以及实际开发中所采用的技术。系统在Windows XP平台下实现,本课题是采用Visual C+作为编程工具,采用面向对象的程序设计技术实现一个图形绘制和图像解决的应用软件。重要工作分为三类,涉及基本图形绘制与编辑、简朴的图像解决、图像格式的转换。图形方面重要是设计图形基类,以及继承图形基类的具体图形类。通过对独立功能的封装,可认为此后需要的图形图像的应用奠定基础。系统的优点有:充足体现了面向对象的设计思想,充足运用了C+的特性,比如封装、多态、继承。程序结构清楚,可读性好,程序中做了充足的注释
2、。图形绘制部分避免了传统的switch case的繁琐结构。容易扩充和移植。最后,对系统进行测试表白,系统功能达成了预期的规定,界面和谐,操作简便,运营也较稳定,是一个完毕基本功能的图形图像系统。总体上,本文介绍了系统开发设计的全过程和设计过程中部分代码,也对系统测试的过程进行简朴描述,同时对系统中采用的关键技术也作了一些必要的说明,对图像变换的基本原理,图像解决的基本原理和各种图像格式做了具体的阐述。关键词:图形;图像;多态;继承AbstractThis article has carried on the detailed analysis about graph image proces
3、sing system development and using of the key technology,identify the corresponding structure and central function, as well as the system adopts technology in the actual development. The system realizes under the Windows XP platform, the topic use Visual C+ as a programming tool, use object-oriented
4、programming techniques to achieve a graphic and image processing software. Major work is divided into three categories, basic drawing and editing graphics, simple image processing, and image format conversion. The graph aspect is designs the graph base class , as well as inherits the graph base clas
5、ss specific graph class. Through independent functions encapsulation, for the futures needs of the graphic images lays the foundation. The system merit has: the object-oriented designs thought application of the c+ properties, for example encapsulation, polymorphism, and inheritance. Programs struct
6、ure is clear, good readability, codes has the full annotation in the program. The graph plans part has avoided complicated structure of the traditional switch case. Easy expansion and transplantation. Finally, systems testing shows, systems functions achieve the expected demand, friendly interface,
7、and the operation is simple, also a much stable operation, it has basic functions of the graphic image system.As a whole, this paper describes the system design process and part of the process of designing code, also carries on the simple description to the system test process, meanwhile it made som
8、e necessary explanations about key technology in the system, it made the detailed description to image transform of the basic principle, the image processing basic principle and various image formats.Keyword: graph; image; polymorphism; inheritance目 录摘 要IAbstractII第1章 引 言11.1 课题的研究目的和意义11.2 国内外发展现状1
9、1.3 研究方法与手段21.3.1 运营环境21.3.2 开发环境2第2章 图形图像解决系统相关技术综述32.1 图形设计基础32.1.1 Visual C+技术概要32.1.2 图形设备接口GDI32.1.3 设备环境DC32.1.4 CDC类的派生类的功能及其之间的区别42.1.5 与绘图相关的GDI对象类52.1.6 坐标变换和映射模式62.2 图像设计基础72.2.1 数字图像的基本概念72.2.2 调色板82.2.3 调色板的概念9第3章 图形图像解决系统的总体设计103.1 需求分析103.2 图形图像解决系统目的设计103.3 图形图像解决系统功能描述103.4 界面设计123.
10、4.1 主界面设计123.4.2菜单设计143.4.3 工具栏设计143.4.4 属性框设计15第4章 图形图像解决系统图像部分设计164.1 与设备无关位图(DIB)164.1.1 DIB位图的结构164.1.2 定义DIB解决函数集184.1.3 CDib类的设计目的204.2 图像变换204.2.1 图像变换的理论基础204.2.2 旋转214.2.3 镜像224.3 图像解决的基本方法224.4 图像格式254.4.1 PCX格式255.4.2 GIF格式264.4.3 JPEG28第5章 图形图像解决系统图形部分设计295.1 图形类的设计295.1.1 图形系统的层次结构295.1
11、.3 类层次性的特点295.1.4 图形系统类层次的设计原则305.1.5 基类CEntity305.1.6 命令基类CCommand315.2 派生类设计325.2.1 派生类Cline325.2.2 派生类Cline的具体实现325.2.3 创建直线命令类CCreateLine335.3 位置类Position335.3.1 构造位置类的因素345.3.2 位置类Position的实现345.4 图元拾取355.4.1 直线的拾取365.4.2 矩形的拾取375.4.3 圆的拾取375.4.4 图元拾取的准确度和可靠性375.5 图元的编辑375.5.1 图元编辑函数385.5.2 实现图
12、元的交互编辑395.6 序列化和反序列化405.7系统测试41第6章 结论43参考文献44致 谢45第1章 引 言1.1 课题的研究目的和意义本课题的目的是采用Visual C+作为编程工具,实现基本图形元素如直线、圆、椭圆等的绘制,对图形元素的基本操作如填充、擦除等,也涉及对常用图像格式的解决,如图像的显示、图像格式的转换等1。应当说,目前已有种类繁多的图形图像解决专用软件工具,如AutoCAD、和PhotoShop等,运用这些图形图像解决软件可以实现同样的功能。即便如此,研究这些图形图像解决技术仍具有一定使用价值。一方面,运用一个设计良好的简朴的小图形解决程序可以用于教学演示的目的,展示基
13、本的图形图像解决技术和面向对象技术在这一领域的应用效果。另一方面,在很多应用中需要提供自己的图形图像解决功能,例如,在一个正在连接网络的任务中也许就希望显示一幅示意性的动画,此时,不能依赖一个图形软件来实现。因此,通过对独立功能的封装,可认为此后需要的图形图像的应用奠定基础2。此外,借助Visual C+语言这种典型的面向对象编程环境,可以充足挖掘硬件的潜能,得到性能优良的程序代码。1.2 国内外发展现状图形与图像解决是计算机最早应用的领域之一,从简朴的图形显示到复杂的图像分析、模式辨认,使得图形与图像解决技术不断走向成熟,也涌现出了大量的软件。例如,ACDSee、PhotoShop、Core
14、lDraw等,这些软件提供了一般显示、特殊显示、特技解决等大量复杂的功能。图形解决技术得益于图形学的发展,而从目的上可以将图像解决技术分为两类,分别是图像辨认技术和图像解决技术。针对图像解决技术,可以是旋转、亮度、对比度、饱和度、RGB调节、调节图像尺寸等属性方面的解决技术和添加文字、图像增强、弱化、水印、特效、镂空等解决方法。甚至为了达成更精微的解决效果,这些软件还使用了图层。随着网络和多媒体技术的发展和应用,体现在应用软件中的是一些更具有“现代感”的应用,例如,支持各种常用图形、RAW原始图片、Flash动画的快速浏览、编辑、保存、导入、导出,甚至还可以提供一些趣味涂鸦、字符素描之类的应用
15、,以体现人的个性3。事实上,应用软件中经常需要采用其中的某些技术来解决相关的问题。例如,一个支持简朴形状辅助设计的软件并不需要支持特效方面的方法。在软件设计的支撑环境和技术上,C+是一个很好的选择,这重要是考虑到如下因素,重要涉及代码效率高,解决底层问题能力强,支持面向对象的程序设计方法。运用C+技术可以实现对程序代码和数据的良好封装,使之可以具有良好的重用性。1.3 研究方法与手段1.3.1 运营环境运营环境重要介绍了硬件环境和软件环境。(1) 硬件环境 解决器:Inter Pentium 166 MX 或更高 内存:32MB或更高 硬盘空间:1GB或更高 显卡:SVGA显示适配器(2) 软
16、件环境操作系统:Window 98/ME/2023/XP1.3.2 开发环境开发环境重要介绍了本系统采用的操作系统、开发语言。(1) 操作系统:Windows XP(2) 开发语言:C+(3) 开发环境:Visual C+ 6.0第2章 图形图像解决系统相关技术综述2.1 图形设计基础2.1.1 Visual C+技术概要面向对象程序设计(Object-Oriented Programming,简称OOP)方法已出现近30年,在20世纪90年代己成为程序设计的主流方向。面向对象程序设计语言是现代程序开发的重要工具。程序包含两类基本的元素,即数据和操作数据的指令集(称为代码)。传统的程序设计语言
17、以设计代码为核心,程序设计事实上就是指定程序指令的先后顺序,数据表达必须适应代码的设计。模块化程序设计方法将完毕某一功能的指令集组成一个相对独立的程序模块(即函数或过程),使得程序的结构清楚,便于有效的维护,对程序设计技术有很大的促进。但由于结构化程序设计方法并不能保证各程序模块之间真正的互相独立,程序设计者在设计一个模块时很难完全排除其他模块的影响。随着程序规模的增大,各模块之间的互相影响导致一些难于测试,难以定位发现的错误,增长了程序开发和维护的困难。面向对象程序设计方法重要以数据为中心,代码是围绕着需要解决的数据而设计的4。2.1.2 图形设备接口GDI图形设备接口(GDI)是一个抽象的
18、接口。通过该接口可以实现对图形的颜色、线条的粗细等属性的控制。程序可以通过调用这些GDI函数和硬件打交道的,从而实现了设备无关性5。2.1.3 设备环境DC设备环境DC(Device Context又称设备上下文,也称设备描述表)是一个关于如何绘制图形的方法的集合,它可以绘制各种图形,拟定在应用窗口中绘制图形的方式,即拟定绘图模式和映射模式。在绘图之前,必须获取绘图窗口区域的一个设备环境DC。接着进行GDI函数的调用,执行适合于设备环境DC的命令。获取DC时,Windows初始化了一套完整的属性和对象集合,可以使用它们渲染显示。为了创建自己应用程序的特定显示,可以更改这些属性和对象。Windo
19、ws的设备环境是GDI的关键元素,它代表了不同的物理设备5。分为4种类型,涉及显示器型,打印机型,内存型和信息型。每种类型的设备环境都有各自的特定用途,详见表2-1。表2-1 设备环境的类型和用途设 备 环 境用 途显示器型打印机型内存型信息型支持视频显示器上的绘图操作支持打印机和绘图仪上的绘图操作支持位图上的绘图操作支持设备数据的访问2.1.4 CDC类的派生类的功能及其之间的区别CDC各派生类各有特点,并可以完毕不同的功能,表2-2介绍了各派生类的重要功能。表2-2 CDC类的派生类简介派生类名称说 明CClientDC这是一个设备描述表,提供对窗口客户区域的图形访问。在窗口中画图时可使用
20、此类DC,但对WM_PAINT Windows消息除外。CMetaFileDC这个设备描述表代表Windows元文献,它包含一系列命令已重新产生图像。想要创建独立于设备的文献时可使用此类DC,用户可以回放这种文献来创建图像。续表2-2派生类名称说 明CPaintDC这是创建WM_PAINT Windows消息的设备描述表。应用程序可以使用此DC更新Windows显示,通常在MFC应用程序的OnPaint()函数中使用。CWindowDC可以提供在整个窗口(涉及客户区和非客户区)中画图的设备描述表。(1) CWindowDC类与CPaintDC和CClientDC类的区别CWindowDC类与C
21、PanitDC类和CClientDC的区别的一个方面是:用CPaintDC类CClientDC类的对象绘制图形时,绘制区只能是客户区,而不能在非客户区,而CWindowDC可以在非客户区进行图形绘制。CWindowDC一般在框架窗口类中(CMainFrame)引用,在视图窗口中引用CWindowDC类时,由于视图类只能管理客户区,所以并不能在非客户区进行绘制。他们之间区别的另一个方面是:在CWindowDC绘图类下,坐标系是建立在整个屏幕上的,在像素坐标方式下,坐标原点在屏幕的左上角,而在CPaintDC和CClientDC绘图类下,坐标系是建立在客户区上的,在像素坐标方式下,坐标原点在客户区
22、的左上角6。(2) CPainDC类与CClientDC类的区别CPaintDC类与CClientDC类都是在窗口的客户区内绘制图形,但两者在绘制机制上有着本质的区别。CPaintDC类应用在OnPaint函数中,以响应Windows的WM_PAINT消息,而CClientDC应用在非响应消息WM_PAINT的情况下。CPaintDC类响应WM_PANINT消息,自动完毕绘制,这对维护图形的完整性有着重要的作用。2.1.5 与绘图相关的GDI对象类本节重要介绍与绘制各种图形元素相关的GDI对象类。所谓基本绘图对象类重要涉及CBitmap类、CBrush类、CFont类、CPen类、CRgn类。
23、它们都是CGdiObject类的派生类6。简要介绍如下。(1) CBitmap位图是一种位矩阵,每一个显示像素都相应于其中的一个或多个位。运用位图来表达图像,创建画刷。(2) CBrush画刷定义了一种位图形式的像素,运用它可对区域内部填充颜色。(3) CFont字体是一种具有某种风格和尺寸的所有字符的完整集合。 (4) CPen画笔是一种用来画线及绘制有形边框的工具,可以指定它的颜色及厚度,并且可以指定它画实线、点线或虚线。(5) CRgn区域是由多边形、椭圆或两者组合形成的一种范围,可以运用它来进行填充、裁剪。(6) CPalette调色板是一种颜色映射接口,允许应用程序在不干扰其他应用程
24、序的前提下,充足运用输出设备的颜色描绘能力。2.1.6 坐标变换和映射模式在本节讨论两种坐标系逻辑坐标系和设备坐标系及其互相之间的转换。坐标映射方式是指两种坐标系在互相转换时,逻辑单位和设备单位之间存在的某种比例关系。(1) 逻辑坐标和设备坐标的转换设备坐标是针对屏幕或其他显示设备而言的。其原点在屏幕的左上角。X轴正方向为向右,Y轴的正方向为向下。原点位于窗口的左上角点处。单位为像素。逻辑坐标则是在内存中虚拟的一个坐标系。其原点在屏幕的左上角。X轴的正方向为向右,Y轴的正方向为向上。其单位随着映射模式的不同而改变。(2) 窗口和视口窗口是虚拟存在的一个屏幕,在屏幕上看到的图形是视口。Windo
25、ws在绘制图形时,并不是把图形直接绘制到屏幕上,而是绘制到特定的映射模式下的逻辑坐标系虚拟的窗口中,然后将这个图形映射到一个视图中,即视口中。而当前的设备(如屏幕,打印机)显示出来的就是该视图的一部分7。(3) 设立绘图模式绘图模式指定了画笔颜色和被填充物体内部颜色是如何与显示平面的颜色相混合的。绘图模式是描述两个变量的所有也许的布尔组合,指采用什么方式进行绘制工作,而采用的方式重要体现在像素颜色的设定。2.2 图像设计基础2.2.1 数字图像的基本概念人眼看到的任何自然界的图像都是连续的模拟图像,其形状和形态表现由图像各位置的颜色所决定。色度学理论认为,任何颜色都可由红(Red)、绿(Gre
26、en)、蓝(Blue)3种基本颜色按不同的比例混合得到。红、绿、蓝被称为三原色,简称RGB三原色。因此,自然界的图像可用基于位置坐标的三维函数来表达,即 f(x,y,z)=(fred(x,y,z),fgreen(x,y,z),fblue(x,y,z) (2-1)其中f表达空间坐标为(x,y,z)位置点的颜色,fred、fgreen、fblue分别表达该位置点的红、绿、蓝3种原色的颜色分量值。它们都是空间的连续函数,即连续空间的每点都由一个精确的值与之相相应。为了研究的方便,重要考虑平面图像。平面上每一点仅涉及两个坐标值。因此,平面图像函数是连续的二维的数,即 f(x,y)=(fred(x,y)
27、,fgreen(x,y),fblue(x,y) (2-2)图像可以分为黑白图像和彩色图像。所谓黑白图像,就是图像中每一点都不是彩色的,即每点的红、绿、蓝颜色分量值都相等,即 fred=fgreen=fblue (2-3)对于黑白图像,其f(x,y)表达(x,y)位置处的灰度值。由于计算机仅能解决离散的数据,所以如要用计算机来解决图像,连续的图像函数必须转化为离散的数据集,这一过程叫做图像采集7。图像采集由图像采集系统完毕,如图2-1所示。图像采集系统涉及3个基本单元,即成像系统、采样系统和量化器。成像系统f(x,y)g(x,y)量化器gs(x,y)ga(x,y)景物图像采样图像数字图像采样系统
28、图2-1 图像采集系统2.2.2 调色板现实世界的颜色种类是无限的,但计算机显示系统所能表现的颜色数量是有限的。因此,为了使计算机能最佳地重现实际图景,就必须采用一定的技术来管理和取舍颜色。按表现能力的不同,现代计算机的显示系统可以分为以下3种。(1) VGA:能用640480的分辨率同时显示16种颜色。(2) SuperVGA:能用640480的分辨率同时显示256种颜色(3) 真彩色:能同时显示16777216种颜色。所谓真彩色(True Color),是指显示出来的图像的颜色与真实世界中的颜色非常自然逼真、人眼难以区分它们的差别。通常使用RGB表达法来表现真彩色图像,即用3字节(24位)
29、来表达个真彩色像素的颜色值,红、绿、蓝三原色的浓度分别用一字节(8位)来表达。Windows采用该方法来表现颜色,其SDK提供一个名为RGB的宏来将不同的R、G、B颜色值转化为24位的颜色值,其原型如下所示。 COLORREF RGB(BYTE bRed, BYTE bGReen, BYTE bBlue) (2-7)COLORREF是表达颜色值的数据类型,是一个32位的无符号长整数;bRed、bGreen和bBlue分别表达红、绿、蓝三原色的浓度,它们的类型是BYTE,长度是8位。其十六进制数据表达形式如下所示。0x00bbggrr(2-8)字节rr、gg、bb比分别表达红、绿、蓝三原色的浓度
30、,最高位字节为0,用于保存与将来的系统兼容8。2.2.3 调色板的概念在真彩色系统中,每一个像素的值都用24位来表达。像素值与真彩色颜色值可以一一相应,所以像素值就是所表现的颜色位。但对于仅能同时显示16色或256色的系统,每一个像素仅能分别采用4位或8位来表达,像素值与真彩色颜色值不能一一相应,用像素值代表颜色值的方法将不能得到最佳的效果,而必须采用调色板技术。所谓调色板就是在16色或256色显示系统中,由图像中出现最频繁的16种或256种颜色所组成的颜色表。对这些颜色按4位或8位,即0至15或255进行编号,每一编号代表其中的一种颜色。这种颜色编号叫做颜色的索引号,4位或8位的索引号与24
31、位的颜色值的相应表叫做颜色查找表。使用调色板的图像叫做调色板图像。它们的像素值并不是颜色值,而是颜色在调色板查找表中的索引号9。为了保证Windows的基本显示界面的一致性,Windows保存了一个有20种颜色的内部系统调色板,用来绘制窗口的图标、边界和按钮等通用界面。该调色板在所有的显示设立中都保持不变。在16色的显示系统中,系统调色板通过16种颜色的抖动来产生其余4种颜色。在256色的显示系统中,Windows也保持该20种颜色的顺序,其余的236种颜色由当前的调色板分派10。第3章 图形图像解决系统的总体设计3.1 需求分析市场上的图像解决软件大都功能强大,需要好一阵子适应,普通的用户主
32、线用不到那么多的功能。所以,可以开发一种简朴小巧,可进行基本图像解决,图形绘制的软件非常必要。运用一个设计良好的简朴的小图形图像解决程序可以用于教学演示的目的,展示基本的图形图像解决技术和面向对象技术在这一领域的应用效果。通过对独立功能的封装,可认为此后需要的图形图像的应用奠定基础。此外,借助Visual C+语言这种典型的面向对象编程环境,可以充足挖掘硬件的潜能,得到性能优良的程序代码。3.2 图形图像解决系统目的设计系统的设计目的是采用面向对象的程序设计技术实现一个图形绘制和图像解决的应用软件,满足普通用户对于图形图像应用程序的简朴需求。重要工作分为三类,涉及基本图形绘制与编辑、图像格式辨
33、认与转换、简朴的图像解决。3.3 图形图像解决系统功能描述系统的重要功能涉及绘制各种简朴图形、改变所绘图形的颜色、线条类型、打开和存储各种常见的图像文献、对图像进行简朴的解决。(1) 图元绘制 直线图元,或者称为线段图元,允许用户使用鼠标选择直线顶点绘制。 圆图元,允许用户运用圆心和半径来进行绘制。 矩形图元。 圆角矩形图元。(2) 改变绘制条件在绘制图元时要可以改变绘制条件,重要涉及如下内容。 改变线条颜色,使用户可以绘制出不同颜色的图元。 改变线条类型,使用户可以绘制出不同线型的图元。 改变填充方式,使用户可以选择不同的填充方式。(3) 图元修改涉及如下操作。 删除图元。 平移图元。 镜像
34、图元。 旋转图元。(4) 图元属性修改 改变被选图元颜色。图像部分图形图像系统图形部分图3-1 图形图像解决系统功能描述图图元绘制设立属性图元修改修改属性图形部分图3-2 图形图像解决系统功能描述图图形部分图像部分格式转换图像变换图像解决镜像旋转平滑锐化图3-3 图形图像解决系统功能描述图图像部分 改变被选图元线型。 改变被选图元线宽。(5) 图像格式解决可以打开、存储、关闭几种常见图像文献,隐含了格式的转换。(6) 图像变换涉及旋转、镜像。(7) 图像解决涉及图像平滑、锐化。根据功能模块分析,完整的系统功能描述参见图3-1。3.4 界面设计3.4.1 主界面设计图形图像系统启动界面,如图3-
35、4所示。图3-4 图形图像系统启动界面考虑到图像解决的方便,决定采用多文档(MDl)界面。基本的绘图工具都在两个工具栏中体现出来,这是为了方便用户绘图的需要,属性单独使用一个对话框使设立图元的属性更加方便,并且使界面看起来更加的美观。图形图像系统界面如图3-5所示。图3-5 图形图像系统界面3.4.2菜单设计主菜单如图3-6所示,涉及文献、编辑、查看、窗口、图像变换、图像解决、帮助菜单项。图3-6 图形图像系统菜单图像变换菜单涉及图像的旋转和镜像,图像解决菜单涉及平滑和锐化。图3-7 图像变换和图像解决菜单3.4.3 工具栏设计工具栏方便绘图,所以本系统把常用的绘图操作命令都用工具栏来实现,如
36、图3-8、图3-9是本应用程序的工具栏。主工具栏中涉及打开、新建、保存、回退,设定画布大小等命令。图3-8 主工具栏绘图工具栏中涉及绘制直线,矩形,圆角矩形,圆,椭圆等图形。图3-9 绘图工具栏3.4.4 属性框设计属性框可以设立绘图图形的属性,涉及线型,线宽,颜色的属性属性框的界面如下图如3-10所示。图3-10 属性框界面第4章 图形图像解决系统图像部分设计4.1 与设备无关位图(DIB)Windows3.1以上版本提供了对设备无关位图DIB的支持。DIB位图可以在不同的机器或系统中显示位图所固有的图像。与DDB相比而言,DIB是一种外部的位图格式,经常存储为以.BMP为后缀的位图文献(有
37、时也以DIB为后缀)。DIB位图还支持图像数据的压缩11。4.1.1 DIB位图的结构DIB位图文献的结构如图4-1所示,涉及位图文献头结构BITMAPEHEADER、位图信息头结构BITMAPINFOHEADER、位图颜色表RGBQUAD和位图像素数据4部分。位图文献头结构BITMAPEHEADER位图信息头结构BITMAPINFOHEADER位图颜色表RGBQUAD位图像素数据图4-1 DIB位图的结构上面结构中各数据域的意义如表4-2所示。表4-1 Windows位图结构数据域的含义结 构数 据 域含 义BITMAPFILEHEADERbfType字节“BM”bfSize文献总字节数bf
38、Reserved10 续表4-1结 构数 据 域含 义bfResrved20bfOffBits位图数据距文献头的偏移量BITMAPINFOHEADERbiSize本结构大小的字节数biWidth位图的宽度,单位为像素点biHeight位图的高度,单位为像素点biPlanes1bitBitCount像素的位数(1,4,8,24)biCompression压缩方式(0表达不压缩)biSizeImage位图数据的字节数biXpelsPerMeter水平分辨(像素点每米)biYpelsPerMeter垂直分辨(像素点每米)biClrUsed图像中使用的颜色数biClrImportant图像中重要的颜色
39、数RGBQUADrgbBlue蓝色的比例rgbGreen绿色的比例rgbRed红色的比例rgbReserved0DIB位图像素的位数可为1、4、8和24,其图像的颜色数分别为2、16、256和真彩色其中前3种具有相应的颜色表,而24位位图的颜色表为空,其像素值就是颜色值12。4.1.2 定义DIB解决函数集定义的DIB解决函数如表4-2所示。表4-2 DIB解决函数集函数类型函 数 名功 能初始化函数CreateDIB创建一个空的DIBCreateDefaultDIB用当前的系统调色板创建一个空的DIBDestroryDIB释放DIB内存块LoadDIB从DIB文献中装载DIB数据SaveDI
40、B读DIB存到文献中ReadDIBFile读DIB存到内存中属性函数BytesPerLine获取DIB每行所占的字节数DIBlockSize获取DIB数据块的大小DIBHeight获取DIB高度DIBWidth获取DIB宽度DIBNumColors获取DIB的颜色数DIBBitCout获取DIB的图像颜色位数FindDIB Bits获取DIB数据块的地址(指针)PletteSize获取DIB的调色板中的颜色表项数显示函数PaintBitmap显示DDBPaintDIB显示DIB续表4-2函数类型函 数 名功 能PaintDIB显示DIB操作函数DIBToDIBSetion将DIB数据块转换为D
41、IBSECTION DIBSectionToDIB将DIBSECTION转换为DIB数据块ConvertDIBFormat修改的格式BitmapToDIB将DDB转换为DIB ChangeBitmapFormat修改DDB的格式DIBToBitmap将DDB转换为DIB ChangeDIBFormat基于当前的系统调色板修改DIB调色板函数CreateDIBPalette创建DIB调色板DisplayPalette显示调色板CopyPalette拷贝调色板GetSystemPalette获取当前的系统调色板PalEntriesOnDevice获取设备的调色板表项数CreateIdentifyP
42、alette创建等同调色板MapDIBColorsToPalette按指定的调色板映射DIB的颜色捕获函数CopyScreenToBitmap将屏幕显示转换为一个DDBCopyWindowToBitmap将指定窗口的显示转换为一个DDBCopyClientRectToBitmap将指定窗口用户区的指定区域显示转换为一个DDBCopyScreenToDIB将屏幕显示转换为一个DIBCopyWindowToDIB将指定窗口的显示转换为一个DIB4.1.3 CDib类的设计目的实现图像解决的基础是设计一个解释位图的DIB类(名CDib),基本功能如下所述。(1) 多种形式的构造函数,涉及创建空DIB
43、、从DDB创建、从DIB句柄创建、从DIB数据块指针创建及从屏幕或窗口显示创建等;(2) 支持拷贝构造函数和赋值运算;(3) DIB文献的读、写操作;(4) 从资源中装载DIB位图;(5) DIB的显示;(6) 提供DIB的空间颜色和格式特性等信息;(7) DDB与DIB的互相转换;(8) DIB格式转换;(9) DIB调色板操作;(10) 能获取DIB位图数据的句柄;(11) 能生成DIB数据的拷贝。4.2 图像变换4.2.1 图像变换的理论基础图像变换重要是指几何变换或空间变换,是一种建立一幅图像与其变形后的图像中所有各点之间映射关系的函数,可表达为:x,y=X(u,v),Y(u,v)(4
44、-1)或u,v=U(x,y),V(x,y)(4-2)其中,u,v表达输出图像中像素的坐标,x,y表达输入图像中像素的坐标。X、Y、U、V惟一拟定空间变换的映射函数,即它们唯一地定义了输入图像和输出图像中所有点之间的几何相应关系。X、Y将输入映射到输出,称为向前映射(Forward mapping);U、V将输出图像映射到输入,称为逆向映射(Inverse mapping)。4.2.2 旋转在实际的应用中,最常用的是直角旋转,涉及对位图(逆时针)旋转90、180和270。其中最基本的是旋转90的操作,旋转180和270的操作可借助旋转90的操作来实现。将位图旋转90的实现环节如下所述。(1) 创建一个新DIB,其颜色信息与源位图相同,注意新位图的宽、高分别为源位图的高和宽。(2) 根据位图的存储位大小,分别对1位、4位、8位和24位的位图进行旋转,即对DIB的每一像素进行旋转变换。图4-3为图像通过旋转90度之后的效果。图4-2 原 图图4-3 旋转90度之后的图像4.2.3 镜像镜像变换有两种基本形式,即水平镜像和垂直镜像。前者是将图像所有像素的排列左右反转,后者是将图像所有像素的排列上下反转。图4-4 原 图图4-5 水平镜像之后的图像4.3 图像解决的基本方法基本的图像解决方法可分为点解决和区域解决两类。点解决相对较简朴,只能改变图像的灰度分布,但