public static ColorRGB Overlay(this ColorRGB a, ColorRGB b) { double alphaA = a.getColorHSV().V; double alphaB = a.getColorHSV().V; byte red = Convert.ToByte(alphaA * a.R + (1 - alphaA) * b.R); byte green = Convert.ToByte(alphaA * a.G + (1 - alphaA) * b.G); byte blue = Convert.ToByte(alphaA * a.B + (1 - alphaA) * b.B); return(new ColorRGB(red, green, blue)); //double alpha = a.A + (1 - a.A) * b.A; //byte red = Convert.ToByte((1 / alpha) * (a.A * a.R + (1 - a.A) * b.A * b.R)); //byte green = Convert.ToByte((1 / alpha) * (a.A * a.G + (1 - a.A) * b.A * b.G)); //byte blue = Convert.ToByte((1 / alpha) * (a.A * a.B + (1 - a.A) * b.A * b.B)); //return new ColorRGB(alpha, red, green, blue); }