第8章 图形设备接口

合集下载

(设备管理)L图形设备接口

(设备管理)L图形设备接口

Lesson 07-08 图形设备接口Windows系统具有丰富的图形界面。

Windows系统提供许多函数来实现绘图的要求。

而图形设备接口(Graphics Device Interface,简写为GDI)就可看作是这些函数的集合。

GDI表示的是一个抽象的接口。

通过该接口可以实现对图形的颜色、线条的粗细等属性的控制(甚至包括输出文字在内)。

应用程序可以通过调用这些GDI函数和硬件打交道,而不必知道到底是哪个厂家生产的硬件,从而实现了设备无关性。

Windows系统本身也使用GDI来绘制用户界面的各个部分。

一、设备环境1.设备环境Windows默认使用客户区坐标系,其原点在窗口客户区的左上角,X轴的正方向指向右边,Y轴的正方向指向下边。

当应用程序并没有设置颜色、字体等时,系统使用默认的设置。

这些默认的设置保存在设备环境中。

如果没有设备环境,则每输出一个字符串(调用一次TextOut函数),就需要把字体和颜色也作为参数传递给TextOut函数,而且这样的参数有很多。

为了避免这样的麻烦,Windows就把这些可能会重复的参数放在了设备环境中,这样每次只需要多传入一个设备环境的指针就可以了,大大减少了重复工作。

设备环境(Device Context,缩写为DC,有时译为设备上下文,也称设备描述表)是一种包含各种绘图属性(如字体、颜色等等)和方法(即各种绘图函数)的数据结构(或者集合)。

它不仅可以绘制各种图形,而且还可以确定在应用窗口中绘制图形的方式,即确定绘图混和模式和映射模式。

用户在绘图之前,必须获取绘图窗口区域的一个设备环境DC,才能进行GDI函数的调用,执行适合于设备环境DC的命令(就像OnDraw函数中的pDC指针)。

DC中除了提供绘图的函数(如:TextOut)以外,还会提供给用户改变绘图属性的函数,如颜色。

Windows的设备环境是GDI的关键元素,它代表了不同的物理设备。

分为4种类型:显示型、打印机型、内存型和信息型。

图形设备接口及绘图

图形设备接口及绘图

设备驱动层负责与具体的图形设 备进行交互,将GDI核心层发送的 图形指令转换为设备可以理解的 指令,并控制设备进行渲染。
GDI的结构主要包括三个层次:应 用程序接口层、GD负责将应用程序的图形 操作转换为相应的图形指令,并 管理图形设备的资源,如内存、 颜色表等。
技术创新方向预测
跨平台兼容性增强
随着不同操作系统和设备的普及,图形设备接口将更加注重跨平 台兼容性,实现无缝的跨平台用户体验。
实时渲染技术优化
借助更强大的计算能力和先进的算法,图形设备接口将进一步提高 实时渲染的质量和效率。
AI驱动的智能图形处理
结合人工智能技术,图形设备接口将实现更智能的图形处理,包括 自动优化、智能缩放、场景识别等功能。
图形设备接口及绘图
目录
• 图形设备接口概述 • 图形设备接口原理及结构 • 绘图基本操作与功能 • 高级绘图技巧与方法 • 图形设备接口在应用领域中的实践 • 图形设备接口未来发展趋势与挑战
01 图形设备接口概述
定义与功能
定义
图形设备接口(Graphics Device Interface,GDI)是一种应用程序编 程接口(API),用于在计算机图形环 境中表示图形和文字。
标准
为了规范GDI的开发和使用,国际标准化组织(ISO) 和国际电工委员会(IEC)等制定了一系列相关标准, 如OpenGL、DirectX等。这些标准为不同平台和设 备上的GDI实现提供了统一的接口和规范,促进了 GDI的互操作性和可移植性。
02 图形设备接口原理及结构
工作原理简介
图形设备接口(GDI)是计算机图形学中的一个重要概念, 它提供了一种与图形硬件设备进行交互的抽象层。
图像处理
反走样技术

图形设备接口

图形设备接口

图形设备接口图形设备接口(GDI)提供了一系列的函数和相关的结构,应用程序可以使用它们在显示器、打印机或其他设备上生成图形化的输出结果。

使用GDI函数可以绘制直线、曲线、闭合图形、路径、文本以及位图图像。

所绘制的图形的颜色和风格依赖于所创建的绘图对象,即画笔、笔刷和字体。

你可以使用画笔来绘制直线和曲线,使用笔刷来填充闭合图形的内部,使用字体来书写文本。

应用程序通过创建设备环境(DC),可以直接向指定的设备进行输出。

设备环境是一个GDI管理的结构。

其中包含一些有关设备的信息,比如它的操作方式及当前的选择。

应用程序可使用设备环境函数来创建DC。

GDI将返回一个设备环境句柄,在随后的调用中,该句柄用于表示该设备。

例如,应用程序可以使用该句柄来获取有关该设备性能的一些信息,诸如它的类型(显示器、打印机或其他设备),它的显示界面的尺寸和分辨率等。

应用程序可以直接向一个物理设备进行输出,比如显示器或打印机;也可以向一个“逻辑”设备进行输出,比如内存设备或元文件。

逻辑设备向应用程序所提供的保存输出结果的格式,可以很容易地将其发送到物理设备上。

