Partager via


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 SKCanvasPaintSurface 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 ContentPagela 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é.