Valeurs alpha prémultipliées
Dans l’infographie, il existe deux façons différentes de représenter l’opacité d’une valeur de couleur. Win2D utilise les deux méthodes. Cet article explique la différence, et qui est utilisé où.
Alpha droit
Lors de l’utilisation d’une ligne droite, également appelée linéaire, alpha :
- Les valeurs RVB spécifient la couleur de la chose en cours de dessin
- La valeur alpha spécifie à quel point elle est solide
Dans ce monde, RVB et alpha sont indépendants. Vous pouvez modifier l’un d’eux sans affecter l’autre. Pour faire disparaître un objet, vous réduisez progressivement sa valeur alpha tout en laissant RVB inchangé.
Pour effectuer un mélange source-over entre deux couleurs qui utilisent le format alpha droit :
result = (source.RGB * source.A) + (dest.RGB * (1 - source.A))
Valeurs alpha prémultipliées
Lors de l’utilisation de l’alpha prémultipliée :
- RVB spécifie la quantité de couleur que la chose dessinée contribue à la sortie
- La valeur alpha spécifie combien elle masque ce qui se trouve derrière elle
Dans ce monde, RVB et alpha sont liés. Pour rendre un objet transparent, vous devez réduire à la fois son RVB (pour apporter moins de couleur) et aussi son alpha (pour masquer moins ce qui se trouve derrière lui). Les objets entièrement transparents n’ayant plus de couleur du tout, il n’y a qu’une seule valeur qui représente 100 % de transparence : RVB et alpha tout zéro.
Pour effectuer un mélange source-over entre deux couleurs qui utilisent le format alpha prémultiplié :
result = source.RGB + (dest.RGB * (1 - source.A))
L’alpha prémultipliée est utilisée dans le rendu graphique, car elle donne de meilleurs résultats que l’alpha droite lors du filtrage d’images ou de la composition de différentes couches. Pour plus d’informations, consultez les articles suivants :
Alpha dans Win2D
Win2D utilise l’alpha droite dans sa surface d’API, mais l’alpha prémultipliée pour les opérations de rendu interne.
Windows.UI.Color
les valeurs utilisent l’alpha droite. Chaque fois que vous passez une couleur à une Draw*
méthode ou , Fill*
définissez la couleur d’un pinceau ou effacez sur une valeur de couleur, cette couleur est spécifiée à l’aide de l’alpha droite.
Les valeurs de pixels stockées dans une bitmap ou rendertarget, ainsi que les opérations de dessin ou de fusion qui opèrent sur ces surfaces, utilisent l’alpha prémultipliée. Lorsque des bitmaps sont chargées à partir d’un fichier, leur contenu est automatiquement converti au format prémultiplié. Lorsque vous appelez une méthode de dessin Win2D, son paramètre de couleur est converti de droit en prémultiplié avant que le dessin réel n’a lieu.
Les effets d’image Win2D utilisent un mélange d’alpha droite et prémultiplié. Certains effets fonctionnent sur un format, d’autres sur l’autre, et d’autres fournissent une propriété à choisir. La documentation de chaque type d’effet décrit le mode alpha qu’il utilise. Les données d’entrée d’effet sont toujours supposées être prémultipliées. Par conséquent, lorsqu’un effet doit fonctionner avec une valeur alpha droite, il applique d’abord une transformation non prémultiply, calcule l’effet, puis prémultipère la sortie.
Les API GetPixelBytes
bitmap , SetPixelBytes
, GetPixelColors
et SetPixelColors
, n’effectuent aucune conversion au format alpha. Ils transfèrent simplement directement les valeurs de bits vers ou à partir de la texture GPU sous-jacente. Cela vous permet d’observer le format alpha utilisé par Win2D en interne :
- Créer une session de dessin sur un rendertarget
- Appelez
drawingSession.Clear(Colors.Tranparent)
Colors.Tranparent
est défini comme R = 255, G = 255, B = 255, A = 0- Win2D convertit cette valeur au format prémultiplié, avec R = 0, G = 0, B = 0, A = 0
- Utiliser
GetPixelColors
pour lire le contenu du rendertarget - Notez qu’il contient le format prémultiplié RVB = 0, et non RVB = 255 comme la valeur alpha
Colors.Tranparent
droite d’origine
Conversion d’un format alpha à l’autre
Pour convertir une valeur de couleur alpha droite en format prémultiplié, multipliez ses valeurs R, G et B par A. Pour convertir les prémultipliés en droites, divisez R, G et B par A.
Notez que les informations de couleur sont souvent représentées sous forme de valeurs d’octets comprises entre 0 et 255 (par exemple, la Windows.UI.Color
structure se compose de 4 octets). Cette représentation est mise à l’échelle par un facteur de 255, de sorte qu’une valeur d’octet de 255 signifie en fait 1, tandis que 128 est une demi-intensité. Ce facteur de mise à l’échelle doit être pris en compte lors des conversions de format. Par conséquent, pour convertir un Windows.UI.Color
de droit en prémultiplié :
premultiplied.R = (byte)(straight.R * straight.A / 255);
premultiplied.G = (byte)(straight.G * straight.A / 255);
premultiplied.B = (byte)(straight.B * straight.A / 255);
premultiplied.A = straight.A;
Si vous avez des données d’image qui utilisent un format alpha incorrect ou PremultiplyEffect
UnPremultiplyEffect
qui peuvent être utilisées pour les convertir.
Windows developer
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour