MFC环境下显示透明PNG图片

本文介绍如何在MFC应用程序中加载并显示带有透明背景的PNG图片,通过CImage类实现图片加载,并提供了一个简单的透明处理函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工作需要又得使用MFC编调试软件。

需要载入一张公司的logo,透明PNG图片。

查了很多资料都没显示,也不想使用其他类。最后用Cimage基本解决。

1.在对话框类的头文件中定义:

CImage img;

2.在Onpaint消息响应函数中载入图片并显示图片。

if (IsIconic())
{
		CPaintDC dc(this); // 用于绘制的设备上下文

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// 使图标在工作区矩形中居中
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;


		// 绘制图标
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
            CPaintDC dc(this);        
            if(!img.IsNull()) img.Destroy();
              img.Load(_T("12.png"));                           //load载入,否则不显示
            TransparentPNG(&img);                               //调用透明化处理函数
            if(!img.IsNull()) img.Draw(dc.m_hDC, 80, 20);      //以左上角为原点,按原始大小,在(80,20)处贴图

            CDialogEx::OnPaint();
	}


3.直接载入将会的到衣服背景色不透明的图片,很傻单也简单实用的办法,将png图像的没像素的RGB值惊进行处理,消除白色背景。

void TransparentPNG(CImage *png)  
{  
    for(int i = 0; i <png->GetWidth(); i++)  				//遍历像素处理
    {  
        for(int j = 0; j <png->GetHeight(); j++)  
        {  
            unsigned char* pucColor = reinterpret_cast<unsigned char*>(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;  
        }  
    }  
}

至此就简单的实现了。

不得不吐槽MFC有时候太不方便太繁琐了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值