留个档,C# AlphaBlend,带Alpha通道的图片的叠加

网上大部分的算法,都写的太文本化,看起来贼累
留个档,核心算法
bg是 被盖的图层, add是上层的图层

private Color AlphaBlend(Color bg, Color add)
{
	float bg_a = (float)bg.A / 255.0f;

	float bg_r = (float)bg.R / 255.0f;
	float bg_g = (float)bg.G / 255.0f;
	float bg_b = (float)bg.B / 255.0f;

	float add_a = (float)add.A / 255.0f;

	float add_r = (float)add.R / 255.0f;
	float add_g = (float)add.G / 255.0f;
	float add_b = (float)add.B / 255.0f;

	float rA = 1 - (1 - add_a) * (1 - bg_a);
	float rR = add_r * add_a + bg_r * bg_a * (1 - add_a);
	float rG = add_g * add_a + bg_g * bg_a * (1 - add_a);
	float rB = add_b * add_a + bg_b * bg_a * (1 - add_a);

	rA *= 255;
	rR *= 255;
	rG *= 255;
	rB *= 255;

	return Color.FromArgb((int)rA, (int)rR, (int)rG, (int)rB);
}

程序学无止尽。
欢迎大家沟通,有啥不明确的,或者不对的,也可以和我私聊
我的QQ 334524067 神一般的狄狄

猜你喜欢

转载自blog.csdn.net/qq_37776196/article/details/126269535
今日推荐