按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
能力,大大减轻了 CPU 的负担,提高了显示质量和显示速度。
当前流行的操作系统绘图功能主要基于光栅图形学。包括基本图形(直线、圆弧、椭圆
弧)的扫描转换、多边形的扫描转换、区域填充、裁剪、反走样、投影、消隐等。
直线是操作系统频繁绘制的基本图形元素 。在不同分辨率的显示器上,为了保证绘制出
的直线有良好的视觉效果,需要确定最佳逼近于该直线的一组像素,最常用的方法包括数值
微分法(DDA),中点画线法和 Bresenham 算法。下面简单介绍数值微分法。
(x ; yP ) (x ; yP ) y kx b = +
已 知 过 端 点 , 的 直 线 段 L : , 直 线 斜 率 为
0 0 0 1 1 1
k (y y )/(x x ) = ,在 x 方向从 x 开始,向 x 步进,步长取 1 个像素,计算相应的 y
1 0 1 0 0 1
y kx b = + ( ; x round( ))x
坐标 。取像素点( 作为当前点的坐标。其他方法读者如果有兴趣可
以参阅相关书籍。图形变换是计算机图形学中的重要内容。通过各种变换,比如旋转、镜像、
…………………………………………………………Page 172……………………………………………………………
第 7 章 图形图像
平移、缩放等,可以由一个简单的图形生成复杂的图形。
7。2 屏幕绘图的主要函数
在 Visual C++环境下,可以绘制点,线,矩形,多边形,椭圆,位图以及文本等,具体
调用格式如下。
1.CDC::SetPixel
用来设定指定点的颜色,返回指定点的颜色值。它有两种调用形式,函数原型如下:
COLORREF SetPixel( int x ; int y ; COLORREF crColor );
COLORREF SetPixel( POINT point ; COLORREF crColor );
o x 指定点的 x 坐标。
o y 指定点的 y 坐标。
o crColor 将要绘制颜色。
o point 指定点的坐标
2 .CDC::MoveTo
用来移动当前点到指定点,返回当前点的坐标。它有两种调用形式,函数原型如下:
CPoint MoveTo( int x; int y );
CPoint MoveTo( POINT point );
参数
o x 新位置的 x 坐标。
o y 新位置的 y 坐标。
o point 新位置的坐标
3 .CDC::LineTo
用来绘制一条从当前点到指定点的直线,返回是否绘制成功的标志。它有两种调用形式,
函数原型如下:
CPoint LineTo( int x ; int y );
CPoint LineTo( POINT point );
参数
o x 指定点的 x 坐标。
o y 指定点的 y 坐标。
o point 指定点的坐标
4 .CDC::Rectangle
用来绘制一个矩形,返回是否绘制成功的标志。它有两种调用形式,函数原型如下:
BOOL Rectangle( int x1; int y1 ; int x2; int y2 );
BOOL Rectangle( LPCRECT lpRect );
·163 ·
…………………………………………………………Page 173……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
参数
o x 1 矩形的左上角 x 坐标。
o y 1 矩形的左上角 y 坐标。
o x2 矩形的右下角 x 坐标。
o y 2 矩形的右下角 y 坐标。
o lpRect 矩形对象的指针
5 .CDC::PolyLine
根据一组多边形顶点绘制多边形,返回是否绘制成功的标志。函数原型如下:
BOOL Polyline( LPPOINT lpPoints; int nCount );
参数
o lpPoints 多边形顶点的点结构数组指针。
o nCount 数组中点的个数
6 .CDC::PolyBezier
用来绘制一条 Bezier 曲线,返回是否绘制成功的标志。函数原型如下:
BOOL PolyBezier ( LPPOINT lpPoints; int nCount );
参数
o lpPoints 包含控制点的点结构数组指针。
o nCount 数组中点的个数
7 .CDC::Ellipse
用来绘制椭圆,返回是否绘制成功的标志。它有两种调用形式,函数原型如下:
BOOL Ellipse( int x1; int y1 ; int x2 ; int y2 );
BOOL Ellipse( LPCRECT lpRect );
参数
o x1 椭圆包围矩形的左上角 x 坐标。
o y1 椭圆包围矩形的左上角 y 坐标。
o x2 椭圆包围矩形的右下角 x 坐标。
o y2 椭圆包围矩形的右下角 y 坐标。
o lpRect 椭圆包围矩形的指针
8.CDC::BitBlt
用于从源设备复制一幅 BMP 图像到目标设备,返回是否绘制成功的标志。函数原型如
下:
BOOL BitBlt( int x ; int y ; int nWidth; int nHeight; CDC* pSrcDC ; int xSrc ; int ySrc ; DWORD dwRop );
参数
o x 目标矩形区域的左上角x 坐标。
·164 ·
…………………………………………………………Page 174……………………………………………………………
第 7 章 图形图像
o y 目标矩形区域的左上角y 坐标。
o nWidth 目标矩形区域和源图像的宽度。
o nHeight 目标矩形区域和源图像的高度。
o pSrcDC 源设备上下的指针。
o xSrc 源矩形区域的左上角 x 坐标。
o ySrc 源矩形区域的左上角 y 坐标。
o dwRop 光栅操作的类型,包括如下类型:
BLACKNESS 将输出变为黑色。
DSTINVERT 将目标图像反色。
MERGECOPY 将模式和源图像做与运算。
MERGEPAINT 将源图像取反后与目标图像做或运算。
NOTSRCCOPY 复制取反后的源图像到目标图像。
NOTSRCERASE 将目标图像与源图像做或运算后取反。
PATCOPY 复制模式到目标图像。
PATINVERT 将目标图像与模式做异或运算。
PATPAINT 将源图像取反后与模式做或运算,将这个运算的结果与目标
图像做或运算。
SRCAND 将目标图像与源图像做与运算。
SRCCOPY 复制源图像到目标图像。
SRCERASE 将目标图像取反后与源图像做与运算。
SRCINVERT 将目标图像与源图像做异或运算。
SRCPAINT 将目标图像与源图像做或运算。
WHITENESS 将输出变为白色
9 .CDC::TextOut
用来绘制输出文本,返回是否绘制成功的标志。它有两种调用形式,函数原型如下:
virtual BOOL TextOut( int x ; int y ; LPCTSTR lpszString; int nCount );
BOOL TextOut( int x ; int y ; const CString& str );
o 参数
o x 文本起始点的 x 坐标。
o y 文本起始点的 y 坐标。
o lpszString 将要绘制的文本。
o nCount 字符串中的字节数。
o str 包含将要绘制的文本的 CString 对象
7。3 图形设备接口(GDI )
图形设备接口 GDI (Graphics Device Interface )提供了在 Windows 下绘图的基本功能。
·165 ·
…………………………………………………………Page 175……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
7。3。1 设备环境类(CDC )
CDC 直接继承自 CObject 类,类的继承顺序如图 7…1 所示。
图 7…1 CDC 类的基类继承图
CDC 类是设备上下文对象的基类,它提供了处理显示器、打印机等设备的成员函数,利
用 CDC 对象可以访问整个显示设备(如显示器)和非显示设备(如打印机 )。
通过 CDC 类的成员函数可以进行所有的绘图操作,包括绘图工具和 GDI 对象的选择、
颜色和调色板的处理、获得和设置绘图工具的属性、图形的绘制等。另外它可以绘制文本、
处理字体,使用打印机和显示源文件提供的相应的成员函数。
CDC 类包含 m_hDC 和 m_hAttribDC 两个设备上下文句柄,CDC 对象创建时二者指向同
一个设备。m_hDC 用于所有的输出 GDI 调用(如 SetTextColor()函数),m_hAttribDC 用于大
部分的属性 GDI 调用(如 GetTextColor()函数)。应用程序框架可以同时使用两个设备上下文,
并且在物理设备获得属性的同时,将结果输出到一个 CMateFileDC 对象中,打印预览就是以
这种方式实现的。
CDC 类的定义包含在头文件“afxwin。h ”中。
CDC 类封装了几乎所有的 Windows GDI 函数,构造了 CDC 对象后,就可以调用它的成
员函数完成相应的图形操作。同时 MFC 还提供了 CDC 类的派生类 CpaintDC、CclientDC、
CmetaFileDC、CwindowDC,用于完成特定操作。
通常使用 CDC 类的方法是传递一个 CDC 的指针 pDC 到 OnDraw 函数,在 OnDraw 函数
中调用它的成员函数完成绘图操作。
使用完毕后应该及时删除构造的 CDC 对象。Window