亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#圖形編程GDI+基礎(chǔ)介紹

 更新時(shí)間:2022年02月25日 09:29:01   作者:.NET開發(fā)菜鳥  
這篇文章介紹了C#中的圖形編程GDI+,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

編寫圖形程序時(shí)需要使用GDI(Graphics Device Interface,圖形設(shè)備接口),從程序設(shè)計(jì)的角度看,GDI包括兩部分:一部分是GDI對(duì)象,另一部分是GDI函數(shù)。GDI對(duì)象定義了GDI函數(shù)使用的工具和環(huán)境變量,而GDI函數(shù)使用GDI對(duì)象繪制各種圖形,在C#中,進(jìn)行圖形程序編寫時(shí)用到的是GDI+(Graphice Device Interface Plus圖形設(shè)備接口)版本,GDI+是GDI的進(jìn)一步擴(kuò)展,它使我們編程更加方便。

GDI+概述

GDI+是微軟在Windows 2000以后操作系統(tǒng)中提供的新的圖形設(shè)備接口,其通過一套部署為托管代碼的類來展現(xiàn),這套類被稱為GDI+的“托管類接口”,GDI+主要提供了以下三類服務(wù): 
(1)二維矢量圖形:GDI+提供了存儲(chǔ)圖形基元自身信息的類(或結(jié)構(gòu)體)、存儲(chǔ)圖形基元繪制方式信息的類以及實(shí)際進(jìn)行繪制的類。
(2)圖像處理:大多數(shù)圖片都難以劃定為直線和曲線的集合,無法使用二維矢量圖形方式進(jìn)行處理。因此,GDI+為我們提供了Bitmap、Image等類,它們可用于顯示、操作和保存BMP、JPG、GIF等圖像格式。
(3)文字顯示:GDI+支持使用各種字體、字號(hào)和樣式來顯示文本。
我們要進(jìn)行圖形編程,就必須先講解Graphics類,同時(shí)我們還必須掌握Pen、Brush和Rectangle這幾種類。GDI+比GDI優(yōu)越主要表現(xiàn)在兩個(gè)方面:第(一)GDI+通過提供新功能(例如:漸變畫筆和alpha混合)擴(kuò)展了GDI的功能;第(二)修訂了編程模型,使圖形編程更加簡(jiǎn)易靈活。

Graphics類

Graphics類封裝一個(gè)GDI+繪圖圖面,提供將對(duì)象繪制到顯示設(shè)備的方法,Graphics與特定的設(shè)備上下文關(guān)聯(lián)。畫圖方法都被包括在Graphics類中,在畫任何對(duì)象(例如:Circle,Rectangle)時(shí),我們首先要?jiǎng)?chuàng)建一個(gè)Graphics類實(shí)例,這個(gè)實(shí)例相當(dāng)于建立了一塊畫布,有了畫布才可以用各種畫圖方法進(jìn)行繪圖。
繪圖程序的設(shè)計(jì)過程一般分為兩個(gè)步驟:

  •   (一)創(chuàng)建Graphics對(duì)象;
  •   (二)使用Graphics對(duì)象的方法繪圖、顯示文本或處理圖像。

通常我們使用下述三種方法來創(chuàng)建一個(gè)Graphics對(duì)象。

方法一、利用控件或窗體的Paint事件中的PainEventArgs在窗體或控件的Paint事件中接收對(duì)圖形對(duì)象的引用,作為PaintEventArgs (PaintEventArgs指定繪制控件所用的Graphics)的一部分,在為控件創(chuàng)建繪制代碼時(shí),通常會(huì)使用此方法來獲取對(duì)圖形對(duì)象的引用。

例如:

//窗體的Paint事件的響應(yīng)方法
private?void?form1_Paint(object?sender,?PaintEventArgs?e)?
{?
????Graphics?g?=?e.Graphics;?
}?

也可以直接重載控件或窗體的OnPaint方法,具體代碼如下所示:

protected?override?void?OnPaint(PaintEventArgs?e)??
{?
????Graphics?g?=?e.Graphics;?
}

Paint事件在重繪控件時(shí)發(fā)生。 

方法二、調(diào)用某控件或窗體的CreateGraphics方法

調(diào)用某控件或窗體的CreateGraphics方法以獲取對(duì)Graphics對(duì)象的引用,該對(duì)象表示該控件或窗體的繪圖圖面。如果想在已存在的窗體或控件上繪圖,通常會(huì)使用此方法。

