Inserte una imagen transparente (logotipo) en la interfaz MFC

Declaración de derechos de autor: Este artículo es el artículo original del blogger de CSDN "koko.1024". Sigue el acuerdo de derechos de autor CC 4.0 BY-SA. Adjunte el enlace de la fuente original y esta declaración para su reimpresión.
Enlace original: https://blog.csdn.net/wlzyan/article/details/88019771

Registre el método de inserción de imágenes transparentes png en mfc. Ingrese
nuevamente al pit c ++, usando vs2015, quiero insertar una imagen png externa en un proyecto mfc. Se descubre que el control de imagen predeterminado solo puede arrastrar y soltar imágenes directamente en formato bmp. Luego aprendí a cargar imágenes png en Internet, ahora voy a resumir.

Nuevo proyecto
Cree un nuevo proyecto de mfc basado en cuadros de diálogo MFC_png

Inserte dos controles de imagen en la interfaz del cuadro de diálogo.
Para comparar el efecto, inserté dos controles de imagen en la interfaz, modifiqué respectivamente la identificación a IDC_STATIC1, IDC_STATIC2,
haga clic derecho para seleccionar el control de imagen, agregue las variables m_img1, m_img2 respectivamente

Agregue MFC_pngDlg.h

CImage img;
CRect rect;


Agregue la función de procesamiento de transparencia de imagen en 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;
        }
    }
}


Modificar el evento de clic del botón de confirmación

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展示处理后的图片

}


Efecto de ejecución
Para comparar el efecto, cambié el color de fondo a verde.
Después de hacer clic en Aceptar, puede ver que la
parte transparente de la imagen en el cuadro de imagen 1 se muestra en blanco. La parte transparente de la
imagen en el cuadro de imagen 2 se muestra normalmente.


Imagen de muestra:

Inserte la descripción de la imagen aquí

 

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

El marco de control de imagen en la figura anterior se puede ocultar configurando la propiedad de control Tipo en Dibujar propietario

Supongo que te gusta

Origin blog.csdn.net/qq_38676868/article/details/103390230
Recomendado
Clasificación