用IPicture时遇到的问题

opera321 2008-04-10 05:39:49
用过IPicture的朋友都知道可以利用下面的方法显示jpg图片,假如我定义一个全局的IPicture *pGlobalPic=NULL;
在调用下面的PicChangeImmediate()的时候,将pGlobalPic作为参数。为什么在该函数执行完成后,用pGlobalPic无法显示图片。
if(FAILED(pPic->Render(*pDC,0,0,(DWORD)cx,(DWORD)cy,0,cySrc,cxSrc,-cySrc,NULL)))     
AfxMessageBox("Failed To Render The picture!");
pPic->Release();

不起作用,但也不报错。很纳闷!哪位仁兄给指点一下,多谢!


void CDispPicView::PicChangeImmediate(CString &str,IPicture *pPic)
{
CClientDC *pDC=new CClientDC(this);
IStream *pStm;
CFileStatus status;
LONG cb;
CFile file;
if(file.Open(str,CFile::modeRead) && file.GetStatus(str,status)&&((cb=status.m_size)!=-1))
{
HGLOBAL hGlobal=GlobalAlloc(GMEM_MOVEABLE,cb);
LPVOID pvData=NULL;
if(hGlobal!=NULL)
{
if((pvData=GlobalLock(hGlobal))!=NULL)
{
file.ReadHuge(pvData,cb);
GlobalUnlock(hGlobal);
CreateStreamOnHGlobal(hGlobal,TRUE,&pStm);

if(SUCCEEDED(OleLoadPicture(pStm,status.m_size,TRUE,IID_IPicture,(LPVOID*)&pPic)))
{
pPic->get_Width(&cxSrc);
pPic->get_Height(&cySrc);

cx= (double)pDC->GetDeviceCaps(HORZRES)*(double)cxSrc/((double)pDC->GetDeviceCaps(HORZSIZE)*100.0);
cy= (double)pDC->GetDeviceCaps(VERTRES)*(double)cySrc/((double)pDC->GetDeviceCaps(VERTSIZE)*100.0);

if(FAILED(pPic->Render(*pDC,0,0,(DWORD)cx,(DWORD)cy,0,cySrc,cxSrc,-cySrc,NULL)))
AfxMessageBox("Failed To Render The picture!");
pPic->Release();
}
else
AfxMessageBox("Error Loading Picture From Stream!");
}
}
}
else
AfxMessageBox("Can't Open Image File!");
if(pDC)
{
pDC->DeleteDC();
}

}
...全文
68 2 打赏 收藏 转发到动态 举报
写回复
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
UltraBejing 2008-05-01
  • 打赏
  • 举报
回复
什么呀
knowledge_Is_Life 2008-05-01
  • 打赏
  • 举报
回复
以后需再关注,现在先帮你顶一下

19,446

社区成员

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