要使用LoadImage和StretchDIBits繪制PNG圖像,需要進行以下步驟:
#include <Windows.h>
HBITMAP LoadImage(
HINSTANCE hinst,
LPCTSTR lpszName,
UINT uType,
int cxDesired,
int cyDesired,
UINT fuLoad
);
其中,hinst是包含圖像資源的應用程序實例句柄,lpszName是圖像資源的名稱,uType是圖像的類型,cxDesired和cyDesired是圖像的期望寬度和高度,fuLoad是加載選項。例如:
HBITMAP hBitmap = LoadImage(NULL, L"image.png", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
HDC hDC = GetDC(hWnd); // 獲取窗口設備上下文
HDC hMemDC = CreateCompatibleDC(hDC); // 創建與窗口設備兼容的設備上下文
BITMAP bm;
GetObject(hBitmap, sizeof(BITMAP), &bm); // 獲取位圖信息
HBITMAP hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap); // 選擇位圖對象
StretchDIBits(
hDC, // 設備上下文
0, 0, // 目標矩形的左上角坐標
bm.bmWidth, bm.bmHeight, // 目標矩形的寬度和高度
0, 0, // 源矩形的左上角坐標
bm.bmWidth, bm.bmHeight, // 源矩形的寬度和高度
bm.bmBits, // 圖像數據
(BITMAPINFO*)&bm, // 位圖信息
DIB_RGB_COLORS, // 顏色格式
SRCCOPY // 拷貝模式
);
SelectObject(hMemDC, hOldBitmap); // 恢復原來的位圖對象
DeleteDC(hMemDC); // 刪除設備上下文
ReleaseDC(hWnd, hDC); // 釋放窗口設備上下文
其中,hWnd是窗口句柄。
DeleteObject(hBitmap);
以上是使用LoadImage和StretchDIBits繪制PNG圖像的基本步驟。根據需要,還可以添加錯誤處理和其他邏輯來完善代碼。