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_Click:GraphicsPath表示一系列相互連線的直線和曲線
CloseFigure:閉合當前圖形並開始新的圖形。如果當前圖形包含一系列相互連線的直線和曲線,該方法通過連線一條從終結點到起始點的直線,閉合該環回。
button6_Click:PathGradientBrush漸變填充 GraphicsPath 物件的內部
CenterColor:中心顏色
SurroundColors:周圍漸進顏色
button7_Click:HatchBrush畫刷使用
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 指定由代字號“