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:
————————————————
El marco de control de imagen en la figura anterior se puede ocultar configurando la propiedad de control Tipo en Dibujar propietario