版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第四章圖形、圖像與多媒體GDI:GraphicsDeviceInterface圖形圖像及多媒體處理也是C#的重要應用。.NET框架通過封裝GDI+實現(xiàn)了圖形圖像的處理功能。利用C#可以開發(fā)出強大的圖形、圖像與多媒體程序。
GDI+是Microsoft?Windows?XP操作系統(tǒng)的子系統(tǒng),負責在屏幕和打印機上顯示信息。顧名思義,GDI+是GDI(Windows早期版本提供的圖形設(shè)備接口)的后續(xù)版本。GDI+是一種應用程序編程接口(API),通過一套部署為托管代碼的類來展現(xiàn)。這套類被稱為GDI+的“托管類接口”。應用程序的程序員可利用GDI+這樣的圖形設(shè)備接口在屏幕或打印機上顯示信息,而不需要考慮特定顯示設(shè)備的具體情況。應用程序的程序員調(diào)用GDI+類提供的方法,而這些方法又反過來相應地調(diào)用特定的設(shè)備驅(qū)動程序。GDI+將應用程序與圖形硬件隔離,而正是這種隔離允許開發(fā)人員創(chuàng)建設(shè)備無關(guān)的應用程序。1版權(quán)所有目錄GDI+概述GDI+繪圖基礎(chǔ)基本的繪圖方法圖像的顯示與處理聲音與視頻的播放2版權(quán)所有4.1GDI+概述早期的Window程序中,可以使用GDI(GraphicsDeviceInterface,圖形設(shè)備接口)在一個窗體中繪制圖形、文本和圖像,但它的功能有限。GDI+是GDI的一個新版本,它不僅在GDI基礎(chǔ)上添加許多新特性,而且對原有的GDI功能進行優(yōu)化,并在為開發(fā)人員提供的二維矢量圖形、文本、圖像處理、區(qū)域、路徑以及圖形數(shù)據(jù)矩陣等方面構(gòu)造了一系列相關(guān)的類。其中,圖形類Graphics是GDI+接口中的一個核心類,許多繪圖操作都可用它完成。3版權(quán)所有4.1.1GDI+命名空間
GDI+包含大約60個類、50個枚舉和8個結(jié)構(gòu)。所有的函數(shù)都保存在System.Drwaing.dll程序集中。
System.Drawing命名空間提供了對GDI+基本圖形功能的訪問。在System.Drawing.Drawing2D、System.Drawing.Imaging
以及System.Drawing.Text
命名空間中提供了更高級的功能。System.Drawing.Drawing2D命名空間提供高級的二維和矢量圖形功能。此命名空間包含梯度型畫刷、Matrix
類(用于定義幾何變換)和GraphicsPath
類。
System.Drawing.Design命名空間:包含擴展設(shè)計時用戶界面(UI)邏輯和繪制的類。這些類可用于創(chuàng)建自定義工具欄的項、類型特定的值編輯器(可以編輯并可以用圖形方式表示其支持的類型的值)和類型轉(zhuǎn)換器(在一定的類型之間轉(zhuǎn)換值)。
System.Drawing.Imaging命名空間提供高級GDI+圖像處理功能。Metafile
類提供記錄和保存圖元文件的方法。Encoder
和Decoder類允許用戶擴展GDI+以支持任何圖像格式。PropertyItem
類提供在圖像文件中存儲和檢索元數(shù)據(jù)的方法。
System.Drawing.Text命名空間提供高級GDI+排版功能。該命名空間中的類允許用戶創(chuàng)建和使用多種字體。
System.Drawing.Printing命名空間提供與打印相關(guān)的服務。通常,您會創(chuàng)建PrintDocument
類的新實例,設(shè)置對打印內(nèi)容進行描述的屬性,然后調(diào)用Print
方法來實際打印文檔。4版權(quán)所有4.1.2基本數(shù)據(jù)結(jié)構(gòu)在繪圖操作中,常常需要使用Point(點)、Size(大小)和Rectangle(矩形)等簡單的數(shù)據(jù)結(jié)構(gòu)。5版權(quán)所有6版權(quán)所有
2.基本運算符操作
Point、Size和Reactangle類結(jié)構(gòu)重載了常用的運算符操作,如Point和Size結(jié)構(gòu)的+、-、==、!=操作,Rectangle結(jié)構(gòu)的==、!=操作等。這里只介紹Point和Size結(jié)構(gòu)的+和-操作。(1)“+”操作若向Point對象加上一個Size對象,則返回Point對象。例如:Drawing.Pointpt=newDrawing.Point(25,-18)+newSystem.Drawing.Size(10,5);則結(jié)果為Point(35,-13)。若向Size對象加上一個Size對象,則是它們的寬度和高度分別相加。Sizesz=newSize(50,50)+newSize(10,10);(2)“-”操作若向Point對象減去一個Size對象,則返回Point對象。例如:Drawing.Pointpt=Drawing.Point(25,-19)+Drawing(15,5);若向Size對象減一個Size對象,則是它們的寬度和高度分別相減。Sizesz=newSize(50,50)-newSize(10,10);7版權(quán)所有
3.Rectangle結(jié)構(gòu)的常用操作(1)擴大和縮小使用Inflate方法。voidInflate(Sizesize)voidInflate(int
widht,intheight);(2)相交和合并成員方法Iniersect和Union分別用來將兩個矩形進行相交和合并。voidIntersect(Rectanglerect)staticRectangleIntersect(Rectanglea,Rectangleb);staticRectangleUnion(Rectanglea,Rectangleb);8版權(quán)所有(3)移動
Offset方法用來調(diào)整矩形的位置。voidOffset(Pointpos);voidOffset(int
x,inty);(4)測試和判斷IntersectsWith方法用來判斷是否和指定的矩形相交。若有相交,則返回true,否則返回false。bool
IntersectWidth(Rectangle
rect);9版權(quán)所有4.1.3處理圖形圖像的步驟處理圖形包括兩個步驟:創(chuàng)建Graphics對象;使用Graphics對象繪制線條和形狀、呈現(xiàn)文本或顯示與操作圖像。10版權(quán)所有4.2GDI+繪圖基礎(chǔ)4.2.1坐標系統(tǒng)
1.全局坐標、頁面坐標和設(shè)備坐標
2.Grahpics與坐標系統(tǒng)有關(guān)的成員
3.全局變換全局坐標到頁面坐標的坐標變換叫做全局變換,保存在Graphics類的Transform屬性中。主要包含兩種變換:平移(TranslateTransform)、旋轉(zhuǎn)(RotateTransform)、比例(ScaleTransform)。11版權(quán)所有4.頁面變換頁面坐標的原點總是在虛擬繪圖平面的左上角。由于頁面坐標標度量單位是像素,所以設(shè)備坐標與頁面坐標是相同的。但如果將頁面坐標改成其他的單位(如英寸),兩者就不同了。這時發(fā)生頁面坐標到設(shè)備坐標的變換稱為頁面變換。Graphics類的PageUnit和PageScale兩個屬性提供頁面變換操作。12版權(quán)所有【案例4-1】建立坐標系并畫圓。設(shè)計一個坐標系,坐標原點在窗體的中心,單位為英才,X軸向右為正,Y軸向上為正,畫出坐標軸,在此坐標系繪制一個圓,圓心在坐標圓點,半徑為1英寸。13版權(quán)所有4.2.2
畫筆畫筆是繪制各種直線和曲線的一種圖形工具,它主要有線型、顏色和線寬屬性。默認的線寬為1個像素,線型為實線。14版權(quán)所有1.建立Pen對象(1)直接使用Pen類構(gòu)造函數(shù)。常用下面的三種重載形式:publicPen(Colorc):創(chuàng)建某一種顏色的Pen對象。publicPen(Colorc,floatw):創(chuàng)建某一種顏色和相應寬度的Pen對象。publicPen(Brushb):創(chuàng)建某一刷子樣式的Pen對象。publicPen(Brushb,floatw):創(chuàng)建某一刷子樣式并具有相應寬度的Pen對象。15版權(quán)所有(2)從SystemPens和Pens類獲取Pen對象的引用。System.Drawing.SystemPens類用于創(chuàng)建與用戶界面單位和系統(tǒng)顏色相匹配的筆。該類的每一個共享屬性都返回一個Pen對象的引用。例如:Penpe=SystemPens.HighlightText;//畫筆使用選定項的文本顏色。16版權(quán)所有2.Pen的常用屬性Brush屬性。獲取或設(shè)置用于確定此Pen對象的屬性的Brush對象。Color屬性。獲取或設(shè)置此Pen對象的顏色。Width屬性。獲取或設(shè)置此Pen對象的寬度。DashStyle屬性。獲取或設(shè)置用于通過此Pen對象繪制的虛線的樣式。DashCap屬性。獲取或設(shè)置用在短劃線終點的帽樣式,Drawing2D.DashCap枚舉值。17版權(quán)所有EndCap屬性。獲取或設(shè)置用在通過此Pen對象繪制的直線終點的帽樣式。取Drawing2D.LineCap枚舉值,如表4-4所示。StartCap屬性。獲取或設(shè)置用在通過此Pen對象繪制的直線起點的帽樣式。取Drawing2D.LineCap枚舉值,如表4-4所示。LineJoin屬性。獲取或設(shè)置通過此Pen對象繪制的兩條連續(xù)直線終點之間的聯(lián)接樣式。指定如何在圖形(子路徑)中聯(lián)接連續(xù)的直線或曲線段,該圖形(子路徑)包含在GraphicsPath對象中。Drawing2D.LineJoin枚舉值。18版權(quán)所有2.畫刷Brush類決定如何填充圖形形狀(如矩形、橢圓形、扇形、多邊形和封閉路徑)內(nèi)部。這是一個抽象基類,不能進行實例化。若要創(chuàng)建一個畫刷對象,可使用從Brush派生出的類。這些派生類主要有:SolidBrush(單色畫刷)、TextureBrush(紋理畫刷)、HatchBrush(陰影畫刷)、LinearGradientBrush(線性漸變畫刷)、PathGradientBrush(路徑漸變畫刷)。前兩個定義在System.Drawing命名空間中,后三個定義在System.Drawing.Drawing2D命名空間中。19版權(quán)所有4.3基本的繪圖方法4.3.1繪制線條或形狀1.畫直線使用Graphics的DrawLine方法可以繪制直線。publicvoidDrawLine(Pen
pen,intx1,inty1,intx2,inty2):繪制一條連接由坐標對指定的兩個點的線條。publicvoidDrawLine(Penpen,floatx1,floaty1,floatx2,floaty2):繪制一條連接由坐標對指定的兩個點的線條。publicvoidDrawLine(Penpen,Pointp1,Pointp2):繪制一條連接兩個Point結(jié)構(gòu)的線。20版權(quán)所有2.畫橢圓使用Graphics的DrawEllipse方法可以繪制橢圓。publicvoidDrawEllipse(Penpen,Rectanglerect):繪制邊界Rectangle結(jié)構(gòu)指定的橢圓。publicvoidDrawEllipse(Penpen,intx,inty,intw,inth):繪制一個由邊框(該邊框由一對坐標、高度和寬度指定)定義的橢圓。publicvoidDrawEllipse(Pen,float,float,float,float):繪制一個由邊框(該邊框由一對坐標、高度和寬度指定)定義的橢圓。21版權(quán)所有3.繪制圓弧使用Graphics的DrawArc方法可以繪制圓弧。publicvoidDrawArc(Penpen,Rectanglerect,floatstartAngle,floatsweepAngle):繪制一段弧線,它表示Rectangle結(jié)構(gòu)指定的橢圓的一部分。publicvoidDrawArc(Penpen,intx,inty,intw,inth,int
startAngle,int
sweepAngle):繪制一段弧線,它表示由一對坐標、寬度和高度指定的橢圓部分。publicvoidDrawArc(Penpen,floatx,floaty,floatw,floath,floatstartAngle,floatsweepAngle):繪制一段弧線,它表示由一對坐標、寬度和高度指定的橢圓部分。
22版權(quán)所有4.畫扇形圖使用Graphics的DrawPie方法可以繪制扇形圖,所謂扇形圖其實質(zhì)就是一段圓弧的兩個端點與圓心相連。DrawPie方法的格式與DrawArc方法基本一致。23版權(quán)所有5.畫矩形使用Graphics的DrawRectangle方法可以繪制矩形。publicvoidDrawRectangle(Penpen,Rectangler):繪制由Rectangle結(jié)構(gòu)指定的矩形。publicvoidDrawRectangle(Penpen,intx,inty,intw,inth):繪制由坐標對、寬度和高度指定的矩形。publicvoidDrawRectangle(Penpen,floatx,floaty,floatw,floath):繪制由坐標對、寬度和高度指定的矩形。24版權(quán)所有6.畫多邊形使用Graphics的DrawPolygon方法可以繪制多邊形。publicvoidDrawPolygon(Penpen,Point[]p):繪制由一組Point結(jié)構(gòu)定義的多邊形publicvoidDrawPolygon(Penpen,PointF[]p):繪制由一組PointF結(jié)構(gòu)定義的多邊形。25版權(quán)所有7.畫貝塞爾樣條曲線使用Graphics的DrawBezier方法可以繪制貝塞爾樣條曲線。publicvoidDrawBezier(Penpen,Pointp1,Pointp2,Pointp3,Pointp4):繪制由4個Point結(jié)構(gòu)定義的貝塞爾樣條。publicvoidDrawBezier(Penpen,PointFp1,PointFp2,PointFp3,PointFp4):繪制由4個PointF結(jié)構(gòu)定義的貝塞爾樣條。publicvoidDrawBezier(Penpen,floatx1,floaty1,floatx2,floaty2,floatx3,floaty3,floatx4,floaty4):繪制由四個表示點的有序坐標對定義的貝塞爾樣條。26版權(quán)所有8.繪制閉合曲線使用Graphics的DrawClosedCurve方法可以閉合曲線。publicvoidDrawClosedCurve(Penpen,Point[]p):繪制由Point結(jié)構(gòu)的數(shù)組定義的閉合基數(shù)樣條。publicvoidDrawClosedCurve(Penpen,PointF[]p):繪制由PointF結(jié)構(gòu)的數(shù)組定義的閉合基數(shù)樣條。publicvoidDrawClosedCurve(Penpen,Point[]p,floatt,FillModefm):使用指定的張力繪制由Point結(jié)構(gòu)數(shù)組定義的閉合基數(shù)樣條。publicvoidDrawClosedCurve(Penpen,PointF[]p,floatt,FillMode):使用指定的張力繪制由PointF結(jié)構(gòu)數(shù)組定義的閉合基數(shù)樣條。27版權(quán)所有9.繪制非閉合曲線使用Graphics的DrawCurve方法可以非閉合曲線。參數(shù)格式同上述繪制閉合曲線的第一個方法。10.繪制路徑使用Graphics的DrawPath方法可以繪制路徑。路徑是直線、矩形、多邊形或曲線等組成。publicvoidDrawPath(Penpen,GraphicsPathpath):繪制GraphicsPath對象。28版權(quán)所有11.繪制填充圖形和上述方法對應的,還有一組Fill開頭的方法,可以用來繪制填充圖形。例如:FillEcllips方法可以繪制填充橢圓。29版權(quán)所有【案例4-2】繪制一個小汽車。利用基本的繪圖方法,在界面上繪制一個小車。30版權(quán)所有【案例4-3】一個簡單的繪圖程序。本案例是一個簡單的繪圖程序,能夠利用鼠標任意畫,能夠畫直線、橢圓及矩形,可以設(shè)置色彩。31版權(quán)所有4.3.2繪制文字可以使用任何圖形對象作為繪制文本的表面。繪制文本需要一個Brush對象(它指示將使用什么圖案填充文本)和一個Font對象(它描述要填充的圖案)。字體可以是系統(tǒng)上安裝的任何已命名的字體,而畫筆可以為任意類型的畫筆。因此,有可能使用純色、圖案或者甚至圖像來繪制文本。32版權(quán)所有4.4圖像的顯示與處理4.4.1圖像的顯示1.Bitmap類Bitmap類封裝GDI+位圖,此位圖由圖形圖像及其屬性的像素數(shù)據(jù)組成。Bitmap對象是用于處理由像素數(shù)據(jù)定義的圖像的對象??梢詮母鞣N各樣的圖形文件格式(BMP、GIF、JPEG、EXIF、PNG、TIFF和ICON)中構(gòu)造Bitmap對象。33版權(quán)所有(1)主要的屬性Flags:獲取此Image對象的屬性標記。Height:獲取此Image對象的高度。Palette:獲取或設(shè)置用于此Image對象的調(diào)色板。RawFormat:獲取此Image對象的格式。Size:獲取此圖像的以像素為單位的寬度和高度。Width:獲取此Image對象的寬度。34版權(quán)所有(2)主要的方法Clone():創(chuàng)建此Bitmap(用指定的PixelFormat
定義)部分的副本。FromHicon():從圖標的Windows句柄創(chuàng)建Bitmap。FromResource():從指定的Windows資源創(chuàng)建Bitmap對象。GetBounds():以指定的單位獲取此Image對象的邊框。GetPixel():獲取此Bitmap中指定像素的顏色。GetThumbnailImage():返回此Image對象的縮略圖。Save():將此圖像以指定的格式保存到指定的流中。SetPixel():設(shè)置Bitmap對象中指定像素的顏色。35版權(quán)所有2.圖像的顯示若使用Image來顯示圖像??梢杂肐mage的靜態(tài)方法FromFile()來加載圖像文件。如:Imageim=Image.FromFile(“c:\\ba.jpg”);g.DrawImage(im,0,0);36版權(quán)所有4.4.2保存、拷貝和粘貼保存圖像可以使用Bitmap的Save方法。例如:pictureBox1.image.Save("c:\\myimage.bmp");在保存圖像時,還可以指定圖像文件的格式。例如:pictureBox1.image.Save("c:\\myimage.bmp");pictureBox1.image.Save("c:\\myimage.bmp");pictureBox1.image.Save("c:\\myimage.bmp",ImageFormat.Jpeg);37版權(quán)所有Bitmap類提供了Clone方法,可用于制作現(xiàn)有Bitmap對象的副本。Clone方法帶有源矩形參數(shù),可用于指定要復制的原始位圖的部分。下面的示例通過拷貝現(xiàn)有Bitmap對象的上半部分來創(chuàng)建Bitmap對象。然后繪制兩幅圖像。38版權(quán)所有4.4.3圖像處理1.彩色圖像變成灰度圖像將彩色圖像像素值分解為三基色R、G、B,求其和的平均值,然后使用SetPixel方法以該平均值參數(shù)生成圖像。對一個像素的處理過程如下:(1)取顏色值Colorc=im.GetPixel(i,j);//im為Bitmap類型對象39版權(quán)所有(2)分解顏色值intr=c.R;intg=c.R;intb=c.R;(3)取平均,生成新的顏色intcc=(r+g+b)/3;Colorc1=Coloe.FromArgb(cc,cc,cc);(4)設(shè)定圖像顏色im1.SetPixel(i,j,c1);//im1是im的復制40版權(quán)所有2.對圖像進行浮雕處理將彩色圖像像素值分解為三基色R、G、B,分別與相鄰像素的三基色R、G、B相減后加上一個常量(128)。然后作為新的像素的RGB顏色值(為了防止顏色溢出,需處理小于0和大于255的顏色值)。對一個像素的處理過程如下:(1)取兩個像素的顏色值Colorc1=im.GetPixel(i,j);//im為Bitmap類型對象Colorc2=im.GetPixel(i+1,j+1);//取相鄰像素的顏色值41版權(quán)所有(2)對兩個像素的顏色值進行分解,相減后加上128,
intr=Math.Abs(c1.R-c2.R)+128;
intg=Math.Abs(c1.G-c2.G)+128;
intb=Math.Abs(c1.B-c2.B)+128;(3)處理后生成新的顏色
if(r<0)r=0; if(r>255)r=255; if(g<0)g=0; if(g>255)g=255; if(b<0)b=0; if(b>255)b=255;Colorcc=Coloe.FromArgb(r,g,b);(4)設(shè)定圖像顏色im1.SetPixel(i,j,cc);//im1是im的復制42版權(quán)所有3.圖像的透明度處理取出顏色值后,再給定一個透明度的值,利用Color.FromRgb(inta,Colorc)方法即可生成目標圖像的顏色值。從而實現(xiàn)不同的透明效果。參數(shù)a的取值在0~255之間。c=im.GetPixel(i,j);Colorcc=Color.FromArgb(a,c);im.SetPixel(i,j,cc);43版權(quán)所有4.圖像的旋轉(zhuǎn)與拉伸圖像的旋轉(zhuǎn)可以使用Image類的RotateFlip方法實現(xiàn),它只有一個RotateFlipType枚舉參數(shù),用來指定圖像的旋轉(zhuǎn)和翻轉(zhuǎn)的類型。44版權(quán)所有5.圖像格式轉(zhuǎn)換GDI+的Image類中有一個Save方法,它可以用來將圖像按指定的格式保存文件中。格式如下:voidSave(stringfilename,ImageFormatformat);其中,filename用來指定要保存的文件名,format用來指定要保存的格式,可以直接引用ImageFormat類的靜態(tài)成員屬性來指定。45版權(quán)所有【案例4-4】圖像處理程序。創(chuàng)建一個Windows應用程序,在窗體上添加兩個圖片框和三個按鈕。第一個圖片顯示原圖像,第二個圖片框顯示處理后的圖像。46版權(quán)所有4.5聲音與視頻的播放4.5.1MediaPlayer控件及其使用在C#中,可以引用Windows自帶的WindowsMediaPlayer組件播放多種格式的視頻和音頻文件,包括MPEG視頻、AVI、WAV和MIDI等格式的文件。47版權(quán)所有1.添加
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療健康數(shù)據(jù)挖掘分析-洞察分析
- 藥物治療與生活方式干預結(jié)合-洞察分析
- 專題2.8 有理數(shù)的實際應用【八大題型】(舉一反三)(人教版2024)(解析版)
- 溯源鏈在食品領(lǐng)域的應用-洞察分析
- 文學原型的跨文化比較研究-洞察分析
- 醫(yī)療設(shè)施信息安全防護-洞察分析
- 信息化在文物管理中的應用-洞察分析
- 消費者需求挖掘-洞察分析
- 反詐宣傳進萬家工作總結(jié)范文(6篇)
- 油氣生產(chǎn)自動化-洞察分析
- 世界文化遺產(chǎn)-樂山大佛課件
- 任人處置的作文完整的
- 用工申請單(標準模版)
- 《護理臨床帶教》課件
- 艾滋病病毒抗體快速檢測技術(shù)手冊(2011年版)
- 企業(yè)信息安全意識培訓課件
- 公安派出所建筑外觀形象設(shè)計規(guī)范1
- 大氣課設(shè)-酸洗廢氣凈化系統(tǒng)
- 2023年1月福建省普通高中學生學業(yè)基礎(chǔ)會考地理試題
- 調(diào)機品管理規(guī)定
- 2022年中等職業(yè)學校公共藝術(shù)課程教學大綱
評論
0/150
提交評論