取出数据库中的图片并显示出来

aihaoaodiA6 2009-11-03 09:47:19
我要做的是读取数据库中保存的JPG图片然后显示在PICTURE CONTROL上面
下面是代码:
_variant_t pvList ;
long lDataSize = theApp.m_pRecordset->GetFields()->GetItem("IMAGE")->ActualSize;
m_nFileLen = (DWORD)lDataSize;
if(lDataSize > 0)
{
_variant_t varBLOB;
varBLOB = theApp.m_pRecordset->GetFields()->GetItem("IMAGE")->GetChunk(lDataSize);
//把二进制格式的图片转为图片格式
try
{
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 );

if ( CreateStreamOnHGlobal( hMem, TRUE, &pStream ) !=S_OK )
return 0 ;

if ( OleLoadPicture( pStream, m_nFileLen, TRUE, IID_IPicture, ( LPVOID * )&pPicture ) !=S_OK )
return 0;

CRect rect;
m_picture.GetClientRect(&rect); //m_picture为Picture Control控件变量,获得控件的区域对象
CDC* pDC = m_picture.GetWindowDC(); //获得显示控件的DC
if (pPicture != NULL)
{
long nWidth,nHeight;
pPicture->get_Width( &nWidth );
pPicture->get_Height( &nHeight );
//图片原大显示
//CSize sz( nWidth, nHeight );
//pDC->HIMETRICtoDP( &sz );
//pPicture->Render(pDC->m_hDC,x,y,sz.cx,sz.cy,0,nHeight,nWidth,-nHeight,NULL);
pPicture->Render(pDC->m_hDC,rect.left,rect.top,rect.Width(),rect.Height(),0,nHeight,nWidth,-nHeight,NULL);

}
//UpdateData(true);
ReleaseDC(pDC);
}
}
}

catch(...)
{
AfxMessageBox("从数据库中读取jpg图像有错!");
return 0;
}
}
}

为什么在图片控件上显示不出来呢?????
...全文
130 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
aihaoaodiA6 2009-11-04
  • 打赏
  • 举报
回复
不行,改了后调试错误,不能那么调用的。请大家帮我看看。急啊!
dirdirdir3 2009-11-03
  • 打赏
  • 举报
回复
试一下
CDC* pDC = m_picture.GetClientDC();

4,012

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