| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46  | 
						void CTestFaceServerSdkDlg::OnEventCEnrollUserFaceserversdkctrl1(  	LPCTSTR strDevSn ,					//终端序列号 m_devSn 	long lOpCode ,						//操作标识 OP_SUCC=0 成功 OP_FAIL=1 失败 	long lUserData ,					//用户传进来的自定义数据 	long lExtendParam ,					//扩展参数 	long lUserId ,						//用户编号 	LPCTSTR strCardNo ,					//卡号 	long lFeatureLen ,					//特征码原始长度 	LPCTSTR strBase64FeatureData ,		//经过BASE64编码的特征数据 	long lPhotoType ,					//照片类型保留 	long lPhotoLen ,					//照片原始数据长度 	LPCTSTR strBase64PhotoData			//经过BASE64编码的照片数据 	) { 	// TODO:  在此处添加消息处理程序代码 	if(lPhotoLen > 0) 	{ 		MessageBox( _T( "人脸登记成功" ) ); 		int nBase64PhotoLen = wcslen( strBase64PhotoData ); 		if(nBase64PhotoLen > 1024) 		{ 			char szBuffer[ BUF_LEN ] = { 0 }; 			char* pDst = szBuffer; 			CBase64 * cBase64 = new CBase64; 			int nDstLen = cBase64->DecodeBase64( (const char*)( CW2A( strBase64PhotoData ) ) , (unsigned char*)pDst , nBase64PhotoLen ); 			CString strSuffix; 			strSuffix.Format( _T( "%d" ) , lUserId ); 			CString strFileName; 			SYSTEMTIME sys; 			GetLocalTime( &sys ); 			strFileName.Format( _T( ".\\PHOTO_%s_%04d%02d%02d%02d%02d%02d%03d_%s.jpg" ) , _T( "GetUserInfo" ) , sys.wYear , sys.wMonth , sys.wDay , sys.wHour , sys.wMinute , sys.wSecond , sys.wMilliseconds , strSuffix ); 			CFile file; 			CFileException ex; 			if(file.Open( strFileName , CFile::modeWrite | CFile::shareExclusive | CFile::modeCreate , &ex )) 			{ 				file.Write( szBuffer , nDstLen ); 				file.Flush(); 				file.Close(); 			} 		} 	} }  | 
					
先暂存一下…
从图片获取数据显示在界面上:
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30  | 
							//文件读取方法: 	int cx , cy; 	CImage  image; 	CRect   rect; 	//根据路径载入图片   	image.Load( strFileName ); 	//获取图片的宽 高度   	cx = image.GetWidth(); 	cy = image.GetHeight(); 	//获取Picture Control控件的大小   	GetDlgItem( IDC_STATIC_PIC )->GetWindowRect( &rect ); 	//将客户区选中到控件表示的矩形区域内   	ScreenToClient( &rect ); 	//窗口移动到控件表示的区域   	GetDlgItem( IDC_STATIC_PIC )->MoveWindow( rect.left , rect.top , cx , cy , TRUE ); 	CWnd *pWnd = NULL; 	pWnd = GetDlgItem( IDC_STATIC_PIC );//获取控件句柄   	pWnd->GetClientRect( &rect );//获取句柄指向控件区域的大小 	CDC *pDc = NULL; 	pDc = pWnd->GetDC();//获取picture的DC 	image.Draw( pDc->m_hDC , rect );//将图片绘制到picture表示的区域内 	ReleaseDC( pDc );  | 
					
Base64数据流直接显示到界面上:
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33  | 
							//数据显示方法: 	//分配内存,准备读入图片文件的数据 	//GlobalAlloc从堆分配指定字节的内存区域 	HGLOBAL hGlobal = GlobalAlloc( GMEM_FIXED , BUF_LEN ); 	memcpy_s( hGlobal , BUF_LEN , szBuffer , BUF_LEN ); 	//从创建IStream接口指针 	CComPtr<IStream> spStream; 	CreateStreamOnHGlobal( hGlobal , TRUE , &spStream ); 	IPicture *pPicture; 	OleLoadPicture( spStream , BUF_LEN , TRUE , IID_IPicture , (void**)&pPicture ); 	CWnd *pWnd = NULL; 	pWnd = GetDlgItem( IDC_STATIC_PIC );//获取控件句柄 	CDC *pDc = NULL; 	pDc = pWnd->GetDC();//获取picture的DC 	CRect rect; 	pWnd->GetClientRect( &rect );//获取句柄指向控件区域的大小 	LONG width = rect.right - rect.left - 1; 	LONG height = rect.bottom - rect.top - 2; 	LONG cx , cy; 	pPicture->get_Width( &cx ); 	pPicture->get_Height( &cy ); 	pPicture->Render( pDc->m_hDC , 0 , 1 , width , height , 0 , cy , cx , -cy , NULL ); 	pPicture->Release(); 	spStream.Release();  | 
					
…
【MFC】Base64图片解码后,转存成文件
				
					