GDI程式設計基礎

2022-06-14 15:21:08 字數 1707 閱讀 6357

視口是基於裝置的採用的是裝置座標(單位:畫素),視窗是基於程式的採用的是邏輯座標(單位:畫素/公釐/厘公尺等)。

在預設的對映模式下,視口是與視窗等同的。但是如果改變其對映模式,則其對應的單位則不相同。

如果將對映模式改為mm_loenglish或mm_lometric等,則1個裝置座標並不對應乙個邏輯座標,因為其單位不同。而且對於不同的對映模式而言其邏輯單位都是固定的。

如果將對映模式改為mm_anisotropic或mm_anisotropic,則其邏輯單位是可以自己決定的。那麼如何設定其邏輯單位呢?

對於此模式而言,其可以設定邏輯單位。且其表示各向異性,也就是說在邏輯座標上橫座標的乙個單位並不一定等於縱座標的乙個單位(當然也可以等於)。

cpaintdc dc(this);									

dc.setmapmode(mm_anisotropic); //設定對映模式

dc.setwindowext(10,10); //設定視窗範圍

dc.setviewportext(20,20); //設定視口範圍

dc.ellipse(0,0,50,50);

以上**通過設定視窗範圍和視口範圍來設定邏輯單位,其設定視窗範圍為(10,10),視口範圍為(20,20)。也就是橫座標上乙個邏輯座標表示2個裝置座標(即單位為2畫素),縱座標上也是乙個邏輯座標表示2個裝置座標(即單位為2畫素)。其畫出來的是乙個直徑為50 * 2 畫素的圓形。

如果將視口範圍改為(20,30),則縱座標上乙個邏輯座標表示3個裝置座標(即單位為3畫素)dc.setviewportext(20,30);,那麼其畫出來的就是乙個短軸為50 * 2畫素,長軸為50 * 3畫素的橢圓。這就是此對映模式的各項異性特點,即橫座標上的單位不等於縱座標的單位。

對於此模式而言,其也可以設定邏輯單位。且其表示各向同性,也就是說在邏輯座標上橫座標的乙個單位等於縱座標的乙個單位。

cpaintdc dc(this);									

dc.setmapmode(mm_anisotropic); //設定對映模式

dc.setwindowext(10,10); //設定視窗範圍

dc.setviewportext(20,30); //設定視口範圍

dc.ellipse(0,0,50,50);

以上**設定視窗範圍為(10,10),視口範圍為(20,30),但是因為其有各項同性,所以為使其橫縱座標單位相等需要取在橫縱座標上單位最小的乙個。也就是1個邏輯單位對應2個裝置單位(2個畫素)。所以這裡畫的是個直徑為50 * 2畫素的圓形

裝置座標系是固定的單位1畫素,原點位於客戶區左上角。

邏輯座標系的單位可以使畫素/公釐/厘公尺等,原點和xy軸的方向也可以改變。gdi函式一般都是基於邏輯座標的。

GDI 基礎程式設計(1)

首先是在我的vs2008裡面配置gdi 庫,以及初始化gdi lib,參見 然後進行一些比較基礎的gdi 畫筆 影象處理 詳細請見注釋 imageatt.setcolormatrix colormatrix,colormatrixflagsdefault,coloradjusttypebitmap ...

GDI 程式設計基礎簡介

今天準備重新對gdi的知識進行回顧一下,以便加深認識。在進行windows程式設計時,可能經常會用到裝置描述表的型別控制代碼,例如,最廠家的hdc,它就是影象裝置描述型別控制代碼。因為gdi的繪圖函式基本上都是有狀態的,因此gdi所有的函式都要求乙個這樣的圖形裝置描述型別的控制代碼 hdc。而乙個影...

GDI 程式設計

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