【GDI】BitBlt()函數用法

在VC中顯示位圖常用BitBlt()函數,它是將一幅位圖從一個設備場景複製到另一個。源和目標DC相互間必須兼容。雖然此方法的功能是這樣的,但是我一直沒有理解網上一些例子代碼,不知道其用到的各DC和位圖之間的關係。

今天工作中要將位圖顯示到Dialog中,所以重要學習了一下。
我已經將要用的位圖導入到工程資源中,所以我可以用   

CBitmap				bitmap;
bitmap.LoadBitmap(IDB_BITMAP_EIGHTHORSES);

這樣得到一個CBitmap對象。然後,

BITMAP				bmInfo;
bitmap.GetBitmap(&bmInfo);

這樣得到一個BITMAP對象,之所以要得到此對象是因爲從其中可以得到位圖的大小數據。
然後計算得到要在什麼位置顯示此位圖(可以放在一個CRect對象中)。

然後顯示此位圖,這是最重要的一步。        

CDC dcMemory;
dcMemory.CreateCompatibleDC(pDC);
pOldBitmap = dcMemory.SelectObject(&bitmap);

pDC->BitBlt(rect.left, rect.top, bmInfo.bmWidth, bmInfo.bmHeight, &dcMemory, 0, 0, SRCCOPY);

其中pDC是一個CDC指針,是將要顯示位圖的設備環境。

這樣位圖就已經顯示出來了,但是還要釋放資源。

bitmap.DeleteObject();
dcMemory.SelectObject(pOldBitmap);

dcMemory.DeleteDC();


注意,要將臨時設備環境選擇入初始位圖,否則將不能正確釋放!!

總結:
要在目標設備環境中顯示位圖,不能直接在上面“畫”(目前我是我麼覺得的)。需要創建一個與之相兼容的臨時設備環境,將位圖選擇入臨時設備環境,然後再從臨時設備環境中拷備位圖以顯示到目標設備環境中。而選入這個動作相當與已經將位圖“畫在了臨時設備環境中”(實際上並沒有畫,否則就可以直接選入要畫圖的CDC了),而且選入後位圖在臨時設備環境中的位置是左上角!

效果:

代碼下載:https://download.csdn.net/download/sunriver2000/12182822

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章