2013-01-03 2 views
0

J'ai du code GDI qui dessine des triangles semi-transparents en utilisant System.Drawing.SolidBrush. J'essaie de réimplémenter le code en utilisant une API de rendu 3D appropriée (OpenGL/Direct3D11), mais je ne suis pas sûr de l'équation de mélange à utiliser pour ces triangles pour obtenir la même sortie que le code GDI original.Quelle équation de mélange utilise System.Drawing.SolidBrush?

Je suppose que c'est quelque chose de relativement simple comme mélange additif (func = GL_FUNC_ADD, eq = GL_ONE, GL_ONE) ou interpolation (func = GL_FUNC_ADD, eq = GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA), mais semble ne regarder tout à fait raison. C'est presque certainement un bug dans mon nouveau code, mais je veux m'assurer que je travaille vers la bonne cible avant de continuer. Est-ce que quelqu'un connaît l'équation de mélange appropriée?

EDIT: Voici le code correspondant C#, dépouillée de son contexte:

using System.Drawing; 
SolidBrush b = new SolidBrush(Color.FromArgb(alpha,red,green,blue)); 
Point[] points = ...; 
Graphics g; 
g.FillPolygon(b,points); 

Ma question est, quelle couleur sera effectivement écrit, en termes de RGBA et de RGBA du pixel de destination de la brosse? Tous les docs que je peux trouver disent juste "utiliser l'alpha pour contrôler la transparence de la brosse" ou quelque chose d'aussi vague; Je suis curieux de savoir quelle est l'équation de mélange actuelle.

+0

Quel est le "code GDI" que vous essayez de réimplémenter? –

+0

C'est un code de traitement d'image d'un collègue de longue date que j'essaie de relancer et d'intégrer dans un nouveau projet, non-GDI. Les détails sont exclusifs, mais pas très pertinents pour la question. J'ai ajouté un extrait du code pertinent, si cela peut vous aider. – postgoodism

Répondre

0

Selon MSDN, System.Drawing.Graphics a une propriété nommée CompositingMode qui peut être SourceOver ou SourceCopy.

L'une par défaut est SourceOver, qui

Indique que lorsque l'on a rendu une couleur, il est mélangé avec la couleur de fond. Le mélange est déterminé par le composant alpha de la couleur rendue.

Comme nous l'avons testé, la stratégie de mélange utilisé ici est alpha composition, qui détermine la valeur de pixel dans la zone image A sur l'image B par l'équation suivante:

Alpha composition equation

Ici α a et α b sont la valeur alpha normalisée de l'image A et de l'image B; C a et C b sont les valeurs RGBA de l'image A et de l'image B; C o est la valeur RGBA de l'image de sortie.