最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#中的GDI+圖像編程詳解

 更新時(shí)間:2022年05月16日 09:01:45   作者:springsnow  
本文詳細(xì)講解了C#中的GDI+圖像編程,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、Graphics

GDI+是GDI(Windows Graphics Device Interface)的后繼者,它是.NET Framework為操作圖形提供的應(yīng)用程序編程接口,主要用在窗體上繪制各種圖形圖像,可以用于繪制各種數(shù)據(jù)圖像、數(shù)學(xué)仿真等。

Graphics類是GDI+的核心,它提供將對象繪制到顯式設(shè)備的方法。Graphics類封裝了繪制直線、曲線、圓形、圖像和文本的方法,是一切GDI+操作的基礎(chǔ)類。在繪圖之前,必須在指定的窗體上創(chuàng)建一個(gè)Graphics對象,才能調(diào)用Graphics類的方法畫圖。

1、創(chuàng)建Graphics類對象

1、Paint事件
在窗體或控件的Paint事件中創(chuàng)建,將其作為PaintEventArgs的一部分。在為控件創(chuàng)建繪制代碼時(shí),通常會使用此方法?! ?/p>

例如,在Paint事件中創(chuàng)建Graphics對象:

public partial class Form1 : Form
{
    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);

        Graphics g = e.Graphics; // e.ClipRectangle;//剪切區(qū)域,即被遮擋的部分
        g.DrawLine(Pens.Wheat, 0, 0, 2, 2);
    }
}

2、 CreateGraphics方法
調(diào)用窗體或控件的CreateGraphics方法可以獲取對Graphics對象的引用,該對象表示控件或窗體的繪圖畫面。如果在已存在的窗體或控件身上繪圖,應(yīng)該使用此方法

例如,在窗體的Load事件中,通過CreateGraphics方法創(chuàng)建Graphics對象

private void Form1_Load(object sender, EventArgs e)    //窗體的Load事件
{
    Graphics g;    //聲明一個(gè)Graphics對象
    g = this.CreateGraphics();
}

3 、Graphics.FromImage方法
由從Image繼承的任何對象創(chuàng)建Graphics對象,調(diào)用Graphics.FromImage方法即可,該方法在需要更改已存在的圖像時(shí)十分有用,例:

private void Form1_Load(object sender, EventArgs e)
{
    Bitmap mbit = new Bitmap(@"C:\test.bmp");
    Graphics g = Graphics.FromImage(mbit);
}

2、Graphics類的屬性

  • Clip    獲取或設(shè)置 Region,它限定此 Graphics 的繪圖區(qū)域。
  • ClipBounds    獲取一個(gè) RectangleF 結(jié)構(gòu),該結(jié)構(gòu)限定此 Graphics 的剪輯區(qū)域。
  • VisibleClipBounds    獲取此 Graphics 的可見剪輯區(qū)域的邊框。
  • CompositingQuality    獲取或設(shè)置繪制到此 Graphics 的合成圖像的呈現(xiàn)質(zhì)量。
  • SmoothingMode    獲取或設(shè)置此 Graphics 的呈現(xiàn)質(zhì)量。
  • DpiX    獲取此 Graphics 的水平分辨率。
  • DpiY    獲取此 Graphics 的垂直分辨率。
  • PageScale    獲取或設(shè)置此 Graphics 的世界單位和頁單位之間的比例。
  • PageUnit    獲取或設(shè)置用于此 Graphics 中的頁坐標(biāo)的度量單位。

