vc中如何将access数据库中的长二进制数据写成gif文件,存储在硬盘上?望各位指点 vc中如何将access数据库中的长二进制数据写成gif文件,存储在硬盘上?望各位指点 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 GetChunk得到二进制数据,创建一个后缀名为gif的空文件,直接写入. long lDataSize = m_pRst->GetFields()->GetItem("VSGif")->ActualSize; DWORD m_nFileLen = (DWORD)lDataSize; if(lDataSize > 0) { _variant_t varBLOB; varBLOB = m_pRst->GetFields()->GetItem("VSGif")->GetChunk(lDataSize); //把二进制格式的图片转为图片格式 char * m_pJPGBuffer; IStream * pStream; IPicture * pPicture; if(varBLOB.vt == (VT_ARRAY | VT_UI1)) { if(m_pJPGBuffer = new char[lDataSize+1]) { char *pBuf = NULL; SafeArrayAccessData(varBLOB.parray,(void **)&pBuf); memcpy(m_pJPGBuffer,pBuf,lDataSize); SafeArrayUnaccessData (varBLOB.parray); m_nFileLen = lDataSize; //m_pJPGBuffer -> pPicture HGLOBAL hMem = ::GlobalAlloc( GMEM_MOVEABLE, m_nFileLen ); LPVOID lpBuf = ::GlobalLock( hMem ); memcpy(lpBuf,m_pJPGBuffer,m_nFileLen); ::GlobalUnlock( hMem ); CreateStreamOnHGlobal( hMem, TRUE, &pStream ); OleLoadPicture( pStream, m_nFileLen, TRUE, IID_IPicture, ( LPVOID * )&pPicture ); ////////////////////////图片另存为////////////////////////////////// CString ljname;//路径名 TCHAR szFilePath[MAX_PATH + 1]; //得到当前运行程序所在路径(其实得到的是当前执行程序存放路径) GetModuleFileName(NULL, szFilePath, MAX_PATH); (_tcsrchr(szFilePath, _T('\\')))[1] = 0; CString WorkPath=szFilePath; ljname=WorkPath+"Flash_Indexed_Gif\\"+GifFileName; CFile destFile(ljname, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary); //写文件 destFile.Write(pBuf, m_nFileLen); //Write it destFile.Close(); } } } CList:GetAt(POSITION) O(1)? 怎么获取按钮被按下信息 使用build工具使用的sources文件里支持!IF,!ELSE,!ENDIF吗?我的语法哪里有问题呢? 【讨论】Winodws程序的调试 用CString的Format()是否稳定? 新手问题! 初始化代码写在哪里啊?(不要因为我笨就不理我哦) 100分求简单socket问题 左移和右移的问题? 高手请帮忙解决这个难题-关于.vox文件 关于vista用户权限的问题 请懂得C++的人都来帮忙下,困惑很久啦,万分感激。送分加分帖
DWORD m_nFileLen = (DWORD)lDataSize;
if(lDataSize > 0)
{
_variant_t varBLOB;
varBLOB = m_pRst->GetFields()->GetItem("VSGif")->GetChunk(lDataSize);
//把二进制格式的图片转为图片格式
char * m_pJPGBuffer;
IStream * pStream;
IPicture * pPicture;
if(varBLOB.vt == (VT_ARRAY | VT_UI1))
{
if(m_pJPGBuffer = new char[lDataSize+1])
{
char *pBuf = NULL;
SafeArrayAccessData(varBLOB.parray,(void **)&pBuf);
memcpy(m_pJPGBuffer,pBuf,lDataSize);
SafeArrayUnaccessData (varBLOB.parray);
m_nFileLen = lDataSize;
//m_pJPGBuffer -> pPicture
HGLOBAL hMem = ::GlobalAlloc( GMEM_MOVEABLE, m_nFileLen );
LPVOID lpBuf = ::GlobalLock( hMem );
memcpy(lpBuf,m_pJPGBuffer,m_nFileLen);
::GlobalUnlock( hMem );
CreateStreamOnHGlobal( hMem, TRUE, &pStream );
OleLoadPicture( pStream, m_nFileLen, TRUE, IID_IPicture, ( LPVOID * )&pPicture );
////////////////////////图片另存为//////////////////////////////////
CString ljname;//路径名
TCHAR szFilePath[MAX_PATH + 1]; //得到当前运行程序所在路径(其实得到的是当前执行程序存放路径)
GetModuleFileName(NULL, szFilePath, MAX_PATH);
(_tcsrchr(szFilePath, _T('\\')))[1] = 0;
CString WorkPath=szFilePath;
ljname=WorkPath+"Flash_Indexed_Gif\\"+GifFileName;
CFile destFile(ljname, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
//写文件
destFile.Write(pBuf, m_nFileLen); //Write it
destFile.Close();
}
}
}