最近在使用GDI+绘图,想要绘制一个圆角矩形,于是在网上搜索,发现如下方法:
于是自己扫视一眼,只看到"先画四个园弧,再调用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();
浮躁不是病,得治,太长不看,我居然看完了,微博式阅读一点点侵蚀着我。应该细心读书啊