TCHAR *dv;
dv = (TCHAR *)malloc(len*sizeof(TCHAR));
data.Read(dv, len);
data.Close();
int slen = (len / 4) * 3;
slen += 10;
BYTE * tc;
tc = (BYTE *)malloc(slen);
BASE64_Decode(dv, len, tc);
//直接在内存里面构建CIMAGE,需要使用IStream接口,如何使用
//构建内存环境
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, slen);
void * pData = GlobalLock(hGlobal);
memcpy(pData, tc, slen); // 拷贝位图数据进去
GlobalUnlock(hGlobal);
// 创建IStream
IStream * pStream = NULL;
if (CreateStreamOnHGlobal(hGlobal, TRUE, &pStream) != S_OK)
return ;
// 使用CImage加载位图内存
CImage img;
if (SUCCEEDED(img.Load(pStream)) )
{
CClientDC dc(this);
//使用内在中构造的图像 直接在对话框上绘图
img.Draw(dc.m_hDC, 0, 0, 500, 300);
}
//释放内存
pStream->Release();
GlobalFree(hGlobal);
//如果要保存图像文件的话,那就使用下面的代码
//CFileDialog savefile(FALSE, ".jpg", "");
//if (savefile.DoModal()==IDOK)
//{
// CFile save(savefile.GetPathName(), CFile::modeCreate | CFile::modeWrite);
// save.Write(tc, slen);
// save.Close();
//}
free(tc);
free(dv);
}
}