将贝塞尔曲线与其他图纸相结合

时间:2017-05-02 10:34:30

标签: c# .net graphics2d system.drawing

我已经实现了一个圆角矩形扩展方法,在这里定义。

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);, 我没有得到我想要的结果,每个角落都不对齐它们的像素不匹配如下图所示。     
    Bottom left corner of rounded rectangle     Top left corner of rounded rectangle     
    Top right corner of rounded rectangle     Bottom right corner of rounded rectangle

任何人都可以提供的任何建议都会有所帮助,我不确定这是否是用于生成曲线的方程式的问题,但这是我第一次涉足图形,所以它可能只是我的想法。感谢。

1 个答案:

答案 0 :(得分:2)

虽然我无法对您的实施做出评论,但您将在此过程中遇到问题。你的实现会给出绘制圆角矩形的外观,但是比如说将来想要填充形状,你不可能因为GDI / GDI +不能将绘制的形状看作单个连续的形状。

在这方面,你应该使用GraphicsPath

请点击此处查看drawing rounded rectangles using a GraphicsPath的完整解决方案。