3、Graphics類的常用方法

  • 畫線條
    DrawLine    繪制一條連接由坐標(biāo)對象指定的兩個(gè)點(diǎn)的線條
    DrawLines    繪制一列連接一組Point結(jié)構(gòu)的線段
    DrawBezier    繪制由四個(gè)Point結(jié)構(gòu)定義的貝塞爾樣條
    DrawBeziers    從Point結(jié)構(gòu)的數(shù)組繪制一系列貝塞爾樣條
    DrawCurve    繪制經(jīng)過一組指定的Point結(jié)構(gòu)的基數(shù)樣條
  • 畫可填充線條
    DrawEllipse    繪制一個(gè)由一對坐標(biāo)、寬度和高度指定的橢圓
    DrawPath    繪制GraphicsPath對象
    DrawPie    繪制一個(gè)扇形,該扇形由一個(gè)坐標(biāo)對象,寬度和高度,以及兩條射線所指定的橢圓指定
    DrawPolygon    繪制由一組Point結(jié)構(gòu)定義的多邊形
    DrawRectangle    繪制由坐標(biāo)對。寬度和高度指定的矩形
    DrawRectangles    繪制一系列由Rectangle結(jié)構(gòu)指定的矩形
    DrawArc    繪制一段弧線,它表示由一對坐標(biāo)、寬高指定的橢圓部分
  • 填充區(qū)域
    FillEllipse    填充邊框所定義的橢圓內(nèi)部,該邊框由一對坐標(biāo)、一個(gè)高度和一個(gè)寬度指定
    FillPath    填充GraphicsPath對象的內(nèi)部
    FillPie    填充扇形內(nèi)部
    FillPolygon    填充多邊形內(nèi)部
    FillRectangle    填充由一對坐標(biāo)、一個(gè)寬度和一個(gè)高度指定的矩形內(nèi)部
    FillRectangles    填充由Rectangle結(jié)構(gòu)指定的一些列矩陣的內(nèi)部
    FillRegion    填充Region對象的內(nèi)部
  • 畫字符串、圖畫、圖標(biāo)
    DrawString    在指定位置并且用指定的Brush和Font對象繪制指定的文本字符串
    DrawIcon    在指定坐標(biāo)處繪制由指定的Icon對象表示的圖像
    DrawImage    在指定的位置并且按原始大小繪制指定的Image對象
  • 其他
    MeasureString(String, Font)    測量用指定的 Font 繪制的指定字符串。
    FromImage    從指定的Image對象創(chuàng)建行的Graphics對象
    Save    保存此Graphics對象的當(dāng)前狀態(tài),并且GraphicsState對象標(biāo)識保存的狀態(tài)
    Clear    清除整個(gè)繪圖面并以指定背景色填充
    Dispose    釋放由此Graphics對象使用的所有資源

二、坐標(biāo)系統(tǒng)

GDI+定義了三種坐標(biāo)系統(tǒng),并提供了三種坐標(biāo)轉(zhuǎn)換的方法Graphics.TransformPoints()。

  • 全局坐標(biāo)系統(tǒng)。
  • 頁面(Page)坐標(biāo)系統(tǒng):左上角為原點(diǎn),橫向x軸向右為正方向,縱向y軸向下為正方向。單位為像素。這是默認(rèn)的坐標(biāo)系統(tǒng)。
  • 設(shè)備坐標(biāo)系統(tǒng):可以指定特定測量單位的頁面(Page)坐標(biāo)系統(tǒng)。如果單位為像素,和頁面(Page)坐標(biāo)系統(tǒng)相同。

1、點(diǎn)結(jié)構(gòu):Point和PointF

點(diǎn)結(jié)構(gòu)有兩個(gè)成員:X,Y,表示點(diǎn)的x軸和y軸的坐標(biāo)。其常用構(gòu)造函數(shù)如下:

Point p1=new Point(int X,int Y);//X,Y為整數(shù)
PointF p2=new PointF(float X,floa Y);//X,Y為浮點(diǎn)數(shù)

2、尺寸結(jié)構(gòu)Size和SizeF

Size和SizeF用來表示尺寸大小,有兩個(gè)成員:Width和Height。常用構(gòu)造函數(shù)如下:

public Size(int width,int height);
public SizeF(float width,float height);

3、矩形結(jié)構(gòu)Rectangle和RectangleF

結(jié)構(gòu)Rectangle和RectangleF用來表示一個(gè)矩形,常用屬性如下:

  • Top、Left,Bottom, Right:Rectangle結(jié)構(gòu)坐標(biāo)
  • Width、Height:獲取或設(shè)置此Rectangle結(jié)構(gòu)的寬、高度。
  • Size:獲取或設(shè)置此Rectangle的大小。
  • X、Y:獲取或設(shè)置此Rectangle結(jié)構(gòu)左上角的x,Y坐標(biāo)。

