C# GDI+圖形程式設計–看書筆記

來源:互聯網
上載者:User
一、理解GDI+
GDI+是一個庫,它提供了一個介面,此介面允許程式員編寫與印表機、監視器或檔案等圖形裝置進行互動的windows和web圖形應用程式。其實是由C++編寫的一個類,供我們調用。在程式中使用GDI+需要添加相應的命名空間,主要由
System.Drawing:基本的GDI+功能的定義,它提供了Graphics類,這個類提供了最重要的繪圖與填充方法。還封裝了矩形,點,畫筆和鋼筆等GDI圖元類。
System.Drawing.Drawing2D名稱空間。進階二維和向量圖形應用程式的功能。
System.Drawing.Imaging:基本影像處理功能.
二、GDI+基本應用
首先要繪圖,要有繪圖的畫布,畫布可以是表單表面,印表機表面,位元影像表面,還要有畫筆,可以是鋼筆,筆刷等。還要有一個畫圖的過程即方法調用。另外還需要知道座標系統,在表單表面,座標是以左上方為(0,0)。
現在開始進行基本畫圖操作
1、擷取一個Graphics對象
可以通過表單的paint事件擷取

private void form1_Paint(object sender,PaintEventArgs e)
{
Graphics g=e.Graphics;
} 重載OnPaint
protected override void OnPaint(PaintEventArgs e)
{
Graphics g=e.Graphics;
}以上兩種方法都是在表單載入時就得到的,但我們常常需要在別的時候得到並繪圖,所以要使用其它方法。
Graphics g=this.CreateGraphics();//通過表單本身方法
Bitmp bmp=new (600,400);
Graphics g=Graphics.FromImage(bmp)//通過圖形得到一個
Graphics g=Graphics.FromHwnd(this.Handle)//通過表單控制代碼得到一個。通過圖形得到一個,那麼我們可以在圖形上繪製圖形,我覺得這是我們比較常用的方法。
有了Graphics對象,我們可以通過這個類的方法進行繪製各種基本圖形。但還需要鋼筆或畫筆才能繪製。

2、建立鋼筆或畫筆
Pen redPen=new Pen(Color.Red,3)//建立一個紅色,寬為3象素的鋼筆
Pen blackPen=Pens.Black //建立一個黑色鋼筆

SolidBrush greenBrush=new SolidBrush(Color.Green)//建立一個綠色的畫筆有了畫筆或鋼筆我們就可以畫畫了

3、繪製圖形
Bitmap bmp = new Bitmap(this.Width, this.Height);
Graphics g = Graphics.FromImage(bmp);
g.Clear(Color.White);//設畫布背景為白色
g.SmoothingMode = SmoothingMode.AntiAlias;//品質為消除齒
Rectangle rect = new Rectangle(20, 20, 100, 100);//建立一個矩形
Pen redPen = new Pen(Color.Red, 3);
Pen blackPen = Pens.Black;
SolidBrush greenBrush = new SolidBrush(Color.Green);
g.DrawRectangle(redPen, rect);//通過鋼筆畫矩形
g.FillEllipse(greenBrush, rect);//用畫筆填充矩形
g.DrawLine(blackPen, 0, 250, this.Width, 250);//畫線
g.FillEllipse(Brushes.Blue, 70, 220, 30, 30);//填充圓
g.FillEllipse(Brushes.SkyBlue, 100, 210, 40, 40);
g.FillEllipse(Brushes.Green, 140, 200, 50, 50);
e.Graphics.DrawImage(bmp, 0.0F, 0.0F);//把圖形畫到表單上
greenBrush.Dispose();//清除資源
redPen.Dispose();
g.Dispose();
這是最基本的GDI+畫圖方法,其實也就是得到一個畫布,畫筆(Pen,SolidBrush),畫圖方法(Graphics.方法).這是畫圖三要素。

下面加個執行個體,是我轉過來的,本來想寫出一個圖表控制項,但有點小問題,我現在把這個例子粘出來,希望有人能做出這個控制項
Bitmap bm = new Bitmap(240, 210);
//在建立的畫布上畫一個圖
Graphics bp = Graphics.FromImage(bm);
//設定bp的背景色為Beige
bp.Clear(Color.Beige);
//建立資料來源,在此為一個數組
int[] a1 ={ 20, 40, 60, 80, 100, 120, 140, 160 };
int[] a2 ={ 40, 60, 80, 100, 120, 140, 160, 180 };
bp.DrawRectangle(Pens.Black, 1, 1, 230, 205);
//通過迴圈畫出柱狀圖
for (int i = 0; i < a1.Length; i++)
{
//填充圖(著色,起點X,起點Y,寬,高)
bp.FillRectangle(new SolidBrush(Color.Blue), (i * 30) + 5, 200 - a1[i], 5, a1[i] + 5);
//填充邊框(著色,起點X,起點Y,寬,高)
bp.DrawRectangle(Pens.Black, (i * 30) + 5, 200 - a1[i], 5, a1[i] + 5);
}
//柱圖2
for (int i = 0; i < a2.Length; i++)
{
bp.FillRectangle(new SolidBrush(Color.Red), (i * 30) + 10, 200 - a2[i], 5, a2[i] + 5);
bp.DrawRectangle(Pens.Black, (i * 30) + 10, 200 - a2[i], 5, a2[i] + 5);
}

Graphics gg = this.CreateGraphics();
gg.DrawImage(bm, 0.0f, 0.0f);
gg.Dispose();
bp.Dispose();

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.