Так же, как в статье Википедии говорится (при условии непрозрачного фона):
int r, g, b;
r = fgColor.getRed() * fgColor.getAlpha() + bgColor.getRed() * (255 - fgColor.getAlpha());
g = fgColor.getGreen() * fgColor.getAlpha() + bgColor.getGreen() * (255 - fgColor.getAlpha());
b = fgColor.getBlue() * fgColor.getAlpha() + bgColor.getBlue() * (255 - fgColor.getAlpha());
Color result = new Color(r / 255, g / 255, b / 255);
Отказ от ответственности: не проверял это, но он должен работать.
ЕслиЦвет переднего плана является постоянным (например, заполненный прозрачный прямоугольник), вы можете оптимизировать много, предварительно вычисляя fgColor.getComponent() * fgColor.getAlpha()
и (255 - fgColor.getAlpha())
.