更新时间:2015-12-03 21:22:49浏览次数:1+次
通常,如果在路径中添加如矩形,圆形之类的几何图形,对这种路径的填充就是使用指定的色彩在封闭区域之内进行填充操作。但是,如果在路径中添加的图形没有封闭,此时对于路径的填充将会有什么效果?代码实现咯:
新建单文档的GDI+工程,加入必要的GDI+的程序,在菜单中添加菜单项“路径填充”,并在其子菜单项下添加一个新的子菜单项“图形路径”,建立消息响应:
void CPathFillpathView::OnPathfillpath()
{
// TODO: 在此添加命令处理程序代码
Graphics graphics(this->m_hWnd);
this->RedrawWindow();
GraphicsPath path1;
GraphicsPath path;
Pen pen(Color(128, 0, 0, 255), 5);
SolidBrush brush(Color(255, 255, 0, 0));
/////添加三条直线:开放的图形
path1.AddLine(10, 10, 10, 50);
path1.AddLine(10, 50, 50, 50);
path1.AddLine(50, 50, 50, 10);
path1.StartFigure();
/////添加一个闭合的图形
RectF rect(110, 10, 40, 40);
path1.AddRectangle(rect);
/////绘制,填充路径
graphics.DrawPath(&pen, &path1);
graphics.FillPath(&brush, &path1);
/////添加开放的弧线
path.AddArc(0, 0, 150, 120, 30, 120);
/////添加封闭的椭圆
path.AddEllipse(50, 50, 50, 100);
/////使用默认的填充方式填充路径
graphics.FillPath(&brush, &path);
graphics.DrawPath(&pen, &path);
}
代码实现图:
代码中构造了两个路径,在第一个路径,添加了两个大小一样的矩形,不过的第一个矩形,只有三条边,是开放。另一个路径同时包含椭圆和弧线的图形,对这两个路径的填充效果如上所示。
从上面效果图中,对开放图形的填充并未出现异常,填充的区域与对应的封闭图形一致。实际上,对开放区域进行填充,是没有任何意义,就好比把水灌进一个没有底的瓶子。DrawPath函数在填充路径时,首先判断这个路径是不是封闭的,如果没有封闭,DrawPath函数会对该路径进行封闭:在起点与终点之间加上直线以封闭区域,在性质上等同于CloseFigure函数操作。
解释一下AddEllipse 函数:
public:
void AddEllipse (
int x,
int y,
int width,
int height
)
参数public:
void AddArc (
int x,
int y,
int width,
int height,
float startAngle,
float sweepAngle
)
参数
相关资讯