ホームページ  >  記事  >  バックエンド開発  >  C# GDI+ テクノロジー

C# GDI+ テクノロジー

高洛峰
高洛峰オリジナル
2016-12-17 10:01:341352ブラウズ

GDI+ の概要

GDI+ は、以前のバージョンの Windows に含まれていたグラフィック デバイス インターフェイスである GDI の後継です。これは、Windows XP オペレーティング システムのサブシステムを形成するアプリケーション プログラミング インターフェイス (API) です。 GDI+ 基本クラスの主な名前空間と説明: System.Drawing -- 基本的な描画関数に関連するほとんどのクラス、構造体、列挙、およびデリゲートが含まれます。 System.Drawing.Drawing2D - アンチエイリアス、ジオメトリ変換、グラフィックス パスなど、最も高度な 2D およびベクトル描画操作のサポートを提供します。 System.Drawing.Imaging -- 画像 (ビットマップ、GIF ファイルなど) の処理を​​支援するさまざまなクラス。 System.Drawing.Printing -- プリンターまたは印刷プレビュー ウィンドウを出力デバイスとして使用する場合に使用されるクラス。 System.Drawing.Design -- 設計中のユーザー インターフェイスの拡張に関連する、多数の事前定義されたダイアログ ボックス、プロパティ シート、およびその他のユーザー インターフェイス要素。 System.Drawing.Text – フォントおよびフォント ファミリに対してより高度な操作を実行するクラス。

基本的なグラフィック描画

Graphics クラスは GDI+ のコアであり、GDI+ 描画面を表し、表示デバイスにオブジェクトを描画するためのメソッドを提供します。 Graphics クラスは、直線、曲線、グラフィックス、イメージ、およびテキストを描画するためのメソッドをカプセル化します。これは、GDI+ が直線、曲線、グラフィックス、イメージおよびテキストを描画するために使用するクラスです。これは、すべての GDI+ 操作の基本クラスです。

直線を描く

Graphics クラスの DrawLine メソッドはオーバーロードでき、主に座標ペアで指定された 2 点を結ぶ線を描画するために使用されます。 (1) 2 つの Point 構造を結ぶ線を描きます。

public void DrawLine(Pen pen, Point pt1,Point pt2)

pen: ペンオブジェクト。線の色、幅、スタイルを決定します。 pt1:Point 構造体。接続される最初の点を示します。 pt2:Point 構造体。接続される 2 番目の点を示します。 (2) 座標ペアで指定された 2 点を結ぶ線を描きます。

Public void DrawLine(Pen pen,int x1,int y1,int x2,int y2)

直線を描くためのサンプルコード:

private void button1_Click(object sender, EventArgs e)
{
    Graphics graphics = this.CreateGraphics();
    Pen myPen = new Pen(Color.Blue, 2);
    graphics.DrawLine(myPen, 50, 30, 170, 30);
}

四角形を描く

Graphics クラスの DrawRectangle メソッド。オーバーロードできます。 (1) Rectangle構造体で指定された長方形を描画します。

public void DrawRectangle(Pen pen,Rectangle rect)

pen: ペンオブジェクト。線の色、幅、スタイルを決定します。 rect: 長方形を描画する Rectangle 構造体を表します。 例:

Rectangle rect = new Rectangle(0, 0, 80, 50);

(2) 幅と高さの座標ペアで指定された長方形を描画します。

public void DrawRectangle(Pen pen, int x, int y, int width, int height)

pen: ペンオブジェクト。線の色、幅、スタイルを決定します。 x: 描画される四角形の左上隅の x 座標。 y: 描画される四角形の左上隅の y 座標。 width と height はそれぞれ幅と高さを表します。 四角形を描画するサンプル コード:

private void button1_Click(object sender, EventArgs e)
{
    Graphics graphics = this.CreateGraphics();
    Pen myPen = new Pen(Color.Blue, 2);
    graphics.DrawRectangle(myPen, 70, 20, 80, 50);
}

