Easyx实现png透明贴图的两种方法(无需掩码图)

您所在的位置:网站首页 png图片怎么制作透明背景 Easyx实现png透明贴图的两种方法(无需掩码图)

Easyx实现png透明贴图的两种方法(无需掩码图)

2024-06-21 00:11| 来源: 网络整理| 查看: 265

话不多说,直接上代码。 在开始前,需要先配置一下附加依赖项,找到项目—属性—配置属性—链接器—输入,点击右侧第一行附加依赖项下行的编辑,添加winmm.lib 在这里插入图片描述

方式一: // 使用 Windows GDI 函数实现透明位图

#include #include #pragma comment( lib, "MSIMG32.LIB") void transparentimage(IMAGE* dstimg, int x, int y, IMAGE* srcimg, UINT transparentcolor) { HDC dstDC = GetImageHDC(dstimg); HDC srcDC = GetImageHDC(srcimg); int w = srcimg->getwidth(); int h = srcimg->getheight(); // 使用 Windows GDI 函数实现透明位图 TransparentBlt(dstDC, x, y, w, h, srcDC, 0, 0, w, h, transparentcolor); }

参数1:NULL即可,参数2、参数3为图片输出的坐标,参数4为源图片的指针,参数5为要透明的底色(若图片为透明图片,默认为BLACK) 实际使用:

transparentimage(NULL, 200, 100, &picture, BLACK);

此方法兼容性良好,支持任意底色的png图片,但透明效果取决于图片本身,若图片底色与图片本身颜色相近,透明化效果会大打折扣,如出现很大的黑色边缘块。

方式二:

#include #include #pragma comment( lib, "MSIMG32.LIB") void transparentimage3(IMAGE* dstimg, int x, int y, IMAGE* srcimg) //新版png { HDC dstDC = GetImageHDC(dstimg); HDC srcDC = GetImageHDC(srcimg); int w = srcimg->getwidth(); int h = srcimg->getheight(); BLENDFUNCTION bf = { AC_SRC_OVER, 0, 255, AC_SRC_ALPHA }; AlphaBlend(dstDC, x, y, w, h, srcDC, 0, 0, w, h, bf); }

实际使用:

transparentimage3(NULL, 220, 100, &picture[0]);//透明png

与上面的使用方法类似,但不需要指定透明的颜色,此种方法透明效果非常好,但只支持底色本身为透明色的png图片,即在windows下打开时就没有底色的png图片。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3