MFC如何将具有透明属性的PNG转换为HBITMAP

MFC how to convert PNG with transparent attribute to HBITMAP

我使用 GDI+ 加载了 PNG 文件。

我的来源使用 HBITMAP 所以我将 PNG 转换为 HBITMAP

PNG 文件有透明背景但 HBITMAP 有背景。

我想从 HBITMAP 中删除背景。

我真的没有足够的信息。这是我加载透明 PNG 文件的方式:

// Based on afxbutton.cpp's static function ButtonLoadBitmap
HBITMAP __stdcall CMeetingScheduleAssistantApp::ButtonLoadBitmap(UINT uiBmpResId)
{
    if (uiBmpResId == 0)
    {
        return nullptr;
    }

    LPCTSTR lpszResourceName = MAKEINTRESOURCE(uiBmpResId);
    ENSURE(lpszResourceName != nullptr);

    HBITMAP hbmp = nullptr;

    // Try to load PNG image first:
    CPngImage pngImage;
    if (pngImage.Load(lpszResourceName))
    {
        hbmp = (HBITMAP)pngImage.Detach();
    }
    else
    {
        HINSTANCE hinstRes = AfxFindResourceHandle(lpszResourceName, RT_BITMAP);
        if (hinstRes == nullptr)
        {
            return nullptr;
        }

        UINT uiLoadImageFlags = LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS;

        hbmp = (HBITMAP) ::LoadImage(hinstRes, lpszResourceName, IMAGE_BITMAP, 0, 0, uiLoadImageFlags);
    }

    return hbmp;
}

我的代码旨在加载资源,但您可以调整它以使用外部文件。