MFC-AlphaBlend显示具有指定透明度的图像
HDC hdc = ::GetDC(m_hWnd); BITMAP bm; HBITMAP hbmp = LoadBitmap(AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_BITMAP1));//从资源中读取位图 GetObject(hbmp, sizeof(BITMAP), (PSTR)&bm);//获取位图信息 HDC hdc1 = CreateCompatibleDC(hdc);//创建内存DC HBITMAP oldhdc=(HBITMAP)SelectObject(hdc1, hbmp); BLENDFUNCTION ble = {0};//指定源和目标位图的透明混合参数 /* typedef struct _BLENDFUNCTION { BYTE BlendOp; BYTE BlendFlags; BYTE SourceConstantAlpha; BYTE AlphaFormat; } BLENDFUNCTION, *PBLENDFUNCTION, *LPBLENDFUNCTION; 参数1:BlendOp 目前只能为AC_SRC_OVER(0x00),意思就是把源图片覆盖到目标之上 参数2:BlendFlags 必须是0 参数3:SourceConstantAlpha 指定源图片的透明度,这个值是会和源图片的Alpha通道值合并计算的 如果设置为0,就会假定你的图片是透明的; 如果需要使用每像素本身的alpha值,设置SourceConstantAlpha值255(不透明) 参数4:AlphaFormat 控制源和目标的解析方式,AlphaFormat参数有以下值: AC_SRC_ALPHA(0x01):源位图必须是32位深,否则的话,AlphaBland函数将调用失败; 调用函数前必须预先乘以alpha值,也就是说位图上某个像素位置的red、green、blue通道值必须先与alpha相乘。 例如,如果alpha透明值是x,那么red、green、blue三个通道的值必须乘以x并且再除以255(因为alpha的值的范围是0~255),之后才能被调用 0x00: AlphaBlend据说就和BitBlt一样 */ ble.SourceConstantAlpha = 150; AlphaBlend(hdc,10,10,bm.bmWidth,bm.bmHeight,hdc1,0,0, bm.bmWidth, bm.bmHeight,ble);//显示具有指定透明度的图像 /* 参数1:HDC hdcDest 指向目标设备环境的句柄 参数2:int nXOriginDest 指定目标矩形区域左上角的X轴坐标,按逻辑单位 参数3:int nYOriginDest 指定目标矩形区域左上角的Y轴坐标,按逻辑单位 参数4:int nWidthDest 指定目标矩形区域的宽度,按逻辑单位 参数5:int hHeightDest 指向目标矩形区域的高度,按逻辑单位 参数6:HDC hdcSrc 指向源设备环境的句柄(内存DC) 参数7:int nXOriginSrc 指定源矩形区域左上角的X轴坐标,按逻辑单位 参数8:int nYOriginSrc 指定源矩形区域左上角的Y轴坐标,按逻辑单位 参数9:int nWidthSrc 指定源矩形区域的宽度,按逻辑单位 参数10:int nHeightSrc 指定源矩形区域的高度,按逻辑单位 参数11:BLENDFUNCTION blendFunction BLENDFUNCTION结构 */ SelectObject(hdc1, oldhdc); DeleteObject(hbmp); DeleteObject(hdc1);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
2022-05-11 汇和家园
2020-05-11 CAD2019-基本界面及设置
2020-05-11 CAD2019学习目录