gdi 找了一些有关gdi的一些代码 其中加载图片的方式都是用LoadBitmap从资源里加载,我想从一个外部文件加载该如何实现呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 改下下面代码中的路径,即可从你制定的路径载入JPG,JIF格式的图片 IPicture *pPicture;//声明OLE提供的图像对象 IStream *pStrm;//声明一个流对象 CFileStatus fstatus; CFile file; LONG cb; if((file.Open("D:/sunset.jpg",CFile::modeRead))&&(file.GetStatus("D:/sunset.jpg",fstatus))&&((cb=fstatus.m_size)!=-1)) { HGLOBAL hGlobal=GlobalAlloc(GMEM_MOVEABLE,cb); LPVOID pvData=NULL; CDC *pDC; pDC=(this->GetActiveWindow())->GetDC();//得到活动视图的设备上下文 if(hGlobal!=NULL) { if((pvData=GlobalLock(hGlobal))!=NULL) { file.Read(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,100,80,300,230,0,Height,Width,-Height,NULL))) //在初始点(100,80)宽为200、高为150的矩形中显示图形 AfxMessageBox("Failed to render the picture"); pPicture->Release(); } else AfxMessageBox("Error loadimg picture from stream!"); } } } else AfxMessageBox("Can open image file!"); 简单的只想加载bmp,ico等文件的,用LoadImage想支持jpg,gif,png等复杂格式的,可用CxImage这个开源库,或访问我的空间,下载我的gdi引擎,使用很简单 http://blog.csdn.net/smallfishff/archive/2008/07/29/2731841.aspx MFC中picture控件显示图片 请各位前辈帮我解决一个刚刚遇到的问题 ATL复合控件不响应键盘消息? 关于数据库的问题(在线等待) 如何让ListBox的窗口大小随内容的大小改变 讨论:Acess anywhere的实现方法 请问那里能买到<<windows 95系统程式设计-虚拟机器与VXD程序设计>>这本书? 急! YUV格式的问题,已经第三次发帖,望了解这方面的朋友帮帮忙!谢谢您 谁能说一下循环左移和循环右移 郑重声明:《代码大全》电子版,我不做了 能给一个VC画动态曲线的思路吗?有源码或控件最好 我在自己定义的类中要调用在文档类中定义的一个变量该如何实现?
IPicture *pPicture;//声明OLE提供的图像对象
IStream *pStrm;//声明一个流对象
CFileStatus fstatus;
CFile file;
LONG cb;
if((file.Open("D:/sunset.jpg",CFile::modeRead))&&(file.GetStatus("D:/sunset.jpg",fstatus))&&((cb=fstatus.m_size)!=-1))
{
HGLOBAL hGlobal=GlobalAlloc(GMEM_MOVEABLE,cb);
LPVOID pvData=NULL;
CDC *pDC;
pDC=(this->GetActiveWindow())->GetDC();//得到活动视图的设备上下文
if(hGlobal!=NULL)
{
if((pvData=GlobalLock(hGlobal))!=NULL)
{
file.Read(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,100,80,300,230,0,Height,Width,-Height,NULL)))
//在初始点(100,80)宽为200、高为150的矩形中显示图形
AfxMessageBox("Failed to render the picture");
pPicture->Release();
}
else
AfxMessageBox("Error loadimg picture from stream!");
}
}
}
else
AfxMessageBox("Can open image file!");
想支持jpg,gif,png等复杂格式的,可用CxImage这个开源库,或访问我的空间,下载我的gdi引擎,使用很简单