微软提供了CImage类,使用CImage可以非常方便显示PNG图片。
1.定义一个成员变量
CImage m_img;
2.导入png
void LoadPNG(CImage &cimg, const CString& strPath)
{
if(!PathFileExists(strPath))
{
printf("png did not exist.\n");
return;
}
if(!cimg.IsNull())
{
cimg.Destroy();
}
cimg.Load(strPath);
}
3.使用的时候只要
LoadPNG(m_img, _T("c:\\某张图片.png"));
4.显示png
void CDlg::OnPaint()
{
CPaintDC dc(this);
if (!m_img.IsNull())
{
//透明显示png
if (m_img.GetBPP() == 32) //确认该图像包含Alpha通道
{
for (int i=0; i<m_img.GetWidth(); ++i)
{
for (int j=0; j<m_img.GetHeight(); ++j)
{
byte *pByte = (byte *)m_img.GetPixelAddress(i, j);
pByte[0] = pByte[0] * pByte[3] / 255;
pByte[1] = pByte[1] * pByte[3] / 255;
pByte[2] = pByte[2] * pByte[3] / 255;
}
}
}
//m_img.Draw(dc.m_hDC, 0, 0);
m_img.Draw(dc.m_hDC, m_imgRc); //在一个区域中显示
}
}