【问题标题】:Drawing lines in win32/GDI with a custom pen style?使用自定义笔样式在win32/GDI中绘制线条?
【发布时间】:2011-01-01 09:54:03
【问题描述】:

我需要使用 win32/GDI(本机,而不是 .NET)进行一些绘图,我遇到了以下问题:

我需要绘制“样式化”的线条。例如,在附图中,标有“A”的线就我的应用程序数据而言是一条直线,它只需要以附加的锯齿形作为样式绘制即可。当然,这很容易以编程方式完成,但是当线条可以处于任意角度(“B”)甚至是贝塞尔曲线(“C”)时,它会变得更加复杂。

现在,我可以通过编程方式完成所有这些操作,费力地进行数学运算,在每条线的可能性上画出一个曲折的曲线,但这会花费大量时间,更重要的是,还容易出错。

是否可以只给 windows/GDI 一个“样式”以应用于线条,也许是一个像标记为“D”的位图,并让它用它作为笔来绘制线条?如果没有,有没有比为每条“样式化”的线编写一堆特定的绘图代码更灵活、更不容易出错的方法?

*显然初学者不能发布图片。可以在http://i.imgur.com/IC0T2.png找到示例

【问题讨论】:

    标签: windows graphics winapi gdi


    【解决方案1】:

    ExtCreatePen(),也许吧?我不知道它是否支持锯齿形...

    【讨论】:

      【解决方案2】:

      这在 Win32 GDI 中是不可能的。您需要自己计算。

      但是应该注意的是,您可以获得用于组成直线或曲线的点,这将大大简化它。

      有关示例,请参阅此“命中测试”教程。

      对于贝塞尔曲线,您可以使用Path Functions

      对于直线,您可以使用:

      LineDDA

      【讨论】:

        【解决方案3】:

        据我所知,GDI 甚至 GDI+ 都没有支持这一点。您拥有的唯一线条选项是短划线图案、复合笔、短划线帽、端帽和填充画笔。

        可能能够欺骗其中一个函数来绘制类似于直线样条曲线的摆动的东西,但它绝对不适用于曲线样条曲线。

        不过,这样做应该不会太难。当然,这需要一天左右的时间,但您所要做的就是编写一条线和贝塞尔插值器,将曲线分成相等的段,找到所有这些段的切线并左右交替。您最终会得到一个点数组,这些点可以非常快速地绘制为折线。

        【讨论】:

          【解决方案4】:

          没有什么会自动执行此操作。您将不得不编写一些代码。您可能想查看 GDI 中的 LineDDA API。它可能会简化您的代码所需的数学运算。

          【讨论】:

            猜你喜欢
            • 2013-05-06
            • 2019-03-16
            • 1970-01-01
            • 2012-10-09
            • 2011-11-18
            • 1970-01-01
            • 2010-10-23
            • 2013-01-22
            • 2021-08-03
            相关资源
            最近更新 更多