一旦应用程序将输出结果记录到了一个元文件中,那么该元文件就可以被使用任意多次,并且该输出结果可以被发送到任意多个物理设备上。

应用程序可以使用属性函数来设置设备的操作方式和当前的选择。

操作方式包括文本和背景颜色,混色方式(也称为二元光栅操作,用于确定画笔或笔刷的颜色与绘图区域现有的颜色如何进行混色),映射方式(用于指定GDI如何将应用程序所用的坐标映射到设备坐标系统上)。

当前的选择是指绘图时使用哪个绘图对象。

图形设备接口函数包括以下几类:位图函数(Bltmap)位图是一个图形对象,可将图像作为文件进行创建、处理(比例缩放、滚动、旋转和绘制)和存储。

位图函数提供了一系列处理位图的方法。

笔刷函数(Brush)笔刷是一种绘图工具,Win32应用程序可使用它绘制多边形、椭圆形和路径的内部。

图形设备接口

图形设备接口

图形设备接口学前提示Windows中负责图形输出的是图形设备接口 GDI(Graphic Device Interface)。

GDI通过将应用程序与不同的输出设备特性相隔离,使Windows应用程序能够无须修改即可在Windows支持的任何图形输出设备上运行,即具有设备无关性。

本章主要介绍图形设备接口的知识——设备描述表,坐标系统,映射模式,绘图函数和绘图工具知识要点设备上下文坐标的映射绘制基本图形创建画笔设备上下文类为了支持GDI绘图,MFC提供了两种重要的类设备上下文类,包括 CDC及其派生类,用于设置绘图属性和绘制图形绘图对象类,封装了各种GDI绘图对象,包括画笔,画刷,字体,位图,调色板和区域等设备上下文类包括CDC类和它的派生类CClientDC,CPaintDC,CWindowDC ,CMetaFileDC。

7.2 坐标的映射坐标的映射方式简单地讲就是坐标的安排方式,系统默认的映射模式为 MM_TEXT , 即 X 坐标向右增加,Y 坐标向下增加,(0,0)在屏幕左上方,DC 中的每一点就是屏幕上的一个象素,如图 7.3所示。

如语句 pDC->Rectangle(CRect(0,0,300,300))表示将绘制出一个矩形,这个矩形的左上角落在屏幕的左上方,长和宽均为 300 个象素 屏幕坐标 X 坐标向右增加7.2.1 设置映射模式用户可以通过int CDC::SetMapMode( int nMapMode) 指定映射模式,映射模式从 X轴和Y轴的比例是否可变来说,可分为固定映射模式和可变比例映射模式两类(1)固定比例映射模式,其具体值如表 7.2 所示表 7.2 固定比例映射模式上述几种映射默认的原点在屏幕左上方,(2)可变比例映射模式7.3 绘制基本图形CDC类在它的成员函数中封装了全部Windows 图形 API ,这些成员函数包括—画点的函数,画线的函数,画形状的函数,填充和翻转形状的函数,滚动屏幕的函数,绘制文本的函数,绘制位图和图表的函数7.3.1 画点画点即在指定的坐标处按给定的颜色画出像素点,点的绘制不过是改变单个像素点的颜色。

visualc面向对象编程教程_08图形设备接口.pptx

visualc面向对象编程教程_08图形设备接口.pptx
• CWindowDC类代表了整个程序窗口设备环境,可 以在整个窗口区域绘图。
8.1.3 GDI坐标系和映射模式
• Windows坐标系分为逻辑坐标系和设备坐标系两 种,GDI支持这两种坐标系。一般而言,GDI的文 本和图形输出函数使用逻辑坐标,而在客户区移 动或按下鼠标的鼠标位置是采用设备坐标。
• 形象地说,一个设备环境提供了一张画布和一些 绘画的工具,我们可以使用不同颜色的工具在上 面绘制点、线、圆和文本。
• 设备环境中的“设备”是指任何类型的显示器或 打印机等输出设备,绘图时用户不用关心所使用 设备的编程原理和方法。所有的绘制操作必须通 过设备环境进行间接的处理,Windows自动将设 备环境所描述的结构映射到相应的物理设备上。
前面几章已经涉及到有关图形处理的内容, 只是使用了Windows系统默认的图形设备接口和 设备环境,绘制的图形没有颜色、线型和字体的 变化。
本章主要学习内容: • 图形处理的基本原理:
– 图形设备接口 – 设备环境 – GDI坐标系 – 映射模式
• 使用画笔和画刷绘制图形 • .2 设备环境
• 为了实现设备无关性,应用程序的输出不直接面 向显示器等物理设备,而是面向一个称之为设备 环境DC(Device Context)的虚拟逻辑设备。
• 设备环境也称设备描述表或设备上下文,它是由 Windows管理的一个数据结构,它保存了绘图操 作中一些共同需要设置的信息,如当前的画笔、 画刷、字体和位图等图形对象及其属性,以及颜 色和背景等影响图形输出的绘图模式。
8.1 图形设备接口
• Windows提供了一个称为图形设备接口GDI (Graphics Device Interface)的抽象接口。GDI 作为Windows的重要组成部分,它负责管理用户 绘图操作时功能的转换。用户通过调用GDI函数 与设备打交道,GDI通过不同设备提供的驱动程 序将绘图语句转换为对应的绘图指令,避免了直 接对硬件进行操作,从而实现所谓的设备无关性。

