Windows GDI和GDI+區別(執行個體剖析)

來源:互聯網
上載者:User

1、概述

        GDI在全稱是Graphics Device Interface,即圖形裝置介面。是圖形顯示與實際物理裝置之間的橋樑。GDI介面是基於函數,雖然使程式員省力不少,但是編程方式依然顯得麻煩。例如顯示一張位元影像,我們需要進行“建立位元影像,讀取位元影像檔案資訊,啟用情境裝置,調色盤變化“等一系列操作。然而有了GDI+,繁瑣的步驟再次被簡化。顧名思義,GDI+就是GDI的增強版,它是微軟在Windows 2000以後作業系統中提供的新介面。

2、GDI+主要功能         GDI+主要提供以下三種功能:         (1) 二維向量圖形:GDI+提供了儲存圖形基元自身資訊的類(或結構體)、儲存圖形基元繪製方式資訊的類以及實際進行繪製的類;

        (2) 影像處理:大多數圖片都難以劃定為直線和曲線的集合,無法使用二維向量圖形方式進行處理。因此,GDI+為我們提供了Bitmap、Image等類,它們可用於顯示、操作和儲存BMP、JPG、GIF等映像格式。

        (3) 文字顯示:GDI+支援使用各種字型、字型大小和樣式來顯示文本。         相比於GDI,GDI+是基於C++類的對象化的應用程式介面,因此用起來更為簡單。GDI的核心是裝置上下文,GDI函數都依賴於裝置上下文控制代碼,其編程方式是基於控制代碼的;GDI+無需時刻依賴於控制代碼或裝置上下文,使用者只需建立一個Graphics 對象,就可以用物件導向的方式調用其成員函數進行圖形操作,編程方式是基於對象的。

3、GDI繪製執行個體         GDI在使用裝置上下文繪製線條之前,必須先調用SelectObject 以使筆對象和裝置上下文關聯。其後,在裝置上下文中繪製的所有線條均使用該筆,直到選擇另一支不同的筆為止。         使用GDI畫線代碼如下

// TODO: Add your command handler code here   CClientDC clientDC;  //目標DC        CPen pen (PS_SOLID, 1, RGB(0, 0, 255));   clientDC.SelectObject(pen.GetSafeHandle());    //開始繪製   clientDC.MoveTo(0, 0)   clientDC.LineTo(rect.right, 0);   clientDC.SelectObject(oldObject);

        從上述代碼可以看出:在GDI編程中,幾乎所有的操作都圍繞裝置上下文dc展開。的確,這正是GDI編程的特點!裝置上下文是 Windows 使用的一種結構,所有GDI操作前都需取得特定裝置的上下文,函數中的CClientDC dc (this) 陳述式完成這一功能。 利用GDI進行圖形、影像處理的一般操作步驟為:1. 取得指定視窗的DC。2. 確定使用的座標系及映射方式。3. 進行圖形、映像或文文書處理。4. 釋放所使用的DC。但是,在GDI+中,只需將Pen對象直接作為參數傳遞給Graphics類的DrawLine等方法即可,而不必使Pen對象與 Graphics對象關聯。 4、GDI+繪製執行個體         使用GDI+畫線代碼如下  

// TODO: Add your command handler code here  CClientDC clientDC (this);  //建立Graphics對象 Graphics graphics(clientDC); //建立pen Pen myPen; myPen.SetWidth(1); //畫X軸 myPen.SetColor(Color::Blue); graphics.DrawLine(&myPen, 0, 0, rect.right, 0);

        (1)建立 Graphics 對象:Graphics 對象表示GDI+繪圖表面,是用於建立圖形映像的對象。         (2)使用 Graphics 對象繪製線條和形狀、呈現文本或顯示與操作映像。         GDI+的相對與GDI而言,新增了一系列功能:漸層的畫刷(Gradient Brushes)、基數樣條函數(Cardinal Splines)、持久的路徑對象(Persistent Path Objects)、變形和矩陣對象(Transformations &Matrix Object)、可伸縮地區(Scalable Regions)、Alpha混合(Alpha Blending)和豐富的映像格式支援等。下面,我們來逐個用實際代碼實現GDI+的新增功能。     4.1漸層的畫刷         (GDI+提供了用於填充圖形、路徑和地區的線性漸層畫刷和路徑漸層畫刷。線性漸層畫刷使用漸層顏色來填充圖形。當用路徑漸層畫刷填充圖形時,可指定從圖形的一部分移至另一部分時畫刷顏色的變化方式。例如,我們可以只指定圖形的中心顏色和邊緣顏色,當畫刷從圖形中間向外邊緣移動時,畫刷會逐漸從中心顏色變化到邊緣顏色。 )  

// TODO: Add your command handler code hereCClientDC clientDC (this);CRect rect;GetClientRect(&rect);//建立Graphics對象Graphics graphics(clientDC);//建立漸層畫刷LinearGradientBrush lgb(Point(0, 0), Point(rect.right, rect.bottom), Color::Blue, Color::Green);//填充graphics.FillRectangle(&lgb, 0, 0, rect.right, rect.bottom);

    4.2基數樣條函數         (基數樣條指的是一連串單獨的曲線,這些曲線串連起來形成一條較大的曲線。樣條由點(Point結構體)的數組指定,並通過該數組中的每一個點。基數樣條平滑地穿過數組中的每一個點(不出現尖角),因此比用直線串連建立的路徑精確。)  

   // TODO: Add your command handler code here CClientDC clientDC (this); //建立Graphics對象 Graphics graphics(clientDC); Point points[] = {  Point(0, 0), Point(100, 200), Point(200, 0), Point(300, 200), Point(400, 00) }; //直接畫線 for (int i = 0; i < 4; i++) {  graphics.DrawLine(&Pen(Color::Blue, 3), points[i], points[i + 1]); } //利用基數樣條畫線 graphics.DrawCurve(&Pen(Color::Red, 3), points, 5);

    4.3變形和矩陣對象         (GDI+提供了Matrix對象,它是一種可以使變形(旋轉、平移、縮放等) 簡易靈活的強大工具,Matrix對象需與要被變形的對象聯合使用。對於GraphicsPath類,我們可以使用其成員函數Transform接收 Matrix參數用於變形。)  

// TODO: Add your command handler code here CClientDC clientDC (this); //建立Graphics對象 Graphics graphics(clientDC); GraphicsPath path; path.AddRectangle(Rect(250, 20, 70, 70)); graphics.DrawPath(&Pen(Color::Black, 1), &path); // 在應用變形矩陣之前繪製矩形 // 路徑變形 Matrix matrix1, matrix2; matrix1.Rotate(45.0f); //旋轉順時針45度 path.Transform(&matrix1); //應用變形 graphics.DrawPath(&Pen(Color::Red, 3), &path); matrix2.Scale(1.0f, 0.5f); //轉化成為平行四邊形法則 path.Transform(&matrix2); //應用變形 graphics.DrawPath(&Pen(Color::Blue, 3), &path);

    4.4豐富的映像格式支援         (GDI +提供了Image、Bitmap 和Metafile 類,方便使用者進行映像格式的載入、操作和儲存。GDI+支援的映像格式有BMP、GIF、JPEG、EXIF、PNG、TIFF、ICON、WMF、 EMF等,幾乎涵蓋了所有的常用映像格式。)  

 

from:http://edu.292775.com/windows/201211/16377.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.