例如:

Graphics?g?=?this.CreateGraphics();?

方法三、調(diào)用Graphics類的FromImage靜態(tài)方法

由從Image繼承的任何對(duì)象創(chuàng)建Graphics對(duì)象。在需要更改已存在的圖像時(shí),通常會(huì)使用此方法。

例如:

//名為“g1.jpg”的圖片位于當(dāng)前路徑下
Image?img?=?Image.FromFile("g1.jpg");//建立Image對(duì)象
Graphics?g?=?Graphics.FromImage(img);//創(chuàng)建Graphics對(duì)象

1.Graphics類的方法成員

有了一個(gè)Graphics的對(duì)象引用后,就可以利用該對(duì)象的成員進(jìn)行各種各樣圖形的繪制,表1列出了Graphics類的常用方法成員。

名稱說明

 DrawArc 

畫弧。
DrawBezier畫立體的貝爾塞曲線。
DrawBeziers畫連續(xù)立體的貝爾塞曲線。
DrawClosedCurve畫閉合曲線。
DrawCurve畫曲線。
DrawEllipse畫橢圓。
DrawImage畫圖像。
DrawLine畫線。
DrawPath通過路徑畫線和曲線。
DrawPie畫餅形。
DrawPolygon畫多邊形。
DrawRectangle畫矩形。
DrawString 繪制文字。
FillEllipse填充橢圓。
FillPath填充路徑。
FillPie填充餅圖。
FillPolygon填充多邊形。
FillRectangle填充矩形。
FillRectangles填充矩形組。
FillRegion填充區(qū)域。

在.NET中,GDI+的所有繪圖功能都包括在System、System.Drawing、System.Drawing.Imaging、System.Drawing.Darwing2D和System.Drawing.Text等命名空間中,因此在開始用GDI+類之前,需要先引用相應(yīng)的命名空間。

2.引用命名空間

在C#應(yīng)用程序中使用using命令已用給定的命名空間或類,下面是一個(gè)C#應(yīng)用程序引用命名空間的例子:

using?System;?
using?System.Collections.Generic;?
using?System.Data;?
using?System.ComponentModel;?
using?System.Drawing;?
using?System.Drawing.Drawing2D;?
using?System.Drawing.Imaging;

常用畫圖對(duì)象

在創(chuàng)建了Graphics對(duì)象后,就可以用它開始繪圖了,可以畫線、填充圖形、顯示 
文本等等,其中主要用到的對(duì)象還有: Color:用來用patterns、colors或者bitmaps進(jìn)行填充。
Pen:用來畫線和多邊形,包括矩形、圓和餅形。
Font:用來給文字設(shè)置字體格式。
Brush:用來描述顏色。
Rectangle:矩形結(jié)構(gòu)通常用來在窗體上畫矩形。
Point:描述一對(duì)有序的x,y兩個(gè)坐標(biāo)值。

1.Pen類

Pen用來繪制指定寬度和樣式的直線。使用DashStyle屬性繪制幾種虛線,可以使用各種填充樣式(包括純色和紋理)來填充Pen繪制的直線,填充模式取決于畫筆或用作填充對(duì)象的紋理。

使用畫筆時(shí),需要先實(shí)例化一個(gè)畫筆對(duì)象,主要有以下幾種方法。

用指定的顏色實(shí)例化一只畫筆的方法如下:

public?Pen(Color);

用指定的畫刷實(shí)例化一只畫筆的方法如下:

public?Pen(Brush);

用指定的畫刷和寬度實(shí)例化一只畫筆的方法如下:

public?Pen(Brush,?float);?

用指定的顏色和寬度實(shí)例化一只畫筆的方法如下:

public?Pen(Color,?float);?

實(shí)例化畫筆的語句格式如下:

Pen?pn=new?Pen(Color.Blue);

或者

Pen?pn=new?Pen(Color.Blue,100);

Pen常用的屬性有以下幾個(gè),如下表所示:

名稱說明
Alignment獲得或者設(shè)置畫筆的對(duì)齊方式。
Brush獲得或者設(shè)置畫筆的屬性。
Color獲得或者設(shè)置畫筆的顏色。
Width獲得或者設(shè)置畫筆的寬度。