图形设备接口培训课件

图形设备接口培训课件

图形设备接口培训课件概述本课程旨在介绍图形设备接口(Graphics Device Interface,GDI)的基本概念、功能和使用方法。

GDI是一种用于在Microsoft Windows操作系统中绘制图形和文字的API。

通过学习本课程,您将了解GDI的基本原理、常用功能以及如何使用GDI在Windows应用程序中创建绘图和文字。

目录•GDI简介•GDI对象•绘制图形–直线和曲线–矩形和圆角矩形–椭圆和圆–多边形•绘制文字•图像操作•设备上下文•GDI+和Direct2DGDI简介GDI是Windows操作系统中的图形设备接口,它提供了一系列的函数和数据结构,用于在屏幕上绘制图像和文字。

GDI使用设备上下文(Device Context)来管理图形输出的相关信息,包括画笔、画刷、字体等。

在使用GDI之前,需要先创建一个设备上下文,并将其与屏幕或打印机连接起来。

GDI对象在GDI中,图形元素和属性都被封装为对象。

常用的GDI对象包括画笔、画刷、字体和位图等。

这些对象可以通过GDI的函数进行创建、设置属性和使用,也可以通过GDI的函数进行销毁。

绘制图形GDI提供了多种绘制图形的函数,可以绘制直线、曲线、矩形、椭圆、圆和多边形等图形。

绘制图形的过程通常包括选择绘图对象、设置绘制属性和调用相应的绘制函数。

直线和曲线GDI提供了MoveToEx和LineTo函数用于绘制直线。

MoveToEx函数用于设置直线的起始点,LineTo函数用于设置直线的终点并绘制直线。

GDI还提供了绘制曲线的函数,如Polyline、PolyBezier和PolyBezierTo等。

这些函数可以根据给定的点坐标绘制连接它们的曲线。

矩形和圆角矩形GDI提供了Rectangle函数用于绘制矩形。

这个函数接受矩形的左上角和右下角坐标作为参数,并在指定的区域内绘制一个矩形。

RoundRect函数可以绘制带有圆角的矩形。

这个函数除了接受矩形的左上角和右下角坐标外,还接受一个椭圆的宽度和高度作为参数,用于指定圆角的大小。

图形设备接口及绘图

图形设备接口及绘图


绘图函数:Ellipse()…

文本输出:TextOut()SetTextColor()…

