📄 vc_net的gdi+编程入门教程之图形.htm
字号:
<TD>private: System::Void Form1_Paint(System::Object * sender,
<BR>System::Windows::Forms::PaintEventArgs * e)<BR>{<BR> Pen
*penCurrent = new Pen(Color::Blue);<BR> PointF pt[] = {
PointF(20.00F, 322.00F), PointF(124, 24),PointF(214, 242),
PointF(275, 28),<BR> PointF(380.00F, 322.00F) };
<BR> e->Graphics->DrawCurve(penCurrent,
pt);<BR>}</TD></TR></TBODY></TABLE></P>
<P><BR> 效果如图所示:<BR><BR></P>
<P>
<TABLE width="90%" align=center border=0>
<TBODY>
<TR>
<TD>
<DIV align=center>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD><IMG
onerror="this.src='http://photocdn.sohu.com/20050420/Img240012891.gif';"
hspace=3
src="VC_NET的GDI+编程入门教程之图形.files/Img240012891.gif"
align=center vspace=1
border=1></TD></TR></TBODY></TABLE><BR>图二十、代码运行效果图</DIV></TD></TR></TBODY></TABLE></P>
<P><BR> 如果需要的话,可以随意在任意一个点开始曲线,为了支持这一点,Graphics类提供了以下版本的DrawCurve()方法:<BR><BR></P>
<P>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf
border=1>
<TBODY>
<TR>
<TD>public: void DrawCurve(Pen *pen, PointF[] points, int
offset, int numberOfSegments);</TD></TR></TBODY></TABLE></P>
<P><BR> offset参数用来规定在开始绘制之前跳需要跃过的点数,首先需要决定的就是offset参数必须设置为0或者更高的数,如果将这个参数设置为0,曲线将从第一个点开始绘制。如果这个参数设置为1,第一个点将不包含在曲线之内。这意味着曲线从第二个点开始绘制,以此类推。如果设置为2,第一和第二个点都不在曲线内,曲线从第三个点开始。<BR><BR> 通过offset参数规定曲线的起点后,然后就需要设定曲线的段数,这个段数必须要小于可用的段数,它等于所有段落数减去offset值。下面是一个例子:<BR><BR></P>
<P>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf
border=1>
<TBODY>
<TR>
<TD>private: System::Void Form1_Paint(System::Object * sender,
<BR>System::Windows::Forms::PaintEventArgs * e)<BR>{<BR> Pen
*penCurrent = new Pen(Color::Blue);<BR> PointF pt[] = {
PointF(20.00F, 322.00F), PointF(124, 24),PointF(214, 242),
PointF(275, 28),<BR>PointF(380.00F, 322.00F) };
<BR> e->Graphics->DrawCurve(penCurrent, pt, 1,
2);<BR>}</TD></TR></TBODY></TABLE></P>
<P><BR> 效果图如下:<BR><BR></P>
<P>
<TABLE width="90%" align=center border=0>
<TBODY>
<TR>
<TD>
<DIV align=center>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD><IMG
onerror="this.src='http://photocdn.sohu.com/20050420/Img240012893.gif';"
hspace=3
src="VC_NET的GDI+编程入门教程之图形.files/Img240012893.gif"
align=center vspace=1
border=1></TD></TR></TBODY></TABLE><BR>图二十一、代码运行效果图</DIV></TD></TR></TBODY></TABLE></P>
<P><BR> 再一次,编译器在绘制曲线时需要申请张力,如果愿意使用一个直线段或使用一个不同于默认值的张力的话,可以使用下列版本的Graphics::DrawCurve()方法:<BR><BR></P>
<P>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf
border=1>
<TBODY>
<TR>
<TD>public: void DrawCurve(Pen *pen, Point[] points, int
offset, int numberOfSegments, float tension);<BR>public: void
DrawCurve(Pen *pen, PointF[] points, int offset, int
numberOfSegments, float tension);</TD></TR></TBODY></TABLE></P>
<P><BR> 这次,你可以传递0值给张力,以此来得到直线,代码如下:<BR><BR></P>
<P>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf
border=1>
<TBODY>
<TR>
<TD>private: System::Void Form1_Paint(System::Object * sender,
<BR>System::Windows::Forms::PaintEventArgs * e)<BR>{<BR> Pen
*penCurrent = new Pen(Color::Blue);<BR> PointF pt[] = {
PointF(20.00F, 322.00F), PointF(124, 24),PointF(214, 242),
PointF(275, 28),PointF(380.00F, 322.00F) };
<BR> e->Graphics->DrawCurve(penCurrent, pt, 0, 4,
0);<BR>}</TD></TR></TBODY></TABLE></P>
<P><BR> 效果如图:<BR><BR></P>
<P>
<TABLE width="90%" align=center border=0>
<TBODY>
<TR>
<TD>
<DIV align=center>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD><IMG
onerror="this.src='http://photocdn.sohu.com/20050420/Img240012895.gif';"
hspace=3
src="VC_NET的GDI+编程入门教程之图形.files/Img240012895.gif"
align=center vspace=1
border=1></TD></TR></TBODY></TABLE><BR>图二十二、代码运行效果图</DIV></TD></TR></TBODY></TABLE></P>
<P><BR> 也可以向张力参数传递任何正值,这有个例子:<BR><BR></P>
<P>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf
border=1>
<TBODY>
<TR>
<TD>private: System::Void Form1_Paint(System::Object * sender,
<BR>System::Windows::Forms::PaintEventArgs * e)<BR>{<BR> Pen
*penCurrent = new Pen(Color::Blue);<BR> PointF pt[] = {
PointF(20.00F, 322.00F), PointF(124, 24), PointF(214, 242),
PointF(275, 28),<BR>PointF(380.00F, 322.00F) };
<BR> e->Graphics->DrawCurve(penCurrent, pt, 1, 3,
1.750F);<BR>}</TD></TR></TBODY></TABLE></P>
<P><BR> 效果如图:<BR><BR></P>
<P>
<TABLE width="90%" align=center border=0>
<TBODY>
<TR>
<TD>
<DIV align=center>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD><IMG
onerror="this.src='http://photocdn.sohu.com/20050420/Img240012897.gif';"
hspace=3
src="VC_NET的GDI+编程入门教程之图形.files/Img240012897.gif"
align=center vspace=1
border=1></TD></TR></TBODY></TABLE><BR>图二十三、代码运行效果图</DIV></TD></TR></TBODY></TABLE></P>
<P><SPAN class=f14><FONT
size=3> <B>二、贝赛尔曲线</B><BR><BR> 贝赛尔曲线是用四个点(不必在一条直线上)绘制的连续曲线,它可以用下图来说明:<BR><BR></P></FONT>
<P>
<TABLE width="90%" align=center border=0>
<TBODY>
<TR>
<TD>
<DIV align=center>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD><IMG
onerror="this.src='http://photocdn.sohu.com/20050420/Img240012899.gif';"
hspace=3
src="VC_NET的GDI+编程入门教程之图形.files/Img240012899.gif"
align=center vspace=1
border=1></TD></TR></TBODY></TABLE><BR>图二十四、贝赛尔曲线</DIV></TD></TR></TBODY></TABLE></P>
<P><BR> 为了绘制这个线条(使用四个点),编译器将从第一点到第四个点画一条曲线,但是它并不经过第二、第三个点,而只是通过弯曲曲线来使中间的侧边各自接近于第二、第三个点。例如,上述的贝赛尔曲线使用了如下的四个点进行绘制:<BR><BR></P>
<P>
<TABLE width="90%" align=center border=0>
<TBODY>
<TR>
<TD>
<DIV align=center>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD><IMG
onerror="this.src='http://photocdn.sohu.com/20050420/Img240012901.gif';"
hspace=3
src="VC_NET的GDI+编程入门教程之图形.files/Img240012901.gif"
align=center vspace=1
border=1></TD></TR></TBODY></TABLE><BR>图二十五、贝赛尔曲线绘制说明图</DIV></TD></TR></TBODY></TABLE></P>
<P><BR> 为了绘制贝赛尔曲线,Graphics类提供了DrawBezier()方法,它重载了以下版本:<BR><BR></P>
<P>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf
border=1>
<TBODY>
<TR>
<TD>public: void DrawBezier(Pen *pen, Point pt1, Point pt2,
Point pt3, Point pt4);<BR>public: void DrawBezier(Pen *pen,
PointF pt1, PointF pt2, PointF pt3, PointF pt4);<BR>public:
void DrawBezier(Pen *pen, float x1, float y1, float x2, float
y2, float x3, float y3, float x4, float
y4);</TD></TR></TBODY></TABLE></P>
<P><BR> 在此基础上,绘制贝赛尔曲线时可以使用四个Point
或PointF值,也可以使用四个点的坐标值。下面有一个例子:<BR><BR></P>
<P>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf
border=1>
<TBODY>
<TR>
<TD>private: System::Void Form1_Paint(System::Object * sender,
<BR>System::Windows::Forms::PaintEventArgs * e)<BR>{<BR> Pen
*penCurrent = new Pen(Color::Blue);<BR> Point pt1 = Point(20,
12), pt2 = Point(88, 246), pt3 = Point(364, 192), pt4 =
Point(250, 48);<BR> e->Graphics->DrawBezier(penCurrent,
pt1, pt2, pt3, pt4);<BR>}</TD></TR></TBODY></TABLE></P>
<P><BR> 效果图如下:<BR><BR></P>
<P>
<TABLE width="90%" align=center border=0>
<TBODY>
<TR>
<TD>
<DIV align=center>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD><IMG
onerror="this.src='http://photocdn.sohu.com/20050420/Img240012903.gif';"
hspace=3
src="VC_NET的GDI+编程入门教程之图形.files/Img240012903.gif"
align=center vspace=1
border=1></TD></TR></TBODY></TABLE><BR>图二十六、贝赛尔曲线效果图</DIV></TD></TR></TBODY></TABLE></P>
<P><BR> <B>三、一系列贝赛尔曲线</B><BR><BR> Graphics::DrawBezier()方法用来绘制一条贝赛尔曲线,如果想绘制一系列贝赛尔曲线,可以用Graphics::DrawBeziers()方法,它重载了两个版本:<BR><BR></P>
<P>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf
border=1>
<TBODY>
<TR>
<TD>public: void DrawBeziers(Pen *pen, Point
points[]);<BR>public: void DrawBeziers(Pen *pen, PointF
points[]);</TD></TR></TBODY></TABLE></P>
<P><BR> DrawBeziers()方法需要一个Point 或
PointF数组值。当仅仅处理四个点时,DrawBeziers() 方法与
DrawBezier()很相似。区别是DrawBezier()处理的是四个Point 或
PointF的值,DrawBeziers()处理的是Point 或
PointF数组值。使用DrawBeziers()方法可以绘制出与上面曲线一样的效果,代码如下:<BR><BR></P>
<P>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf
border=1>
<TBODY>
<TR>
<TD>private: System::Void Form1_Paint(System::Object * sender,
<BR>System::Windows::Forms::PaintEventArgs * e)<BR>{<BR> Pen
*penCurrent = new Pen(Color::Blue);<BR> Point pt[] = {
Point(20, 12), Point(88, 246), Point(364, 192), Point(250, 48)
};<BR> e->Graphics->DrawBeziers(penCurrent,
pt);<BR>}</TD></TR></TBODY></TABLE></P>
<P><BR> 使用DrawBeziers()方法的一个典型特点是它允许使用7个Point或PointF值,这里有一个例子:<BR><BR></P>
<P>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf
border=1>
<TBODY>
<TR>
<TD>private:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -