代码之家  ›  专栏  ›  技术社区  ›  David seong

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

  •  -1
  • David seong  · 技术社区  · 7 年前

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

    我的源代码使用 HBITMAP 所以我转换 巴布亚新几内亚 HBITMAP公司 .

    巴布亚新几内亚 文件具有透明背景,但 HBITMAP公司 有背景。

    我想从中删除backround HBITMAP公司 .

    1 回复  |  直到 7 年前
        1
  •  1
  •   Andrew Truckle    7 年前

    我真的没有足够的信息。这是我加载透明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;
    }
    

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