Как загрузить изображения .png, .jpeg с помощью MFC? - PullRequest
9 голосов
/ 22 марта 2010

Привет, я хочу загрузить PNG изображения и JPEG изображения.

Кто-нибудь может мне помочь?

Ответы [ 7 ]

24 голосов
/ 22 марта 2010
CImage image;
image.Load(_T("C:\\image.png")); // just change extension to load jpg
CBitmap bitmap;
bitmap.Attach(image.Detach());
12 голосов
/ 23 мая 2012
//----- 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;
}
7 голосов
/ 22 марта 2010

Вы можете использовать класс 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 голосов
/ 06 ноября 2014

Для PNG, которые поступают из ресурсов

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

, вы будете счастливы.bitmap также можно добавить к CImageList.

2 голосов
/ 08 марта 2012

используйте CPictureCtrl, это с открытым исходным кодом.

http://www.codeproject.com/Articles/24969/An-MFC-picture-control-to-dynamically-show-picture

1 голос
/ 31 января 2014
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);
0 голосов
/ 13 июня 2014

В MFC есть простой CPngImage.Он создан на основе CBitmap и позволяет загружать PNG как CBitmap.

AFAIK Этот класс доступен с VS-2010.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...