C#开发训练营

第25课:图形图像(3)

本课讨论多边形、等边三角形、曲线、封闭图形、文本,以及图像的绘制。

绘制多边形

绘制多边形时,需要将坐标数据转换为像素后直接调用Graphics对象中的DrawPolygon()方法;tImage类中使用同名方法实现,如下面的代码。

C#
// 多边形
public void DrawPolygon(Pen p, params PointF[] pts)
{
    if (pts.Length < 3) return;
    myG.DrawPolygon(p, GetPx(pts));
    DefPen = p;
}
public void DrawPolygon(params PointF[] pts)
{
    DrawPolygon(DefPen, pts);
}
// 填充多边形
public void FillPolygon(Brush b, params PointF[] pts)
{
    if (pts.Length < 3) return;
    myG.FillPolygon(b, GetPx(pts));
    DefBrush = b;
}
public void FillPolygon(params PointF[] pts)
{
    FillPolygon(DefBrush, pts);
}

下面的代码演示了多边形的绘制。

C#
using System;
using System.Drawing;

public partial class Test : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        tImage img = new tImage(200, 150, 300);
        img.Clear(Color.White);
        //
        img.SetPen(Color.Black, 1);
        img.SetBrush(Brushes.LightGray);
        img.FillPolygon(new PointF[] {
            new PointF(10,10),
            new PointF(50,15),
            new PointF(30,30)
        });
        img.DrawPolygon(new PointF[] {
            new PointF(10,60),
            new PointF(50,65),
            new PointF(30,80)
        });
        // 输出
        Response.ContentType = "image/png";
        Response.AppendHeader("Content-Disposition",
            "filename=img1.png;");
        img.GetBitmap().Save(Response.OutputStream,
            System.Drawing.Imaging.ImageFormat.Png);
    }
}

代码绘制结果如图1。

图1

绘制等边三角形

在Graphics类中,可能通过三个顶点绘制坐标绘制三角形,而DrawPolygon()方法绘制的多边形会比FillPolygon()方法绘制的填充多边形所占的区域大一些,各个方向多出的部分是线条宽度的一半。

一些情况下可能需要标准的等边三角形,如绘制统计图表时的三角形标记;下面的代码,在tImage类中封装了DrawTriangle()方法,用于绘制等边三角形,其中需要的的参数包括Pen对象,以及等边三角形的重心坐标和边长。