1. 程式人生 > >GDI+入門系列(二)——Brush簡介

GDI+入門系列(二)——Brush簡介

此係列的文章,是公司的學習資料中找到,不知道是哪位仁兄總結,作為入門教程,拿出來分享。例項都比較簡單,不多說,直接貼程式碼,並會適當加些註釋:

Brush 畫刷

SolidBrush 定義單色畫筆。畫筆用於填充圖形形狀,如矩形、橢圓、扇形、多邊形和封閉路徑

類的每個屬性都是 Brush物件,這種物件使用影象來填充形狀的內部。無法繼承此類。

LinearGradientBrush 該類封裝雙色漸變和自定義多色漸變。

PathGradientBrush應用程式使用路徑來繪製形狀的輪廓、填充形狀內部和建立剪輯區域。

HatchBrush用陰影樣式、前景色和背景色定義矩形畫筆。

二、畫刷的使用

      using System.Drawing;

      using System.Drawing.Drawing2D;

      using System.Drawing.Imaging;

public Form1()

{

InitializeComponent();

comboBox1.SelectedIndex = 0;

}

privatevoid button1_Click(object sender, EventArgs e)

{

Bitmap bp = newBitmap("1.jpg");

TextureBrush tb = newTextureBrush(bp);

Graphics g = this.CreateGraphics();

g.FillRectangle(tb, this.ClientRectangle);

bp.Dispose();

tb.Dispose();

g.Dispose();

}

privatevoid button2_Click(object sender, EventArgs e)

{

Bitmap bp = newBitmap("1.jpg");

TextureBrush tb = newTextureBrush(bp, newRectangle(0, 0, 100, 100));

Graphics g = this.CreateGraphics();

switch (comboBox1.SelectedItem.ToString().Trim())

{

case"Clamp":

tb.WrapMode = WrapMode.Clamp;

g.FillRectangle(tb, this.ClientRectangle);

bp.Dispose();

tb.Dispose();

g.Dispose();

break;

case"Tile":

tb.WrapMode = WrapMode.Tile;

g.FillRectangle(tb, this.ClientRectangle);

bp.Dispose();

tb.Dispose();

g.Dispose();

break;

case"TileFlipX":

tb.WrapMode = WrapMode.TileFlipX;

g.FillRectangle(tb, this.ClientRectangle);

bp.Dispose();

tb.Dispose();

g.Dispose();

break;

case"TileFlipXY":

tb.WrapMode = WrapMode.TileFlipXY;

g.FillRectangle(tb, this.ClientRectangle);

bp.Dispose();

tb.Dispose();

g.Dispose();

break;

case"TileFlipY":

tb.WrapMode = WrapMode.TileFlipY;

g.FillRectangle(tb, this.ClientRectangle);

bp.Dispose();

tb.Dispose();

g.Dispose();

break;

}

}

privatevoid button3_Click(object sender, EventArgs e)

{

Bitmap bp = newBitmap("1.jpg");

float[][] matrixitems ={

newfloat[]{0.2f,0,0,0,0},

newfloat[]{0,0.8f,0,0,0},

newfloat[]{0,0,1,0,0},

newfloat[]{0,0,0,1,0},

newfloat[]{0,0,0,0,1},

};

ColorMatrix colotMatrix = newColorMatrix(matrixitems);

ImageAttributes imgAtt = newImageAttributes();

imgAtt.SetColorMatrix(colotMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);

TextureBrush tb = newTextureBrush(bp,newRectangle(0,0,bp.Width,bp.Height),imgAtt);

tb.WrapMode = WrapMode.Tile;

Graphics g = this.CreateGraphics();

g.FillRectangle(tb, this.ClientRectangle);

bp.Dispose();

tb.Dispose();

g.Dispose();

}

privatevoid button4_Click(object sender, EventArgs e)

