hello, c'est encore moi.., voila, je cherche a remplir une zone de mon canvas (timage) qui a une forme quelconque par une image.....et plus spécialement en type mosaique....quelqu'un a une idée ?..
MERCI![]()
hello, c'est encore moi.., voila, je cherche a remplir une zone de mon canvas (timage) qui a une forme quelconque par une image.....et plus spécialement en type mosaique....quelqu'un a une idée ?..
MERCI![]()
Tu entends quoi par forme Quelconque ?
De taille variable ? ou de forme Variable (Hexa, Rond, Polygonale, etc ...
La premiere c'est facile : 2 Boucles imbirquees et tu utilise la fonction : Canvas.CopyRect qui te copie un rectange source dans un rectange dest ...
LA double boucle te permet de deplacer les coordonnés de ton rect Dest de maniere a avoir ton effet "Mozaique"
Pour la 2e .. c'est franchement plus hard !! Va faloir faire ca pixels/pixels ou au mieux ligne/lignes .... avec une batterie de tests et calculs pour savoir si le pixel est dans ta zone ou non ...
ben hélas c'ets bien la deuxième que je veux faire....pourquoi faire simple quand on peut faire compliqué...enfin...mes zones se présentent par a gauche en haut et bas des lignes dont je connais les limites et a droite une forme quelconque....et je veux que toute la zone se remplissent en mosaique par une petite image...
Bon alors .. essayons de faire simple sur du compliqué ;pp
LE principe reste sensiblement le meme.
Tu determine les coordonnes du carre qui englobe ton image (ie : Coordonnes des points le plus a droite, le plus a gauche, le plus haut et le plus bas de ton image.)
Une fois ce rectangle determine tu procede comme la solution 1 : Double boucle imbriquee de pas ImageMozaique.height et ImagesMozaique.Width.
de maniere a ce ces images soient copiees les unes a cote des autres pour remplir toute la surface de ton carre englobant.
la copie du rectangle (a chaques iteration) ne se fera pas par CopyRect, mais pixels par pixels (double boucle imbriquee pour parcourir ton image) et tu n'affiche que les pixels qui sont dans la Zone de ta forme reele.
Une 2e methode assez efficace consisterais a faire ce qu'on appelle un "MAsque". Tu cree un TImage invisible avec la forme en noir sur fond blanc (que tu peux importer directement a partir d'un fichier bmp si il ne doit pas changer en cours de programme).
Ensuite, tu cree une autre image, de meme taille avec cette fois ci ta mozaique (un carre rempli) soit a l'aide de l'importation d'une image deja mozaiqué, soit dynamiquement avec les Copyrect, etc...
Une fois tes 2 images de meme taille crees, il ne reste plus qu'a parcourir les 2 images pixels par pixels et de ne copier dans l'image finale que les points de l'image mozaique qio correspondent a un point noir de l'image masque.
Voila qques indications pour te lancer la dedans ...
http://nono40.developpez.com/sources/source0011.html
J'ai retrouve ca ... de chez Nono40 ... le gourour de Developpez ^^
merci bien je pense qu'avec ca ca devrait aller !!![]()
merci pour les idées
![]()
Partager