其常用構(gòu)造函數(shù)為:

//參數(shù)為矩形左上角坐標(biāo)的點(diǎn)結(jié)構(gòu)location和代表矩形寬和高的Size結(jié)構(gòu)size
Rectangle(Point location,Size size);//參數(shù)也可為PointF和SizeF
//參數(shù)為矩形左上角x和y坐標(biāo),寬,高
Rectangle(int X,int Y,int width,int height);//X和Y也可為float

4、路徑類GraphicsPath

GraphicsPath 類表示一系列相互連接的直線和曲線。 此類不能被繼承。

Graphics g = e.Graphics;
g.FillRectangle(Brushes.White, this.ClientRectangle);

GraphicsPath gp = new GraphicsPath();

gp.AddLine(10, 10, 10, 50);
gp.AddBezier(10, 50, 10, 55, 25, 70, 30, 70);
gp.AddLine(30, 70, 60, 70);
//閉合圖形
gp.CloseFigure();

//GraphicsPath類本身沒有提供顯示創(chuàng)建路徑的功能,所以需要把路徑對象傳給Graphics類的一個(gè)方法來顯示
g.DrawPath(Pens.Black, gp);
g.FillPath(Brushes.Orange, gp);//給路徑填充橘黃色,
gp.Dispose();
g.Dispose();

5、區(qū)域類Region類

Region類表示由矩形或由路徑構(gòu)成圖形形狀的內(nèi)部

1、從GraphicsPath路徑對象中創(chuàng)建區(qū)域,

GraphicsPath gp = new GraphicsPath();

gp.AddLine(10, 10, 10, 50);
gp.AddBezier(10, 50, 10, 55, 25, 70, 30, 70);
gp.AddLine(30, 70, 60, 70);
//閉合圖形
gp.CloseFigure();

Region reg = new Region(gp);   //從GraphicsPath對象創(chuàng)建Region對象
//填充區(qū)域
g.FillRegion(Brushes.Green, reg);

2.從各類圖形中創(chuàng)建:

Region reg = new Region(new Rectangle(10, 10, 80, 20));

3.從一個(gè)區(qū)域中創(chuàng)建另一個(gè)區(qū)域

Region r1 = new Region(new Rectangle(10, 10, 80, 20));
RegionData r1Data = r1.GetRegionData();//區(qū)域數(shù)據(jù)
Region r2 = new Region(r1Data);? //構(gòu)造函數(shù)不接受區(qū)域?qū)ο蟊旧?,可以接受區(qū)域數(shù)據(jù)數(shù)組。

4.區(qū)域的并集和交集

示例:

Graphics g = e.Graphics;
Rectangle rect1 = new Rectangle(50, 10, 50, 130);
Rectangle rect2 = new Rectangle(10, 50, 130, 50);
//設(shè)置Region為第一個(gè)矩形
Region reg = new Region(rect1);
//用Rect2提取Region中的交集
reg.Intersect(rect2);

g.FillRegion(Brushes.Orange, reg);
g.DrawRectangle(Pens.Black, rect1);
g.DrawRectangle(Pens.Black, rect2);

三、顏色

1、Color結(jié)構(gòu)

Color結(jié)構(gòu)表示顏色,結(jié)構(gòu)中包含一個(gè)無符號32位數(shù)代表顏色。任何一種顏色可以用ARGB顏色(alpha、紅、綠、藍(lán))表示。Color結(jié)構(gòu)通過表態(tài)屬性公開了140個(gè)命名顏色。。常用方法如下:

  • public static Color FromArgb(int alpha,int rr,int gg,int bb);
    從四個(gè)分量(透明度、紅色、綠色和藍(lán)色)值創(chuàng)建Color結(jié)構(gòu)。每個(gè)分量的值僅限于8位(小于256)。alpha值表示透明度,=0為完全透明,=255為完全不透明
  • public static Color FromArgb(int rr,int gg,int bb);
    從指定的8位顏色值(紅色、綠色和藍(lán)色)創(chuàng)建Color結(jié)構(gòu)。透明度值默認(rèn)為255(完全不透明)。每個(gè)分量的值僅限于8位(小于256)。紅色為(255,0,0),綠色為(0,255,0),藍(lán)色為(0,0,255)。
  • public static Color FromArgb(int alpha,Color color);
    從指定的Color結(jié)構(gòu)創(chuàng)建新Color結(jié)構(gòu),使用新指定的透明度值alpha。alpha值僅限于8位。

