19,469
社区成员
发帖
与我相关
我的任务
分享
void CGdiplusTestDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: add storing code here
HGLOBAL m_hMem = GlobalAlloc(GMEM_MOVEABLE, 0);
IStream *pstm=NULL;
CreateStreamOnHGlobal(m_hMem, TRUE, &pstm);
CLSID clsid;
USES_CONVERSION;
GetCodecClsid(A2W("image/jpeg"), &clsid);
m_pImage->Save(pstm,&clsid,NULL);
if (pstm==NULL)
return;
LARGE_INTEGER liBeggining = { 0 };
pstm->Seek(liBeggining, STREAM_SEEK_SET, NULL);
DWORD wTemp=GlobalSize(m_hMem);
LPBYTE lpData = (LPBYTE)GlobalLock(m_hMem);
ar << wTemp;
ar.Write(lpData,wTemp);
pstm->Release();
GlobalUnlock(m_hMem);
}
else
{
// TODO: add loading code here
DWORD wTemp;
ar >> wTemp;
HGLOBAL m_hMem = GlobalAlloc(GMEM_FIXED, wTemp);
if (m_hMem == NULL)
return;
IStream *pstm=NULL;
CreateStreamOnHGlobal(m_hMem,FALSE,&pstm);
if (pstm==NULL)
return;
BYTE* pmem = (BYTE*)GlobalLock(m_hMem);
ar.Read(pmem,wTemp);
if (m_pImage) {
delete m_pImage;
m_pImage = NULL;
}
using namespace Gdiplus;
if (m_pImage!=NULL)
{
delete m_pImage;
m_pImage=NULL;
}
m_pImage = Image::FromStream(pstm, FALSE);
pstm->Release();
GlobalUnlock(m_hMem);
}
}