用API OleLoadPicture通過IStream來加載JPG、GIF格式的圖片

用API OleLoadPicture通過IStream來加載JPG、GIF格式的圖片

OleLoadPicture 函數實際上創建了一個IPicture類型的COM接口對象,然後我們可以通過這個COM接口來操作圖片(實際上你也可以用API OleCreatePictureIndirect來加載圖片,不過相比而言OleLoadPicture函數簡化了基於流的IPicture對象的創建),下面是示例代碼:(注:由於只是用來示例,代碼中省去了出錯情況的處理)

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  

 

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/lanmanck/archive/2009/04/04/4048697.aspx

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