Alpha-Compositing-Algorithmus (Mischmodi)

8

Ich versuche, in SASS zu meinem eigenen Vergnügen Mischmodi aus der PDF-Spezifikation zu implementieren.

PDF-Spezifikation: Zypern

Seite 322 ist der Alpha-Compositing-Abschnitt.

Die Eingabewerte sind im RGBA-Format, aber jetzt versuche ich die Mischung der Alpha-Komponente zu implementieren. Wie gehe ich genau hin? Soweit ich weiß, sollten meine Werte zwischen 0,0 und 1,0 liegen. Aber aus den Spezifikationen scheint es, dass Sie für jeden Farbkanal mischen sollten? Mische ich es einfach aus, um zurück zum RGBA-Formular für meine Alpha-Komponente zu gelangen?

Jede Hilfe wird geschätzt, es macht mir nichts aus, Blog, Bücher usw. zu lesen, um meine Antwort zu bekommen, da dies eine rein intellektuelle Übung ist.

Vielen Dank im Voraus,

Emil

    
Tixz 15.09.2011, 22:38
quelle

1 Antwort

11

Die SVG-Spezifikation enthält viele gute Gleichungen für verschiedene Mischmodi. Und ja, Sie müssen beide die neue Alpha und die neue Farbe berechnen - für jeden Kanal. Für Standard-Füllmethoden wird das Alpha wie folgt berechnet:

%Vor%

Hinweis : Ich sehe, dass Sie Alpha als Wert zwischen 0 und 1 betrachten, was gut ist. Alpha-Werte in CSS sind immer als Float-Werte von 0 bis 1 definiert. Es ist gut, bei dieser Konvention zu bleiben, weil es die Berechnungen immens erleichtert.

Es hilft, jeden Farbkanal durch sein Alpha "zu multiplizieren"; Diese sind hilfreich für die Interpretation und Verwendung der üblichen Formeln:

%Vor%

Mit anderen Worten:

%Vor%

Dann für das Alpha-Compositing in Normal-Jane (wie das Überlagern von Pauspapier, auch bekannt als src-over in Porter und Duffs Original Papier und die SVG alpha compositing spec ), nimmst du jeden Kanal und berechne ihn so :

%Vor%

Der letzte Schritt besteht darin, jeden endgültigen Farbkanalwert um das letzte Alpha zu "vervielfältigen":

%Vor%

und lege es irgendwie in deinen Mix:

%Vor%

Die anderen Füllmethoden (Multiplikation, Differenz, Bildschirm usw.) sind etwas kompliziertere Formeln, aber das Konzept für jeden einzelnen Modus ist gleich:

  1. Trennen Sie die R-, G-, B- und A-Werte der Vorder- und Hintergrundfarben
  2. Berechnen Sie das Alpha der neuen, endgültigen Farbe mit der obigen Formel
  3. Multiplizieren Sie alle R-, G- und B-Werte mit ihrem Alpha-Wert
  4. vor
  5. Berechne die neuen, endgültigen R-, G- und B-Werte (füge die Mischmodus-Formel hier ein)
  6. Multiplizieren Sie die endgültigen R-, G- und B-Werte mit dem endgültigen Alpha
  7. Die letzten R-, G- und B-Werte abschneiden, so dass sie zwischen 0 und 255 liegen (notwendig für einige Modi, aber nicht für alle)
  8. Bring die Farbe wieder zusammen!

Wenn Sie immer noch daran interessiert sind, habe ich genau das in Stylus gemacht. Du kannst meine Fortschritte hier sehen: Ссылка Du könntest es als Start verwenden zeigen Sie für Ihren eigenen Sass Mixin.

Als Erstes konvertiere ich alle R-, G- und B-Werte von 0 bis 255 Werten in 0 - 1 Gleitkommawerte für die Zwecke der Berechnungen. Dunno, wenn das nötig ist, und es erfordert, sie auf 0 - 255 Werte zurück zu konvertieren. Es fühlte sich für mich richtig an, und Porter und Duff arbeiteten in ihrer ursprünglichen Arbeit in 0 - 1 Float-Werten.

(Ich stoße auf Probleme mit einigen Compositing-Modi, die sehr unterschiedliche Ergebnisse von den erwarteten Ergebnissen der SVG-Spezifikation liefern. Ich vermute, dass die Spezifikation die falschen Gleichungen liefert. Wenn jemand die Porter / Duff-Füllmethoden kennt Ich wäre sehr dankbar für ihre Hilfe!)

    
Paul d'Aoust 22.06.2012 20:43
quelle