Bonjour,
En utilisant l'API Win32 ? Si c'est le cas, il y a la fonction GradientFill() (dans le fichier d'entête windows.h) qui peut être utilisée pour ça. Voici ce que j'utilise pour remplir un triangle avec 3 couleurs :
// --- Remplir un triangle
// --- avec un gradient entre les couleurs des 3 sommets
void FillTriangularGradient
(
HDC hDC // E:handle sur le DC
,int iX1 // E:coordonnée x du sommet 1
,int iY1 // E:coordonnée y du sommet 1
,int iX2 // E:coordonnée x du sommet 2
,int iY2 // E:coordonnée y du sommet 2
,int iX3 // E:coordonnée x du sommet 3
,int iY3 // E:coordonnée y du sommet 3
,COLORREF Color1 // E:couleur du sommet 1
,COLORREF Color2 // E:couleur du sommet 2
,COLORREF Color3 // E:couleur du sommet 3
)
{
// --- Quitter si pas de DC
if (hDC == NULL) return;
// --- Remplir avec le gradient de couleurs
TRIVERTEX Vertex[3];
Vertex[0].x = iX1;
Vertex[0].y = iY1;
Vertex[0].Red = MAKEWORD(0,GetRValue(Color1));
Vertex[0].Green = MAKEWORD(0,GetGValue(Color1));
Vertex[0].Blue = MAKEWORD(0,GetBValue(Color1));
Vertex[0].Alpha = 0;
Vertex[1].x = iX2;
Vertex[1].y = iY2;
Vertex[1].Red = MAKEWORD(0,GetRValue(Color2));
Vertex[1].Green = MAKEWORD(0,GetGValue(Color2));
Vertex[1].Blue = MAKEWORD(0,GetBValue(Color2));
Vertex[1].Alpha = 0;
Vertex[2].x = iX3;
Vertex[2].y = iY3;
Vertex[2].Red = MAKEWORD(0,GetRValue(Color3));
Vertex[2].Green = MAKEWORD(0,GetGValue(Color3));
Vertex[2].Blue = MAKEWORD(0,GetBValue(Color3));
Vertex[2].Alpha = 0;
GRADIENT_TRIANGLE Triangle;
Triangle.Vertex1 = 0;
Triangle.Vertex2 = 1;
Triangle.Vertex3 = 2;
GradientFill(hDC,Vertex,3,&Triangle,1,GRADIENT_FILL_TRIANGLE);
}
Jean-François