base64解码的图像buff可以在MFC中显示。
源码
std::string str;
CString text;
CString imgbuf="";
//CString str;
int s=m_Combo1.GetCurSel();
m_Combo1.GetLBText(s,text);
s=atoi(text);
int i=-100;
str=m_Ctrl.createImage(s);
Json::Reader reader;
Json::Value val;
if(reader.parse(str,val)){
i=val["resultFlag"].asInt();
}
if(i==0)
{
imgbuf=val["image"].asCString();
int len = imgbuf.GetLength();
/*CFile fp;
fp.Open("D:\\1.TXT",CFile::modeCreate|CFile::modeReadWrite,NULL);
fp.Write(imgbuf,len);
fp.Close();*/
char *dv = new char[len];
Base64decode(dv,imgbuf);
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, len);
if(hGlobal==NULL)
{
MessageBox("NULL");
return;
}
void * pData =(char*) GlobalLock(hGlobal);
memcpy(pData, dv, len); // 拷贝位图数据进去
// pData = dv;
GlobalUnlock(hGlobal);
IStream * pStream = NULL;
if (CreateStreamOnHGlobal(hGlobal, TRUE, &pStream) != S_OK) return ;
CImage img;
img.Load(pStream);
if (img.IsNull())
{
MessageBox("cc");
}
else
{
CStatic *idc_photo=(CStatic*)GetDlgItem(IDC_PIC1);
CRect m_picRect;
idc_photo->GetClientRect(&m_picRect);
CDC* cd = idc_photo->GetWindowDC();
int width = img.GetWidth();
int height = img.GetHeight();
SetStretchBltMode(cd->m_hDC, HALFTONE);
img.Draw(cd->m_hDC, m_picRect);
//img.Draw(cd->m_hDC, 0, 0, 500, 300);
ReleaseDC(cd);
CFile fp;
fp.Open("D:\\1.jpg",CFile::modeCreate|CFile::modeReadWrite,NULL);
fp.Write(dv,len);
fp.Close();
}
pStream->Release();
GlobalFree(hGlobal);
delete []dv;
m_text="拍摄完成";
UpdateData(false);
转载自:http://www.3fwork.com/b201/001832MYM026499/