利用COM介面實現。
void DisplayImage(HDC hDC, LPCTSTR szImagePath)
{
HANDLE hFile=CreateFile(szImagePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); //從指定的路徑szImagePath中讀取檔案控制代碼
DWORD dwFileSize=GetFileSize(hFile, NULL); //獲得圖片檔案的大小,用來分配全域性記憶體
HGLOBAL hImageMemory=GlobalAlloc(GMEM_MOVEABLE, dwFileSize); //給圖片分配全域性記憶體
void *pImageMemory=GlobalLock(hImageMemory); //鎖定記憶體
DWORD dwReadedSize; //儲存實際讀取的檔案大小
ReadFile(hFile, pImageMemory, dwFileSize, &dwReadedSize, NULL); //讀取圖片到全域性記憶體當中
GlobalUnlock(hImageMemory); //解鎖記憶體
CloseHandle(hFile); //關閉檔案控制代碼
IStream *pIStream;//建立一個IStream介面指標,用來儲存圖片流
IPicture *pIPicture;//建立一個IPicture介面指標,表示圖片物件
CreateStreamOnHGlobal(hImageMemory, false, &pIStream) //用全域性記憶體初使化IStream介面指標
OleLoadPicture(pIStream, 0, false, IID_IPicture, (LPVOID*)&(pIPicture));//用OleLoadPicture獲得IPicture介面指標
//得到IPicture COM介面物件後,你就可以進行獲得圖片資訊、顯示圖片等操作
OLE_XSIZE_HIMETRIC hmWidth;
LE_YSIZE_HIMETRIC hmHeight;
pIPicture->get_Width(&hmWidth); //用介面方法獲得圖片的寬和高
pIPicture->get_Height(&hmHeight);
pIPicture->Render(hDC,0,0,100,100,0,hmHeight,hmWidth,-hmHeight,NULL); //在指定的DC上繪出圖片
GlobalFree(hImageMemory); //釋放全域性記憶體
pIStream->Release(); //釋放pIStream
pIPicture->Release(); //釋放pIPicture
}
利用COM介面實現。
void DisplayImage(HDC hDC, LPCTSTR szImagePath)
{
HANDLE hFile=CreateFile(szImagePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); //從指定的路徑szImagePath中讀取檔案控制代碼
DWORD dwFileSize=GetFileSize(hFile, NULL); //獲得圖片檔案的大小,用來分配全域性記憶體
HGLOBAL hImageMemory=GlobalAlloc(GMEM_MOVEABLE, dwFileSize); //給圖片分配全域性記憶體
void *pImageMemory=GlobalLock(hImageMemory); //鎖定記憶體
DWORD dwReadedSize; //儲存實際讀取的檔案大小
ReadFile(hFile, pImageMemory, dwFileSize, &dwReadedSize, NULL); //讀取圖片到全域性記憶體當中
GlobalUnlock(hImageMemory); //解鎖記憶體
CloseHandle(hFile); //關閉檔案控制代碼
IStream *pIStream;//建立一個IStream介面指標,用來儲存圖片流
IPicture *pIPicture;//建立一個IPicture介面指標,表示圖片物件
CreateStreamOnHGlobal(hImageMemory, false, &pIStream) //用全域性記憶體初使化IStream介面指標
OleLoadPicture(pIStream, 0, false, IID_IPicture, (LPVOID*)&(pIPicture));//用OleLoadPicture獲得IPicture介面指標
//得到IPicture COM介面物件後,你就可以進行獲得圖片資訊、顯示圖片等操作
OLE_XSIZE_HIMETRIC hmWidth;
LE_YSIZE_HIMETRIC hmHeight;
pIPicture->get_Width(&hmWidth); //用介面方法獲得圖片的寬和高
pIPicture->get_Height(&hmHeight);
pIPicture->Render(hDC,0,0,100,100,0,hmHeight,hmWidth,-hmHeight,NULL); //在指定的DC上繪出圖片
GlobalFree(hImageMemory); //釋放全域性記憶體
pIStream->Release(); //釋放pIStream
pIPicture->Release(); //釋放pIPicture
}