GDI程式設計原理

2021-07-04 22:19:19 字數 1934 閱讀 1639

gdi程式設計原理

gdi(graphics device inte***ce,圖形裝置介面),主要負責windows系統與繪圖程式之間的資訊交換,處理所有windows程式的圖形輸出。

gdi的常用物件有graphics、pen、font、brush等。

在gdi的所有類中,graphics類是核心,在繪製任何圖形之前,一定要先建立或得到乙個graphics類的物件。

那麼什麼是graphics呢?

可以將graphics物件理解成乙個畫圖環境

,這個畫圖環境包括:要畫在什麼東西上,用什麼畫(什麼顏色,型別的畫筆,畫刷),怎麼畫(畫圓形還是方形等等)。

二 兩種得到graphics物件的主要方法

1.使用窗體或控制項的creategraphics方法,無論是form還是button,textbox等控制項均可呼叫,用哪個物件呼叫的就表明要畫在哪個物件上。

button1的事件處理函式中:

graphics g = this

.creategraphics();

//畫乙個橢圓

g.drawellipse(pens.red,

100,100, 50, 50

);//

g.dispose();

注意這裡

g = this.creategraphics();

this代表的是form窗體本身,所以表明現在要在form上進行作圖,(100,100)是相對於form窗體左上角點的偏移。所以結果看到的就是左上邊那個圓形。

button2的事件處理函式中:

graphics g = this

.button2.creategraphics();

//畫乙個橢圓

g.drawellipse(pens.red,

50, 50, 50, 50

); g.dispose();

和上面button1唯一不同的地方在於graphics物件的獲取辦法:

graphics g = this.button2.creategraphics();

注意,這回我們是用button2物件呼叫的creategraphics()方法,表明現在要在button2上進行作圖,(100,100)是相對於button2控制項左上角點的偏移。所以結果看到的就是右邊的那個圓形。

此時,注意如果將該窗體最小化再最大化或者將窗體拖動到螢幕的外面,我們發現2個小圓形,消失了。這裡是因為每當發生以上行為的時候,windows會自動觸發窗體的重繪操作,窗體重繪後,我們剛剛畫的小圓形就消失了。

2.由此可以引出我們得到graphics物件的第二種辦法---窗體或控制項的onpaint函式。

窗體或控制項的paint事件是最常用於放置繪圖**的地方,每當窗體被其他窗體擋住,再次顯示的時候,窗體的所有內容必須被重繪,
窗體或控制項的onpaint函式會被windows作業系統自動呼叫

,button2_paint(object sender, painteventargs e)

在paint函式中,有乙個painteventargs e引數,通過e.graphics,我們可以得到該窗體或控制項的graphics物件

,之後的畫圖操作就和第一種方式相同了。

如果我們將繪圖**放到了***_paint函式中,就不會發生當窗體被其他窗體擋住,再次顯示的時候,之前畫的圖形都消失了的情形了,因為這些圖形被再次重繪了。
另外,需要額外說明的是,除了使用者操作(比如最小化再最大化窗體)可以觸發***_paint函式之外,程式中可以通過呼叫窗體或控制項的refresh()方法主動觸發窗體或控制項的重繪。

GDI 程式設計

image和bitmap類概述 gdi 的image類封裝了對bmp gif jpeg png tiff wmf windows元檔案 和emf 增強wmf 影象檔案的調入 格式轉換以及簡單處理的功能。而bitmap是從image類繼承的乙個影象類,它封裝了windows點陣圖操作的常用功能。例如,...

GDI程式設計

一 gdi 相關概念 1 gdi graphics device inte ce 圖形裝置介面,是乙個應用程式與輸出裝置之間的中介。它提供了一套函式庫,這些函式在不同的輸出裝置上輸出圖形和文字。一方面,gdi 向應用程式提供乙個與裝置無關的程式設計環境,另一方面,它又以裝置相關的格式和具體的裝置打交...

GDI 程式設計

最近在學習vc mfc學習 就所學記錄下筆記 1 新增gdiplus.h檔案 通常在標頭檔案檔案中新增 如下 include include using namespace gdiplus 2 新增gdiplus.lib連線 方法一 直接在stdafx.h檔案中新增 pragma comment l...