将贝塞尔曲线连接到其他绘图
Joining bezier curve to other drawings
我已经实现了一个圆角矩形扩展方法,定义在这里。
public static Graphics DrawRRectangle(this Graphics g, Pen p, int x, int y, int width, int height, int feathering)
{
g.DrawLine(p, x, y + feathering, x, y + height - feathering);
g.DrawBezier(p, new Point(x, y + height - feathering),
new Point(x, y + height - feathering / 2), new Point(x + feathering / 2, y + height),
new Point(x + feathering, y + height));
g.DrawLine(p, x + feathering, y + height , x + width - feathering, y + height);
g.DrawBezier(p, new Point(x + width - feathering, y + height),
new Point(x + width - feathering / 2, y + height), new Point(x + width, y + height - feathering / 2),
new Point(x + width, y + height - feathering));
g.DrawLine(p, x + width, y + height - feathering, x + width, y + feathering);
g.DrawBezier(p, new Point(x + width, y + feathering),
new Point(x + width, y + feathering / 2), new Point(x + width - feathering / 2, y),
new Point(x + width - feathering, y));
g.DrawLine(p, x + width - feathering, y, x + feathering, y);
g.DrawBezier(p, new Point(x + feathering, y),
new Point(x + feathering / 2, y), new Point(x, y + feathering / 2),
new Point(x, y + feathering));
return g;
}
但是当我像这样使用这个方法时
g.DrawRRectangle(p, 100, 100, 1000, 1000, 100);
,
我没有得到我想要的结果,每个角要么未对齐,要么像素不匹配,如下图所示。
任何人可以提供的任何建议都会有所帮助,我不确定这是否是用于生成曲线的方程式的问题,但这是我第一次涉足图形,所以这可能只是我的想法。谢谢。
虽然我无法评论您的实施,但您将 运行 进一步解决此问题。您的实现将呈现出绘制圆角矩形的外观,但是例如将来您想要填充该形状,您将无法完成,因为 GDI/GDI+ 不会将绘制的形状视为一个连续的形状形状。
在这方面你应该使用 GraphicsPath。
请参阅此处以获得 drawing rounded rectangles using a GraphicsPath 的完整解决方案。
我已经实现了一个圆角矩形扩展方法,定义在这里。
public static Graphics DrawRRectangle(this Graphics g, Pen p, int x, int y, int width, int height, int feathering)
{
g.DrawLine(p, x, y + feathering, x, y + height - feathering);
g.DrawBezier(p, new Point(x, y + height - feathering),
new Point(x, y + height - feathering / 2), new Point(x + feathering / 2, y + height),
new Point(x + feathering, y + height));
g.DrawLine(p, x + feathering, y + height , x + width - feathering, y + height);
g.DrawBezier(p, new Point(x + width - feathering, y + height),
new Point(x + width - feathering / 2, y + height), new Point(x + width, y + height - feathering / 2),
new Point(x + width, y + height - feathering));
g.DrawLine(p, x + width, y + height - feathering, x + width, y + feathering);
g.DrawBezier(p, new Point(x + width, y + feathering),
new Point(x + width, y + feathering / 2), new Point(x + width - feathering / 2, y),
new Point(x + width - feathering, y));
g.DrawLine(p, x + width - feathering, y, x + feathering, y);
g.DrawBezier(p, new Point(x + feathering, y),
new Point(x + feathering / 2, y), new Point(x, y + feathering / 2),
new Point(x, y + feathering));
return g;
}
但是当我像这样使用这个方法时
g.DrawRRectangle(p, 100, 100, 1000, 1000, 100);
,
我没有得到我想要的结果,每个角要么未对齐,要么像素不匹配,如下图所示。
任何人可以提供的任何建议都会有所帮助,我不确定这是否是用于生成曲线的方程式的问题,但这是我第一次涉足图形,所以这可能只是我的想法。谢谢。
虽然我无法评论您的实施,但您将 运行 进一步解决此问题。您的实现将呈现出绘制圆角矩形的外观,但是例如将来您想要填充该形状,您将无法完成,因为 GDI/GDI+ 不会将绘制的形状视为一个连续的形状形状。
在这方面你应该使用 GraphicsPath。
请参阅此处以获得 drawing rounded rectangles using a GraphicsPath 的完整解决方案。