您的位置:软件 > 开发者网络 > 微软开发专栏 > Visual Studio.net专栏 > VC.net > 正文
Visual C++.NET GDI+编程基础
[文章信息]
作者:ADDING
时间:2004-02-20
出处:yesky
责任编辑:方舟
[文章导读]
GDI+提供从简单到复杂图形绘制的大量方法,可以通过对路径和区域的操作构造出复杂的图形
advertisement
热点推荐
· 11.10软件精选 FW实用设计
· IE最新安全漏洞补救几大措施
· M牛的网络生活之下载篇
· Norton Ghost 9.0全新体验
· InstallShield简明使用教程之前言
[正文]

上一页  1 2 3 4 5  下一页

  图形几何变换

  图形变换一般是对图形的几何信息经过几何变换后产生新的图形。常见二维图形的变换有平移、比例、对称、旋转、错切等。图形几何变换最有效的手段是采用矩阵变换,GDI+就有这样的矩阵类Matrix,它为我们提供了许多变换的方法,如Invert(转置)、Multiply(矩阵相乘)、Rotate(旋转)等。例如下面的代码就是Matrix::Rotate一个例子,其结果如图7.11所示。

Graphics graphics( pDC->m_hDC );
Pen pen(Color(255, 0, 0, 255));

Matrix matrix;
matrix.Translate(40, 0); // 先平移
matrix.Rotate(30, MatrixOrderAppend); // 后旋转

graphics.SetTransform(&matrix);
graphics.DrawEllipse(&pen, 0, 0, 100, 50);

  需要说明的是,代码中的MatrixOrderAppend用来指明第二个矩阵(若有)的操作次序是后置的,即matrix1 OP matrix2,OP表示某种操作;若为MatrixOrderPrepend 则表示matrix2 OP matrix1。而SetTransform则指定一个矩阵对点坐标进行变换,新的坐标点(x*,y*)结果可用下列公式来表示:

[x* y* 1] = [x y 1] = [m11x+m21y+dx m12x+m22y+dy 1]

式中,dx和dy用来指定x和y方向的平移量,若dx = dy = 0,则:

  (1) 当m21 = m12 = 0,m11 = -1,m22 = 1时,有x*= -x,y*= y,产生与y轴对称的反射图形;

  (2) 当m21 = m12 = 0,m11 = 1,m22 = -1时,有x*= x,y*= -y,产生与x轴对称的反射图形;

  (3) 当m21 = m12 = 0,m11 = m22 = -1时,有x*= -x,y*= -y,产生与原点对称的反射图形;

  (4) 当m21 = m12 = 1,m11 = m22 = 0时,有x*= y,y*= x,产生与直线y = x对称的反射图形;

  (5) 当m21 = m12 = -1,m11 = m22 = 0时,有x*= -y,y*= -x,产生与直线y = -x对称的反射图形;

  (6) 而当m11 = m22 = cosq,m21 = -m12 = sinq 时,则进行旋转变换。

  例如下列代码,其结果如图7.12所示。

Graphics graphics( pDC->m_hDC );
Pen pen(Color::Blue,3);
graphics.DrawLine(&pen, 150,50,200,80);

pen.SetColor(Color::Gray);
Matrix matrix( -1,0,0,1, 150,50); // 使用第一种情况

graphics.SetTransform(&matrix);
graphics.DrawLine(&pen, 0,0,50,30);



  其中,Matrix的构造函数有如下定义:

Matrix( REAL m11, REAL m12, REAL m21, REAL m22, REAL dx, REAL dy);

  需要说明的是,除了使用Matrix进行图形变换外,Graphics本身提供相应的变换方法,如RotateTransform(旋转变换)、ScaleTransform(比例变换)和TranslateTransform(平移变换)等。


上一页  1 2 3 4 5  下一页

·"WAP天极之IT新闻资讯,50万元等你拿"    ·天极WAP之游戏狂图,50万元等你下载


发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容阅读排行榜
  • 用Visual C++.NET进行GDI+编程
  • VC++.NET实现应用程序XP风格
  • 用Visual C++.NET实现XML解析
  • VC++.NET中使用Windows.Forms
  • Visual C++.NET编程讲座之八
  • VIA驱动问题导致DVD刻录失败
  • [配置推荐]学生型闪龙配置
  • 11.10软件精选 FW实用设计
  • 精英主板全面迈进P5时代
  • 详解11月三大硬件杀手游戏及四大凶器
  • 选硬盘 用好希捷互动存储专家
  • NDS十大最受期待游戏
  • 中国星际个人联赛第6轮综述
  • Advertisement