Minor changes in rgba_blender_normal() function

This commit is contained in:
David Capello 2017-07-18 17:05:33 -03:00
parent 7cbf5fd420
commit dd3ce20133

View File

@ -169,25 +169,29 @@ color_t rgba_blender_normal(color_t backdrop, color_t src, int opacity)
return backdrop; return backdrop;
} }
int Br, Bg, Bb, Ba; const int Br = rgba_getr(backdrop);
int Sr, Sg, Sb, Sa; const int Bg = rgba_getg(backdrop);
int Rr, Rg, Rb, Ra; const int Bb = rgba_getb(backdrop);
const int Ba = rgba_geta(backdrop);
Br = rgba_getr(backdrop); const int Sr = rgba_getr(src);
Bg = rgba_getg(backdrop); const int Sg = rgba_getg(src);
Bb = rgba_getb(backdrop); const int Sb = rgba_getb(src);
Ba = rgba_geta(backdrop); int Sa = rgba_geta(src);
Sr = rgba_getr(src);
Sg = rgba_getg(src);
Sb = rgba_getb(src);
Sa = rgba_geta(src);
Sa = MUL_UN8(Sa, opacity, t); Sa = MUL_UN8(Sa, opacity, t);
Ra = Ba + Sa - MUL_UN8(Ba, Sa, t); // Ra = Sa + Ba*(1-Sa)
Rr = Br + (Sr-Br) * Sa / Ra; // = Sa + Ba - Ba*Sa
Rg = Bg + (Sg-Bg) * Sa / Ra; // = Ba + Sa - Ba*Sa
Rb = Bb + (Sb-Bb) * Sa / Ra; // Rc = Sc*Sa/Ra + Bc*(1-Sa/Ra)
// = Sc*Sa/Ra + Bc - Bc*Sa/Ra
// = Bc + Sc*Sa/Ra - Bc*Sa/Ra
// = Bc + (Sc-Bc)*Sa/Ra
const int Ra = Ba + Sa - MUL_UN8(Ba, Sa, t);
const int Rr = Br + (Sr-Br) * Sa / Ra;
const int Rg = Bg + (Sg-Bg) * Sa / Ra;
const int Rb = Bb + (Sb-Bb) * Sa / Ra;
return rgba(Rr, Rg, Rb, Ra); return rgba(Rr, Rg, Rb, Ra);
} }