創(chuàng)建實(shí)例

//創(chuàng)建Color實(shí)例的參數(shù)為 r,g,b; //參數(shù)為紅,綠,藍(lán)三種原色,透明度為默認(rèn),即完全不透明.
Color cl = Color.FromArgb(200, 200, 200);

//調(diào)用靜態(tài)FromName方法
Color cl = Color.FromName("PowderBlue");  //字符串參數(shù)必須包含一個(gè)KnownColor枚舉值的名稱.

使用顏色:

Color red=Color.Red;
red.GetBrightness();
red.GetHue();
red.GetSaturation();

2、ColorTranslator類

  • FromHtml(String)    將 HTML 顏色表示形式翻譯成 GDI+ Color 結(jié)構(gòu)。
Color myColor = ColorTranslator.FromHtml("Blue");
Color myColor = ColorTranslator.FromHtml("H00000");
  • ToHtml(Color)    將指定的 Color 結(jié)構(gòu)翻譯成 HTML 字符串顏色表示形式。
string htmlColor = ColorTranslator.ToHtml( Color.Red);
string htmlColor = ColorTranslator.ToHtml( Color.FromArgb(255,255,255));

四、畫筆Pen類

畫筆,定義用于繪制直線和曲線的對象。

定義畫筆:

Pen pen1 = new Pen(Color, Single); //參數(shù)為顏色Color,單精度浮點(diǎn)數(shù)Sigle;寬度默認(rèn)為1;
Pen pen2 = Pen(Brush, Single);  // 使用指定的 Pen 和 Brush 初始化 Width 類的新實(shí)例。

使用畫筆:

//畫實(shí)線
Pen pen = new Pen(Color.Red, 3);
//確定線的首位位置
Point point1 = new Point(10, 50);
Point point2 = new Point(250, 50);
Graphics g = this.CreateGraphics();
g.DrawLine(pen, point1, point2);

五、畫刷Brush

畫刷:定義用于填充圖形形狀(如矩形、橢圓、餅形、多邊形和封閉路徑)的內(nèi)部的對象。只是一個(gè)抽象基類。

Rectangle rect1 = new Rectangle(20, 80, 250, 100);

// (實(shí)心實(shí)心刷)
SolidBrush sbrush = new SolidBrush(Color.DarkOrchid);

//(紋理刷)
TextureBrush textureBrush = new TextureBrush(new Bitmap(@"e:/123.jpg"));

//(梯度、線性漸進(jìn)刷)
LinearGradientBrush lbrush = new LinearGradientBrush(rect1, Color.DarkOrange, Color.Aquamarine, 45);

//路徑漸進(jìn)畫刷
PathGradientBrush pathbrush = new PathGradientBrush(graphicsPath);

//(陰影刷)
HatchBrush hbrush = new HatchBrush(HatchStyle.DiagonalCross, Color.DarkOrange, Color.Aquamarine);

e.Graphics.FillRectangle(sbrush, rect1);         // (實(shí)心刷)
e.Graphics.FillRectangle(textureBrush, rect1);       //(紋理刷)
e.Graphics.FillRectangle(lbrush, rect1);            //(梯度刷)
e.Graphics.FillRectangle(hbrush, rect1);             //(陰影刷)

六、字體 Font

Font類有兩個(gè)構(gòu)造函數(shù):

第一個(gè)是new Font(字體名稱,字號),例如,label1.Font=new Font("黑體",9)。

第二個(gè)是new Font(字體名稱,字號,字體風(fēng)格),其中第三個(gè)參數(shù)是枚舉類型。

定義字體:

