用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??
}
來自:飛鴿傳書:http://www.freeeim.com/
總結
以上是生活随笔為你收集整理的用API OleLoadPicture通过IStream来加载JPG、GIF格式的图片的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VTK修炼之道76:交互部件_标注类Wi
- 下一篇: VTK修炼之道77:交互部件_分割/配准