GDI 配置(收藏)

2021-05-24 09:55:12 字數 2385 閱讀 3354

2.在你將要使用gdi+的工程中,完成初始化工作:

在stdafx.h中加入

#define ulong_ptr unsigned long

#include using namespace gdiplus;

#include "gdiplus.h"

ulong_ptr m_gdiplustoken;

//須以成員變數形式加入,這一點原作者沒說清,其實這是mfc的基本過程

gdiplusstartupinput m_gdiplusstartupinput;

gdiplusstartup(&m_gdiplustoken, &m_gdiplusstartupinput, null);

gdi+是基於com的,使用時必須初始化

gdiplusshutdown(m_gdiplustoken);

6.在project->stting->link->object/libary中加入gdiplus.lib 此時gdi+設定成功。

在gdi+中呼叫和顯示影象檔案是非常容易的,一般先通過image或bitmap調入乙個影象檔案構造乙個物件,然後呼叫graphics::drawimage方法在指定位置處顯示全部或部分影象。例如下面的**:

void cex_gdiplusview::ondraw(cdc* pdc)

結果如圖7.17所示,從圖中我們可以看出,兩次drawimage的結果是不同的,按理應該相同,這是怎麼一回事?原來,drawimage在不指定顯示區域大小時會自動根據裝置解析度進行縮放,從而造成顯示結果的不同。

當然,也可以使用bitmap類來調入影象檔案來構造乙個bitmap物件,其結果也是一樣的。例如,上述**可改為:

需要說明的是,image還提供getthumbnailimage的方法用來獲得乙個縮圖的指標,呼叫drawimage後可將該縮圖顯示,這在影象預覽時極其有用。例如下面的**:

// 顯示縮圖

graphics.drawimage(pthumbnail, 20, 20);

// 使用後,不要忘記刪除該縮圖指標

delete pthumbnail;

影象旋轉和拉伸

影象的旋轉和拉伸通常是通過在drawimage中指定destpoints引數來實現,destpoints包含對新的座標系定義的點的資料。圖7.18說明了座標系定義的方法。

從圖中可以看出,destpoints中的第乙個點是用來定義座標原點的,第二點用來定義x軸的方法和影象x方向的大小,第三個是用來定義y軸的方法和影象y方向的大小。若destpoints定義的新座標系中兩軸方向不垂直,就能達到影象拉伸的效果。

下面的**就是影象旋轉和拉伸的乙個示例,其結果如圖7.19所示。

matrix matrix(1,0,0,1,230,10); // 定義乙個單位矩陣,座標原點在(230,10)

matrix.rotate(30); // 順時針旋轉30度

matrix.scale(0.63,0.6); // x 和 y 方向分別乘以0.63和0.6比例因子

matrix.transformpoints(points, 3); // 用該矩陣轉換points

graphics.drawimage(&image, points, 3);

point newpoints = ;

graphics.drawimage(&image, newpoints, 3);

當然,對於影象旋轉還可直接使用graphics::rotatetransform來進行,例如下面的**。但這樣設定後,以後所有的繪圖結果均會旋轉,有時可能感覺不方便。

graphics.translatetransform(230,10); // 將原點移動到(230,10)

graphics.rotatetransform(30); // 順時針旋轉30度

graphics.drawimage(&image, 0,0);

分享

WIN32 GDI 學習筆記(一) 配置GDI

關於gdi 的介紹網上到處都有,在這裡就不多介紹了。主要是記錄下在gdi 學習中的體會與心得,以及一些技巧。由於不打算用mfc而是用win32 api,故沒有選擇龐大的vs,而是挑了乙個順手一點的輕量級ide dev c 然後進入 工具 編譯選項 如下圖設定 1 勾選 編譯時加入以下命令 2 在下面...

zookeeper 配置解析(收藏)

zookeeper的預設配置檔案為zookeeper conf zoo sample.cfg,需要將其修改為zoo.cfg。其中各配置項的含義,解釋如下 1.ticktime cs通訊心跳數 zookeeper 伺服器之間或客戶端與伺服器之間維持心跳的時間間隔,也就是每個 ticktime 時間就會...

VC 2005 GDI 環境配置

先附上乙個連線,介紹gdi 繪圖的乙個好資料 原作出處 visual studio 2005本身帶有gdi 的所有庫函式,不用像vc 6.0那樣,還需要將gdi 的標頭檔案和lib檔案手工加入到工程中。但是vc 2005在使用gdi 之前需要完成以下幾步配置才能使用 1.在stdafx.h檔案中加入...