网上大部分的算法,都写的太文本化,看起来贼累
留个档,核心算法
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 神一般的狄狄