数据成员m_hdc:设备描述表句柄。
PPT文档演模板
图形设备接口及绘图
➢CPaintDC:
✓ construction CWnd::BeginPaint ✓ destruction CWnd::EndPaint
);
PPT文档演模板
图形设备接口及绘图
坐标系的转换
1. DPToLP() 2. LPToDP() 3. ClientToScreen() 4. ScreenToClient()
PPT文档演模板
图形设备接口及绘图
3.8 使用CDC类绘制图形
• 绘制点和线
–COLORREF SetPixel( POINT point, COLORREF crColor );
PPT文档演模板
hNewPen=(HPEN)SelectObject(hdc,hOldPen);
DeleteObject(hNewPen);
EndPaint(hWnd, &ps);
break;
图形设备接口及绘图
使用CGDIObject类
• 数据成员m_hObject • Attach函数 Detach函数 • 派生类: CPen、CBrush、CFont、
–CPoint MoveTo( POINT point ); –BOOL LineTo( POINT point );
PPT文档演模板
–BOOL Arc( LPCRECT lpRect, POINT ptStart, POINT ptEnd );
–BOOL AngleArc( int x, int y, int

图形设备接口概述

图形设备接口概述

图形设备接口概述图形设备接口是计算机硬件设备与图形输出设备之间的连接和通信接口。

图形设备接口的主要作用是将计算机中的图形数据转换成适合输出设备的信号,并将其发送到输出设备上以显示图形图像或执行相关的图形操作。

图形设备接口通常包括以下几个方面的内容:1. 图形处理器:图形设备接口通常会包含一个图形处理器,用于处理计算机中的图形数据。

这些处理器通常会包含专门的图形处理芯片,用于加速图形数据的处理和输出。

2. 显示接口:图形设备接口还会包含一种用于电子设备之间传输图形数据的接口,在电脑显示器和计算机之间传输图形数据,一般有HDMI,VGA,DVI等接口形成一个显示功能。

3. 驱动程序:图形设备接口中还包含了一些用于驱动图形设备的软件程序,在计算机中运行。

这些驱动程序通常由设备制造商提供,用于确保图形设备能够正确地与计算机通信和协作。

4. 输出设备控制:图形设备接口还包含了一些控制输出设备的信号发送、操作和控制。

这些控制信号用于调整显示器的亮度、对比度、色彩等参数。

总之,图形设备接口是计算机硬件设备与图形输出设备之间进行通信的桥梁,它是保证计算机能够正确地输出图形图像的关键接口之一。

图形设备接口在计算机系统中起着至关重要的作用,它不仅仅是连接计算机和输出设备的通信桥梁,同时也能影响到系统的性能、图形处理能力和显示效果。

以下是一些进一步讨论的方向以及图形设备接口的相关内容:1. 图形设备接口的发展历史:历史上,图形设备接口的发展经历了多个阶段。

从最初的模拟VGA接口到后来的数字HDMI和DisplayPort接口,每一代接口的推出都代表着图形设备技术的飞速进步。

这种发展历程可以让我们更好地了解图形设备接口的发展趋势和未来发展方向。

2. 图形设备接口的标准化:随着图形设备的日益普及,图形设备接口的标准化变得尤为重要。

目前,HDMI、DisplayPort、DVI等标准接口已经成为了市场主流,他们相互之间有着一些差异和优势。

计算机图形接口

计算机图形接口

© 2004 Dept. of Computer Science and Engineer
2020/1/5
8 / 34
主要内容:
计算机图形接口(CGI) 计算机图形元文件(CGM) 图形核心系统(GKS) 程序员层次交互式图形系统(PHIGS) 基本图形转换规范(IGES) 产品模型数据转换标准(STEP) 窗口系统
- 光栅功能集:提供产生、检索、修改和显示象素数据功能;
光栅控制:
- 可显示位图:
- 不可显示位图:
全深度位图:与显示器上每个象素用多少位来表示相匹配;
映象位图:位图的每个象素只有一位;
光栅操作:象素阵列数据的检索和显示,各种位图运算、位图区 域的移动、联合、复制等操作;
光栅属性:设置源与目的位图之间进行象素操作的绘图方式和填 充位图区域的功能;
- 二十年来:出现GKS,GKS-3D,PHIGS,CGM,CGI,IGES,STEP...
概念(两个层面):
- 图形系统及相关应用系统中各界面间进行数据传送和通信的接口标准-》 数据及文件格式标准;
- 供图形应用程序调用的子程序功能及其格式标准-》子程序界面标准。
© 2004 Dept. of Computer Science and Engineer
GKS,GKS-3D,PHIGS,GL CGI
设备驱 动程序
设备
键盘 鼠标
屏幕
磁盘
图形系统中各界面的标准
© 2004 Dept. of Computer Science and Engineer
2020/1/5
3 / 34
主要内容:
计算机图形接口(CGI) 计算机图形元文件(CGM) 图形核心系统(GKS) 程序员层次交互式图形系统(PHIGS) 基本图形转换规范(IGES) 产品模型数据转换标准(STEP) 窗口系统

图形设备接口与绘图

图形设备接口与绘图
2020/7/13
2020/7/13
8.2.5 CFont
8.2.5 CFont
例:
2020/7/13
8.2.5 CFont
例:
2020/7/13
for(int i=5;i<10;i++) {
CFont font; font.CreateFont(-i*5,
0, 100, 0, 400, FALSE, FALSE, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, "Arial"); CFont *oldFont=pDC->SelectObject(&font); pDC->TextOut(30,50*i-200,"使用CreatFont()创建字体"); pDC->SelectObject(oldFont); }
• 如果绘图工作不是由WM_PAINT消息驱动 的则调用GetDC()函数获取设备环境.

2020/7/13
8.2.2 GDI
• CPen • CBrush • CFont
对 • CRgn 象 • CPalette 的 • CBitmap 分 类
2020/7/13
8.2.3 CPen
2020/7/13
修改这些属性。
• 应用程序对图形的操作均参照设备描述表中 的属性执行。
• 可以将设备描述表看成图形的“输出模板” 。依靠这块模板,当程序员调用GDI函数输出 图形或文字时,不必关心诸如背景颜色、字 体等问题。
2020/7/13
MFC

第8章:利用CDC实现绘图程序

第8章:利用CDC实现绘图程序
CWindowDC允许在显示器的任意位置绘图,坐标原点在整 个窗口的左上角。由于使用CWindowDC可以在整个窗口类绘图, 这给了程序员很大的自由度,但使用不当会带来麻烦。在使用 CWindowDC进行绘图时,一般要调用GetWindowRect函数来获取 整个应用程序窗口区域的大小。
CWindowDC对象的窗口句柄保存在成员变量m_hWnd,为构造 CWindowDC,需将CWnd作为参数传递给构造函数。
Visual C++
2.应用程序架构包含的主要类 该程序主要包含的类有CAboutDlg关于对话框类、 CMainFrame主框架类、CSingleDrawDoc文 档类、CSingleDrawView视图类。
有关绘制功能的实现,一般是在视图类中完成, 因此,这一章的实例都是对视图类 CSingleDrawView的操作。
✓ CPaintDC对象在构造时调用CWnd::BeginPaint函数,并返回 DC用于绘图,在析构时自动调用CWnd::EndPaint函数释放DC。 CPaintDC仅在WM_PAINT消息需要响应时才起作用,通常是 在应用程序的OnPaint响应函数中使用。
8.1.4 续1
Visual C++
在由AppWizard创建的MFC应用程序中,视图类的OnDraw 成员函数是一个处理图形的关键虚函数,它带有一个指向设备环 境对象的指针pDC,MFC的绘图成大多都是通过pDC这个指针来
加以访问的。
下面为CDC类的函数的分类
分类 位图函数 剪裁函数 坐标函数 设备描述表函数
Visual C++
用途 操作位图和像素的函数 定义和操作剪裁设备边界的函数 在物理设备和逻辑设备之间转换的函数 获取有关DC及其属性信息的函数

GDI

GDI
设备描述表句柄一旦获得,那么系统将使用默认的属性值填充设备描述表结构。
如果有必要,我们可以使用一些GDI函数获取和改变设备描述表中的属性值。
感谢观看
GDI+在区域(regions)方面对GDI进行了改进,在GDI中,Regions存储在设备坐标中,对Regions唯一可进 行图形变换的操作就是对区域进行平移。而GDI+用世界坐标存储区域(Regions),允许对区域进行任何图形变换 (譬如如图所示的缩放),图形变换以变换矩阵存储,下面例子是一个区域变换前后的例子(缩放、旋转、平移)
在Windows操作系统下,绝大多数具备图形界面的应用程序都离不开GDI,我们利用GDI所提供的众多函数就 可以方便的在屏幕、打印机及其它输出设备上输出图形,文本等操作。GDI的出现使程序员无需要关心硬件设备 及设备驱动,就可以将应用程序的输出转化为硬件设备上的输出,实现了程序开发者与硬件设备的隔离,大大方 便了开发工作。
你可能会注意到上面显示的图形,红色未平移区域与变换后区域有一部分交叉区域,这一部分形成的梦幻效 果就是由GDI+支持的Alpha Blending(混合)实现的,利用alpha融合,你可以指定填充颜色的透明度,透明颜 色与背景色相互融合,填充色越透明,背景色显示越清晰,四个椭圆被填充了同样的颜色,但由于拥有不同的透 明度而呈现不同的显示效果。
GDI+提供了矩阵对象,一个非常强大的工具,使得编写图形的旋转、平移、缩放代码变得非常容易。一个矩 阵对象总是和一个图形变换对相起来,比方说,路径对象(PATH)有一个Transform方法,它的一个参数能够接 受矩阵对象的,每次路径绘制时,它能够根据变换矩阵绘制。下面的图形是一个图形变换前后的例子,变换按照 先缩放后旋转完成。

补充(5)图形设备接口(GDI)

补充(5)图形设备接口(GDI)
GDI是以文件的形式存储在系统中,系统需要输出图形时把它载入内 存,如果转换成硬件命令时遇到非GDI命令,系统还可能载入硬件驱 动程序,驱动程序辅助GDI把图形命令转换成硬件命令。
例如,我们可以在不改变程序的前提下,让能在Epson点式打印机上 工作的程序也能在激光打印机上工作。它把windows系统中的图形输 出转换成硬件命令然后发送给硬件设备。
2021/4/6
7
VC坐标系解析——逻辑坐标
逻辑坐标除MM_TEXT模式外均指物理尺寸,如mm,inch等。 Windowsd GDI函数用逻辑坐标系。 逻辑坐标的坐标X,Y正方向随着映射模式的不同而不同。 当程序员在调用一个画线的GDI函数LineTo,画出25.4mm(1英寸)
长的线时,他并不需要考虑输出的是何种设备。若设备是VGA显示器, Windows自动将其转化为96个像素点;若设备是一个300dpi的激光打 印机,Windows自动将其转化为300个像素点。
2021/4/6
4
二、设备环境
CDC类是GDI封装在MFC中的最大的一个类,它表示总的DC,是所 有DC类的基类。CDC类定义环境对象,并提供在显示器、打印机或 窗口客户区上绘制图形的方法,它封装了使用设备环境的GDI函数。
CDC类对象包括两个设备环境,它们是CDC类的数据成员m_hDC和 m_hAttribDC,它们允许一个CDC对象同时指向两个不同的设备。多 数CDC GDI都调用m_hDC成员,以建立输出到DC,多数CDC GDI从 指向成员DC的CDC对象调用请求信息。CDC类的成员函数有近200个, 根据功能可分为位图函数、剪裁函数、绘图属性函数、初始化函数 和字体函数等。
及菜单栏和滚动条等。
2021/4/6
6

08 图形设备接口-画笔与画刷

08 图形设备接口-画笔与画刷

2. 画笔的使用方法
(1) 创建画笔; (2) 使用新的画笔,保存原来的画笔以便恢复; CPen *pOldPen; pOldPen=pDC->selectObject(&penRed); (3) 使用新画笔作图; (4) 恢复原来的画笔 pDC->selectObject(pOldPen); 保存并恢复原来画笔的原因是每个图形设备接口对象要占用一 个HDC句柄,而可用的句柄数量有限,如果用完后未及时释放, 积累下去将导致严重的运行错误。
马川 VC程序设计课件
创建CBrush对象的四个构造函数为:
(1) CBrush(); // 使用前必须初始化画刷 (2) CBrush (COLORREF cfColor); // 构造带有指定颜色的纯色画刷 例如: CBrush Brush((RGB(255,0,0)); // 创建红色画刷 (3) CBrush(int nIndex, COLORREF cfColor); // 构造带有指定阴影风格和颜色的填充画刷 nIndex指定的阴影风格,如表6.4所示。 (4) CBrush(CBitmap*pBitmap); // 构造使用位图图案的画刷 CBitmap 对象最大可使用 8×8像素,若位图过大,则只有左 上角的部分可以用作画刷图案。
马川 VC程序设计课件
颜色和颜色对话框
MFC的CColorDialog类为应用程序提供了颜色选 择通用对话框,构造函数如下: CColorDialog(COLORREF clrInit=0,DWORD dwFlags=0,CWnd * pParentWnd=NULL); 其中,clrInit指定选择的默认颜色值,默认为 RGB(0,0,0)黑色。pParentWnd指定对话框的父窗口 指针。dwFlags指定对话框外观和功能。 当对话框单击OK退出时,可调用下列成员函数获得相 应的颜色。 COLORREF GetColor() const; void SetCurrentColor(COLORREF clr); static COLORREF * GetSavedCustomColors() 马川 VC程序设计课件

浅谈Lesson 07-08图形设备接口(doc 16页)

浅谈Lesson 07-08图形设备接口(doc 16页)

CWin dowD C 可以提供在整个窗口(包括客户区和非客户区)中画图的设备环境CPain tDC 这是创建响应WM_PAINT消息的设备环境,应用程序可以使用此类更新Windows显示,通常在MFC应用程序的OnPaint()函数中使用CMeta FileD C 这个设备环境代表Windows元文件,包含一系列命令以重新产生图像。

要创建独立于设备的文件时可使用这种DC,用户可以回放这种文件来创建图像①CWindowDC类与CPaintDC和CClientDC类的区别■绘图区域不同:CWindowDC类与CPaintDC和CClientDC类的区别的一个方面就是绘图区域不同。

用CPaintDC类和CClientDC 类的对象绘制图形时,绘制区只能是客户区,而不能在非客户区,而CWindowDC可以在非客户区进行图形绘制。

■绘图坐标系不同:在CWindowDC绘图类下,坐标系是建立在整个屏幕上的,在像素坐标方式下,坐标原点在屏幕的左上角,而在CPaintDC和CClientDC绘图类下,坐标系是建立在客户区上的,在像素坐标方式下,坐标原点在客户区的左上角。

②CPaintDC类与CClientDC类的区别■绘图机制不同:CPaintDC类与CClientDC类都是在窗口的客户区内绘制图形,但两者在绘制机制上有着本质的区别。

CPaintDC类应用在OnPaint函数中,以响应Windows的WM_PAINT消息,而CClientDC应用在非响应WM_PAINT消息的情况下。

CPaintDC类响应WM_PAINT消息,自动完成绘制,这对维护图形的完整性有着重要的作用。

例如在一个窗口中,已经绘制了n条直线,这个窗口的完整性可能会被破坏(如被对话框覆盖),当破坏完整性的程序结束时,即覆盖取消,这个窗口就会接收到一个WM_PAINT消息,得到此消息后,激活消息处理函数(如OnPaint)进行窗口绘制。

CPaintDC类对象就担负着此时的绘制工作。

最新2019-第8章图形用户接口——MiniGUI-PPT课件

最新2019-第8章图形用户接口——MiniGUI-PPT课件

在S3C2410上运行简单的绘图程序
2
8.1.1 MiniGUI的功能特色
功能特性
第八章 图形用户接口—MiniGUI
MiniGUI是一种在嵌入式系统中提供图形及图形用户界 面支持的中间件技术,是面向嵌入式系统的轻量级图形用户 界面支持系统,国内著名的自由软件项目之一。
完备的多窗口机制和消息传递机制。 常用的控件类,包括静态文本框、按钮、单行和多行编辑框 、列表框、组合框、进度条、属性页、工具栏、拖动条、树型 控件、月历控件等。 支持对话框和消息框以及其它GUI元素,包括菜单、加速键 、插入符、定时器等。 通过两种不同的内部软件结构支持低端显示设备(比如单色 LCD)和高端显示设备(比如彩色显示器)。前者小巧灵活, 而后者在前者的基础上提供了更加强大的图形功能。 支持Windows的资源文件,如位图、图标、光标等。 支持各种流行的图像文件,包括 JPEG、GIF、PNG、TGA 、BMP等等。 支持多字符集和多字体。 针对嵌入式系统,支持一般性的I/O操作和文件操作等。
QVFB
QVFB是Qt(Qt是Linux 窗口管理器KDE使用的底层函数库) 提供的一个虚拟的FrameBuffer工具。在X Window环境下, 进行基于QVFB之上的MiniGUI模拟开发、调试是常用的开发 调试手段。
FrameBuffer 对于大部分兼容VESA标准显卡的PC机,使用 RedHat内核中包含的VESA FrameBuffer驱动程序 设备驱动
就可以运行MINIGUI了。如果自己编译内核,则需要 选中FrameBuffer的支持。
6
8.2.2 安装资源文件
第八章 图形用户接口—MiniGUI
在Linux环境下,把该文件复制到/opt/emulation目录下 (emulation目录为创建的目录)。执行ቤተ መጻሕፍቲ ባይዱ下解压缩命令:

图形设备接口

图形设备接口

3.5字体 CFont类的常用成员函数
函数
含义
CreateFont
用指定的特征初始化一个CFont对象
CreateFontIndirect CreatePointFont FromHandle GetLogFont operator HFONT
用LOGFONT结构中给定的特征初始 化一个CFont对象
BYTE cStrikeOut, // 非0则加删除线
BYTE nCharSet, // 此字体的字符集
BYTE nOutPrecision,// 输出精度
BYTE nClipPrecision,// 裁剪精度
BYTE nQuality,
// 输出质量
BYTE nPitchAndFamily, // 调距和字体族
BOOL BitBlt( HDC hDestDC, int xDest, int yDest, int nDestWidth, int nDestHeight, int xSrc, int ySrc, DWORD dwROP
= SRCCOPY );
BOOL StretchBlt( HDC hDestDC, int xDest, int yDest, int nDestWidth, int nDestHeight, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwROP = SRCCOPY
35cfont函数createfont用指定的特征初始化一个cfont对象createfontindirect用logfont结构中给定的特征初始化一个cfont对象createpointfont用指定的高和打印字体初始化一个cfont对象fromhandle当给定一个windowhfont句柄时返回一个指向cfont对象指针getlogfont用与cfont对象关联的逻辑字体有关信息填充logfontoperatorhfont返回与cfont对象关联的windowgdi字体句柄34boolcreatefontintnheightintnwidthintnescapementintnorientationintnweightbytebitalicbytebunderlinebytecstrikeoutbytencharsetbytenoutprecision输出精度bytenclipprecision裁剪精度bytenqualitybytenpitchandfamilylpctstrlpszfacenamecfontpoldfontfont
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

void CMyDrawView::OnLButtonDown( UINT nFlags, CPoint point) { // TODO: Add your message handler code here . . . CClientDC dc(this); OnPrepareDC(&dc); dc.DPtoLP(&point); // 调整设备环境的属性 // 将设备坐标转换为逻辑坐标

8.1.1 概述

图形设备接口GDI管理Windows应用程序图形的 绘制,在应用程序中,通过调用GDI函数绘制不 同尺寸、颜色、风格的几何图形、文本和位图。 这些图形处理函数组成了图形设备接口GDI。 GDI是形成Windows核心的三种动态链接库之一, MFC将GDI函数封装在一个名为CDC的设备环境 类中,因此我们可以通过调用CDC类的成员函数 来完成绘图操作。 所谓设备无关性,是指操作系统屏蔽了硬件设备 的差异,使用户编程时一般无需考虑设备的类型, 如不同种类的显示器或打印机。
客户区坐标系以窗口客户区左上角为原点,主要
用于客户区的绘图输出和窗口消息的处理。鼠标 消息的坐标参数使用客户区坐标,CDC类绘图成 员函数使用与客户区坐标对应的逻辑坐标。
坐标之间的相互转换

编程时,有时需要根据当前的具体情况进行三 种设备坐标之间或与逻辑坐标的相互转换。 MFC提供了两个函数CWnd::ScreenToClient()和 CWnd::ClientToScreen()用于屏幕坐标与客户区 坐标的相互转换。 MFC提供了两个函数CDC::DPtoLP()和CDC:: LPtoDP()用于设备坐标与逻辑坐标之间的相互 转换。
获取设备环境DC的方法: 在程序中不能直接存取DC数据结构,只能通过系 统提供的一系列函数或使用设备环境的句柄HDC 来间接地获取或设置设备环境结构中的各项属性, 如显示器高度和宽度、支持的颜色数及分辨率等。

如果采用SDK方法编程,获取DC的方法有两种: 在WM_PAINT消息处理函数中通过调用API函数 BeginPaint()获取设备环境,在消息处理函数返回 前调用API函数EndPaint()释放设备环境。在其他函 数中通过调用API函数GetDC()获取设备环境,调 用API函数ReleaseDC()释放设备环境。
本章主要学习内容:

图形处理的基本原理:
– 图形设备接口
– 设备环境 – GDI坐标系 – 映射模式

使用画笔和画刷绘制图形


文本与字体
位图、图标和光标
8.1 图形设备接口

Windows 提 供 了 一 个 称 为 图 形 设 备 接 口 GDI (Graphics Device Interface)的抽象接口。GDI作 为Windows的重要组成部分,它负责管理用户绘 图操作时功能的转换。用户通过调用GDI函数与 设备打交道,GDI通过不同设备提供的驱动程序 将绘图语句转换为对应的绘图指令,避免了直接 对硬件进行操作,从而实现所谓的设备无关性。 编程时采用MFC方法绘制图形也很方便,MFC对 GDI函数和绘图对象进行了封装。


Windows绘图过程和设备无关性的实现:
GDI处于设备驱动程序的上一层,当程序调用绘图函数时, GDI将绘图命令传送给当前设备的驱动程序,以调用驱动程序 提供的接口函数。驱动程序的接口函数将Windows绘图命令转 化为设备能够执行的输出命令,实现图形的绘制。不同设备 具有不同的驱动程序,设备驱动程序是设备相关的。
版权所有 复制必究
Windows是一个图形操作系统,其所有的图 形可视效果都是通过绘制操作而完成的。图形显 示的实质就是利用Windows提供的图形设备接口 将图形绘制在显示器上。大多数应用程序都需要 在客户区绘制一些图形,如绘制文本、几何图形、 位图和光标等。
前面几章已经涉及到有关图形处理的内容, 只是使用了Windows系统默认的图形设备接口和 设备环境,绘制的图形没有颜色、线型和字体的 变化。

如果采用MFC方法编程,MFC提供了不同类型的 DC类,每一个类都封装了DC句柄,并且它们的构 造函数自动调用获取DC的API函数,析构函数自动 调用释放DC的API函数。因此,在程序中通过声明 一个MFC设备环境类的对象就自动获取了一个DC, 而当该对象被销毁时就自动释放了获取的 DC。 MFC AppWizard应用程序向导创建的OnDraw()函数 自动支持所获取的DC。 MFC 的 DC 类 包 括 CDC、CPaintDC、CClientDC、 CWindowDC 和 CMetaFileDC 等 , 其 中 CDC 类 是 MFC设备环境类的基类,其它的MFC设备环境类 都是CDC的派生类。
SetCapture(); // 捕捉鼠标 ::SetCursor(m_hCross); // 设置十字光标
m_ptOrigin=point;
m_bDragging=TRUE; // 设置拖拽标记 // CScrollView::OnLButtonDown(nFlags, point);
}
void CMyDrawView::OnMouseMove(UINT nFlags, CPoint point) { if(m_bDragging) { CMyDrawDoc *pDoc=GetDocument(); ASSERT_VALID(pDoc); CClientDC dc(this); OnPrepareDC(&dc); dc.DPtoLP(&point); pDoc->AddLine(m_ptOrigin, point); dc.MoveTo(m_ptOrigin); dc.LineTo(point); m_ptOrigin=point; } // CScrollView::OnMouseMove(nFlags, point); }
8.1.2 设备环境
为了实现设备无关性,应用程序的输出不直接面
向显示器等物理设备,而是面向一个称之为设备 环境DC(Device Context)的虚拟逻辑设备。
设备环境也称设备描述表或设备上下文,它是由
Windows管理的一个数据结构,它保存了绘图操 作中一些共同需要设置的信息,如当前的画笔、 画刷、字体和位图等图形对象及其属性,以及颜 色和背景等影响图形输出的绘图模式。
从根本上来说,设备环境DC是一个Windows数据
结构,该结构存储着程序向设备输出时所需要的 信息,应用程序利用它定义图形对象及其属性, 并实现应用程序、设备驱动程序和输出设备之间 绘图命令的转换。
在Windows中不使用DC无法进行输出,在使用任
何GDI绘图函数之前,必须建立一个设备环境。
Windows映射模式
映射模式
MM_TEXT MM_LOMETRIC
逻辑单位
一个像素 0.1毫米
坐标系设定
X轴正方向朝右,Y轴正方向朝下 X轴正方向朝右,Y轴正方向朝上
MM_HIMETRIC
MM_LOENGLISH MM_HIENGLISH MM_TWIPS MM_ISOTROPIC
MM_ANISOTROPIC
形象地说,一个设备环境提供了一张画布和一些
绘画的工具,我们可以使用不同颜色的工具在上 面绘制点、线、圆和文本。
设备环境中的“设备”是指任何类型的显示器或
打印机等输出设备,绘图时用户不用关心所使用 设备的编程原理和方法。所有的绘制操作必须通 过设备环境进行间接的处理,Windows自动将设 备环境所描述的结构映射到相应的物理设备上。
设备坐标系是面向物理设备的坐标系,这种坐标
以像素或设备所能表示的最小长度单位为单位,X 轴方向向右,Y轴方向向下。设备坐标系的原点位 置(0, 0)不限定在设备显示区域的左上角。
屏幕坐标系、窗口坐标系和客户区坐标系 设备坐标系分为屏幕坐标系、窗口坐标系和客户 区坐标系三种相互独立的坐标系。
0.01毫米
0.01英寸 0.001英寸
1/1440英寸
X轴正方向朝右,Y轴正方向朝上
X轴正方向朝右,Y轴正方向朝上 X轴正方向朝右,Y轴正方向朝上 X轴正方向朝右,Y轴正方向朝上 X、Y轴可任意调节,X、Y轴比例为1:1 X、Y轴可任意调节,X、Y轴比例任意
系统确定 系统确定
设置原点的坐标: 通过调用函数CDC::SetWindowOrg()设置设备环境 的窗口原点的坐标,调用CDC::SetViewportOrg() 重新设置设备的视口原点的坐标。这里,窗口是 对应于逻辑坐标系(设备环境)由用户设定的一 个区域,而视口是对应于实际输出设备由用户设 定的一个区域。 窗口原点是指逻辑窗口坐标系的原点在视口(设 备)坐标系中的位置,视口原点是指设备实际输 出区域的原点。 除了映射模式,窗口和视口也是决定一个点的逻 辑坐标如何转换为设备坐标的一个因素。一个点 的逻辑坐标按照如下式子转换为设备坐标: 设备(视口)坐标 = 逻辑坐标 – 窗口原点坐标 + 视口原点坐标
例 分别在OnDraw()函数中添加如下代码,设置不 同的窗口原点和视口原点,结果有什么不Байду номын сангаас。
(1) pDC->SetMapMode(MM_TEXT); pDC->Rectangle(CRect(50, 50, 100, 100)); (2) pDC->SetMapMode(MM_TEXT); pDC->SetWindowOrg(50, 50); pDC->Rectangle(CRect(50, 50, 100, 100)); (3) pDC->SetMapMode(MM_TEXT); pDC->SetViewportOrg(50,50); pDC->Rectangle(CRect(50, 50, 100, 100)); (4) pDC->SetMapMode(MM_TEXT); pDC->SetViewportOrg(50,50); pDC->SetWindowOrg(50, 50); pDC->Rectangle(CRect(50, 50, 100, 100));
相关文档
最新文档