Perfekt, haut wunderbar hin.
Der Code bläht sich beim Dividieren um gut 1,4kB gegenüber dem Shift auf.
Macht man eine Fallunterscheidung (da ja bei Alpha = 0 und 255 nichts gerechnet werden muss), gibts zwischen Divison und Shift keinen subjektiv erkennbaren zeitlichen Unterschied mehr.

Der Farbfehler ist ebenso nicht zu erkennen. Mir fällt da grad ein, dass die unteren Bits, die diesen Fehler verursachen würden, bei der Konversion von 24-Bit RGB ins 16-Bit 565-Format fürs LCD sowieso verloren gehen.