SkiaSharp-Mischmodi

Beispiel herunterladen Das Beispiel herunterladen

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 SrcOverist. Der Modulate Mischmodus (oben in der zweiten Spalte) ist nicht im W3C-Dokument enthalten, und die Diskussion über den Multiply Modus geht Screenvor .

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 ContentPageabgeleitet 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.