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
» Je teste PANORAMIC V 1 beta 1
Colorier une surface Emptypar papydall Aujourd'hui à 2:48

» bouton dans autre form que 0
Colorier une surface Emptypar leclode Hier à 13:59

» KGF_dll - nouvelles versions
Colorier une surface Emptypar Klaus Hier à 11:41

» Gestion d'un système client-serveur.
Colorier une surface Emptypar Klaus Hier à 10:23

» PANORAMIC V 1
Colorier une surface Emptypar papydall Sam 4 Mai 2024 - 3:43

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Colorier une surface Emptypar Froggy One Jeu 2 Mai 2024 - 11:16

» @Jack
Colorier une surface Emptypar Jack Mar 30 Avr 2024 - 20:40

» trop de fichiers en cours
Colorier une surface Emptypar papydall Lun 29 Avr 2024 - 23:39

» Une calculatrice en une ligne de programme
Colorier une surface Emptypar jean_debord Dim 28 Avr 2024 - 8:47

» Form(résolu)
Colorier une surface Emptypar leclode Sam 27 Avr 2024 - 17:59

» Bataille navale SM
Colorier une surface Emptypar jjn4 Ven 26 Avr 2024 - 17:39

» Les maths du crocodile
Colorier une surface Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

» Naissance de Crocodile Basic
Colorier une surface Emptypar jean_debord Jeu 25 Avr 2024 - 8:45

» Dessine-moi une galaxie
Colorier une surface Emptypar jjn4 Lun 22 Avr 2024 - 13:47

» Erreur END_SUB
Colorier une surface Emptypar jjn4 Lun 22 Avr 2024 - 13:43

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
Le deal à ne pas rater :
Cdiscount : -30€ dès 300€ d’achat sur une sélection Apple
Voir le deal

 

 Colorier une surface

Aller en bas 
4 participants
AuteurMessage
JL35




Nombre de messages : 7095
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 : 71
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 : 8610
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 : 7095
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 : 71
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 : 7095
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 : 71
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 : 7095
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 : 7095
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 : 7095
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 : 5948
Age : 69
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 : 7095
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: