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

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

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

#include <graphics.h>	
#include <conio.h>
#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 <graphics.h>	
#include <conio.h>
#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图片。

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Ela

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值