C-實(shí)用教程鄭阿奇主編電子教案第六章_第1頁
C-實(shí)用教程鄭阿奇主編電子教案第六章_第2頁
C-實(shí)用教程鄭阿奇主編電子教案第六章_第3頁
C-實(shí)用教程鄭阿奇主編電子教案第六章_第4頁
C-實(shí)用教程鄭阿奇主編電子教案第六章_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論