{

Graphics g = this.CreateGraphics();

LinearGradientBrush lgb = newLinearGradientBrush(newPoint(0, 0), newPoint(300, 300), Color.Wheat, Color.Black);

g.FillRectangle(lgb, this.ClientRectangle);

g.Dispose();

lgb.Dispose();

}

privatevoid button5_Click(object sender, EventArgs e)

{

Graphics g = this.CreateGraphics();

GraphicsPath gp = newGraphicsPath();

gp.AddLine(10, 10, 110, 15);

gp.AddLine(110,15,100,96);

gp.AddLine(100, 96, 15, 110);

gp.CloseFigure();

g.FillRectangle(Brushes.AliceBlue, this.ClientRectangle);

g.DrawPath(Pens.AntiqueWhite, gp);

gp.Dispose();

}

privatevoid button6_Click(object sender, EventArgs e)

{

Graphics g = this.CreateGraphics();

GraphicsPath gp = newGraphicsPath();

gp.AddLine(10, 10, 110, 15);

gp.AddLine(110, 15, 100, 96);

gp.AddLine(100, 96, 15, 110);

gp.CloseFigure();

g.FillRectangle(Brushes.Blue, this.ClientRectangle);

g.SmoothingMode = SmoothingMode.AntiAlias;

PathGradientBrush pgb = newPathGradientBrush(gp);

pgb.CenterColor = Color.White;

pgb.SurroundColors=newColor[]

{

//Color.Yellow,

Color.Blue

//Color.Yellow,

//Color.Red

};

g.FillPath(pgb,gp);

g.DrawPath(Pens.Blue,gp);

pgb.Dispose();

gp.Dispose();

}

privatevoid button7_Click(object sender, EventArgs e)

{

Graphics g = this.CreateGraphics();

HatchBrush hb = newHatchBrush(HatchStyle.Cross, Color.White, Color.Blue);

g.FillRectangle(hb, this.ClientRectangle);

hb.Dispose();

}

privatevoid button8_Click(object sender, EventArgs e)

{

Graphics g=this.CreateGraphics();

g.FillRectangle(Brushes.White, this.ClientRectangle);

HatchBrush hb = newHatchBrush(HatchStyle.WideUpwardDiagonal,

Color.White,

Color.Black);

Pen p = newPen(hb, 8);

g.DrawRectangle(p, 15, 15, 70, 70);

hb.Dispose();

p.Dispose();

g.Dispose();

}

說明:

1. button1_Click用簡單的方式對工作視窗進行填充

this.ClientRectangle當前的工作視窗

2. button2_Click:更改TextureBrush畫刷的平鋪方式

Tile平鋪漸變或紋理。

TileFlipX 水平反轉紋理或漸變,然後平鋪該紋理或漸變。

TileFlipY 垂直反轉紋理或漸變,然後平鋪該紋理或漸變。

TileFlipXY 水平和垂直反轉紋理或漸變,然後平鋪該紋理或漸變。

Clamp 紋理或漸變沒有平鋪。

Clamp

button3_Click顏色矩陣的使用

ColorMatrix:定義包含 RGBA 空間座標的 5 x 5 矩陣。ImageAttributes 類的若干方法通過使用顏色矩陣調整影象顏色。

ImageAttributes 物件包含有關在呈現時如何操作點陣圖和圖元檔案顏色的資訊。ImageAttributes 物件維護多個顏色調整設定,包括顏色調整矩陣、灰度調整矩陣、灰度校正值、顏色對映表和顏色閾值。呈現過程中,可以對顏色進行校正、調暗、調亮和移除。要應用這些操作,應初始化一個 ImageAttributes 物件,並將該 ImageAttributes 物件的路徑(連同 Image 的路徑)傳遞給 DrawImage 方法。

button5_ClickGraphicsPath表示一系列相互連線的直線和曲線

CloseFigure閉合當前圖形並開始新的圖形。如果當前圖形包含一系列相互連線的直線和曲線,該方法通過連線一條從終結點到起始點的直線,閉合該環回。