2.Color類

在自然界中,顏色大都由透明度(A)和三基色(R,G,B)所組成。在GDI+中,通過Color結(jié)構(gòu)封裝對(duì)顏色的定義,Color結(jié)構(gòu)中,除了提供(A,R,G,B)以外,還提供許多系統(tǒng)定義的顏色,如Pink(粉顏色),另外,還提供許多靜態(tài)成員,用于對(duì)顏色進(jìn)行操作。Color結(jié)構(gòu)的基本屬性如下表所示:

名稱說明
A

獲取此Color結(jié)構(gòu)的alpha分量值,取值(0~255)。

R獲取此Color結(jié)構(gòu)的紅色分量值,取值(0~255)。
G獲取此Color結(jié)構(gòu)的綠色分量值,取值(0~255)。
B獲取此Color結(jié)構(gòu)的藍(lán)色分量值,取值(0~255)。
Name獲取此Color結(jié)構(gòu)的名稱,這將返回用戶定義的顏色的名稱或已知顏色的名稱(如果該顏色是從某個(gè)名稱創(chuàng)建的),對(duì)于自定義的顏色,將返回RGB值。

Color類的基本(靜態(tài))方法如下表所示:

名稱說明
FromArgb從四個(gè)8位ARGB分量(alpha、紅色、綠色和藍(lán)色)值創(chuàng)建Color對(duì)象。
FromKnowColor從指定的預(yù)定義顏色創(chuàng)建一個(gè)Color對(duì)象。
FromName從預(yù)定義顏色的指定名稱創(chuàng)建一個(gè)Color對(duì)象。

Color類的對(duì)象可以通過已有顏色構(gòu)造,也可以通過RGB建立,例如:

Color?clr1?=?Color.FromArgb(122,25,255);
Color?clr2?=?Color.FromKnowColor(KnowColor.Brown);//KnownColor為枚舉類型
Color?clr3?=?Color.FromName("SlateBlue");

在圖像處理中一般需要獲取或設(shè)置像素的顏色值,獲取一幅圖像的某個(gè)像素顏色值的具體步驟如下:

(1)定義Bitmap

Bitmap?myBitmap?=?new?Bitmap("c:\\MyImages\\TestImage.bmp");

(2)定義一個(gè)顏色變量把在指定位置所取得的像素值存入顏色變量中

Color?c?=?new?Color();
c?=?myBitmap.GetPixel(10,10);//獲取此Bitmap中指定像素的顏色。

(3)將顏色值分解出單色分量值

int?r,g,b;?
r=?c.R;?
g=c.G;?
b=c.B;

3.Font類

Font類定義特定文本格式,包括字體、字號(hào)和字形屬性。Font類的常用構(gòu)造函數(shù)是public Font(string字體名,float字號(hào),F(xiàn)ontStyle字形),其中字號(hào)和字體為可選項(xiàng)和public Font(string字體名,float 字號(hào)),其中“字體名”為Font的FontFamily的字符串表示形式。下面是定義一個(gè)Font對(duì)象的例子代碼:

FontFamily?fontFamily?=?new?FontFamily("Arial");?
Font?font?=?new?Font(fontFamily,16,FontStyle.Regular,GraphicsUnit.Pixel);

字體常用屬性如下表所示:

名稱說明
Bold 是否為粗體。
FontFamily字體成員。
Height 字體高。
Italic是否為斜體。
Name字體名稱。
Size 字體尺寸。
SizeInPoints 

獲取此Font對(duì)象的字號(hào),以磅為單位。

Strikeout是否有刪除線。
Style 字體類型。
Underline是否有下劃線。
Unit字體尺寸單位。

4.Brush類

Brush類是一個(gè)抽象的基類,因此它不能被實(shí)例化,我們總是用它的派生類進(jìn)行實(shí)例化一個(gè)畫刷對(duì)象,當(dāng)我們對(duì)圖形內(nèi)部進(jìn)行填充操作時(shí)就會(huì)用到畫刷。

5.Rectangle類

存儲(chǔ)一組整數(shù),共四個(gè),表示一個(gè)矩形的位置和大小。矩形結(jié)構(gòu)通常用來在窗體上畫矩形,除了利用它的構(gòu)造函數(shù)構(gòu)造矩形對(duì)象外,還可以使用Rectangle結(jié)構(gòu)的屬性成員,其屬性成員如下表所示:

