bool C2DDrawing::LoadImage(BYTE* imgBuffer, int size){
//DrawingImage Image object
if (m_DrawingImage != NULL)
{
delete m_DrawingImage; m_DrawingImage = NULL;
}
HGLOBAL hBuffer;
hBuffer = ::GlobalAlloc(GMEM_MOVEABLE,size);
if(hBuffer)
{
void* pBuffer = ::GlobalLock(hBuffer);
if(pBuffer)
{
CopyMemory(pBuffer, imgBuffer, size);
IStream* pStream = NULL;
if(::CreateStreamOnHGlobal(hBuffer,FALSE,&pStream) == S_OK)
{
m_DrawingImage = Gdiplus::Image::FromStream(pStream,false);
pStream->Release();
if(m_DrawingImage)
{
if(m_DrawingImage->GetLastStatus() == Ok)
{
UINT count = 0;
count = m_DrawingImage->GetFrameDimensionsCount();
GUID* pDemensionIDs = new GUID[count];
m_DrawingImage->GetFrameDimensionsList(pDemensionIDs, count);
m_nFrameCount = m_DrawingImage->GetFrameCount(&pDemensionIDs[0]);
int nSize = m_DrawingImage->GetPropertyItemSize(PropertyTagFrameDelay);
m_pPropertyItem = (PropertyItem*)malloc(nSize);
m_DrawingImage->GetPropertyItem(PropertyTagFrameDelay, nSize, m_pPropertyItem);
// Update Region
int wImage = m_DrawingImage->GetWidth();
int hImage = m_DrawingImage->GetHeight();
m_Region = new Region(Rect(0, 0, wImage, hImage));
delete [] pDemensionIDs;
::GlobalUnlock(hBuffer);
::GlobalFree(hBuffer);
}
}
}
::GlobalUnlock(hBuffer);
}
::GlobalFree(hBuffer);
}
return true;
}
Network and collaborate with thousands of CTOs, CISOs, and IT Pros rooting for you and your success.
”The time we save is the biggest benefit of E-E to our team. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange.
Our community of experts have been thoroughly vetted for their expertise and industry experience.