一種解決方法:
CImage(MFC or ATL)提供了一個加載內存中Image的成員函數HRESULT CImage::Load(IStream* pStream)。如何把指定的內存轉換爲IStream接口就成了需要解決的問題。最後發現獲取一個ISteam還真是曲折:):
void LoadMemImage(void * pMemData, long len)
{
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, len);
void * pData = GlobalLock(hGlobal);
memcpy_s(pData, len, pMemData, len);
GlobalUnlock(hGlobal);
IStream * pStream = NULL;
if (CreateStreamOnHGlobal(hGlobal, TRUE, &pStream) == S_OK)
{
CImage image;
if (SUCCEEDED(image.Load(pStream)))
{
// ..
}
pStream->Release();
}
GlobalFree(hGlobal);
}