Was bedeutet PorterDuff.Mode in Android-Grafiken. Was macht es?


142

Ich würde gerne wissen, was PorterDuff.Mode in Android-Grafiken bedeutet.

Ich weiß, dass es ein Übertragungsmodus ist .

Ich weiß auch, dass es Attribute wie DST_IN, Multiplizieren usw. hat.


von meiner jüngsten Entdeckung. Wenn Sie überlappende Bilder haben und versuchen, den Farbfilter eines dieser Bilder zu ändern, wirkt sich dies auf das andere Bild aus, das sich überlappt!
Jonathan

Antworten:


321

Hier ist ein ausgezeichneter Artikel mit Illustrationen eines Google-Ingenieurs:

http://ssp.impulsetrain.com/porterduff.html

PorterDuff wird als eine Möglichkeit beschrieben, Bilder so zu kombinieren, als wären sie "unregelmäßig geformte Pappstücke", die übereinander liegen, sowie als ein Schema zum Mischen der überlappenden Teile.

Die Standardmethode für Android zum Erstellen von Bildern ist PorterDuff.Mode.SRC_OVER. Dies entspricht dem Zeichnen des Quellbilds / der Quellfarbe über das Zielbild. Mit anderen Worten, es macht das, was Sie erwarten würden, und zeichnet das Quellbild (das, das Sie zeichnen) über das Zielbild (die Leinwand), wobei das Zielbild bis zu dem Grad durchscheint, der durch das Alpha des Quellbilds definiert ist.

PorterDuff Infografik aus dem Artikel

Mit dem folgenden Schlüssel können Sie die Algebra verstehen, mit der die Android-Dokumente die anderen Modi beschreiben ( eine ausführlichere Beschreibung mit ähnlichen Begriffen finden Sie im Artikel ).

  • Sa Source alpha
  • Sc Quellfarbe
  • Da Ziel Alpha
  • DC Zielfarbe

Wobei Alpha ein Wert [0..1]ist und die Farbe einmal pro Kanal ersetzt wird (verwenden Sie die Formel also einmal für Rot, Grün und Blau).

Die resultierenden Werte werden wie folgt als Paar in eckigen Klammern angegeben.

[<alpha-value>,<color-value>]

Wo alpha-valueund color-valuesind Formeln zum Erzeugen des resultierenden Alpha-Kanals bzw. jedes Farbkanals.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.