MFC-加载png,并将背景色设置为空白

遇到一个需求,要求mfc对话框的图片背景是空白的,目的是好看
代码如下

m_pic 为 pic控件
img 为成员变量

	if (!img.IsNull()) img.Destroy();
	CString imgPath1 = _T("*.png");
	img.Load(imgPath1);
	width = img.GetWidth();
	TransparentPNG(&img);                    //调用透明化处理函数
	m_pic.SetBitmap(img.Detach());



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;
		}
	}
}

函数内部可以灵活改动,因为对话框背景色为白色,所以这里设置成了白色,如果是其他颜色也是可以变化的,比如我有个图片,底色是白色,但是对话框的颜色是240 240 240,那么我也可以这么编辑透明函数

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));
			if (pucColor[0]  == 255 && pucColor[1] == 255 && pucColor[2] == 255)
			{
				pucColor[0] =  240;
				pucColor[1] =  240;
				pucColor[2] = 240;
			}
		}
	}
}

至此,png背景为透明

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MFC中,可以通过设置背景色为透明色,来让绘制的背景图片显示出来。具体操作如下: 1. 在类的头文件中添加如下代码: ```cpp class CMyWnd : public CWnd { public: CMyWnd(); virtual ~CMyWnd(); protected: afx_msg BOOL OnEraseBkgnd(CDC* pDC); afx_msg void OnPaint(); DECLARE_MESSAGE_MAP() private: CBitmap m_bmpBg; // 背景图片 }; BEGIN_MESSAGE_MAP(CMyWnd, CWnd) ON_WM_ERASEBKGND() ON_WM_PAINT() END_MESSAGE_MAP() ``` 2. 在类的实现文件中添加如下代码: ```cpp CMyWnd::CMyWnd() { // 加载背景图片 m_bmpBg.LoadBitmap(IDB_BITMAP_BG); } CMyWnd::~CMyWnd() { // 删除背景图片 m_bmpBg.DeleteObject(); } BOOL CMyWnd::OnEraseBkgnd(CDC* pDC) { // 设置背景色为透明色 return TRUE; } void CMyWnd::OnPaint() { CPaintDC dc(this); CDC memDC; memDC.CreateCompatibleDC(&dc); // 绘制背景图片 CBitmap* pOldBitmap = memDC.SelectObject(&m_bmpBg); BITMAP bmpInfo; m_bmpBg.GetBitmap(&bmpInfo); dc.BitBlt(0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, &memDC, 0, 0, SRCCOPY); memDC.SelectObject(pOldBitmap); } ``` 在OnEraseBkgnd函数中,我们返回了TRUE,表示已经处理好了擦除背景的操作。在OnPaint函数中,我们通过绘制背景图片的方式来实现背景色为透明色的效果。其中,我们使用了一个内存DC来绘制背景图片,并使用BitBlt函数将绘制好的背景图片复制到窗口的DC上。注意,在绘制背景图片之前,需要先将背景色设置为透明色,这样才能让背景图片显示出来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值