BOOL CPngImage::LoadFromBuffer (LPBYTE lpBuffer, UINT uiSize)
{
if (!afxGlobalData.bGDIPlusSupport)
{
return FALSE;
}
ASSERT(lpBuffer != NULL);
HGLOBAL hRes = ::GlobalAlloc (GMEM_MOVEABLE, uiSize);
if (hRes == NULL)
{
return FALSE;
}
IStream* pStream = NULL;
LPVOID lpResBuffer = ::GlobalLock (hRes);
ASSERT (lpResBuffer != NULL);
memcpy (lpResBuffer, lpBuffer, uiSize);
HRESULT hResult = ::CreateStreamOnHGlobal (hRes, TRUE, &pStream);
if (hResult != S_OK)
{
return FALSE;
}
if (CMFCToolBarImages::m_bMultiThreaded)
{
CMFCToolBarImages::m_CriticalSection.Lock ();
}
if (m_pImage == NULL)
{
m_pImage = new CImage;
ENSURE(m_pImage != NULL);
}
m_pImage->Load (pStream);
pStream->Release ();
BOOL bRes = Attach (m_pImage->Detach ());
if (CMFCToolBarImages::m_bMultiThreaded)
{
CMFCToolBarImages::m_CriticalSection.Unlock ();
}
return bRes;
}
从内存中加载png<摘自MFC源码>
最新推荐文章于 2024-05-29 00:16:50 发布
本文介绍了一个名为CPngImage的类中的LoadFromBuffer成员函数实现细节。该函数负责从内存缓冲区加载PNG图像,并利用GDI+支持来完成加载过程。文中详细解释了如何分配内存、创建流、加载图像并进行资源管理。
2138

被折叠的 条评论
为什么被折叠?



