C语言--如何解决游戏界面加载透明背景图片时,透明背景变成黑色?

void transparentimage(IMAGE* dstimg, int x, int y, IMAGE* srcimg)
{
    
    
	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);
}

使用

transparentimage(NULL, herox, heroy, &imagehero[heroindex]);//透明png

解释:

void transparentimage(IMAGE* dstimg, int x, int y, IMAGE* srcimg)

函数名为 transparentimage,接受四个参数:dstimg、x、y 和 srcimg。其中 dstimg 是目标图像的指针,x 和 y 是目标图像上绘制的起始位置的坐标,srcimg 是要绘制的源图像的指针。

HDC dstDC = GetImageHDC(dstimg);
HDC srcDC = GetImageHDC(srcimg);

这两行代码通过调用 GetImageHDC 函数获取目标图像和源图像的设备上下文句柄(HDC)。HDC 是 Windows 中表示设备上下文的数据类型。

BLENDFUNCTION bf = {
    
     AC_SRC_OVER, 0, 255, AC_SRC_ALPHA };

这一行代码创建了一个 BLENDFUNCTION 结构体对象 bf,用于指定 Alpha 合成的参数。AC_SRC_OVER 表示使用源图像的 Alpha 值来控制合成,0 表示源图像的透明度为完全透明,255 表示不透明度为完全不透明。

AlphaBlend(dstDC, x, y, w, h, srcDC, 0, 0, w, h, bf);

这一行代码使用 AlphaBlend 函数将源图像绘制到目标图像上。它接受多个参数,包括目标图像的设备上下文句柄 dstDC,源图像的设备上下文句柄 srcDC,绘制的起始位置 (x, y),以及宽度和高度。最后一个参数 bf 指定了 Alpha 合成的方式。

通过以上步骤,该函数将在目标图像上绘制一个具有透明度的源图像。具体效果取决于源图像的透明度和位置。

猜你喜欢

转载自blog.csdn.net/m0_62865498/article/details/130873576
今日推荐