15,979
社区成员
发帖
与我相关
我的任务
分享
void CMonitorView::LoadPicture(CRect rect, CString FilePath, CDC *pDC)
{
IPicture *pPicture;//声明OLE提供的图像对象
IStream *pStrm;//声明一个流对象
CFileStatus fstatus;
CFile file;
LONG cb;
if((file.Open(FilePath,CFile::modeRead))&&(file.GetStatus(FilePath,fstatus))&&((cb=fstatus.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,&pStrm);//创建流对象
if(SUCCEEDED(OleLoadPicture(pStrm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)&pPicture))) //根据流对象pStrm初始化图像对象pPicture
{
OLE_XSIZE_HIMETRIC Width;
OLE_YSIZE_HIMETRIC Height;
pPicture->get_Width(&Width);
pPicture->get_Height(&Height);
//得到图像的宽、高尺寸,注意该尺寸的逻辑单位不是图像的像素
if(FAILED(pPicture->Render(*pDC,rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,0,Height,Width,-Height,NULL)))
AfxMessageBox("渲染图片失败");
pPicture->Release();
}
else
AfxMessageBox("从流中获取图片失败!");
}
}
}
else
{
AfxMessageBox("无法打开图像!");
}