MFC界面 插入透明圖片(logo)

版權聲明:本文爲CSDN博主「koko.1024」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/wlzyan/article/details/88019771​​​​​​​

記錄下在mfc中插入png透明圖片的方法
新入坑c++,使用的是vs2015,想在一個mfc項目中插入外部的png圖片。發現默認的image控件只能直接拖放bmp格式圖片。然後在網上學習瞭如何加載png圖片,現在來總結一下。

新建項目
新建一個基於對話框的mfc項目 MFC_png

在對話框界面中插入兩個 Picture Control
爲了對比效果,我在界面中插入了兩個 Picture Control,分別修改id爲 IDC_STATIC1 , IDC_STATIC2
右鍵選擇圖片控件,分別添加變量 m_img1 , m_img2

在MFC_pngDlg.h中添加

CImage img;
CRect rect;


在MFC_pngDlg.cpp中添加圖片透明處理函數

void TransparentPNG(CImage *png)
{
    for (int i = 0; i <png->GetWidth(); i++)                  //遍歷像素處理
    {
        for (int j = 0; j <png->GetHeight(); j++)
        {
            byte * pucColor = (byte *)(png->GetPixelAddress(i, j));
            pucColor[0] = pucColor[0] * pucColor[3] / 255;
            pucColor[1] = pucColor[1] * pucColor[3] / 255;
            pucColor[2] = pucColor[2] * pucColor[3] / 255;
        }
    }
}


修改確認按鈕點擊事件

void CMFC_pngDlg::OnBnClickedOk()
{
    
    m_img1.GetClientRect(&rect); //獲得pictrue控件所在的矩形區域
    CDC *dc1 = m_img1.GetDC();//獲得pictrue控件1的Dc
    CDC *dc2 = m_img2.GetDC();//獲得pictrue控件2的Dc
    int height, width;
    if (!img.IsNull()) img.Destroy();
    CString imgPath1 = _T("H:\\temp\\02.png");
    img.Load(imgPath1);
    height = img.GetHeight();
    width = img.GetWidth();
    if (!img.IsNull()) img.Draw(dc1->m_hDC, CRect(0, 0, width, height));//圖片控件1展示未處理的圖片
    TransparentPNG(&img);                    //調用透明化處理函數
    if (!img.IsNull()) img.Draw(dc2->m_hDC, CRect(0, 0, width, height));//圖片控件2展示處理後的圖片

}


運行效果
爲了對比效果,我將背景色改成綠色了。
點擊確定後可以看出,
圖片框1的圖片透明部分顯示爲白色了
圖片框2的圖片透明部分正常顯示。


示例圖片:

在這裏插入圖片描述

 

————————————————

上圖中 picture控件邊框 可以通過設置 控件屬性 Type 爲  Owner Draw ,隱藏

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章