如何使用MFC加载.png、.jpeg图像?

如何使用MFC加载.png、.jpeg图像?,mfc,visual-c++,Mfc,Visual C++,嗨,我想加载png图像和jpeg图像 有人能帮我吗?您可以使用支持以下格式的CImage类:JPEG、GIF、BMP和PNG 使用加载功能从磁盘加载文件: 使用cpicutrectrl,它是开源的 MFC中有一个简单的CPngImage。它源于CBitmap,允许将PNG作为CBitmap加载 AFAIK该类自VS-2010起提供。用于来自资源的PNG CPngImage pngImage; pngImage.Load(YOUR_RESOURCE_ID, AfxGetResourceHandl

嗨,我想加载png图像和jpeg图像


有人能帮我吗?

您可以使用支持以下格式的CImage类:JPEG、GIF、BMP和PNG

使用加载功能从磁盘加载文件:


使用cpicutrectrl,它是开源的


MFC中有一个简单的CPngImage。它源于CBitmap,允许将PNG作为CBitmap加载


AFAIK该类自VS-2010起提供。

用于来自资源的PNG

CPngImage pngImage;
pngImage.Load(YOUR_RESOURCE_ID, AfxGetResourceHandle());
CBitmap bitmap;
bitmap.Attach(pngImage.Detach());

会让你快乐的
bitmap
也可以添加到
CImageList

从文件加载png图像比从资源加载png图像更容易如果您想确保文件存在,请检查image.load()返回代码,否则您可能会(像我一样)得到一个断言。类CPngImage也会这样做。(至少从VS-2010开始提供)很遗憾,这样的位图会丢失所有alpha值,我在执行BitBlt时缺少透明度,为什么我的png包含在参考资料中,但我不能在代码中使用它的ID?any1知道请帮助此变体允许我绘制到CDC m_img.draw(dc.GetSafeHdc(),0,0,iWidth,iHight,0,0,iWidth,iHight);
//----- load png into CImage from resource
bool Load( CImage * pimage, LPCTSTR lpszResourceName, HINSTANCE hinstRes)
{
    if (hinstRes == NULL)
    {
        hinstRes = AfxFindResourceHandle(lpszResourceName, _T("PNG") );
    }

    HRSRC hRsrc = ::FindResource(hinstRes, lpszResourceName, _T("PNG") );
    if (hRsrc == NULL)
    {
        return false;
    }

    HGLOBAL hGlobal = LoadResource(hinstRes, hRsrc);
    if (hGlobal == NULL)
    {
        return false;
    }

    LPBYTE lpBuffer = (LPBYTE) ::LockResource(hGlobal);
    if (lpBuffer == NULL)
    {
        FreeResource(hGlobal);
        return false;
    }

    bool bRes = false;
    {
        UINT uiSize = ::SizeofResource(hinstRes, hRsrc);

        HGLOBAL hRes = ::GlobalAlloc(GMEM_MOVEABLE, uiSize);
        if (hRes != NULL)
        {
            IStream* pStream = NULL;
            LPVOID lpResBuffer = ::GlobalLock(hRes);
            ASSERT (lpResBuffer != NULL);

            memcpy(lpResBuffer, lpBuffer, uiSize);

            HRESULT hResult = ::CreateStreamOnHGlobal(hRes, TRUE, &pStream);

            if( hResult == S_OK)
            {
                pimage->Load(pStream);
                pStream->Release();
                bRes= true;
            }
        }
    }

    UnlockResource(hGlobal);
    FreeResource(hGlobal);

    return bRes;
}
CString pngPath=L"D:\\k.png";
CImage pngImage;
CBitmap pngBmp; 
CDC bmDC;
CBitmap *pOldbmp;
BITMAP  bi;
//UINT xPos=450,yPos=300;
UINT xPos=10,yPos=10;
CClientDC dc(this);

pngImage.Load(pngPath);
// new code

pngBmp.Attach(pngImage.Detach());

bmDC.CreateCompatibleDC(&dc);

 pOldbmp= bmDC.SelectObject(&pngBmp);
 pngBmp.GetBitmap(&bi);
 dc.BitBlt(xPos,yPos,bi.bmWidth,bi.bmHeight,&bmDC,0,0,SRCCOPY);  
 bmDC.SelectObject(pOldbmp);
CPngImage pngImage;
pngImage.Load(YOUR_RESOURCE_ID, AfxGetResourceHandle());
CBitmap bitmap;
bitmap.Attach(pngImage.Detach());