名稱說明
Bottom 底端坐標(biāo)
Height 矩形高
IsEmpty

測(cè)試矩形寬和高是否為0 

Left 矩形左邊坐標(biāo)
Location

矩形的位置

Right 

矩形右邊坐標(biāo)

Size 

矩形尺寸

Top 矩形頂端坐標(biāo)
Width矩形寬

矩形左上角頂點(diǎn)X坐標(biāo)

Y

矩形左上角頂點(diǎn)Y坐標(biāo)

Retangle結(jié)構(gòu)的構(gòu)造函數(shù)有以下兩個(gè):

1、用指定的位置和大小初始化Rectangle類的新實(shí)例。

public?Retangle(Point,Size);//Size結(jié)構(gòu)存儲(chǔ)一個(gè)有序整數(shù)對(duì),通常為矩形的寬度和高度。

2、使用矩形4個(gè)點(diǎn)的坐標(biāo)初始化Rectangle類的新實(shí)例。

public?Rectangle(int,int,int,int);

6.Point類

用指定坐標(biāo)初始化Point類的新實(shí)例。這個(gè)結(jié)構(gòu)很像C++中的Point結(jié)構(gòu),它描述了一對(duì)有序的x,y兩個(gè)坐標(biāo)值,其構(gòu)造函數(shù)為:public Point(int x,int y);其中x為該點(diǎn)的水平位置;y為該點(diǎn)的水垂直位置。
下面是構(gòu)造Point對(duì)象的例子代碼: 

Point?pt1=new?Point(30,30);?
Point?pt2=new?Point(110,100);

到此這篇關(guān)于C#圖形編程GDI+的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • WCF基礎(chǔ)介紹并創(chuàng)建簡(jiǎn)單應(yīng)用程序

    WCF基礎(chǔ)介紹并創(chuàng)建簡(jiǎn)單應(yīng)用程序

    這篇文章介紹了WCF基礎(chǔ)并創(chuàng)建簡(jiǎn)單WCF應(yīng)用程序,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • Unity3D舊電視濾鏡shader的實(shí)現(xiàn)示例

    Unity3D舊電視濾鏡shader的實(shí)現(xiàn)示例

    這篇文章主要介紹了Unity3D舊電視濾鏡shader的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • C#檢查字符串是否是合法URL地址的方法

    C#檢查字符串是否是合法URL地址的方法

    這篇文章主要介紹了C#檢查字符串是否是合法URL地址的方法,涉及C#字符串判斷的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • C#導(dǎo)出文本內(nèi)容到word文檔的方法

    C#導(dǎo)出文本內(nèi)容到word文檔的方法

    這篇文章主要介紹了C#導(dǎo)出文本內(nèi)容到word文檔的方法,涉及C#操作word文檔的相關(guān)技巧,需要的朋友可以參考下
    2015-04-04
  • c#與js隨機(jī)數(shù)生成方法

    c#與js隨機(jī)數(shù)生成方法

    這篇文章主要介紹了c#與js隨機(jī)數(shù)生成方法,實(shí)例分析了C#與js生成隨機(jī)數(shù)的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • Unity?UGUI的MaskableGraphic可遮罩圖形組件介紹使用

    Unity?UGUI的MaskableGraphic可遮罩圖形組件介紹使用

    這篇文章主要為大家介紹了Unity?UGUI的MaskableGraphic可遮罩圖形組件介紹使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • C#二分查找算法

    C#二分查找算法

    這篇文章介紹了C#中的二分查找算法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • Unity UGUI的Slider滑動(dòng)條件組使用詳解

    Unity UGUI的Slider滑動(dòng)條件組使用詳解

    這篇文章主要為大家介紹了Unity UGUI的Slider滑動(dòng)條件組使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • winform攔截關(guān)閉按鈕觸發(fā)的事件示例

    winform攔截關(guān)閉按鈕觸發(fā)的事件示例

    這篇文章主要介紹了c# winform攔截關(guān)閉按鈕觸發(fā)的事件示例,大家參考使用吧
    2014-01-01
  • Unity實(shí)現(xiàn)簡(jiǎn)單換裝系統(tǒng)

    Unity實(shí)現(xiàn)簡(jiǎn)單換裝系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)簡(jiǎn)單換裝系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04

最新評(píng)論