Freigeben über


SkiaSharp Blend Modi

Diese Artikel konzentrieren sich auf die BlendMode Eigenschaft von SKPaint. Die BlendMode Eigenschaft ist vom Typ SKBlendMode, eine Aufzählung mit 29 Membern.

Die BlendMode Eigenschaft bestimmt, was passiert, wenn ein grafisches Objekt (häufig als Quelle bezeichnet) über vorhandenen grafischen Objekten (als Ziel bezeichnet) gerendert wird. Normalerweise erwarten wir, dass das neue grafische Objekt die darunter liegenden Objekte verdeckt. Dies geschieht jedoch nur, weil der Standard-Blend-Modus ist SKBlendMode.SrcOver, was bedeutet, dass die Quelle über das Ziel gezeichnet wird. Die anderen 28 Mitglieder verursachen SKBlendMode andere Auswirkungen. Bei der Grafikprogrammierung wird die Technik der Kombination grafischer Objekte auf verschiedene Weise als Compositing bezeichnet.

Die SKBlendModes-Aufzählung

Die SkiaSharp-Blendmodi entsprechen genau den in der Spezifikation W3C Compositing und Blending Level 1 beschriebenen Modi. Die Skia SkBlendMode Overview bietet auch hilfreiche Hintergrundinformationen. Für eine allgemeine Einführung in Blend-Modi ist der Blend-Modi-Artikel in Wikipedia ein guter Start. Blend-Modi werden in Adobe Fotos hop unterstützt, daher gibt es in diesem Kontext viele zusätzliche Onlineinformationen zu Blendmodi.

Die 29 Member 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 nehmen in den folgenden Diskussionen mehr Bedeutung auf. Die Reihenfolge, in der die Member aufgelistet werden, ist identisch mit der Definition der SKBlendMode Enumeration. Die 13 Enumerationsmmber in der ersten Spalte weisen die ganzzahligen Werte 0 bis 12 auf. Die zweite Spalte sind Enumerationsmermber, die ganzen Zahlen 13 bis 24 entsprechen, und die Elemente in der dritten Spalte haben Werte von 25 bis 28.

Diese Blendmodi werden ungefähr in der gleichen Reihenfolge im W3C Compositing- und Blending Level 1-Dokument behandelt, es gibt jedoch einige Unterschiede: Der Src Modus wird im W3C-Dokument als "Kopieren" bezeichnet und Plus wird als "Heller" bezeichnet. Das W3C-Dokument definiert einen Normal-Blend-Modus , der nicht enthalten SKBlendModes ist, da es identisch wäre SrcOver. Der Modulate Blend-Modus (oben in der zweiten Spalte) ist nicht im W3C-Dokument enthalten, und die Diskussion über den Multiply Modus steht vor Screen.

Da der Modulate Blend-Modus für Skia einzigartig ist, wird er als zusätzlicher Porter-Duff-Modus und als separierbarer Modus diskutiert.

Die Bedeutung der Transparenz

Historisch wurde compositing in Verbindung mit dem Konzept des Alphakanals entwickelt. In einer Anzeigeoberfläche, z. B. dem SKCanvas Objekt und einer vollfarbigen Bitmap, besteht jedes Pixel aus 4 Byte: 1 Byte für die roten, grünen und blauen Komponenten und ein zusätzliches Byte für Transparenz. Diese Alphakomponente ist 0 für volle Transparenz und 0xFF für die volle Deckkraft mit unterschiedlichen Transparenzstufen zwischen diesen Werten.

Viele der Blendmodi basieren auf Transparenz. Wenn ein SKCanvas Handler zum ersten Mal abgerufen PaintSurface wird oder wenn ein SKCanvas Erstellter zum Zeichnen auf einer Bitmap erstellt wird, ist der erste Schritt dieser Aufruf:

canvas.Clear();

Mit dieser Methode werden alle Pixel des Zeichenbereichs durch transparente schwarze Pixel ersetzt, die der ganzen Zahl entsprechen new SKColor(0, 0, 0, 0) oder der ganzen Zahl 0x00000000. Alle Bytes aller Pixel werden auf Null initialisiert.

Die Zeichnungsoberfläche eines in einem PaintSurface Handler abgerufenen Elements SKCanvas scheint möglicherweise einen weißen Hintergrund zu haben, aber das liegt nur daran, dass der SKCanvasView selbst über einen transparenten Hintergrund verfügt und das Zeichenblatt einen weißen Hintergrund hat. Sie können diese Tatsache selbst demonstrieren, indem Sie die Xamarin.FormsBackgroundColor Eigenschaft einer SKCanvasViewXamarin.Forms Farbe festlegen:

canvasView.BackgroundColor = Color.Red;

Alternativ können Sie in einer Klasse, die von ContentPageeiner abgeleiteten Klasse 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, um mehrere Grafiken in einem zusammengesetzten Bild anzuordnen. Die Mischungsmodi gehen darüber hinaus, aber Transparenz Standard ist für die Mischungsmodi von entscheidender Bedeutung.

SkiaSharp Porter-Duff Blend Modi

Verwenden Sie die Porter-Duff-Blend-Modi, um Szenen basierend auf Quell- und Zielbildern zu verfassen.

SkiaSharp separierbare Mischmodi

Verwenden Sie die trennbaren Mischungsmodi, um Rot-, Grün- und Blaufarben zu ändern.

SkiaSharp nicht separierbare Mischmodi

Verwenden Sie die nicht trennbaren Mischungsmodi, um Farbton, Sättigung oder Leuchtdichte zu ändern.