温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么用VB.NET绘制直线和贝塞尔曲线

发布时间:2022-10-17 16:57:09 阅读:491 作者:iii 栏目:编程语言
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

本文小编为大家详细介绍“怎么用VB.NET绘制直线和贝塞尔曲线”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么用VB.NET绘制直线和贝塞尔曲线”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

用VB.NET绘制直线的方法为:

画布工具Graphics.DrawLine(钢笔工具Pen,起始点Point,终止点Point)

其中的参数Point对象还可以用PointF对象或分别用其横坐标X值和横坐标Y值代替。

用VB.NET连续绘制多条直线的方法为:

画布工具Graphics.DrawLines(钢笔工具Pen,有序点数组)

其中的参数有序点数组由按照顺序连接到各个点(Point或PointF)构成的数组对象。

用VB.NET绘制贝塞尔曲线(Bezier)的方法为:

画布工具Graphics.DrawBezier(钢笔工具Pen,起始点,控点1,控点2,结束点)

注意绘制直线时,参数中的各个点都经过绘制的线段,但绘制贝塞尔曲线时,参数中定义的四个点只有起始点和结束点经过绘制的曲线,两个控点是不在曲线上的,控点只控制起始点和结束点之间的曲线走向。由起始点到控点1引出的直线与曲线的开头部分相切,由终止点到控点2引出的直线与曲线的结束部分相切。参数中的4个点可以用Point或PointF对象,也可以分别由这些点的横坐标和纵坐标拆解成的8个Single参数代替。

用VB.NET连续绘制多条贝塞尔曲线的方法为:

画布工具Graphics.DrawBezier(钢笔工具Pen,有序点数组)

注意这里有序点数组(Point或PointF元素构成)的第一个元素表示绘制曲线的第一个点,接着是第一段曲线的两个控点,接着第一段曲线经过并结束在第四点;在接着连续绘制第二段曲线时,会自动把第一段曲线的结束点(也就是第四个元素)当作起始点,然后第五和六个元素分表示第二段曲线的控点,依次类推……,最后一个元素结束所有线段的绘制。

以下以绘制汉字“飞”举例:

(1)在窗体的Paint事件处理程序中定义一个10像素宽的黑色钢笔工具,定义两个点数组,用DrawLines画法连接两个数组各个点的线段,绘制汉字“飞”:

Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
            Dim pn As New Pen(Color.Black, 10)
            Dim pts1() As Point = {New Point(3070),
                  New Point(20070), New Point(100300),
                  New Point(300300), New Point(280270)}
            Dim pts2() As Point = {New Point(28090),
            New Point(164160), New Point(280220)}
            e.Graphics.DrawLines(pn, pts1)
            e.Graphics.DrawLines(pn, pts2)
        End With
    End Sub

(2)定义一个绘制各点坐标旁注的方法:

Private Sub DrawPointString(gr As Graphics ,pts() As Point)
        Using f As New Font("Arial"14, FontStyle.Regular)
            Using fm As New StringFormat
                fm.LineAlignment = StringAlignment.Center
                For Each p As Point In pts
                    gr.DrawString($"({p.X},{p.Y })", f, Brushes.Red, p, fm)
                Next
            End Using
        End Using
    End Sub

(3)在Paint事件里标注点数组里每个点的坐标:

DrawPointString(e.Graphics, pts1)
DrawPointString(e.Graphics, pts2)

(4)改变钢笔颜色为黄颜色,宽度减半,以便与原有图形对比:

pn.Color = Color.Yellow
pn.Width = 5

(5)再定义一个点数组,以便使用DrawBeziers绘制“飞”的第一笔划:

Dim pts3() As Point = {
                New Point(3070),
                New Point(3070),
                New Point(3070),
                New Point(20070),
                '以上四个点用于绘制横线,可见用到两点的贝塞尔曲线相当于直线
                  New Point(100300),
                  New Point(100300),
                  New Point(300300),  
               '以上第4至第7四个点用于绘制竖弯部分的曲线
               New Point(300300),
               New Point(300300),
               New Point(280270)  
               以上第7至第10四个点用于绘制代表钩的直线
               } 
 e.Graphics.DrawBeziers(pn, pts3)

再利用DrawBezier方法绘制“飞”的第二笔划:

e.Graphics.DrawBezier(pn,
               New Point(28090),
               New Point(130160),
               New Point(130160),
               New Point(280220))

怎么用VB.NET绘制直线和贝塞尔曲线

(6)为了观看到最终的曲线效果文字,可以利用画布工具的平移变形,整理以上代码如下:

Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
        With e.Graphics
            Dim pn As New Pen(Color.Black, 10)
            Dim pts1() As Point = {New Point(3070),
                  New Point(20070), New Point(100300),
                  New Point(300300), New Point(280270)}
            Dim pts2() As Point = {New Point(28090),
            New Point(164160), New Point(280220)}
            .DrawLines(pn, pts1)
            .DrawLines(pn, pts2)
            DrawPointString(e.Graphics, pts1)
            DrawPointString(e.Graphics, pts2)

            .TranslateTransform(4000)

            Dim pts3() As Point = {
                New Point(3070),
                New Point(3070),
                New Point(3070),
                New Point(20070),
                  New Point(100300),
                  New Point(100300),
                  New Point(300300),
               New Point(300300),
               New Point(300300),
               New Point(280270)}
            .DrawBeziers(pn, pts3)
            .DrawBezier(pn,
               New Point(28090),
               New Point(130160),
               New Point(130160),
               New Point(280220))
            pn.Dispose
        End With
    End Sub
    Private Sub DrawPointString(gr As Graphics ,pts() As Point)
        Using f As New Font("Arial"14, FontStyle.Regular)
            Using fm As New StringFormat
                fm.LineAlignment = StringAlignment.Center
                For Each p As Point In pts
                    gr.DrawString($"({p.X},{p.Y })", f, Brushes.Red, p, fm)
                Next
            End Using
        End Using
    End Sub
End Class

怎么用VB.NET绘制直线和贝塞尔曲线

读到这里,这篇“怎么用VB.NET绘制直线和贝塞尔曲线”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

原文链接:https://blog.51cto.com/yufengnet/5723475

AI

开发者交流群×