FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Colorier une surface Emptypar Pedro Aujourd'hui à 10:37

» Un autre pense-bête...
Colorier une surface Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Colorier une surface Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Colorier une surface Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Colorier une surface Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Colorier une surface Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Colorier une surface Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Colorier une surface Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Colorier une surface Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Colorier une surface Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Colorier une surface Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Colorier une surface Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Colorier une surface Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Colorier une surface Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Colorier une surface Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le Deal du moment :
LEGO Icons 10331 – Le martin-pêcheur
Voir le deal
35 €

 

 Colorier une surface

Aller en bas 
4 participants
AuteurMessage
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Colorier une surface Empty
MessageSujet: Colorier une surface   Colorier une surface EmptySam 22 Fév 2014 - 14:13

Je voulais remonter ce vieux topic de sergeauze: https://panoramic.1fr1.net/t871-colorier-une-sur-surface de 2010, qui n'a pas eu beaucoup de succès, mais il est verrouillé.
J'avais le même problème: colorier une surface délimitée par une couleur donnée avec une couleur donnée, en partant d'un point situé à l'intérieur (sachant évidemment qu'il n'y a pas préalablement une couleur uniforme à l'intérieur, sinon le Flood ferait l'affaire). Sachant que cette surface peut avoir des contours tarabiscotés.

Et je ne trouve pas de solution, même avec les fonctions images pourtant puissantes de la dll de klaus
Revenir en haut Aller en bas
sergeauze

sergeauze


Nombre de messages : 391
Age : 72
Localisation : Hautes Alpes France
Date d'inscription : 09/01/2010

Colorier une surface Empty
MessageSujet: Re: Colorier une surface   Colorier une surface EmptySam 22 Fév 2014 - 14:54

Salut
J'avais passé des heures  dessus! et Jack a sorti  2_flood
Il serait intéressant que tu soumettes un cas particulier  et de voir comment on pourrait le résoudre
(Une ébauche de code  ou/et un capture d’écran)
Je suis prêt à remettre ça !
Revenir en haut Aller en bas
http://sergeauze.blog-video.tv/
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Colorier une surface Empty
MessageSujet: re   Colorier une surface EmptySam 22 Fév 2014 - 15:01

@ JL35

Tu pars d' une image ou d' une forme dessinée avec les outils 2D ?
Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Colorier une surface Empty
MessageSujet: Re: Colorier une surface   Colorier une surface EmptySam 22 Fév 2014 - 15:43

Bonjour à tous,

@sergeauze
2_flood ? c'est quoi ça ? 2D_FLOOD oui, je connais et j'utilise, mais c'est pour remplir une surface qui ne contient qu'une seule couleur uniforme, dès qu'il rencontre une autre couleur que celle du point de départ il s'arrête. Il n'y a pas spécialement de cas particulier, et je n'ai aucune ébauche de code, je ne vois pas du tout comment procéder, même pixel par pixel, sans laisser des zones non traitées.

@ygeronimi
Je parle d'une figure dessinée par-dessus une gravure ou une photo par exemple, un contour dessiné avec une couleur donnée, la fonction partirait d'un point situè à l'intérieur et remplirait tout ce qui est à l'intérieur avec une autre couleur donnée, jusqu'à rencontrer la couleur de bord.
Pour la couleur de bord, il suffit de prendre une couleur qu'on a peu de chances de rencontrer à l'intérieur, du genre 1,1,1 ou quelque chose comme ça.
Si c'est un rectangle ou un cercle, pas de problème, les fonctions 2D_Rectangle et 2D_Cercle peuvent remplir l'intérieur (avec 2D_Fill_Color), mais si c'est une figure quelconque, un losange, une ellipse, une étoile, n'importe quelle figure fermée, je ne sais pas faire.

