Salut !
Sans doute avec la méthode TCanvas::FloodFill.
Pour celà il faut que ces zones soient parfaitement délimitées car le moindre trou est une porte ouverte pour remplir les zones adjacentes.
Un TPoint servant à mémoriser le point de sélection
TPoint Zone = Point(-1,-1); //Aucune sélection
Couleurs utilisées (pour l'exemple):
1 2
| TColor Couleur_de_fond = clWhite;
TColor Couleur_de_selection = clLime; |
Dans la méthode OnMouseMove, quelque chose basé sur ce principe :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| TCanvas *C = Image1->Canvas; //Pour simplifier l'écriture du code
if(C->Pixels[X][Y] == Couleur_de_fond)
{
if(Zone.x != -1)
{
//Rétablir la couleur de la zone active précédente
C->Brush->Color = Couleur_de_fond;
C->FloodFill(Zone.x, Zone.y, Couleur_de_selection, fsSurface);
}
//nouvelle sone active
Zone = Point(X,Y);
//Remplir la zone
C->Brush->Color = Couleur_de_selection;
C->FloodFill(Zone.x, Zone.y, Couleur_de_fond, fsSurface);
} |
Cet exemple ne vaut que pour une couleur de fond uniforme.
Dans le cas contraire, il faudrait développer un algo permettant de coloriser chaque pixel en appliquant d'autres règles.
A plus !
Partager