Graphics クラスの Draw an ellipse

DrawEllipse メソッド。これはオーバーロードできます。主に、Rectangle 構造によって境界が指定された楕円を描画するために使用されます。 (1) Rectangle 構造体で指定された境界を持つ楕円を描画します。

public void DrawEllipse(Pen pen, Rectangle rect)

(2) 境界線で定義された楕円を描画します (境界線は高さと幅の座標のペアで指定されます)。

public void DrawEllipse(Pen pen, int x, int y, int width, int height)

楕円を描画するためのサンプルコード:

private void button1_Click(object sender, EventArgs e)
{
    Graphics graphics = this.CreateGraphics();
    Pen myPen = new Pen(Color.Blue, 3);
    Rectangle myRectangle = new Rectangle(70, 20, 100, 60);
    graphics.DrawEllipse(myPen, myRectangle);
}

円弧の描画

Graphics クラスの DrawArc メソッドはオーバーロードできます。 (1) Rectangle 構造体で指定された楕円の一部を表す円弧を描きます。

public void DrawArc(Pen pen, Rectangle rect, float startAngle, float sweepAngle)

pen: ペンオブジェクト。線の色、幅、スタイルを決定します。 rect: 楕円の境界を定義する長方形構造。 startAngle: X 軸から円弧の開始点まで時計回りに測定した角度 (度単位)。スイープ角度: startAngle パラメータから円弧の終点まで時計回りに測定した角度 (度単位)。 (2) 幅と高さの座標のペアで指定された楕円の部分を表す円弧を描きます。

public void DrawArc(Pen pen, int x, int y, int width, int height, int startAngle, int sweepAngle)

円弧を描画するコード例:

private void button1_Click(object sender, EventArgs e)
{
    Graphics graphics = this.CreateGraphics();
    Pen myPen = new Pen(Color.Blue, 5);
    Rectangle myRectangle = new Rectangle(70, 20, 100, 60);
    graphics.DrawArc(myPen, myRectangle,210,120);
}

多角形の描画

には、Graphics オブジェクト、Pen オブジェクト、Point (または PointF) オブジェクトの配列が必要です。 Graphics クラスは、DrawPolygon メソッドを提供します。Pen オブジェクトは、幅や色など、ポリゴンのレンダリングに使用されるライン属性を格納します。Point (または PointF) オブジェクト配列は、ポリゴンの個々の頂点を格納します。リロード可能。 (1) Point 構造体の集合で定義される多角形を描画します。

public void DrawPolygon(Pen pen, Point[] pints)

(2) PointF 構造体のセットによって定義される多角形を描画します。

public void DrawPolygon(Pen pen, PointF[] pints)

多角形を描画するためのコード例:

private void button1_Click(object sender, EventArgs e)
{
    Graphics graphics = this.CreateGraphics();
    Pen myPen = new Pen(Color.Red, 5);
    Point point1 = new Point(80, 20);
    Point point2 = new Point(40, 50);
    Point point3 = new Point(80, 80);
    Point point4 = new Point(160, 80);
    Point point5 = new Point(200, 50);
    Point point6 = new Point(160, 20);
    Point[] myPoints = { point1, point2, point3, point4, point5, point6 };
    graphics.DrawPolygon(myPen, myPoints);
}

カーディナル スプラインの描画

カーディナル スプラインは、接続されて大きな曲線を形成する一連の個別の曲線です。点の配列と張力パラメータによって指定されるスプラインは、鋭い角や曲線の急峻さが突然変化することなく、配列の各点をスムーズに通過します。 (1) 指定された Point 構造のセットを通過するカーディナル スプラインを描画します。

public void DrawCurve(Pen pen, Point[] points)

(2) 指定された張力を使用して、指定された一連の Point 構造を通過するカーディナル スプラインを描画します。

public void DrawCurve(Pen pen, Point[] points, float tension)

tension: 0.0F 以上の値で、カーブの張力を指定します。 (3) 配列の先頭を基準としたオフセットから開始して、指定された PointF 構造体のセットを通るカーディナル スプラインを描画します。