Application pratique, entre autres: découper une figure dans une image pour y incruster une autre image avec une fonction d'incrustation de la dll l'ami Klaus. Je sais faire avec cercle ou rectangle (voir l'exemple dans 'Présentation et bavardage': passe-partout),  mais pas avec autre chose.

PS je vois bien une solution très lourdingue, pour ne rien rater:
- Balayer entièrement le picture pixel par pixel, du haut en bas. Dès qu'on rencontre la couleur de bordure, on modifie la couleur des pixels suivants jusqu'à rencontrer à nouveau la couleur de bordure, et on continue jusqu'au bout de la ligne, puis idem pour les lignes suivantes jusqu'en bas.
Il faudra que j'essaie, mais il faut tester la couleur de tous les pixels, un par un (3 instructions à chaque fois), ça doit prendre un temps faramineux !
Revenir en haut Aller en bas
sergeauze

sergeauze


Nombre de messages : 391
Age : 72
Localisation : Hautes Alpes France
Date d'inscription : 09/01/2010

Colorier une surface Empty
MessageSujet: Re: Colorier une surface   Colorier une surface EmptySam 22 Fév 2014 - 16:08

C'est  cette solution que j'avais adoptée
Avec le nouveau compilateur ça met moins de temps
Mais ça reste une usine à gaz
Revenir en haut Aller en bas
http://sergeauze.blog-video.tv/
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Colorier une surface Empty
MessageSujet: Re: Colorier une surface   Colorier une surface EmptySam 22 Fév 2014 - 16:13

Je vais essayer, pour voir, mais je crains un temps d'exécution rédhibitoire.
Revenir en haut Aller en bas
sergeauze

sergeauze


Nombre de messages : 391
Age : 72
Localisation : Hautes Alpes France
Date d'inscription : 09/01/2010

Colorier une surface Empty
MessageSujet: Re: Colorier une surface   Colorier une surface EmptySam 22 Fév 2014 - 16:34

Revenir en haut Aller en bas
http://sergeauze.blog-video.tv/
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Colorier une surface Empty
MessageSujet: Re: Colorier une surface   Colorier une surface EmptySam 22 Fév 2014 - 16:40

J'ai jeté un oeil sur le post en question, mais je n'y vois pas bien le code qui permettrait de remplir une surface...
Revenir en haut Aller en bas
Invité
Invité




Colorier une surface Empty
MessageSujet: Re: Colorier une surface   Colorier une surface EmptySam 22 Fév 2014 - 16:49

Une simple idée (et encore)
Si l'image à l'intérieur n fait pas plus de 200 pixels, tu peux faire des essais avec scene2d et sprite.
Tu fais ton dessin avec un fond noir que tu sauvegardes. tu mets une scene2d et tu recharges l'image sprite avec sprite_file_load au format bmp. Une fois réglé, tu récupères l'image avec la fonction image.
Peut-être travailler avec plusieurs SPRITE les uns à côté des autres si l'image est plus grande.

C'est peut-être idiot ce que je dis, mais je l'ai dit (dans ce cas j'ai fait l'effort de le paraître)  Rolling Eyes
Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Colorier une surface Empty
MessageSujet: Re: Colorier une surface   Colorier une surface EmptySam 22 Fév 2014 - 17:04

C'est vrai que je ne pense jamais aux fonctions sprite, pas bête ce que tu dis cosmos, il faut que je regarde ça de plus près, idée intéressante.
Là je suis en train de galérer avec les fonctions classiques et c'est plein de cas particuliers et ça boucle...

PS L'embêtant c'est qu'apparemment le sprite ça ne marche que sur un Scene_2d, or moi je travaille sur un Picture, et il semble bien qu'il n'y a pas de rapport...
Revenir en haut Aller en bas
Invité
Invité




Colorier une surface Empty
MessageSujet: Re: Colorier une surface   Colorier une surface EmptySam 22 Fév 2014 - 17:26

Si avec image tu peux récupérer celle-ci, tu la sauvegardes ou copies, et tu changes scene2d par picture pour reprendre l'image.
Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Colorier une surface Empty
MessageSujet: Re: Colorier une surface   Colorier une surface EmptySam 22 Fév 2014 - 18:20

Cosmos, si je reprends l'image depuis un Image dans un picture en x,y, je pense que je ne vais récupérer systématiquement qu'une image rectangulaire, et non pas un contour quelconque...

Je n'ai pas fait comme ça mais tu m'as donné une idée, bien sûr c'est pixel par pixel, mais ça ne dépend que des dimensions de l'image à reporter, et non de celles du picture récepteur: je dessine ma fenêtre dans un picture auxiliaire (éventuellement provisoire), aux dimensions externes de cette fenêtre, puis je la reporte dans le picture principal:
Code:
DIM ra%,ga%,ba%,rf%,gf%,bf%,rt%,gt%,bt%,ct%,p1%,p2%,wf%,hf%,y%
ra% = 254: ga% = 254: ba% = 254: ' couleur de tracé
rf% = 255: gf% = 0: bf% = 0: ' couleur de remplissage
rt% = 1: gt% = 1: bt% = 1: ' couleur de transparence

' Picture de base (receveur)
p1% = 1
PICTURE p1%: TOP p1%,20: WIDTH p1%,320: HEIGHT p1%,240
COLOR p1%,0,0,255: ' fond bleu
2D_TARGET_IS p1%: 2D_PEN_COLOR 255,255,0: 2D_PEN_WIDTH 3
FOR y% = 0 TO HEIGHT(p1%) STEP 6: 2D_LINE 0,y%,WIDTH(p1%),y%: NEXT y%

' Fenêtre à reporter dans le picture de base (ici losange, par exemple)
p2% = 100
wf% = 80: hf% = 120: ' dimensions hors tout de la figure à reporter
PICTURE p2%: top p2%,20: left p2%,400: WIDTH p2%,wf%: HEIGHT p2%,hf%: ' HIDE p2%
COLOR p2%,rt%,gt%,bt%
2D_TARGET_IS p2%: 2D_PEN_COLOR ra%,ga%,ba%
2D_LINE wf%/2,0,wf%,hf%/2: 2D_POLY_TO wf%/2,hf%: 2D_POLY_TO 0,hf%/2: 2D_POLY_TO wf%/2,0
2D_FLOOD wf%/2,hf%/2,rf%,gf%,bf%
ct% = 65536*rt%+256*gt%+bt%: ' couleur de transparence

Copyfig(p2%,p1%,120,60,ct%)

print "Terminé !"
END

SUB Copyfig(p2%,p1%,x%,y%,ct%)
' copie de la figure de p2% dans p1% en x,y
' Couleur de transparence ct% (format R*65536+G*256+B)
DIM_LOCAL wf%,hf%,r%,g%,b%,rt%,gt%,bt%,x1%,y1%
wf% = WIDTH(p2%): hf% = HEIGHT(p2%): ' image à transférer
bt%=BIN_AND(ct%,255): gt%=BIN_AND(ct%/256,255): rt%=INT(ct%/65536): ' transparence
2D_TARGET_IS p1%
FOR y1% = 0 TO hf%-1
    FOR x1% = 0 TO wf%-1
        r% = COLOR_PIXEL_RED(p2%,x1%,y1%): g% = COLOR_PIXEL_GREEN(p2%,x1%,y1%)
        b% = COLOR_PIXEL_BLUE(p2%,x1%,y1%)
        IF r%<>rt% AND g%<>gt% AND b%<>bt%
            2D_PEN_COLOR r%,g%,b%: 2D_POINT x%+x1%,y%+y1%
        END_IF
    NEXT x1%
    display
NEXT y1%
END_SUB
j'ai ajouté le display, sinon l'image disparaît pendant le traitement...

C'est annexe, mais il y a quelque chose qui m'échappe complètement, jusqu'à la ligne 12: je colorie mon picture en bleu, j'y trace des lignes jaunes horizontales de 3 pixels tous les 6 pixels, et je me retrouve avec une image en noir et blanc... ???
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 70
Localisation : 83 Var
Date d'inscription : 07/05/2009

Colorier une surface Empty
MessageSujet: Re: Colorier une surface   Colorier une surface EmptySam 22 Fév 2014 - 18:45

@JL35,

essai avec 2D_PEN_WIDTH 4, les lignes jaunes sont plus visibles. Effet d'optique  Question 

A+
Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Colorier une surface Empty
MessageSujet: Re: Colorier une surface   Colorier une surface EmptySam 22 Fév 2014 - 20:07

Tu as raison Jean Claude, c'est un effet d'optique, si on met width 8 et step 16 là tout est correct.

En tout cas j'adopte la sub, ce n'est pas très rapide, mais ça me convient pour ce que je veux faire.

Edit
Une autre sub, la Sub Ellipse, qui permet de dessiner et de colorier une ellipse d'une couleur donnée sur un picture qui contient déjà n'importe quoi, c'est impossible à faire avec le 2D_Flood:
Colorier une surface Image18
Code:
DIM ra%,ga%,ba%,rf%,gf%,bf%,rt%,gt%,bt%,ct%,p1%,p2%,wf%,hf%,y%
ra% = 254: ga% = 254: ba% = 254: ' couleur de tracé
rf% = 255: gf% = 0: bf% = 0: ' couleur de remplissage
rt% = 1: gt% = 1: bt% = 1: ' couleur de transparence

COLOR 0,0,255,255
' Picture de base (receveur)
p1% = 1: p2% = 100
PICTURE p1%: TOP p1%,20: LEFT p1%,10: WIDTH p1%,320: HEIGHT p1%,240
COLOR p1%,0,0,255: ' fond bleu
2D_TARGET_IS p1%: 2D_PEN_COLOR 255,255,0: 2D_PEN_WIDTH 8
FOR y% = 0 TO HEIGHT(p1%) STEP 16: 2D_LINE 0,y%,WIDTH(p1%),y%: NEXT y%

Ellipse(p1%,50,50,200,100,255*256)
END

SUB Copyfig(p2%,p1%,x%,y%,ct%)
' Insertion d'une figure de forme quelconque dans un picture. La figure à copier
' est dans un autre picture qui l'enveloppe, entourée d'une couleur 'transparente'
' Copie du picture p2% dans p1% en x,y, en ignorant les pixels 'transparents"'
' ct% = couleur de transparence ct% (format R*65536+G*256+B)
DIM_LOCAL wf%,hf%,r%,g%,b%,rt%,gt%,bt%,x1%,y1%
wf% = WIDTH(p2%): hf% = HEIGHT(p2%): ' image à transférer
bt%=BIN_AND(ct%,255): gt%=BIN_AND(ct%/256,255): rt%=INT(ct%/65536): ' transparence
2D_TARGET_IS p1%
FOR y1% = 0 TO hf%-1
    FOR x1% = 0 TO wf%-1
        r% = COLOR_PIXEL_RED(p2%,x1%,y1%): g% = COLOR_PIXEL_GREEN(p2%,x1%,y1%)
        b% = COLOR_PIXEL_BLUE(p2%,x1%,y1%)
        IF r%<>rt% AND g%<>gt% AND b%<>bt%
            2D_PEN_COLOR r%,g%,b%: 2D_POINT x%+x1%,y%+y1%
        END_IF
    NEXT x1%
    display
NEXT y1%
END_SUB

SUB Ellipse(p%,x%,y%,w%,h%,coul%)
' Tracé d'une ellipse inscrite dans le rectangle x%,y%,w%,h%, dans l'objet p%
' Couleur de remplissage coul% (format R*65536+G*256+B) ou -1 si vide
DIM_LOCAL xc%,yc%,ax%,ay%,xx%,yy%,r%,g%,b%,p1%
ax%=w%/2: ay% = h%/2: xc% = x%+ax%: yc% = y%+ay%: ' 1/2 grands axes et centre
2D_TARGET_IS p%
IF coul% <> -1
    p1%=5000: WHILE OBJECT_EXISTS(p1%)=1: p1%=p1%+1: END_WHILE
    PICTURE p1%: LEFT p1%,-500: WIDTH p1%,w%: HEIGHT p1%,h%: HIDE p1%
    COLOR p1%,254,254,254: ' couleur de transparence
    xc% = ax%: yc% = ay%
    2D_TARGET_IS p1%: 2D_PEN_COLOR 0,0,0
END_IF
2D_PEN_COLOR 0,0,0
' tracé de l'ellipse
FOR yy% = -1*ay% TO ay%
    xx% = (ax%*SQR(ay%*ay%-yy%*yy%))/ay%
    2D_POINT xc%+xx%, yc%+yy%
    2D_POINT xc%-xx%, yc%+yy%
NEXT yy%
FOR xx% = -1*ax% TO ax%
    yy% = (ay%*SQR(ax%*ax%-xx%*xx%))/ax%
    2D_POINT xc%+xx%, yc%+yy%
    2D_POINT xc%+xx%, yc%-yy%
NEXT xx%
IF coul% <> -1
    ' transfert de p1% dans p%
    b%=BIN_AND(coul%,255): g%=BIN_AND(INT(coul%/256),255): r%=INT(coul%/65536)
    2D_FLOOD xc%,yc%,r%,g%,b%: ' coloriage de l'ellipse
    2D_TARGET_iS p%
    FOR yy% = 0 TO h%-1
        FOR xx% = 0 TO w%-1
            r% = COLOR_PIXEL_RED(p1%,xx%,yy%): g% = COLOR_PIXEL_GREEN(p1%,xx%,yy%)
            b% = COLOR_PIXEL_BLUE(p1%,xx%,yy%)
            IF r%<>254 AND g%<>254 AND b%<>254
                2D_PEN_COLOR r%,g%,b%: 2D_POINT x%+xx%,y%+yy%
            END_IF
        NEXT xx%
        display
    NEXT yy%
    DELETE p1%
END_IF
END_SUB
Revenir en haut Aller en bas
Contenu sponsorisé





Colorier une surface Empty
MessageSujet: Re: Colorier une surface   Colorier une surface Empty

Revenir en haut Aller en bas
 
Colorier une surface
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Colorier une sur surface
» Colorier
»  Calcul de la surface d’un polygone défini par n points

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: A l'aide!-
Sauter vers: