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 SKCanvasView
Xamarin.Forms Farbe festlegen:
canvasView.BackgroundColor = Color.Red;
Alternativ können Sie in einer Klasse, die von ContentPage
einer 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.