代码之家  ›  专栏  ›  技术社区  ›  Ashish

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

  •  9
  • Ashish  · 技术社区  · 14 年前

    嗨,我想加载PNG图像和JPEG图像。

    有人能帮我吗?

    7 回复  |  直到 10 年前
        1
  •  24
  •   Nikola Smiljanić    14 年前
    CImage image;
    image.Load(_T("C:\\image.png")); // just change extension to load jpg
    CBitmap bitmap;
    bitmap.Attach(image.Detach());
    
        2
  •  12
  •   Paolo Biagini    12 年前
    //----- 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;
    }
    
        3
  •  7
  •   Alex F    14 年前

    您可以使用支持以下格式的cimage类:jpeg、gif、bmp和png。

    http://msdn.microsoft.com/en-us/library/bwea7by5%28VS.80%29.aspx

    使用加载函数从磁盘加载文件:

    http://msdn.microsoft.com/en-us/library/tf4bytf8%28VS.80%29.aspx

        4
  •  4
  •   sorrymissjackson    10 年前

    对于来自资源的PNG

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

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

        6
  •  1
  •   iunkwn    11 年前
    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);
    
        7
  •  0
  •   xMRi    10 年前

    mfc中有一个简单的cpngimage。它派生自cbitmap,允许将png加载为cbitmap。

    AFAIK本课程自VS-2010开始提供。