button6_ClickPathGradientBrush漸變填充 GraphicsPath 物件的內部

CenterColor中心顏色

SurroundColors周圍漸進顏色

button7_ClickHatchBrush畫刷使用

HatchStyle:填充樣式

Horizontal 水平線的圖案。

Vertical 垂直線的圖案。

ForwardDiagonal 從左上到右下的對角線的線條圖案。

BackwardDiagonal 從右上到左下的對角線的線條圖案。

Cross 指定交叉的水平線和垂直線。

DiagonalCross 交叉對角線的圖案。

Percent05 指定 5% 陰影。前景色與背景色的比例為 5:100

Percent10 指定 10% 陰影。前景色與背景色的比例為 10:100

Percent20 指定 20% 陰影。前景色與背景色的比例為 20:100

Percent25 指定 25% 陰影。前景色與背景色的比例為 25:100

Percent30 指定 30% 陰影。前景色與背景色的比例為 30:100

Percent40 指定 40% 陰影。前景色與背景色的比例為 40:100

Percent50 指定 50% 陰影。前景色與背景色的比例為 50:100

Percent60 指定 60% 陰影。前景色與背景色的比例為 60:100

Percent70 指定 70% 陰影。前景色與背景色的比例為 70:100

Percent75 指定 75% 陰影。前景色與背景色的比例為 75:100

Percent80 指定 80% 陰影。前景色與背景色的比例為 80:100

Percent90 指定 90% 陰影。前景色與背景色的比例為 90:100

LightDownwardDiagonal 指定從頂點到底點向右傾斜的對角線,其兩邊夾角比 ForwardDiagonal 50%,但它們不是鋸齒消除的。

LightUpwardDiagonal 指定從頂點到底點向左傾斜的對角線,其兩邊夾角比 BackwardDiagonal 50%,但這些直線不是鋸齒消除的。

DarkDownwardDiagonal 指定從頂點到底點向右傾斜的對角線,其兩邊夾角比 ForwardDiagonal 50%,寬度是其兩倍。此陰影圖案不是鋸齒消除的。

DarkUpwardDiagonal 指定從頂點到底點向左傾斜的對角線,其兩邊夾角比 BackwardDiagonal 50%,寬度是其兩倍,但這些直線不是鋸齒消除的。

WideDownwardDiagonal 指定從頂點到底點向右傾斜的對角線,其間距與陰影樣式 ForwardDiagonal 相同,寬度是其三倍,但它們不是鋸齒消除的。

WideUpwardDiagonal 指定從頂點到底點向左傾斜的對角線,其間距與陰影樣式 BackwardDiagonal 相同,寬度是其三倍,但它們不是鋸齒消除的。

LightVertical 指定垂直線的兩邊夾角比 Vertical 50%

LightHorizontal 指定水平線,其兩邊夾角比 Horizontal 50%

NarrowVertical 指定垂直線的兩邊夾角比陰影樣式 Vertical 75%(或者比 LightVertical 25%)。

NarrowHorizontal 指定水平線的兩邊夾角比陰影樣式 Horizontal 75%(或者比 LightHorizontal 25%)。

DarkVertical 指定垂直線的兩邊夾角比 Vertical 50% 並且寬度是其兩倍。

DarkHorizontal 指定水平線的兩邊夾角比 Horizontal 50% 並且寬度是 Horizontal 的兩倍。

DashedDownwardDiagonal 指定虛線對角線,這些對角線從頂點到底點向右傾斜。

DashedUpwardDiagonal 指定虛線對角線,這些對角線從頂點到底點向左傾斜。

DashedHorizontal 指定虛線水平線。

DashedVertical 指定虛線垂直線。

SmallConfetti 指定帶有五彩紙屑外觀的陰影。

LargeConfetti 指定具有五彩紙屑外觀的陰影,並且它是由比 SmallConfetti 更大的片構成的。

ZigZag 指定由 Z 字形構成的水平線。

Wave 指定由代字號“