りー

offset:从points参数数组中的第一个元素到曲线中起始点的偏移量。numberOfSegments:起始点之后要包含在曲线中的段数。 (4)使用指定张力,绘制经过一组指定Point结构的基数样条。

public void DrawCurve(Pen pen, Point[] points, int offset, int numberOfSegments, float tension)

   

绘制基数样条示例代码:

private void button1_Click(object sender, EventArgs e)
{
    Graphics graphics = this.CreateGraphics();
    Pen myPen = new Pen(Color.Red, 5);
    Point point1 = new Point(50, 20);
    Point point2 = new Point(60, 30);
    Point point3 = new Point(70, 25);
    Point point4 = new Point(100, 50);
    Point point5 = new Point(130, 30);
    Point point6 = new Point(150, 45);
    Point[] myPoints = { point1, point2, point3, point4, point5, point6 };
    graphics.DrawCurve(myPen, myPoints, 1.0F);
}

   

绘制贝赛尔样条

贝塞尔样条是由4个点指定的曲线:两个端点(p1,p2)和两个控制点(c1,c2)。曲线开始于p1,结束于p2。曲线不经过控制点,但是控制点像磁铁一样,在某些方向上拉伸曲线并影响曲线弯曲的方式。 调用Graphics类的DrawBezier方法,可重载。 (1)绘制由4个Point结构定义的贝塞尔样条。

public void DrawBezier(Pen pen, Point pt1, Point pt2, Point pt3, Point pt4)

   

4个Point点分别表示起始点、第一个控制点、第二个控制点和结束点。
(2)绘制由4个表示点的有序坐标对定义的贝塞尔样条。

public void DrawBezier(Pen pen, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4)

   

x2,y2及x3,y3分别表示第1个、第2个控制点相应坐标。顺序和第一种方法类似。
绘制贝塞尔样条示例代码:

private void button1_Click(object sender, EventArgs e)
{
    Graphics graphics = this.CreateGraphics();
    Pen myPen = new Pen(Color.Red, 5);
    float startX = 50.0F;
    float startY = 80.0F;
    float controlX1 = 150.0F;
    float controlY1 = 20.0F;
    float controlX2 = 230.0F;
    float controlY2 = 50.0F;
    float endX = 190.0F;
    float endY = 80.0F;
    graphics.DrawBezier(myPen, startX, startY, controlX1, controlY1, controlX2, controlY2, endX, endY);
}

   

绘制图形路径

路径是通过组合直线、矩形和简单的曲线而形成的。在GDI+中,GraphicsPath对象允许将基本构造块收集到一个单元中,调用一次Graphics类的DrawPath方法,就可以绘制出整个单元的直线、矩形、多边形和曲线。

public void DrawPath(Pen pen, GraphicsPath path)

   

pen:Pen对象,确定线条颜色、宽度和样式。path:要绘制的GraphicsPath图形路径。 PS:注意要引用System.Drawing.Drawing2D命名空间。
绘制图形路径示例代码:

private void button1_Click(object sender, EventArgs e)
{
    Graphics graphics = this.CreateGraphics();
    GraphicsPath myGraphicsPath = new GraphicsPath();
    Pen myPen = new Pen(Color.Blue, 1);
    Point[] myPoints = { new Point(15, 30), new Point(30, 40), new Point(50, 30) };
    myGraphicsPath.AddArc(15, 20, 80, 50, 210, 120);
    myGraphicsPath.StartFigure();
    myGraphicsPath.AddCurve(myPoints);
    myGraphicsPath.AddString("图形路径", new FontFamily("华文行楷"), (int)FontStyle.Underline, 50, new PointF(20, 50), new StringFormat());
    myGraphicsPath.AddPie(180,20,80,50,210,120);
    graphics.DrawPath(myPen, myGraphicsPath);
}

   


更多C# GDI+技术相关文章请关注PHP中文网!

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。