Der Martin: Premultiplied Alpha and the 2D rendering context

Beitrag lesen

problematische Seite

Hallo Rolf,

ist irgendjemand im Stande, mit verständlichen Worten das Problem zu beschreiben, das von der genannten "problematischen Seite" (HTML Spec §4.12.5.7) gelöst werden soll

ich verstehe noch nicht, um welches Problem oder um welches Ziel es da geht, oder ob die da bloß eine tolle Farb-Konvertierung beschreiben, weil sie's halt können.

Bei RGBA-Farbangaben haben wir die drei Farbkomponenten Rot, Grün, Blau, und den Alphakanal, der die Deckkraft angibt. Das ist, wenn ich es richtig verstanden habe, non-premultiplied.

Bei der Anzeige eines Pixels mit diesem Farbwert werden die RGB-Komponenten um den Faktor reduziert, der im Alphakanal angegeben ist, gleichzeitig die RGB-Komponenten des darunterliegenden Pixels mit dem komplementären Faktor (1-A) dazugezählt. So ergibt sich die tatsächliche neue Farbe des Pixels.

Um beim Zeichnen drei Multiplikationen einzusparen, kann man die RGB-Komponenten auch gleich im Voraus mit dem Alphakanal multiplizieren und so speichern. Das ist dann premultiplied.

Die non-premultiplied representation in der letzten Zeile der Tabelle ist übrigens IMO falsch (vermutlich ein Copy&Paste Error, vgl. den Wert in der Zeile darüber), es müsste 0, 127, 255, 0 sein.

und wie die Lösung sich auswirkt? Steht es vielleicht sogar schon im Canvas-Bereich des Wiki und ich finde es lediglich nicht?

Mein Eindruck ist, dass hier nur eine interne Optimierung durch die Rendering Engine beschrieben wird, also eine eher akademische als wirklich nützliche Information. Aber vielleicht habe ich den Sinn und Zweck auch bisher genausowenig erkannt wie du.

Ich bin darauf gestoßen, als ich die createImageBitmap Methode beschreiben wollte. Da gibt's eine Option, mit der man angibt, ob premultiplyalpha stattfinden soll oder nicht. Der Sinn wird aber nicht näher dargestellt. Schlimmer noch, die Spec faselt in der Beschreibung der Methodenabläufe in dem Abschnitt, der "crop with formatting" beschreibt, im Punkt 10 dermaßen krude herum, dass man danach gar nichts mehr weiß.

Ah. Okay. Dann fehlen mir tatsächlich auch die Zusammenhänge.

Live long and pros healthy,
 Martin

--
Hunde, die bellen, beißen nicht.
Jedenfalls nicht gleichzeitig.