科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件VC.NET的GDI+编程入门教程之图形

VC.NET的GDI+编程入门教程之图形

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

长方形是由四条边组成的具有四个直角的几何图形,为了绘制一个长方形,可以定义围成长方形的矩形值,或定义它的位置和尺寸。

作者:刘涛编译 来源:天极网 2007年11月16日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
二、贝赛尔曲线

  贝赛尔曲线是用四个点(不必在一条直线上)绘制的连续曲线,它可以用下图来说明:


图二十四、贝赛尔曲线

  为了绘制这个线条(使用四个点),编译器将从第一点到第四个点画一条曲线,但是它并不经过第二、第三个点,而只是通过弯曲曲线来使中间的侧边各自接近于第二、第三个点。例如,上述的贝赛尔曲线使用了如下的四个点进行绘制:


图二十五、贝赛尔曲线绘制说明图

  为了绘制贝赛尔曲线,Graphics类提供了DrawBezier()方法,它重载了以下版本:

public: void DrawBezier(Pen *pen, Point pt1, Point pt2, Point pt3, Point pt4);
public: void DrawBezier(Pen *pen, PointF pt1, PointF pt2, PointF pt3, PointF pt4);
public: void DrawBezier(Pen *pen, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4);

  在此基础上,绘制贝赛尔曲线时可以使用四个Point 或PointF值,也可以使用四个点的坐标值。下面有一个例子:

private: System::Void Form1_Paint(System::Object * sender,
System::Windows::Forms::PaintEventArgs * e)
{
 Pen *penCurrent = new Pen(Color::Blue);
 Point pt1 = Point(20, 12), pt2 = Point(88, 246), pt3 = Point(364, 192), pt4 = Point(250, 48);
 e->Graphics->DrawBezier(penCurrent, pt1, pt2, pt3, pt4);
}

  效果图如下:


图二十六、贝赛尔曲线效果图

  三、一系列贝赛尔曲线

  Graphics::DrawBezier()方法用来绘制一条贝赛尔曲线,如果想绘制一系列贝赛尔曲线,可以用Graphics::DrawBeziers()方法,它重载了两个版本:

public: void DrawBeziers(Pen *pen, Point points[]);
public: void DrawBeziers(Pen *pen, PointF points[]);

  DrawBeziers()方法需要一个Point 或 PointF数组值。当仅仅处理四个点时,DrawBeziers() 方法与 DrawBezier()很相似。区别是DrawBezier()处理的是四个Point 或 PointF的值,DrawBeziers()处理的是Point 或 PointF数组值。使用DrawBeziers()方法可以绘制出与上面曲线一样的效果,代码如下:

private: System::Void Form1_Paint(System::Object * sender,
System::Windows::Forms::PaintEventArgs * e)
{
 Pen *penCurrent = new Pen(Color::Blue);
 Point pt[] = { Point(20, 12), Point(88, 246), Point(364, 192), Point(250, 48) };
 e->Graphics->DrawBeziers(penCurrent, pt);
}

  使用DrawBeziers()方法的一个典型特点是它允许使用7个Point或PointF值,这里有一个例子:

private: System::Void Form1_Paint(System::Object * sender,
System::Windows::Forms::PaintEventArgs * e)
{
 Pen *penCurrent = new Pen(Color::Blue);
 Point pt[] = { Point( 10, 5), Point(340, 60), Point(320, 148), Point(150, 120), Point(24, 220), Point(250, 150), Point(304, 240) };
 e->Graphics->DrawBeziers(penCurrent, pt);
}

  效果图如下:


图二十七、代码运行效果图
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章