mfc 中 显示位图容易 但是显示JPG等格式却比较麻烦, 在此使用IPicture接口可以很方便的显示bmp,jpg,gif等格式图片 , 但此接口不支持tif png格式的图片。
void ShowImage(CString str)
{
CclientDC dc(this);
IPicture * pImg;
IStream * pStm;
CFileStatus fstatus;
CFile file;
LONG cb;
if (file.Open (str,CFile::modeRead)&&file.GetStatus (str,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,&pStm);
if (SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size ,TRUE,IID_IPicture,(LPVOID *)&pPic)))
{
pStm->Release ();
OLE_XSIZE_HIMETRIC hmWidth;
OLE_YSIZE_HIMETRIC hmHeight;
pImg->get_Width(&hmWidth);
pImg->get_Height (&hmHeight);
CRECT rect; dc.GetClientRect(&rect);
pImg->Render(dc,0,0,rect.Width(),rect.Height(),0,hmHeight,hmWidth,-hmHeight,NULL); }
else
AfxMessageBox("Error Loading Picture From Stream!");
}
}
}
else
{
AfxMessageBox("can't Open Image File!");
}
}
参考资料:
http://www.vckbase.com/bbs/prime/viewprime.asp?id=594
http://blog.csdn.net/crearo/article/details/1328974
http://hi.baidu.com/ustc_/blog/item/d7b946ea5bb0cfd4d539c9f7.html