Hallo,
ich möchte gerne auf ein leeres, transparentes Bitmap eine alphatransparente Farbe zeichnen. Der übliche Ansatz, den man auch überall im Internet findet ist folgender:
Ergebnis = Hintergrund * (1.0 - Alpha) + Vordergrund * Alpha;
Leider versagt dieser Ansatz jedoch, wenn der Hintergrund nicht opak ist.
Beispiel:
(Der Einfachkeit halber werde ich hier mal von einem Graustufenbild mit Alphakanal ausgehen)
Der Hintergrund ist "leer": [Farbe: 0.0; Alpha: 0.0].
Darauf wird jetzt 50%iges Weiß gezeichnet: [Farbe: 1.0; Alpha: 0.5].
Das erwartete/erwünschte Ergebnis wäre also ebenfalls 50%iges Weiß [Farbe: 1.0; Alpha: 0.5].
Nimmt man aber nun die obige Formel, kommt etwas anderes heraus:
Delphi-Quellcode:
Farbe = 0.0 * (1.0 - 0.5) + 1.0 * 0.5 = 0.5
Alpha = 0.0 * (1.0 - 0.5) + 1.0 * 0.5 = 0.5
Das Ergebnis ist also [Farbe: 0.5; Alpha: 0.5].
Die Ursache ist offensichtlich, dass in der Rechnung der Alphawert des Hintergrundes nicht berücksichtigt wird. Leider stehe ich aber irgendwie auf dem Schlauch und komme auf keine Formel, die auch mit transparenten Hintergründen klarkommt.
Ich hoffe meine Erklärung war verständlich. Um es noch mal zu veranschaulichen: Ich möchte gerne so ein Verhalten wie bei den Layern in Photoshop und ähnlichen Bildbearbeitungsprogrammen.
Hat jemand eine Idee, wie man das erzielt?
Vielen Dank schonmal.