持久的路径对象
在GDI中,路径隶属于一个设备上下文,一旦设备环境指针超过它的生存期,路径也会被删除。利用GDI+,可以创建并维护与Graphics对象分开的GraphicsPath 对象,它不依赖于Graphics对象的生存期。
变形和矩阵对象
GDI+提供了Matrix对象,它是一种可以使变形(旋转、平移、缩放等) 简易灵活的强大工具,Matrix对象需与要被变形的对象联合使用。对于GraphicsPath类,我们可以使用其成员函数Transform接收Matrix参数用于变形。
void CGdiexampleDlg::OnTransformationMatrix() { // TODO: Add your command handler code here CClientDC dc(this); //创建Graphics对象 Graphics graphics(dc); GraphicsPath path; path.AddRectangle(Rect(250, 20, 70, 70)); graphics.DrawPath(&Pen(Color::Black, 1), &path); // 在应用变形矩阵之前绘制矩形 // 路径变形 Matrix matrix1, matrix2;
matrix1.Rotate(45.0f); //旋转顺时针45度 path.Transform(&matrix1); //应用变形 graphics.DrawPath(&Pen(Color::Red, 3), &path);
matrix2.Scale(1.0f, 0.5f); //转化成为平行四边形法则 path.Transform(&matrix2); //应用变形 graphics.DrawPath(&Pen(Color::Blue, 3), &path); } | 图5演示了正方形经过旋转和拉伸之后的效果:黑色的为原始图形,红色的为旋转45度之后的图形,蓝色的为经过拉伸为平行四边形后的图形。
图5 GDI+变形和矩阵对象 | 可伸缩区域
GDI+通过对区域(Region)的支持极大地扩展了GDI。在GDI 中,区域存储在设备坐标中,可应用于区域的唯一变形是平移。但是在GDI +中,区域存储在全局坐标(世界坐标)中,可对区域利用变形矩阵进行变形(旋转、平移、缩放等)。
void CGdiexampleDlg::OnScalableRegion() { // TODO: Add your command handler code here CClientDC dc(this); //创建Graphics对象 Graphics graphics(dc); //创建GraphicsPath GraphicsPath path; path.AddLine(100, 100, 150, 150); path.AddLine(50, 150, 150, 150); path.AddLine(50, 150, 100, 100); //创建Region Region region(&path); //填充区域 graphics.FillRegion(&SolidBrush(Color::Blue), ®ion); //区域变形 Matrix matrix; matrix.Rotate(10.0f); //旋转顺时针20度 matrix.Scale(1.0f, 0.3f); //拉伸 region.Transform(&matrix); //应用变形 //填充变形后的区域 graphics.FillRegion(&SolidBrush(Color::Green), ®ion); } | 上述程序中以蓝色填充一个三角形区域,接着将此区域旋转和拉伸,再次显示,其效果如图6。
图6 GDI+区域变形 |
[上一页] [1] [2] [3] [4] [5] [6] [7] [下一页]
|