1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
CGYBitmap* __fastcall CGYControl::LoadPngFromRessource(UINT nID, UINT nNumHImage, UINT nNumVImage, HMODULE hInst)
{
if (!hInst)
{
hInst = ::GetModuleHandle(0);
}
if (!hInst)
{
return false;
}
HRSRC hResource = ::FindResource(hInst, MAKEINTRESOURCE( nID ), _T("PNG"));
if (!hResource)
{
return false;
}
DWORD imageSize = ::SizeofResource(hInst, hResource);
if (!imageSize)
{
return false;
}
const void* pResourceData = ::LockResource(::LoadResource(hInst, hResource));
if (!pResourceData)
{
return false;
}
HGLOBAL hBuffer = ::GlobalAlloc(GMEM_MOVEABLE, imageSize);
if (!hBuffer)
{
return false;
}
void* pBuffer = ::GlobalLock(hBuffer);
if (!pBuffer)
{
::GlobalFree(hBuffer);
hBuffer = NULL;
return false;
}
CopyMemory(pBuffer, pResourceData, imageSize);
CGYBitmap* pBitmap = 0;
IStream* pStream = NULL;
if (::CreateStreamOnHGlobal(hBuffer, TRUE, &pStream) == S_OK)
{
pBitmap = new CGYBitmap(pStream, nNumHImage, nNumVImage, FALSE);
pStream->Release();
}
if (pBitmap && pBitmap->GetLastStatus() != Gdiplus::Ok)
{
SAFE_DELETE(pBitmap);
}
return pBitmap;
}
//////////////////////////////////////////////////////////////////////////////////////////////// |
Partager