老问题,求解CImage透明PNG做背景,拖动问题

cscript cscript 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
大家好,最近做一个像msn那种消息提示框,类似这样,图片周围有点阴影,

我用以下方式处理

//OnInitDialog里面
m_imgBG.Load("msg_bg.png");
for(int i = 0; i < m_imgBG.GetWidth(); i++)
{
for(int j = 0; j < m_imgBG.GetHeight(); j++)
{
unsigned char* pucColor = reinterpret_cast<unsigned char *>(m_imgBG.GetPixelAddress(i , j));
pucColor[0] = pucColor[0] * pucColor[3] / 255;
pucColor[1] = pucColor[1] * pucColor[3] / 255;
pucColor[2] = pucColor[2] * pucColor[3] / 255;
}
}


//OnEraseBkgnd里面
m_imgBG.AlphaBlend(pDC->GetSafeHdc(), 0, 0);


这样是可以显示成透明效果,但是当窗口移动的时候,那些透明的部分就会保持窗口透明背后的残影。

于是我又google
设置SetLayeredWindowAttributes属性过滤掉背景颜色
浅背景下显示是完美的
但是在深背景下 图片的阴影地方明显没有过渡很难看

如果用双缓冲,那些透明的地方又都是黑色的?


我又想干脆再移动之前干脆截取背景图片再重绘,(google了下没找到实现方法)

在此,请教下各位还有什么方法大家有什么好的办法处理吗,谢了
...全文

相关推荐

CImage的一般使用方法和技巧

为了解决这一问题,.NET 框架引入了一个全新的类——`CImage`。该类不仅能够从外部磁盘读取 JPEG、GIF、BMP 和 PNG 格式的图像文件,还支持这些文件格式之间的相互转换。

benbenysz

MFC窗口重绘实战:从原理到自定义皮肤实现

在Windows桌面开发中,GDI绘图和消息机制是构建图形用户界面的基础技术。GDI(图形设备接口)提供了底层的绘图能力,而消息循环机制则负责响应用户交互。理解窗口绘制的分层原理,特别是非客户区与客户区的划分,对于实现高度自定义的界面至关重要。这项技术的核心价值在于能够突破系统默认主题的限制,实现像素级的界面控制,从而打造独特品牌风格或适配特定业务场景的应用。通过处理WM_NCPAINT、WM_ERASEBKGND等关键消息,并结合双缓冲绘图技术,开发者可以高效地重绘窗口的各个部分,包括标题栏、边框和控件。

weixin_30664615

mfc的CImage类详细说明

**TransparentBlt**:在目标区域中产生透明图像,通过`SetTransparentColor`设置透明色,用于去除图像背景。4.

dahema1982

CImage类的介绍与使用

相比于传统的CBitmap类和静态图片控件,CImage类支持更广泛的图像格式处理,包括JPEG、GIF、BMP和PNG,并且具备高级图像操作能力,如颜色混合、透明度控制和图像变形等。

打工小熊猫

对话框加载各种格式的图片,并设为透明背景

总结来说,要在对话框中加载各种格式的图片并设置为透明背景,我们需要:- 添加CStatic控件并设置其样式。- 使用CImage类加载图片。- 覆盖CStatic控件的消息映射以实现透明背景。

猿说编程
评论 10
收藏 已收藏
分享
返回顶部
cscript
界面 15,976 成员 115,866 内容