OleLoadPicture

用API OleLoadPicture來載入JPG、GIF格式的圖片(註:不支持PNG格式,另外GIF只能載入第一幀,且不支持透明) OleLoadPicture 函式實際上創建了一個IPicture類型的COM接口對象,然後我們可以通過這個COM接口來操作圖片(實際上你也可以用API OleCreatePictureIndirect來載入圖片,不過相比而言OleLoadPicture函式簡化了基於流的IPicture對象的創 建)。

簡介

第一個參數pStream指向包含有圖像數據的流的指針,第二個參數lSize為從流中讀取的位元組數,第三個參數fRunmode為圖像屬性對應的初值,第四個參數riid為涉及到的接口標識描述要返回的接口指針的類型,第五個參數ppvObj為在rrid中用到的接口指針變數的地址。

代表案例

下面是示例代碼:(註:由於只是用來示例,代碼中省去了出錯情況的處理)

/*

*如下代碼段實現的功能是從指定的路徑中讀取圖片,並顯示出來

*/

void DisplayImage(HWND hwnd, LPCTSTR szImagePath)

{

HDC hDC=GetDC(hwnd);

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;

OLE_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

}

相關詞條

相關搜尋

熱門詞條

聯絡我們