SkiaSharp-Mischmodi
Diese Artikel konzentrieren sich auf die BlendMode
Eigenschaft von SKPaint
. Die BlendMode
Eigenschaft ist vom Typ SKBlendMode
, eine Enumeration mit 29 Membern.
Die BlendMode
-Eigenschaft bestimmt, was geschieht, wenn ein grafisches Objekt (häufig als Quelle bezeichnet) auf vorhandenen grafischen Objekten (als Ziel bezeichnet) gerendert wird. Normalerweise erwarten wir, dass das neue grafische Objekt die Darunterobjekte verdeckt. Dies geschieht jedoch nur, weil der Standard-Mischmodus ist SKBlendMode.SrcOver
, was bedeutet, dass die Quelle über das Ziel gezeichnet wird. Die anderen 28 Elemente von SKBlendMode
verursachen andere Auswirkungen. In der Grafikprogrammierung wird die Technik der Kombination grafischer Objekte auf verschiedene Weise als Compositing bezeichnet.
Die SKBlendModes-Enumeration
Die SkiaSharp-Blendmodi entsprechen genau den in der W3C Compositing and Blending Level 1 Spezifikation beschriebenen Modi. Die Skia SkBlendMode-Übersicht enthält auch hilfreiche Hintergrundinformationen. Für eine allgemeine Einführung in Mischmodi ist der Artikel Mischmodi in Wikipedia ein guter Anfang. Füllmodi werden in Adobe Photoshop unterstützt, sodass es viele zusätzliche Onlineinformationen zu Füllmodi in diesem Kontext gibt.
Die 29 Elemente der SKBlendMode
Enumeration können in drei Kategorien unterteilt werden:
Porter-Duff | Trennbar | Nicht trennbar |
---|---|---|
Clear |
Modulate |
Hue |
Src |
Screen |
Saturation |
Dst |
Overlay |
Color |
SrcOver |
Darken |
Luminosity |
DstOver |
Lighten |
|
SrcIn |
ColorDodge |
|
DstIn |
ColorBurn |
|
SrcOut |
HardLight |
|
DstOut |
SoftLight |
|
SrcATop |
Difference |
|
DstATop |
Exclusion |
|
Xor |
Multiply |
|
Plus |
Die Namen dieser drei Kategorien werden in den folgenden Diskussionen mehr Bedeutung erhalten. Die Reihenfolge, in der die Member hier aufgeführt werden, ist identisch mit der in der Definition der SKBlendMode
Enumeration. Die 13 Enumerationsmember in der ersten Spalte weisen die ganzzahligen Werte 0 bis 12 auf. Die zweite Spalte sind Enumerationsmember, die den Ganzen 13 bis 24 entsprechen, und die Member in der dritten Spalte weisen Werte von 25 bis 28 auf.
Diese Mischmodi werden in etwa in der gleichen Reihenfolge im Dokument " Compositing and Blending Level 1 " von W3C erläutert, es gibt jedoch einige Unterschiede: Der Src
Modus wird im W3C-Dokument als Kopieren bezeichnet und Plus
heißt Heller. Das W3C-Dokument definiert einen Normal-Mischmodus , der nicht in SKBlendModes
enthalten ist, da er mit identisch SrcOver
ist. Der Modulate
Mischmodus (oben in der zweiten Spalte) ist nicht im W3C-Dokument enthalten, und die Diskussion über den Multiply
Modus geht Screen
vor .
Da der Modulate
Mischmodus für Skia einzigartig ist, wird er als zusätzlicher Porter-Duff Modus und als trennbarer Modus behandelt.
Die Bedeutung von Transparenz
In der Vergangenheit wurde Compositing in Verbindung mit dem Konzept des Alphakanals entwickelt. In einer Anzeigeoberfläche wie dem SKCanvas
Objekt und einer vollfarbigen Bitmap besteht jedes Pixel aus 4 Bytes: jeweils 1 Byte für die roten, grünen und blauen Komponenten und ein zusätzliches Byte für Die Transparenz. Diese Alphakomponente ist 0 für vollständige Transparenz und 0xFF für volle Deckkraft mit unterschiedlichen Transparenzniveaus zwischen diesen Werten.
Viele der Mischmodi sind auf Transparenz angewiesen. Wenn ein SKCanvas
zum ersten Mal in einem PaintSurface
Handler abgerufen wird oder ein SKCanvas
erstellt wird, um für eine Bitmap zu zeichnen, ist der erste Schritt der folgende Aufruf:
canvas.Clear();
Diese Methode ersetzt alle Pixel des Zeichenbereichs durch transparente schwarze Pixel, die dem oder der ganzzahligen 0x00000000 entsprechen new SKColor(0, 0, 0, 0)
. Alle Bytes aller Pixel werden mit null initialisiert.
Die Zeichnungsoberfläche einer SKCanvas
, die in einem PaintSurface
Handler abgerufen wird, scheint möglicherweise einen weißen Hintergrund zu haben, aber das liegt nur daran, dass die SKCanvasView
Zeichenfläche selbst einen transparenten Hintergrund hat und die Seite einen weißen Hintergrund hat. Sie können diese Tatsache selbst veranschaulichen, indem Sie die Xamarin.FormsBackgroundColor
Eigenschaft von SKCanvasView
auf eine Xamarin.Forms Farbe festlegen:
canvasView.BackgroundColor = Color.Red;
Alternativ können Sie in einer Klasse, die von ContentPage
abgeleitet wird, die Hintergrundfarbe der Seite festlegen:
BackgroundColor = Color.Red;
Sie sehen diesen roten Hintergrund hinter Ihren SkiaSharp-Grafiken, da die SkiaSharp-Canvas selbst transparent ist.
Der Artikel SkiaSharp Transparency zeigte einige grundlegende Techniken bei der Verwendung von Transparenz zum Anordnen mehrerer Grafiken in einem zusammengesetzten Bild. Die Mischmodi gehen darüber hinaus, aber Transparenz bleibt für die Mischmodi von entscheidender Bedeutung.
SkiaSharp Porter-Duff Mischmodi
Verwenden Sie den Porter-Duff-Mischmodi, um Szenen basierend auf Quell- und Zielbildern zu erstellen.
SkiaSharp trennbare Mischmodi
Verwenden Sie die trennbaren Mischmodi, um die Farben Rot, Grün und Blau zu ändern.
Nicht trennbare SkiaSharp-Mischmodi
Verwenden Sie die nicht trennbaren Mischmodi, um Farbton, Sättigung oder Leuchtkraft zu ändern.