BMP、JPG、GIF图像的显示
来源:互联网 发布:淘宝店刷流量软件 编辑:程序博客网 时间:2024/05/04 22:16
用VB的picture控件显示BMP、JPG、GIF很方便,但是在VC、MFC下却不能直接显示,于是我参考网上的例子写了一个图片显示函数,希望能方便大家的使用。
Windows提供了一个显示BMP、JPG、GIF的标准方法,你只需要实例化IPicture以及它的调用就可以,通过OleLoadPicture函数函数从流中读取图片并创建该图片的IPicture对象:
OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&pPic);
它在MSDN里的定义如下:
STDAPI OleLoadPicture(
IStream * pStream,
//Pointer to the stream that contains picture's data
LONG lSize, //Number of bytes read from the stream
BOOL fRunmode,
//The opposite of the initial value of the picture's
// property
REFIID riid, //Reference to the identifier of the interface
// describing the type of interface pointer to return
VOID ppvObj //Address of output variable that receives interface
// pointer requested in riid
);
以下是显示我在对话框CNewFormDlg中的一个图像显示函数DisplayPic,使用它可以在一个控件上显示一幅图片,该函数可以显示BMP、JPG和GIF文件,参数如下:
char *lpImageFile 图像文件名
HWND hWnd 要显视对象句柄
int nScrWidth 显示宽度
int nScrHeight 显示高度
HRESULT CNewFormDlg::DisplayPic(char *lpImageFile, HWND hWnd, int nScrWidth, int nScrHeight)
{
HDC hDC_Temp=::GetDC(hWnd);
IPicture *pPic;
IStream *pStm;
BOOL bResult;
HANDLE hFile=NULL;
DWORD dwFileSize,dwByteRead;
//打开硬盘中的图形文件
hFile=CreateFile(lpstrFile,GENERIC_READ,
FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile!=INVALID_HANDLE_VALUE)
{
dwFileSize=GetFileSize(hFile,NULL);//获取文件字节数
if (dwFileSize==0xFFFFFFFF)
return E_FAIL;
}
else
{
return E_FAIL;
}
//分配全局存储空间
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);
LPVOID pvData = NULL;
if (hGlobal == NULL)
{
AfxMessageBox("图形文件分配出错.");
return E_FAIL;
}
if ((pvData = GlobalLock(hGlobal)) == NULL)//锁定分配内存块
{
AfxMessageBox("内存块锁定出问题");
return E_FAIL;
}
ReadFile(hFile,pvData,dwFileSize,&dwByteRead,NULL);//把文件读入内存缓冲区
GlobalUnlock(hGlobal);
if(CreateStreamOnHGlobal(hGlobal, TRUE, &pStm) != S_OK)
{
AfxMessageBox("流初始化失败");
return E_FAIL;
}
//装入图形文件
bResult=OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&pPic);
if(FAILED(bResult))
{
AfxMessageBox("图形文件装载出错.");
return E_FAIL;
}
OLE_XSIZE_HIMETRIC hmWidth;//图片的真实宽度
OLE_YSIZE_HIMETRIC hmHeight;//图片的真实高度
pPic->get_Width(&hmWidth);
pPic->get_Height(&hmHeight);
//将图形输出到屏幕上
bResult=pPic->Render(hDC_Temp,0,0,nScrWidth,nScrHeight,
0,hmHeight,hmWidth,-hmHeight,NULL);
CloseHandle(hFile);//关闭打开的文件
pPic->Release();
// Free memory.
GlobalFree(hGlobal);
if (SUCCEEDED(bResult))
{
return S_OK;
}
else
{
AfxMessageBox("图形文件装载出错.");
return E_FAIL;
}
}
调用如下:
void CNewFormDlg::OnButton2()
{
HWND m_hWnd;
GetDlgItem(IDC_STATIC_VIEW,&m_hWnd);
DisplayPic("F://图片//水晶//Crystal521.jpg",m_hWnd,500,500);
}
- BMP、JPG、GIF图像的显示
- VC 中BMP、JPG、GIF图像的显示
- bmp,gif,jpg等图像的文件格式
- 显示BMP,JPG,GIF的操作
- 使用IPicture的OLE实现读取和显示BMP,GIF,JPG,ICO,EMF,WMF图像
- 如何在MFC中显示jpg.gif.bmp等类型的图像
- png,bmp,jpg,gif格式图像的区别
- wince中显示BMP、JPG、Gif以及PNG的方法
- wince中显示BMP、JPG、Gif以及PNG的方法
- 怎样显示Jpg,bmp,Gif图像文件
- 使用IPicture接口读取和显示BMP,GIF,JPG,ICO,EMF,WMF图像
- 使用IPicture接口读取和显示BMP,GIF,JPG,ICO,EMF,WMF图像 (转)
- 使用IPicture接口读取和显示BMP,GIF,JPG,ICO,EMF,WMF图像
- 使用IPicture接口读取和显示BMP,GIF,JPG,ICO,EMF,WMF图像
- C#使用GDAL将tif图像转换为jpg、bmp、png和gif格式的图像
- JPG png GIF BMP图片格式的区别
- 通过Adodb.Stream取得图像(BMP JPG PNG GIF SWF)的高度和宽度
- 通过Adodb.Stream取得图像(BMP JPG PNG GIF SWF)的高度和宽度
- [Windows安全知识]Windows 2003安全:清除默认共享隐患
- 不错的面试题(12个乒乓球)
- 数据库联接问题
- 变天
- asp.net窗体的打开和关闭
- BMP、JPG、GIF图像的显示
- 学习C++中的继承
- 关于在动态链接库中共享存储的简单示例,译自MSDN
- 论瀑布模型、Rup是否适用于一般的国内软件公司。(一)
- 怎样防止浏览器刷新重复提交数据?
- 如何传值在2个页面之间 :要求不刷新父页面,并且不能用QueryString传值
- [LDAP][翻译]OpenLDAP管理员指南(仅前七章)
- Fast Read Map
- 一起来锻炼——哑铃(zz)