首先,在Resource.h里面定义ID:
例如:
#define IDB_BG 131
然后在rc文件里面添加代码:
IDB_BG RCPNG "res//背景.png"
其中,RCPNG为自定义资源类型的名称
然后需要CImage这个ATL类,以及以下这个方法:
//////////////////////////////////////////////////////////////////////////
/// @param [in] pImage 图片指针
/// @param [in] nResID 资源号
/// @param [in] lpTyp 资源类型
//////////////////////////////////////////////////////////////////////////
static bool LoadImageFromResource(IN CImage* pImage,
IN UINT nResID,
IN LPCSTR lpTyp)
{
if ( pImage == NULL) return false
pImage->Destroy()
// 查找资源
HRSRC hRsrc = ::FindResource(AfxGetResourceHandle(), MAKEINTRESOURCE(nResID), lpTyp)
if (hRsrc == NULL) return false
// 加载资源
HGLOBAL hImgData = ::LoadResource(AfxGetResourceHandle(), hRsrc)
if (hImgData == NULL)
{
::FreeResource(hImgData)
return false
}
// 锁定内存中的指定资源
LPVOID lpVoid = ::LockResource(hImgData)
LPSTREAM pStream = NULL
DWORD dwSize = ::SizeofResource(AfxGetResourceHandle(), hRsrc)
HGLOBAL hNew = ::GlobalAlloc(GHND, dwSize)
LPBYTE lpByte = (LPBYTE)::GlobalLock(hNew)
::memcpy(lpByte, lpVoid, dwSize)
// 解除内存中的指定资源
::GlobalUnlock(hNew)
// 从指定内存创建流对象
HRESULT ht = ::CreateStreamOnHGlobal(hNew, TRUE, &pStream)
if ( ht != S_OK )
{
GlobalFree(hNew)
}
else
{
// 加载图片
pImage->Load(pStream)
GlobalFree(hNew)
}
// 释放资源
::FreeResource(hImgData)
return true
}
补充:微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是一个微软公司提供的类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。
你可以使用MFC的CImage类,该类的头文件是atlimage.h
下面是示例代码:
CDC *pDC = GetDC()CImage Image
Image.Load(strPath)
if (Image.IsNull())
{
MessageBox(_T("没加载成功"))
return -1
}
if (Image.GetBPP() == 32) //确认该图像包含Alpha通道
{
int i
int j
for (i = 0 i < Image.GetWidth() i++)
{
for (j = 0 j < Image.GetHeight() j++)
{
byte *pByte = (byte *)Image.GetPixelAddress(i, j)
pByte[0] = pByte[0] * pByte[3] / 255
pByte[1] = pByte[1] * pByte[3] / 255
pByte[2] = pByte[2] * pByte[3] / 255
}
}
}
Image.Draw(pDC->m_hDC, 0, 0)
Image.Destroy()
ReleaseDC(pDC)
注意使用CImage,对于带alpha通道数据的图片要特别处理一下,上面的示例中,双循环体就是做的这个事情,你可以参考。
CImage类功能比CBitmap强大很多,支持的图片格式为:jpg,png,bmp,gif (注意:VC6.0中不支持CImage,推荐使用VS2005/2008/2010) 显示图片的方法很简单: 首先包含头文件:atlimage.h CImage img//定义变量,最好定义为类的成员变量欢迎分享,转载请注明来源:内存溢出
评论列表(0条)