阅读の反思のGraphicsPath.AddArc

    最近在使用GDI+绘图,想要绘制一个圆角矩形,于是在网上搜索,发现如下方法:

阅读の反思のGraphicsPath.AddArc_第1张图片

于是自己扫视一眼,只看到"先画四个园弧,再调用CloseFigure"

 

由于没仔细看注意,结果自己理解错了AddArc的四个参数,Arc是椭圆的圆弧,我一开始认为前两个参数是椭圆的坐标,接下来的是椭圆的长轴和半轴,两个角度是指起始点和末尾点和X轴所成的角度,于是我写下了如下错误代码,导致绘制出来的图形怪怪的

 

int x = rect.left- rect.left;

    int y = rect.top- rect.left;

    int width = rect.right - rect.left-radius*2;

    int height = rect.bottom - rect.top-radius*2;

    

    path.Reset();

    path.StartFigure();

    path.AddArc(x, y,radius, radius, 180, 90);

    path.AddArc(x+width,y,radius, radius,90,0);

    path.AddArc(x+width,y+height,radius, radius,0,270);    

    path.AddArc(x,y+height,radius,radius,270,180);

    path.CloseFigure();

 

 

于是我去查阅了MSDN文档,我再次犯下了阅读浮躁的毛病,这次我知道了前四个参数是指定顶椭圆的包围矩形,而没去看后面两个参数的说明

于是变更了代码,后面的两个参数没变,改变了前四个参数

 

int x = rect.left;

    int y = rect.top;

    int width = rect.right - rect.left;

    int height = rect.bottom - rect.top;

    

    path.Reset();

    path.StartFigure();

    path.AddArc(x, y,radius*2, radius*2, 180, 90);

    path.AddArc(x+width-radius*2,y,radius*2, radius*2,90,0);

    path.AddArc(x+width-radius*2,y+height-radius*2,radius*2, radius*2,0,270);    

    path.AddArc(x,y+height-radius*2,radius*2,radius*2,270,180);

    path.CloseFigure();

 

 

于是几番折腾,都没想到自己要去细读下MSDN文档,后面实在是木有办法,认真把文档读了下来,结果发现第一个角度指的是于起始点和X轴所成的角度(顺时针),第二个是旋转多少度

 

WTF,不得不反思自身阅读的浮躁,英语能力拙计。

 

最后附上正确代码

 

int x = rect.left;

    int y = rect.top;

    int width = rect.right - rect.left;

    int height = rect.bottom - rect.top;

    

    path.Reset();

    path.StartFigure();

    path.AddArc(x, y,radius*2, radius*2, 180, 90);

    path.AddArc(x+width-radius*2,y,radius*2, radius*2,270,90);

    path.AddArc(x+width-radius*2,y+height-radius*2,radius*2, radius*2,0,90);    

    path.AddArc(x,y+height-radius*2,radius*2,radius*2,90,90);

    path.CloseFigure();

 

浮躁不是病,得治,太长不看,我居然看完了,微博式阅读一点点侵蚀着我。应该细心读书啊

你可能感兴趣的:(graphics)