图片浏览器开发日志-10(从资源中加载图片)

按:本文参考了数篇网文,将找到的方法叙述出来,涉及代码的均列出源 URL

加载非PNG图片

这个方法比较简单,方法如下:

LoadFromResource,只能加载BMP格式的图片

CImage::LoadFromResource() is a very thin wrapper around the LoadImage API

HINSTANCE hIns = AfxGetInstanceHandle();
m_img.LoadFromResource(hIns,IDR_PIC);

出处:
https://www.cnblogs.com/yibinpan/archive/2013/04/22/3034814.html
余略:

加载PNG图片

出处:https://www.cnblogs.com/john-h/p/6003942.html

static bool LoadImageFromResource(IN CImage* pImage, IN UINT nResID, IN LPCWSTR 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;
}
// invoke 
CImage imge;
LoadImageFromResource(&imge, IDB_PNG, L"PNG");

说明:PNG图片尽管有alpha通道,但是文件很小,因此使用PNG文件体量不会太大。
可以使用资源文件的singgleFlatButton类,增加了一个成员函数如下:

void CSingleFlatButton::setImg(int imgResourceID)
{
    
    
	/*HINSTANCE hIns = AfxGetInstanceHandle();
	m_mouseLeaveImg.LoadFromResource(hIns, imgResourceID);*/

	LoadImageFromResource(&m_mouseLeaveImg, imgResourceID, L"PNG");
	createRelatedImg();
}

上述代码中的成员函数 LoadFromResource 即上文给出的代码,实测可用,谢谢原著。
2020-04-10 于泛五道口地区

猜你喜欢

转载自blog.csdn.net/Uman/article/details/105437573