版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第6章GDI+編程GDI+已完全替代
GDI,以圖形圖像作為對(duì)象,可在
Windows窗體應(yīng)用程序中以編程方式繪制或操作圖形圖像。雖然無法對(duì)
Web窗體直接使用
GDI+,但可以通過
Web服務(wù)器的“圖像”(Image)控件顯示圖形圖像。處理圖像圖形包括創(chuàng)建
Graphics對(duì)象,使用
Graphics對(duì)象繪制線條和形狀、呈現(xiàn)文本或顯示與操作圖像。6.1創(chuàng)建
Graphics對(duì)象Graphics類是使用GDI+的基礎(chǔ),它代表了所有輸出顯示的繪圖環(huán)境,用戶可以通過編程操作Graphics對(duì)象,在屏幕上繪制圖形、呈現(xiàn)文本或操作圖像。創(chuàng)建Graphics對(duì)象可以有多種方法。(1)在為窗體編寫Paint事件處理程序時(shí),圖形對(duì)象作為一個(gè)
PaintEventArgs類的實(shí)例提供。下面的代碼引用
Paint事件的
PaintEventArgs中的
Graphics對(duì)象:private
void
Form1_Paint(object
sender,System.Windows.Forms.PaintEventArgs
pe){//聲明圖形對(duì)象并把它設(shè)置為PaintEventArgs事件提供的圖形對(duì)象Graphics
g=pe.Graphics;//在這插入繪制窗體的代碼}使用控件或窗體的CreateGraphics()方法獲取對(duì)Graphics對(duì)象的引用,該對(duì)象表示這個(gè)控件或窗體的繪圖表面。例如:Graphics
g;//把g設(shè)為一個(gè)圖形對(duì)象,來表示控件或窗體的繪圖平面g=this.CreateGraphics();從Image類派生的任何對(duì)象創(chuàng)建圖形對(duì)象,調(diào)用Graphics.FromImage()方法即可。例如:Bitmap
myBitmap
=
new
Bitmap(@"C:\myPic.bmp");Graphics
g
=
Graphics.FromImage(myBitmap);使用控件或窗體的CreateGraphics()方法獲取對(duì)Graphics對(duì)象的引用,該對(duì)象表示這個(gè)控件或窗體的繪圖表面。例如:Graphics
g;//把g設(shè)為一個(gè)圖形對(duì)象,來表示控件或窗體的繪圖平面g=this.CreateGraphics();從Image類派生的任何對(duì)象創(chuàng)建圖形對(duì)象,調(diào)用Graphics.FromImage()方法即可。例如:Bitmap
myBitmap
=
new
Bitmap(@"C:\myPic.bmp");Graphics
g
=
Graphics.FromImage(myBitmap);使用控件或窗體的CreateGraphics()方法獲取對(duì)Graphics對(duì)象的引用,該對(duì)象表示這個(gè)控件或窗體的繪圖表面。例如:Graphics
g;//把g設(shè)為一個(gè)圖形對(duì)象,來表示控件或窗體的繪圖平面g=this.CreateGraphics();從Image類派生的任何對(duì)象創(chuàng)建圖形對(duì)象,調(diào)用Graphics.FromImage()方法即可。例如:Bitmap
myBitmap
=
new
Bitmap(@"C:\myPic.bmp");Graphics
g
=
Graphics.FromImage(myBitmap);6.2筆筆可用于繪制線條、曲線以及勾勒形狀輪廓。下面的代碼創(chuàng)建一支基本的黑色筆://創(chuàng)建一個(gè)默認(rèn)寬度為1的黑筆Pen
myPen
=
new
Pen(Color.Black);//創(chuàng)建一個(gè)寬度為5的黑筆Pen
myPen
=
new
Pen(Color.Black,
5);也可以通過已存在的畫筆對(duì)象創(chuàng)建筆。下面的代碼創(chuàng)建基于已存在畫筆(名為
myBrush)的筆://創(chuàng)建一個(gè)畫筆,與myBrush有相同的屬性,并且默認(rèn)寬度為1Pen
myPen
=
new
Pen(myBrush);//創(chuàng)建一個(gè)畫筆,與myBrush有相同的屬性,并且寬度為5Pen
myPen=new
Pen(myBrush,5);在創(chuàng)建筆后,即可使用它來繪制線條、弧線或空心形狀。下面的代碼使用筆來繪制橢圓:Pen
myPen
=
new
Pen(Color.Black);Graphics
g
=
this.CreateGraphics();g.DrawEllipse(myPen,
20,
30,
10,
50);在筆創(chuàng)建后,可以設(shè)置筆的線條形式的各種屬性。Width和Color等屬性會(huì)影響線條的外觀,而
StartCap和EndCap屬性將預(yù)設(shè)或自定義的形狀添加到線條的開始或結(jié)尾。DashStyle屬性允許在實(shí)線、虛線、點(diǎn)劃線或自定義點(diǎn)劃線之間進(jìn)行選擇,而
DashCap屬性可以自定義線條中短劃線的結(jié)尾。6.3畫筆畫筆是與
Graphics對(duì)象一起使用來創(chuàng)建實(shí)心形狀和呈現(xiàn)文本的對(duì)象。幾種不同類型的畫筆SolidBrush畫筆的最簡單形式,它用純色進(jìn)行繪制HatchBrush類似于SolidBrush,但是該類允許從大量預(yù)設(shè)的圖案中選擇繪制時(shí)要使用的圖案,而不是純色TextureBrush使用紋理(如圖像)進(jìn)行繪制LinearGradientBrush使用漸變混合的兩種顏色進(jìn)行繪制PathGradientBrush基于開發(fā)人員定義的唯一路徑,使用復(fù)雜的混合色漸變進(jìn)行繪制所有這些類均是從
Brush類繼承的,該類是“抽象(MustInherit)”類,不能實(shí)例化?!纠?.1
】繪制曲線。運(yùn)行結(jié)果如圖6.1所示。//繪制正弦曲線
private
void
DrawSin(){int
x1,x2;double
y1,y2;double
a;Pen
myPen=new
Pen(Color.Blue,3);x1=x2=0;y1=y2=panel1.Height/2;for
(x2=
0;x2<panel1.Width;x2++){a=2
*
Math.PI*x2/panel1.Width;y2=
Math.Sin(a);y2=
(1
y2)*panel1.Height/2;panel1.CreateGraphics().DrawLine(myPen,x1,(float)y1,x2,(float)y2);x1=x2;y1=y2;}}按照?qǐng)D6.1所示的窗體布局,向代碼中添加如下三個(gè)繪制函數(shù)//繪制正切曲線
private
void
DrawTan(){int
x1,
x2;double
y1,
y2;double
a;Pen
myPen
=
new
Pen(Color.Yellow,
2);x1
=
x2
=
0;y1
=
y2
=
panel1.Height
/
2;for
(x2
=
0;
x2
<
panel1.Width;
x2++){a
=
2
*
Math.PI
*
x2
/
panel1.Width;y2
=
Math.Tan(a);y2
=
(1 y2)
*
panel1.Height
/
2;panel1.CreateGraphics().DrawLine(myPen,
x1,
(float)y1,
x2,
(float)y2);x1
=
x2;y1
=
y2;}}//繪制余弦曲線
private
void
DrawCos(){int
x1,
x2;double
y1,
y2;double
a;Pen
myPen
=
new
Pen(Color.Red,
2);x1
=
x2
=
0;y1
=
y2
=
panel1.Height
/
2;for
(x2
=
0;
x2
<
panel1.Width;
x2++){a
=
2
*
Math.PI
*
x2
/
panel1.Width;y2
=
Math.Cos(a);y2
=
(1 y2)
*
panel1.Height
/
2;panel1.CreateGraphics().DrawLine(myPen,
x1,
(float)y1,
x2,
(float)y2);x1
=
x2;y1
=
y2;}}private
void
button1_Click(object
sender,
EventArgs
e){switch
(comboBox1.Text){case
"y=sin(x)":DrawSin();break;case
"y=cos(x)":DrawCos();break;case
"y=tan(x)":DrawTan();break;default:break;}}添加Button控件的Click事件的處理代碼:6.4圖案1.簡單圖案HatchBrush類可以從大量預(yù)設(shè)的圖案中選擇繪制時(shí)要使用的圖案,而不是純色。下面的代碼創(chuàng)建一個(gè)
HatchBrush對(duì)象,它使用方格圖案進(jìn)行繪制,并使用紅色作為前景色,藍(lán)色作為背景色。using
System.Drawing.Drawing2D;HatchBrush
aHatchBrush
=
new
HatchBrush(HatchStyle.Plaid,Color.Red,Color.Blue);2.復(fù)雜圖案紋理畫筆使用圖像作為圖案填充形狀或文本。下面的示例創(chuàng)建一個(gè)TextureBrush對(duì)象,它使用名為
myBitmap的圖像進(jìn)行繪制。TextureBrush
myBrush=new
TextureBrush(newBitmap(@"C:\myBitmap.bmp"));使用由紅色逐漸向黃色混合而形成的漸變,如圖6.2所示。代碼如下:
usingSystem.Drawing.Drawing2DGraphics
g
=this.CreateGraphics();LinearGradientBrushmyBrush
=
newLinearGradientBrush(ClientRe
ctangle,Color.Red,
Color.Yellow,LinearGradientMode.Vertical);g.FillRectangle(myBrush,ClientRectangle);3.復(fù)雜底紋
圖6.2顏色漸變漸變畫筆支持復(fù)雜底紋。使用
LinearGradientBrush類,可以
創(chuàng)建沿線性漸變的兩種顏色平滑、漸進(jìn)式的混合。
PathGradientBrush類支持許多
更復(fù)雜的底紋和著色選項(xiàng)。6.5顏色.NET框架的
Color結(jié)構(gòu)用于表示不同的顏色。顏色與筆和畫筆一起使用來指定要呈現(xiàn)的顏色。1.系統(tǒng)定義的顏色可以通過
Color結(jié)構(gòu)訪問若干系統(tǒng)定義的顏色。這些顏色的示例如下:Color
myColor;myColor
=
Color.Red;myColor
=
Color.Aquamarine;myColor
=
Color.LightGoldenrodYellow;myColor
=
Color.PapayaWhip;myColor
=
Color.Tomato;上面的每條語句均將
myColor分配給所指定名稱的系統(tǒng)定義的顏色。2.用戶定義的顏色可以使用
Color.FromArgb()方法創(chuàng)建用戶定義的顏色。定義時(shí),可以指定一種顏色中紅色、藍(lán)色和綠色各部分的強(qiáng)度。Color
myColor;myColor
=Color.FromArgb(23,56,78);此示例生成一種用戶定義的顏色,該顏色大致為略帶藍(lán)色的灰色。每個(gè)數(shù)字均必須是0~255之間的一個(gè)整數(shù),其中
0表示沒有該顏色,而
255則為所指定顏色的完整飽和度。因此,Color.FromArgb(0,0,0)呈現(xiàn)為黑色,而Color.FromArgb(255,255,255)呈現(xiàn)為白色。3.Alpha混合處理(透明度)Alpha表示所呈現(xiàn)圖形后面的對(duì)象透明度。Alpha混合處理的顏色對(duì)于各種底紋和透明度效果很有用。如果需要指定
Alpha部分,則它應(yīng)為Color.FromArgb()方法中4個(gè)參數(shù)的第一個(gè)參數(shù),并且是0~255之間的一個(gè)整數(shù)。例如:Color
myColor;myColor
=
Color.FromArgb(127,
23,
56,
78);此示例創(chuàng)建一種顏色,該顏色為略帶藍(lán)色的灰色且大致為50%的透明度。也可以通過指定
Alpha部分和以前定義的顏色來創(chuàng)建
Alpha混合處理的顏色。Color
myColor;myColor
=
Color.FromArgb(128,Color.Tomato);此示例創(chuàng)建一種顏色,該顏色大約50%的透明度,為系統(tǒng)定義的Tomato的顏色。6.6繪制線條或空心形狀Graphics對(duì)象提供繪制各種線條和形狀的方法??梢杂眉兩⑼该魃?、用戶定義的漸變混合色或圖像紋理來呈現(xiàn)簡單或復(fù)雜的形狀??墒褂肞en對(duì)象創(chuàng)建線條、非閉合的曲線和輪廓形狀。若要填充矩形或閉合曲線等區(qū)域,則需要使用Brush對(duì)象。繪制線條或空心形狀的步驟如下:獲取用于繪圖的圖形對(duì)象的引用。例如:Graphics
g=this.CreateGraphics();創(chuàng)建繪制線條的
Pen類的實(shí)例,并設(shè)置所有相應(yīng)的屬性。例如:Pen
myPen
=
new
Pen(Color.Red);myPen.Width
=
5;調(diào)用繪制形狀的方法,并提供所有需要的參數(shù)。表6.2列出了幾種最常用的方法。方
法形
狀Graphics.DrawLine表6.2繪制形狀的常用方法線條,需要指定起始點(diǎn)和終止點(diǎn)的坐標(biāo)Graphics.DrawPolygon復(fù)雜形狀,需要一個(gè)坐標(biāo)數(shù)組Graphics.DrawRectangle矩形,需要一個(gè)或多個(gè)對(duì)象(如Rectangle對(duì)象)作為參數(shù)例如:private
void
Form1_Paint(object
sender,
PaintEventArgs
e){Graphics
g
=
this.CreateGraphics();Pen
pen;Point
point
=
new
Point(10,
10);Size
sizeLine
=
new
Size(0,
150);Size
sizeOff
=
new
Size(30,
0);pen
=
Pens.LimeGreen;g.DrawLine(pen,
point
+=
sizeOff,
point
+
sizeLine);pen
=
SystemPens.MenuText;g.DrawLine(pen,
point
+=
sizeOff,
point
+
sizeLine);pen
=
new
Pen(Color.Red);g.DrawLine(pen,
point
+=
sizeOff,
point
+
sizeLine);pen
=
new
Pen(Color.Red,
8);g.DrawLine(pen,
point
+=
sizeOff,
point
+
sizeLine);pen.DashStyle
=
DashStyle.Dash;g.DrawLine(pen,
point
+=
sizeOff,
point
+
sizeLine);pen.DashStyle
=
DashStyle.Dot;g.DrawLine(pen,
point
+=
sizeOff,
point
+
sizeLine);pen.DashStyle
=
DashStyle.Solid;pen.StartCap
=
LineCap.Round;g.DrawLine(pen,
point
+=
sizeOff,
point
+
sizeLine);pen.EndCap
=
LineCap.Triangle;g.DrawLine(pen,
point
+=
sizeOff,
point
+
sizeLine);pen.DashPattern
=
new
float[]
{
0.5f,
1f,
1.5f,
2f,
2.5f
};g.DrawLine(pen,
point
+=
sizeOff,
point
+
sizeLine);}程序運(yùn)行結(jié)果如圖6.3所示。程序運(yùn)行結(jié)果如圖6.3所示。6.7繪制實(shí)心形狀繪制實(shí)心形狀步驟如下:獲取繪圖的圖形對(duì)象的引用。例如:Graphics
g=this.CreateGraphics;創(chuàng)建繪制形狀的
Brush實(shí)例。例如:SolidBrush
myBrush
=
new
SolidBrush(Color.Red);調(diào)用繪制形狀的方法,并提供所有相應(yīng)的參數(shù)。對(duì)于某些方法(如FillPolygon),必須提供一系列點(diǎn),這些點(diǎn)描述要繪制形狀的輪廓。而其他方法(如FillRectangle或FillPath)則需要一個(gè)描述要填充區(qū)域的對(duì)象。示例代碼如下:Point
point1
=
new
Point(0,
0);Point
point2
=
new
Point(0,
100);Point
point3
=
new
Point(100,
0);Point[]
curvePoints
=
{
point1,
point2,
point3
};e.Graphics.FillPolygon(myBrush,
curvePoints);g.FillRectangle(myBrush,
new
RectangleF(50,
50,
100,
100));g.FillPie(myBrush,
new
Rectangle(0,
0,
300,
300),
0,
90);程序運(yùn)行結(jié)果如圖6.4所示。圖6.4程序運(yùn)行結(jié)果6.8用GDI+顯示字符串和圖像可以使用任何圖形對(duì)象作為呈現(xiàn)文本的表面。呈現(xiàn)文本需要一個(gè)Brush對(duì)象(由它指定使用什么圖案填充文本)和一個(gè)
Font對(duì)象(它描述要填充的圖案)。字體可以是系統(tǒng)上安裝的任何已命名的字體,而畫筆可以為任意類型的畫筆。因此,有可能使用純色、圖案甚至圖像來繪制文本。【例6.2
】繪制字符串。步驟如下:獲取將用于繪圖的圖形對(duì)象的引用。例如://獲得一個(gè)圖形對(duì)象的引用Graphics
g
=
this.CreateGraphics();創(chuàng)建繪制文本要使用的“畫筆”實(shí)例。例如:System.Drawing2D.LinearGradientBrush
myBrush=newSystem.Drawing2D.LinearGradientBrush(ClientRectangle,
Color.Red,Color.Yellow,
Drawing2D.LinearGradientMode.Horizontal);創(chuàng)建顯示文本要使用的字體。例如:Font
myFont
=
new
Font("Times
New
Roman",
24);(4)調(diào)用Graphics對(duì)象
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年個(gè)人產(chǎn)權(quán)式酒店買賣合同樣本4篇
- 2025年代理推廣銷售分銷合同
- 2025版美容美發(fā)機(jī)構(gòu)員工勞動(dòng)合同與解除協(xié)議4篇
- 2025年房屋租賃合同環(huán)保條款補(bǔ)充協(xié)議3篇
- 2025年企業(yè)數(shù)據(jù)加密備份合同
- 2025年冀教版選擇性必修3歷史上冊(cè)月考試卷含答案
- 2025年公共文化贈(zèng)與合同
- 2025年度新型城鎮(zhèn)化泥工班組勞務(wù)承包合同范本7篇
- 二零二五年度城市景觀照明設(shè)備安裝與運(yùn)營合同2篇
- 2025年工研資本控股股份有限公司招聘筆試參考題庫含答案解析
- 無人化農(nóng)場項(xiàng)目可行性研究報(bào)告
- 《如何存款最合算》課件
- 社區(qū)團(tuán)支部工作計(jì)劃
- 拖欠工程款上訪信范文
- 2024屆上海市金山區(qū)高三下學(xué)期二模英語試題(原卷版)
- 學(xué)生春節(jié)安全教育
- 《wifi協(xié)議文庫》課件
- 《好東西》:女作者電影的話語建構(gòu)與烏托邦想象
- 教培行業(yè)研究系列(七):出國考培的再研究供需變化的新趨勢
- GB/T 44895-2024市場和社會(huì)調(diào)查調(diào)查問卷編制指南
- 高三日語一輪復(fù)習(xí)助詞「で」的用法課件
評(píng)論
0/150
提交評(píng)論