Mfc 从存档反序列化位图

Mfc 从存档反序列化位图,mfc,gdi,Mfc,Gdi,我的MFC应用程序有问题。当我试图从存档中反序列化CBitmap并创建新的CBitmap时,它无法正确加载CBitmap的位 代码如下: BITMAP bm; ar >> bm.bmType; ar >> bm.bmWidth; ar >> bm.bmHeight; ar >> bm.bmWidthBytes; ar >> bm.bmPlanes; ar >> bm.bmBitsPixel; int nSize = bm.b

我的MFC应用程序有问题。当我试图从存档中反序列化CBitmap并创建新的CBitmap时,它无法正确加载CBitmap的位

代码如下:

BITMAP bm;
ar >> bm.bmType;
ar >> bm.bmWidth;
ar >> bm.bmHeight;
ar >> bm.bmWidthBytes;
ar >> bm.bmPlanes;
ar >> bm.bmBitsPixel;
int nSize = bm.bmWidth * bm.bmHeight;
bm.bmBits = new BYTE[nSize];
ar.Read(bm.bmBits, nSize);
CBitmap* tmp = new CBitmap;
tmp->CreateBitmapIndirect(&bm);
BITMAP bmi;
tmp->GetBitmap(&bmi);
HBITMAP hNew = (HBITMAP)CopyImage((HBITMAP)(*tmp), IMAGE_BITMAP, 
    bmi.bmWidth, bmi.bmHeight, LR_CREATEDIBSECTION);
m_bmp.Attach(hNew);
delete tmp;
在我执行tmp->GetBitmap(&bmi)之后;我在bmi.bmBits字段中得到NULL

怎么了?我怎样才能让它工作

另外,我不能将序列化用于*.bmp文件


提前谢谢你,Mike。

如果你能改变你的序列化方式,这就行了,
bmp
HBITMAP

// store
CImage image;
image.Attach(bmp);
HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, 0);
IStream* pStream;
CreateStreamOnHGlobal(hMem, TRUE, &pStream);
image.Save(pStream, Gdiplus::ImageFormatBMP);
size_t nSize = GlobalSize(hMem);
LPVOID buff = GlobalLock(hMem);
ar << nSize;
ar.Write(buff, nSize);
GlobalUnlock(hMem);
GlobalFree(hMem);


// load
size_t nSize;
ar >> nSize;
HGLOBAL hMem = GlobalAlloc(GHND, nSize);
LPVOID buff = GlobalLock(hMem);
ar.Read(buff, nSize);
GlobalUnlock(hMem);
IStream* pStream;
CreateStreamOnHGlobal(hMem, TRUE, &pStream);
CImage image;
image.Load(pStream);
bmp = image.Detach();
GlobalFree(hMem);
//存储
CImage图像;
图像。附加(bmp);
HGLOBAL hMem=GlobalAlloc(GMEM_可移动,0);
IStream*pStream;
CreateStreamOnHGlobal(hMem、TRUE和pStream);
保存(pStream,Gdiplus::ImageFormatBMP);
尺寸=全球尺寸(hMem);
LPVOID buff=GlobalLock(hMem);
ar>nSize;
HGLOBAL hMem=GlobalAlloc(GHND,nSize);
LPVOID buff=GlobalLock(hMem);
ar.Read(buff,nSize);
GlobalUnlock(hMem);
IStream*pStream;
CreateStreamOnHGlobal(hMem、TRUE和pStream);
CImage图像;
图像加载(pStream);
bmp=image.Detach();
全球自由度(hMem);