//例如修改標(biāo)簽控件字體為斜體:
label1.Font=new Font("黑體",9,label1.Font.Style|FontStyle.Italic);

//修改標(biāo)簽控件字體不為斜體:
label1.Font=new Font("黑體",9,label1.Font.Style&~FontStyle.Italic);

字體用法

// Create font and brush.
Font drawFont = new Font("Arial", 16);
SolidBrush drawBrush = new SolidBrush(Color.Black);

// Draw string to screen.
e.Graphics.DrawString("Sample Text", drawFont, drawBrush,  new PointF(150.0F, 150.0F));

七、圖像

圖像Image類、打印Printing相關(guān)

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

相關(guān)文章

  • C#微信接口之推送模板消息功能示例

    C#微信接口之推送模板消息功能示例

    這篇文章主要介紹了C#微信接口之推送模板消息功能,結(jié)合實(shí)例形式分析了C#操作微信推送模板消息接口的具體操作步驟與相關(guān)使用技巧,需要的朋友可以參考下
    2017-07-07
  • C#裝飾者模式實(shí)例分析

    C#裝飾者模式實(shí)例分析

    這篇文章主要介紹了C#裝飾者模式,是C#中比較常見的設(shè)計(jì)模式,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10
  • C# WinForm自動更新程序之文件上傳操作詳解

    C# WinForm自動更新程序之文件上傳操作詳解

    這篇文章主要為大家詳細(xì)介紹了C# WinForm自動更新程序中文件上傳操作,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解一下
    2022-10-10
  • 詳解WPF如何在Panel中實(shí)現(xiàn)設(shè)置所有子項(xiàng)間距

    詳解WPF如何在Panel中實(shí)現(xiàn)設(shè)置所有子項(xiàng)間距

    這篇文章主要為大家詳細(xì)介紹了WPF如何在Panel中實(shí)現(xiàn)設(shè)置所有子項(xiàng)間距,本文借鑒了 Qt 中的 Spacing 設(shè)置方法,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-10-10
  • C#中如何在Excel工作表創(chuàng)建混合型圖表實(shí)例

    C#中如何在Excel工作表創(chuàng)建混合型圖表實(shí)例

    本篇文章主要介紹了C#中如何在Excel工作表創(chuàng)建混合型圖表實(shí)例,具有一定的參考價(jià)值,有需要的可以了解一下。
    2016-11-11
  • C# Xamarin利用ZXing.Net.Mobile進(jìn)行掃碼的方法

    C# Xamarin利用ZXing.Net.Mobile進(jìn)行掃碼的方法

    這篇文章主要介紹了C# Xamarin利用ZXing.Net.Mobile進(jìn)行掃碼的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • C#實(shí)現(xiàn)代碼移除窗體上的控件

    C#實(shí)現(xiàn)代碼移除窗體上的控件

    這篇文章主要介紹了C#實(shí)現(xiàn)代碼移除窗體上的控件問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 深入反射生成數(shù)組的詳解

    深入反射生成數(shù)組的詳解

    本篇文章是對反射生成數(shù)組進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • C#表達(dá)式目錄樹示例詳解

    C#表達(dá)式目錄樹示例詳解

    這篇文章主要給大家介紹了關(guān)于C#表達(dá)式目錄樹的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • C#使用WebSocket實(shí)現(xiàn)聊天室功能

    C#使用WebSocket實(shí)現(xiàn)聊天室功能

    這篇文章主要為大家詳細(xì)介紹了C#使用WebSocket實(shí)現(xiàn)聊天室功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02

最新評論

克什克腾旗| 泰安市| 灵石县| 鸡东县| 剑河县| 绩溪县| 九龙城区| 汉川市| 会理县| 桐庐县| 噶尔县| 商河县| 通江县| 保德县| 舒城县| 德昌县| 望都县| 石城县| 青岛市| 贵南县| 益阳市| 中牟县| 古蔺县| 固安县| 沙雅县| 拜泉县| 中阳县| 皮山县| 武功县| 玉龙| 霞浦县| 方城县| 农安县| 赤水市| 清苑县| 鄂温| 龙陵县| 紫阳县| 汉沽区| 德安县| 吉林省|