Расчет яркости результирующего пикселя после наложения двух пикселей друг на друга выполняется по формуле:
Result = Background * (1 − Alpha) + Foreground * Alpha
или
Result = Background + (Foreground − Background) * Alpha
где
Background — яркость фонового пикселя,
Foreground — яркость накладываемого пикселя,
Alpha ∈ [0..1] — прозрачность накладываемого пикселя.
ну или вот так можно.
Код
dst.r = ((src.a*(src.r-dst.r)-dst.r+255) shr 8)+dst.r;
dst.g = ((src.a*(src.g-dst.g)-dst.g+255) shr 8)+dst.g;
dst.b = ((src.a*(src.b-dst.b)-dst.b+255) shr 8)+dst.b;
n = dst.a+src.a;
dst.a = n or (-(n shr 8));