Modes de fusion SkiaSharp
Ces articles se concentrent sur la BlendMode
propriété de SKPaint
. La BlendMode
propriété est de type SKBlendMode
, énumération avec 29 membres.
La BlendMode
propriété détermine ce qui se passe lorsqu’un objet graphique (souvent appelé source) est rendu sur les objets graphiques existants (appelé destination). Normalement, nous nous attendons à ce que le nouvel objet graphique masque les objets sous celui-ci. Mais cela se produit uniquement parce que le mode blend par défaut est SKBlendMode.SrcOver
, ce qui signifie que la source est dessinée sur la destination. Les 28 autres membres de SKBlendMode
cause d’autres effets. Dans la programmation graphique, la technique de combinaison d’objets graphiques de différentes façons est appelée composition.
Énumération S Ko lendModes
Les modes de fusion SkiaSharp correspondent étroitement à ceux décrits dans la spécification W3C Compositing et Blending Level 1 . La vue d’ensemble de Skia SkBlendMode fournit également des informations d’arrière-plan utiles. Pour une présentation générale des modes de fusion, l’article sur les modes Blend dans Wikipédia est un bon début. Les modes Blend sont pris en charge dans Adobe Photoshop. Il existe donc beaucoup d’informations en ligne sur les modes de fusion dans ce contexte.
Les 29 membres de l’énumération SKBlendMode
peuvent être divisés en trois catégories :
Porter-Duff | Séparables | Non séparable |
---|---|---|
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 |
Les noms de ces trois catégories prendront davantage de signification dans les discussions qui suivent. L’ordre dans lequel les membres sont répertoriés ici est le même que dans la définition de l’énumération SKBlendMode
. Les 13 membres d’énumération de la première colonne ont les valeurs entières 0 à 12. La deuxième colonne est des membres d’énumération qui correspondent aux entiers 13 à 24, et les membres de la troisième colonne ont des valeurs comprises entre 25 et 28.
Ces modes de fusion sont abordés dans le même ordre dans le document W3C Compositing et Blending Level 1 , mais il existe quelques différences : le Src
mode est appelé Copier dans le document W3C et Plus
est appelé Plus léger. Le document W3C définit un mode de fusion normal qui n’est pas inclus, SKBlendModes
car il serait identique à SrcOver
. Le Modulate
mode de fusion (en haut de la deuxième colonne) n’est pas inclus dans le document W3C et la discussion du Multiply
mode précède Screen
.
Étant donné que le Modulate
mode blend est unique à Skia, il sera abordé comme un mode Porter-Duff supplémentaire et comme mode séparable.
L’importance de la transparence
Historiquement, la composition a été développée conjointement avec le concept de canal alpha. Dans une surface d’affichage telle que l’objet SKCanvas
et une bitmap de couleur complète, chaque pixel se compose de 4 octets : 1 octet chacun pour les composants rouge, vert et bleu, et un octet supplémentaire pour la transparence. Ce composant alpha est 0 pour une transparence totale et 0xFF pour une opacité totale, avec différents niveaux de transparence entre ces valeurs.
Bon nombre des modes de fusion reposent sur la transparence. En règle générale, lorsqu’un SKCanvas
gestionnaire est obtenu pour PaintSurface
la première fois ou lorsqu’il SKCanvas
est créé pour dessiner sur une bitmap, la première étape est l’appel suivant :
canvas.Clear();
Cette méthode remplace tous les pixels du canevas par des pixels noirs transparents, équivalents ou new SKColor(0, 0, 0, 0)
entiers 0x00000000. Tous les octets de tous les pixels sont initialisés à zéro.
La surface de dessin d’un SKCanvas
PaintSurface
gestionnaire peut sembler avoir un arrière-plan blanc, mais c’est seulement parce que le SKCanvasView
lui-même a un arrière-plan transparent et que la page a un arrière-plan blanc. Vous pouvez illustrer ce fait vous-même en définissant la Xamarin.FormsBackgroundColor
propriété sur SKCanvasView
une Xamarin.Forms couleur :
canvasView.BackgroundColor = Color.Red;
Ou, dans une classe qui dérive de , vous pouvez définir la couleur d’arrière-plan de ContentPage
la page :
BackgroundColor = Color.Red;
Vous verrez cet arrière-plan rouge derrière vos graphiques SkiaSharp, car le canevas SkiaSharp lui-même est transparent.
L’article SkiaSharp Transparency a montré quelques techniques de base en utilisant la transparence pour organiser plusieurs graphiques dans une image composite. Les modes de fusion vont au-delà, mais la transparence reste cruciale pour les modes de fusion.
Modes de fusion SkiaSharp Porter-Duff
Utilisez les modes de fusion Porter-Duff pour composer des scènes basées sur des images sources et de destination.
Modes de fusion séparables SkiaSharp
Utilisez les modes de fusion séparables pour modifier les couleurs rouge, verte et bleue.
Modes de fusion non séparables skiaSharp
Utilisez les modes de fusion non séparables pour modifier la teinte, la saturation ou la luminosité.