Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Pour découper une image en petits rectangles SANS DLL | |
|
+4Severin Jean Claude Yannick Klaus 8 participants | |
Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Pour découper une image en petits rectangles SANS DLL Dim 5 Aoû 2012 - 16:43 | |
| Voici un petit utilitaire qui découpe une image quelconque en petits rectangles. On peut choisir le nombre de lignes et colonnes (défaut: 5 lignes, 7 colonnes). Le programme crée un dossier du nom du fichier à découper, dans le répertoire dans lequel se trouve le fichier. Et ce répertoire contiendra un petit fichier BMP pour chaque rectangle, nommé puzzle_x_y.bmp, avec x=numéro de ligne et y=numéro de colonne. En outre, le programme crée un petit fichier texte dans ce répertoire du nom de puzzle_config.txt. Ce fichier contient 5 lignes: - le nom de l'image - largeur de l'image en pixels - la hauteur de l'image en pixels - le nombre de lignes - le nombre de colonnes Ce programme fonctionne en Panoramic pur, sans DLL? et il peut être utilisé pour créer des Sprite à partir d'une image. - Code:
-
' puzzeliser.bas
label labels : gosub labels gosub constantes gosub variables gosub donnees gosub form0 gosub menu gosub GUI gosub initialisations end
labels: label constantes, variables, donnees, form0, menu, GUI, initialisations label open, sortir, conf, close_conf, decouper return constantes: dim max_lignes% : max_lignes% = 100 dim max_colonnes% : max_colonnes% = 150 return variables: ' variables techniques dim no%, no1%, no2%, i%, j%, k%, m%, n%, s$, pic$, w%, h%, f$ ' variables mémorisant des numéros d'objet dim no_pic% : ' picture visualisé à l'écran dim no_open% : ' open_dialog dim no_conf% : ' form de configuration dim no_conf_n_lignes% : ' zone pour le nombre de lignes dans la form de configuration dim no_conf_n_colonnes% : ' zone pour le nombre de colonnes dans la form de configuration dim no_decoup% : ' ligne "Découper" dans le menu "Fichiers" dim no_image% : ' image interne recevant le rectangle découpé ' variables pour la configuration du découpage dim n_lignes%, n_colonnes% return
donnees: return
form0: full_space 0 caption 0,"Création d'un puzzle"
return
menu: no% = no% + 1 : main_menu no% : no1% = no% no% = no% + 1 : sub_menu no% : parent no%,no1% : no2% = no% caption no%,"Fichier" no% = no% + 1 : sub_menu no% : parent no%,no2% caption no%,"Ouvrir" : on_click no%,open no% = no% + 1 : sub_menu no% : parent no%,no2% caption no%,"Découper" : on_click no%,decouper no_decoup% = no% : inactive no% no% = no% + 1 : sub_menu no% : parent no%,no2% caption no%,"----------" no% = no% + 1 : sub_menu no% : parent no%,no2% caption no%,"Sortir" : on_click no%,sortir
no% = no% + 1 : sub_menu no% : parent no%,no1% : no2% = no% caption no%,"Options" no% = no% + 1 : sub_menu no% : parent no%,no2% caption no%,"Configuration" : on_click no%,conf
return
GUI: ' objets invisibles no% = no% + 1 : open_dialog no% : no_open% = no% filter no%,"Images|*.jpg;*.bmp"
' form 0 no% = no% + 1 : picture no% : no_pic% = no% : 2d_target_is no% top no%,10 : left no%,10 width no%,width(0)-8-20 : height no%,height(0)-34-40 ' configuration no% = no% + 1 : form no% : hide no% : no_conf% = no% : no1% = no% border_small no% : on_close no%,close_conf caption no%,"Configuration du puzzle" top no%,200 : left no%,200 no% = no% + 1 : alpha no% : parent no%,no1% top no%,20 : left no%,20 : caption no%,"Nombre de lignes:" no% = no% + 1 : edit no% : parent no%,no1% : no_conf_n_lignes% = no% top no%,20 : left no%,130 : width no%,40 no% = no% + 1 : alpha no% : parent no%,no1% top no%,50 : left no%,20 : caption no%,"Nombre de colonnes:" no% = no% + 1 : edit no% : parent no%,no1% : no_conf_n_colonnes% = no% top no%,50 : left no%,130 : width no%,40
return
initialisations: n_lignes% = 5 n_colonnes% = 7 return sortir: terminate
open: pic$ = "" width no_pic%,width(0)-8-20 : height no_pic%,height(0)-34-40 s$ = file_name$(no_open%) if s$="_" then return file_load no_pic%,s$ ' width no_pic%,width(0)-8-20 : height no_pic%,height(0)-34-40 pic$ = s$ 2d_flood width(no_pic%)-1,height(no_pic%)-1,0,0,0 display for w%=width(no_pic%)-1 to 0 step -1 if color_pixel_red(no_pic%,w%,0)<>0 then exit_for if color_pixel_green(no_pic%,w%,0)<>0 then exit_for if color_pixel_blue(no_pic%,w%,0)<>0 then exit_for next w% for h%=width(no_pic%)-1 to 0 step -1 if color_pixel_red(no_pic%,0,h%)<>0 then exit_for if color_pixel_green(no_pic%,0,h%)<>0 then exit_for if color_pixel_blue(no_pic%,0,h%)<>0 then exit_for next h% w% = w% + 1 : h% = h% + 1 message "Largeur: "+str$(w%)+" Hauteur: "+str$(h%) active no_decoup% return
conf: text no_conf_n_lignes%,str$(n_lignes%) text no_conf_n_colonnes%,str$(n_colonnes%) inactive 0 show no_conf% return
close_conf: i% = 0 s$ = text$(no_conf_n_lignes%) if numeric(s$)=1 n% = int(val(s$)) if (n%>=2) and (n%<=max_lignes%) then i% = 1 end_if if i%=0 message "Le nombre de lignes est invalide." else n_lignes% = n% end_if i% = 0 s$ = text$(no_conf_n_colonnes%) if numeric(s$)=1 n% = int(val(s$)) if (n%>=2) and (n%<=max_colonnes%) then i% = 1 end_if if i%=0 message "Le nombre de colonnes est invalide." else n_colonnes% = n% end_if
hide no_conf% active 0 : to_foreground 0 return
decouper: n% = int(h%/n_lignes% + 0.5) m% = int(w%/n_colonnes% + 0.5) no% = no% + 1 f$ = left$(pic$,len(pic$)-4) if dir_exists(f$)=0 then dir_make f$ f$ = f$ + "\puzzle_" for i%=1 to n_lignes% for j%=1 to n_colonnes% image no% 2d_image_copy no%,(j%-1)*m%,(i%-1)*n%,j%*m%,i%*n% file_save no%,f$ + str$(i%)+"_"+str$(j%)+".bmp" delete no% next j% next i% file_open_write 1,f$+"config.txt" file_writeln 1,file_extract_name$(pic$) file_writeln 1,str$(w%)+" largeur" file_writeln 1,str$(h%)+" hauteur" file_writeln 1,str$(n_lignes%)+" lignes" file_writeln 1,str$(n_colonnes%)+" colonnes" file_close 1 message "Terminé." return
Dernière édition par Klaus le Dim 5 Aoû 2012 - 21:27, édité 2 fois | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 5 Aoû 2012 - 20:44 | |
| Effectivement, BRAVO !!! Mais je ne maîtrise pas encore assez bien pour faire çà... Un petit bug graphique, tout de même, mais qui ne gêne pas la fonctionnalité du programme. Quand on clique sur "Option\ configuration" et que l'on veut changer le "Edit" du bas, la fenêtre par en live et le "width" du "Edit" prends une taille gastronomique... Edit : @ Tous Je suis certain que la numérotation des objets par variable est très pratique pour une programmation plus pro mais, parce qu'il y a un mais, pour un prog de démo c'est pas top. Je m'en explique. Il est très difficile de retrouver un objet par son numéro et de voir ce qui est rattaché à cette objet . Je vous avoue que je perdu avec cette façon de numéroter et qu'il me faut un temps fou pour comprendre qui fait quoi avec qui et où.... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Pour découper une image en petits rectangles SANS DLL Dim 5 Aoû 2012 - 21:27 | |
| Merci d'avoir signalé ce bug. C'est corrigé dans la version mise en ligne.
En ce qui concerne les numéros d'objet, je procède systématiquement de la manière suivante: - tous les objets sont numérotés par une variable no% qui est incrémenté pour chaque nouvel objet. Ainsi, je peux insérer un objet où je veux, sans jamais rencontrer de conflit avec les numéros. - j'utilise les variables no1% et no2% pour mémoriser le numéro d'objet qui deviendra parent d'autres objets. Exemple: le main_menu est créé par no%, et no% est copié dans no1%. Le premier sub_menu ("Fichiers") est alors créé par no% avec parent no1%, et son numéro est copié dans no2%. Le sub_menu "Ouvrir' qui doit dépendre du menu "Fichiers", est créé par no% avec parent no2%, et ainsi de suite. - uniquement pour les objets dont j'ai besoin du numéro ailleurs dans le programme, je crée une variable spécifique dont le nom renseigne sur l'objet visé. Exemple: no_pic% contient le numéro d'objet du picture, no_conf_n_lignes% contient le numéro d'objet de l'edit pour le nombre de lignes dans la form de configuration, dont le numéro est mémorisé dans la variable no_conf%... Idem, no_open% est le numéro du open_dialog.
Ainsi, je n'ai pas besoin de me repérer par des numéros qui sont susceptibles de changer lorsque j'insère un objet.
D'ailleurs, j'ai ajouté quelques commentaires pour expliquer l'utilisation des variables.
| |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Pour découper une image en petits rectangles SANS DLL Dim 5 Aoû 2012 - 21:31 | |
| @Ygeronimi, concernant la numérotation des objets: dans le cas du programme proposé par Klaus, tu as raison car Klaus n'a pas donné de nom au objets, mais regarde ceci: - Code:
-
no%=no%+1:container_joueur%=no%:container no%:width no%,245:height no%,135:color no%,200,200,255 top no%,int((height(0)/2)-height(no%)):left no%,int((width(0)/2)-(width(no%)/2)) no%=no%+1:alpha_NBjoueur%=no%:alpha no%:parent no%,container_joueur%:font_color no%,0,0,255 top no%,17:left no%,10:font_bold no%:caption no%,"Nombre de Joueurs:" no%=no%+1:combo_NBjoueur%=no%:combo no%:parent no%,container_joueur%:width no%,35 top no%,15:left no%,130:for n%=1 to 5:item_add no%,str$(n%):next n% no%=no%+1:alpha_NOMjoueur%=no%:alpha no%:parent no%,container_joueur%::font_color no%,0,0,255 top no%,102:left no%,10:font_bold no% no%=no%+1:edit_NOMjoueur%=no%:edit no%:parent no%,container_joueur%:width no%,80 top no%,100:left no%,116 no%=no%+1:option_ordi%=no%:option no%:parent no%,container_joueur%:width no%,180:font_color no%,0,0,255 top no%,50:left no%,10:font_bold no%:caption no%,"Participation de l'Ordinateur" no%=no%+1:option_pas_ordi%=no%:option no%:parent no%,container_joueur%:width no%,220:font_color no%,0,0,255 top no%,70:left no%,10:font_bold no%:caption no%,"Pas de participation de l'Ordinateur" Si tu regarde bien, tu verras que mes numéros d'objet sont explicite pour le programmeur. par exemple: no%=no%+1:alpha_NBjoueur%=no%:alpha no%:parent no%,container_joueur%:font_color no%,0,0,255 top no%,17:left no%,10:font_bold no%:caption no%,"Nombre de Joueurs:" no%=no%+1:combo_NBjoueur%=no%:combo no%:parent no%,container_joueur%:width no%,35 top no%,15:left no%,130:for n%=1 to 5:item_add no%,str$(n%):next n% alpha_NBjoueur% designe un alphe en relation avec le nombre de joueur et combo_NB_joueur% designe un combo qui offre le choix du nombre de joueurs. Partout dand le code je sais à quelle type d'objet j'ai à faire et quelle est sa fonction. Bon maintenant dodo, demain grosse journée de préparation avant le dépard... A+ | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Pour découper une image en petits rectangles SANS DLL Dim 5 Aoû 2012 - 21:34 | |
| On s'est croisé Klaus,
Je vois qu'on est très proche dans la démarche. (Faut dire que je t'ai largement copié)
A+ | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Pour découper une image en petits rectangles SANS DLL Dim 5 Aoû 2012 - 21:58 | |
| Pour autant que je me souvienne, l'idée initiale de numéroter les objets de cette manière et de leur donner des pseudo-noms par le truchement de noms de variables, vient de Cosmos70. Donc, honneur à son inventivité ! Je n'ai pas adhéré immédiatement, car j'avais un peu de mal à entrevoir tout de suite toutes les implications de cette technique, mais je me suis bien rattrapé depuis ! | |
| | | Severin
Nombre de messages : 547 Localisation : Braunschweig / Germany Date d'inscription : 13/12/2010
| Sujet: Re: Pour découper une image en petits rectangles SANS DLL Dim 5 Aoû 2012 - 22:17 | |
| Ich finde die Technik von Klaus sehr gut. Das hat mein Problem mit den maximalen 9999 Objekten vorläufig gelöst. Es sind keine Lücken in der Nummerierung mehr nötig. Alle Objektnummern passen sich automatisch an. Natürlich ist ein gründliches Auskommentieren sehr wichtig.
I find the technology very well by Klaus. That is my problem with the maximum 9999 objects provisionally released. There are no gaps in the numbering longer necessary. All property numbers adapt automatically. Of course, a thorough commenting is very important.
Je trouve la technologie très bien par Klaus. Voilà mon problème avec la maximale 9999 objets mis en liberté provisoire. Il n'y a pas des lacunes dans la numérotation plus nécessaire. Tous les numéros de propriété s'adapter automatiquement. Bien sûr, un examen approfondi des commentaires est très important.
Danke Klaus | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Pour découper une image en petits rectangles SANS DLL Lun 6 Aoû 2012 - 1:26 | |
| Et voici le programme permettant de jouer pour résoudre le puzzle découpé ! Ce programme ouvre un puzzle en sélectionnant le fichier puzzle_config.txt dans le répertoire créé par puzzeliser.bas. Il affiche alors tous les fragments de façon aléatoire dans l'écran, et affiche un rectangle blanc représentant la place que devra occuper le puzzle fini. Il faut alors choisir "Jouer" dans le menu "Fichiers". A partir de ce moment, les règles suivantes s'appliquent: - on fait un clic gauche sur un des fragments pour le sélectionner (rien ne se passe visuellement) - un clic gauche dans ailleurs que dans un fragment annule la sélection du fragment actuel - on utilise les 4 flèches pour le déplacer - on utilise la barre d'espacement pour le "caser" au pixel près dans la case sur laquelle il se trouve Lorsqu'on aura "casé" le dernier fragment dans la bonne place, le programme signale "BRAVO ! Vous avez reconstitué le puzzle !" et est prêt pour un nouveau jeu (fonction "Ouvrir" dans le menu "Fichiers". Pour commencer, testez avec des puzzles réduits (2x2, 3x4 etc), avant de passer à des puzzles plus grands... - Code:
-
' puzzle.bas
label labels : gosub labels gosub constantes gosub variables gosub donnees gosub form0 gosub menu gosub GUI gosub initialisations end
labels: label constantes, variables, donnees, form0, menu, GUI, initialisations label open, sortir, jouer, choisir, keydown, selpic, sel0 return constantes: dim max_lignes% : max_lignes% = 100 dim max_colonnes% : max_colonnes% = 150 return variables: ' variables techniques dim no%, no1%, no2%, i%, j%, k%, m%, n%, s$, pic$, w%, h%, f$, x%, y% dim f_jouer%, n_select% ' variables mémorisant des numéros d'objet dim no_pic% : ' picture visualisé à l'écran dim no_open% : ' open_dialog dim no_jouer% : ' ligne "Jouer" dans le menu "Fichiers" dim no_detail% : ' dernier numéro d'objet AVANT les pictures de détail ' variables pour la configuration du découpage dim n_lignes%, n_colonnes% return
donnees: return
form0: full_space 0 : on_click 0,sel0 caption 0,"Résoudre un puzzle"
return
menu: no% = no% + 1 : main_menu no% : no1% = no% no% = no% + 1 : sub_menu no% : parent no%,no1% : no2% = no% caption no%,"Fichier" no% = no% + 1 : sub_menu no% : parent no%,no2% caption no%,"Ouvrir" : on_click no%,open no% = no% + 1 : sub_menu no% : parent no%,no2% caption no%,"Jouer" : on_click no%,jouer no_jouer% = no% : inactive no% no% = no% + 1 : sub_menu no% : parent no%,no2% caption no%,"----------" no% = no% + 1 : sub_menu no% : parent no%,no2% caption no%,"Sortir" : on_click no%,sortir
return
GUI: ' objets invisibles no% = no% + 1 : open_dialog no% : no_open% = no% filter no%,"Puzzle|*.txt"
' form 0 no% = no% + 1 : picture no% : no_pic% = no% : 2d_target_is no% top no%,10 : left no%,10 : on_click no%,sel0 width no%,width(0)-8-20 : height no%,height(0)-34-40 no_detail% = no% return
initialisations: n_lignes% = 5 n_colonnes% = 7 return sortir: terminate
open: f_jouer% = 0 if no%>no_detail% for i%=no_detail%+1 to no% delete i% next i% color no_pic%,255,255,255 end_if pic$ = "" width no_pic%,width(0)-8-20 : height no_pic%,height(0)-34-40 s$ = file_name$(no_open%) if s$="_" then return if file_extract_name$(s$)<>"puzzle_config.txt" message "Ce n'est pas un puzzle valide." return end_if f$ = file_extract_path$(s$) file_open_read 1,s$ file_readln 1,pic$ caption 0,"Résoudre le puzzle "+pic$ file_readln 1,s$ i% = instr(s$," ") w% = val(left$(s$,i%-1)) file_readln 1,s$ i% = instr(s$," ") h% = val(left$(s$,i%-1)) file_readln 1,s$ i% = instr(s$," ") n_lignes% = val(left$(s$,i%-1)) file_readln 1,s$ i% = instr(s$," ") n_colonnes% = val(left$(s$,i%-1)) file_close 1 no% = no_detail% n% = int(h%/n_lignes% + 0.5) m% = int(w%/n_colonnes% + 0.5) color no_pic%,0,0,0 2d_rectangle 0,0,w%,h% for i%=1 to n_lignes% for j%=1 to n_colonnes% s$ = f$ + "puzzle_"+str$(i%)+"_"+str$(j%)+".bmp" no% = no% + 1 : picture no% : width no%,m% : height no%,n% left no%,10 + int(rnd(width(no_pic%)-m%)) top no%,10 + int(rnd(height(no_pic%)-n%)) file_load no%,s$ : on_click no%,selpic next j% next i%
active no_jouer% return choisir: return keydown: if n_select%=0 then return k% = key_down_code select k% case 37: ' gauche left n_select%,left(n_select%) - 10 if left(n_select%)<10 then left n_select%,10 case 38: ' haut top n_select%,top(n_select%) - 10 if top(n_select%)<10 then top n_select%,10 case 39: ' droite left n_select%,left(n_select%) + 10 if left(n_select%)>(w%-m%+10) then left n_select%,w%-m%+10 case 40: ' bas top n_select%,top(n_select%) + 10 if top(n_select%)>(h%-n%+10) then top n_select%,h%-n%+10 case 32: ' espace if n_select%>0 top n_select%,int(top(n_select%)/n%+0.5)*n% +10 left n_select%,int(left(n_select%)/m%+0.5)*m% +10 x% = 0 for i%=1 to n_lignes% for j%=1 to n_colonnes% k% = no_detail% + (i%-1)*n_lignes% + j% if (left(k%)<>(10+(j%-1)*m%)) then x% = 1 if (top(k%)<>(10+(i%-1)*n%)) then x% = 1 next j% next i% if x%=0 off_key_down 0 message "BRAVO ! Vous avez reconstitué le puzzle !" return end_if end_if end_select return
jouer: inactive no_jouer% f_jouer% = 1 on_key_down 0,keydown return selpic: n_select% = number_click return sel0: n_select% = 0 return
Dernière édition par Klaus le Lun 6 Aoû 2012 - 8:50, édité 1 fois | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Lun 6 Aoû 2012 - 2:58 | |
| J'aime bien aussi N est il pas possible de sélectionner avec le premier clic gauche de déplacer avec la souris ( par suivi de ses coordonnées ) déposer par un deuxième clic gauche et si la piece se trouve dans les coordonnées d'un emplacement qu'elle se place automatiquement dans ce cadre ? Je sais, je sais, je suis un casse c..... | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Pour découper une image en petits rectangles SANS DLL Lun 6 Aoû 2012 - 5:03 | |
| Quand Klaus se met au jeu, il ne va pas par quatre chemins. Il va droit au but. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Pour découper une image en petits rectangles SANS DLL Lun 6 Aoû 2012 - 8:51 | |
| Bravo Klaus, excellent. Par contre, il y a une erreur de frappe ligne 185 (manque le % après le n_select) Se serait sympa que l'image sélectionnée se déplace avec le mouvement. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Pour découper une image en petits rectangles SANS DLL Lun 6 Aoû 2012 - 8:57 | |
| exellent travail klaus Merci pour cet exemple. Il ne me reste plus qu'a eplucher ton code pour en extraire la plus pure connaissance panoramic... | |
| | | Invité Invité
| Sujet: Re: Pour découper une image en petits rectangles SANS DLL Lun 6 Aoû 2012 - 9:03 | |
| Bonjour, - Citation :
- Je suis certain que la numérotation des objets par variable est très pratique pour une programmation
J'avais effectivement donné cette méthode. Je regrète seulement de ne pas l'avoir appliqué pour le pagiciel. L'insertion dans les lignes d'objet nouveau fait plutôt bordel, et là cela fait la troizième fois que je recommence (avec beaucoup de copier/coller). Il y a eu plusieurs fois des demandes pour que les objets soient non pas numérotés, mais nommés. Et j'avais fait un programme pour travailler ainsi, avec des objets nommés. On pouvait insérer des objets si c'était nécessaire. On ne s'occupait pas de la numérotation. Je viens de faire une recherche, mais je ne retrouve pas pour l'instant ce programme, donc je ne peux pas mettre le lien. C'est de ma faute, car bien souvent des codes, je les mets à l'intérieur des discussions. De toute façon, ça n'intéresse pas. Pas gràve. Bonne journée.
Dernière édition par cosmos70 le Lun 6 Aoû 2012 - 14:36, édité 1 fois |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Pour découper une image en petits rectangles SANS DLL Lun 6 Aoû 2012 - 9:27 | |
| @Jicehel: J'avais relevé cette erreur et je l'ai déjà corrigé - regarde l'heure d'édition de mon post contenant le source ! Et l'image sélectionnée se déplace bien - c'est même tout l'objet du programme. As-tu cliqué sur "Jouer" dans le menu "Fichiers" ? Sinon, ça ne marche pas...
@Ygeronimi: Pour le moment, je ne peux pas faire cela. C'était bien ma première idée, mais elle n'est pas réalisable en Panoramic en l'état. A ce sujet, j'ai d'ailleurs lancé une demande d'amélioration dans la rubrique des souhaits de modifications de Panoramic. Le problème, c'est qu'il est réellement impossible de savoir où se trouve le curseur, lorsqu'il est en-dehors du picture sélectionné. Chaque objet Panoramic (et à fortiori les picture) semblent mémoriser les coordonnées du point de sortie du curseur, lorsque celui-ci traverse un objet. Et en interrogeant l'objet par MOUSE_X_POSITION et MOUSE_Y_POSITION, cela retourne toujours des coordonnées valides, mais sans aucun rapport avec la position réelle de la souris. ET cela est vrai même pour le picture qui sert de terrain de jeu (no_pic%), car si le curseur est passé d'un espace vide vers un picture de détail, cela représente une "sortie" pour l'objet no_pic%), et il n'y a aucun moyen de savoir si le curseur est à cet endroit ou au-dessus d'un autre picture. Et comme les picture glissent TOUJOURS en respectant leur Z-order (tu peux constater qu'ils glissent par-dessous,les autres), je ne peux pas le guider par la souris qui elle, se trouvera à l'intérieur d'un picture situé PAR-DESSUS du picture que je veux "tirer". Et je ne peux même pas déposer le picture sélectionné par l'utilisation d'une touche (CR par exemple) pour le déposer à l'endroit du curseur, car Panoramic ne peut absolument pas me dire où est le curseur ! Il n'y a rien pour savoir sans quel objet se trouve le curseur, et chaque objet retourne des coordonnées de curseur valides...
Donc, pour le moment, cela doit rester comme ça, et j'attends que Jack se penche sur le problème. | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Pour découper une image en petits rectangles SANS DLL Lun 6 Aoû 2012 - 10:17 | |
| Bonjour à tous, Je visionne vite fait ce qui se passe sur le forum, et pour le puzzle de klaus, il y aurait peut-être une solution. Je créerais un picture supplémentaire d'un numéro plus grand que le dernier contenant la dernière image du puzzle. Au moment où on sélectionne le morceau d'image dans un quelconque picture je le hide-rai, je le copierai dans le plus grand picture supplémentaire, que je pourrais déplacer comme je veux par dessus tous les autres avec les flèches ou la souris, et une fois positionné à l'endroit voulu, je le hide-rai, et je montrerai le picture d'origine sélectionné à cette nouvelle position. Je ne sais pas si Klaus tu as bien compris mon idée? Bon courage à tous | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Pour découper une image en petits rectangles SANS DLL Lun 6 Aoû 2012 - 10:38 | |
| Merci pour ta réponse Klaus, je viens de voir que tu avais mis à jour ton source ce matin à 8H30 J'avais dû le récupérer quelques minutes avant sans la correction avant de prendre mon petit déj et j'ai testé avant de prendre le bus ... Je testerais ce soir et d'ici là, en plus, je suis sûr que tu aura trouvé une astuce pour la souris (l'idée de bignono me parrait faisable à première vue ...) En tout cas merci pour ta réponse et continue de faire un peu de jeux, c'est bon de faire du futile de temps en temps En plus en règle générale ça te permet de faire quelques sources avec des idées sympas | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Pour découper une image en petits rectangles SANS DLL Lun 6 Aoû 2012 - 10:57 | |
| @Bignono: J'ai saisi ton idée et je vais faire des essais. Mais tu avoueras: quelle galère pour un truc qui pourrait être si simple si les suggestions de mon post dans la rubrique des souhaits d'amélioration étaient réalité... | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Pour découper une image en petits rectangles SANS DLL Lun 6 Aoû 2012 - 11:58 | |
| C'est vrai Klaus, ta demande est bien pratique. En attendant, si le palliatif fonctionne, ça permet d'attendre la future version de Panoramic.. Aller Jack, arrète de dormir la nuit.... (non, je plaisante ... quoique ... et bon courage) | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Pour découper une image en petits rectangles SANS DLL Lun 6 Aoû 2012 - 13:00 | |
| J'ai programmé le palliatif, comme tu dis, mais ça ne marche pas. Il y a un vrai bug avec les fonctions MOUSE_X_POSITION et MOUSE_Y_POSITION, et je l'ai signalé dans la rubrique adéquate. En attendant... | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Pour découper une image en petits rectangles SANS DLL Lun 6 Aoû 2012 - 13:19 | |
| Dommage, l'idée de Bignono était bonne... mais bon tu as employé le mot clé bug, Jack va réagir vite ... | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Lun 6 Aoû 2012 - 19:12 | |
| Perso j'ai un vrai problème pour utiliser mouse_x_position() et son pendant en y j'ai essayé plusieurs truc et pas moyen ne serait ce que d'afficher leurs retours même pas par print qui ne m'intéresse pas du tout. | |
| | | Invité Invité
| Sujet: Re: Pour découper une image en petits rectangles SANS DLL Lun 6 Aoû 2012 - 19:23 | |
| - Klaus a écrit:
- Le problème, c'est qu'il est réellement impossible de savoir où se trouve le curseur, lorsqu'il est en-dehors du picture sélectionné.
Elle n'est pas valable cette idée que j'ai redonné il y a quelques jours: - Code:
-
' essais de connaitre l'objet parcouru par la souris width 0,700 dim a,b,c,d,a$,b$,c$,d$ label fixe , hint ,arret ,cest_edit10, cest_memo11, cest_memo12 , cest_grid1 b=1 grid 1:GRID_COLUMN 1,2:GRID_ROW 1,10 :left 1,210:width 1,200 GRID_WRITE 1,1,1,"objet":GRID_WRITE 1,1,2,"position" a=1:gosub fixe
a=10:edit a:top a,10:left a,5 :width a,130:height a,30 :gosub fixe a=11:memo a:top a,50:left a,10 :width a,200:height a,100:gosub fixe a=12:memo a:top a,160:left a,10 :width a,200:height a,50:gosub fixe a=14:combo a:top a,220:left a,10:width a,100:gosub fixe ' message "nombre d'objet:"+str$(NUMBER_OBJECTS) alpha 13:top 13,height(0)-50:width 13,width(0)-40:color 13,255,255,255:font_size 13,10
timer 20:timer_interval 20,200:on_timer 20,hint ' on_error_goto arret end
fixe: b=b+1 GRID_WRITE 1,b,1,str$(a)
GRID_WRITE 1,b,2,0 return
hint: clear 11 for a=2 to NUMBER_OBJECTS if GRID_READ$(1,a,1)="" then exit_for a$= GRID_READ$(1,a,1) : b=val(a$) : b$=GRID_READ$(1,a,2) if MOUSE_X_POSITION( b)<> val(b$) text 10,"objet:"+a$+" heure:"+time$ :GRID_WRITE 1,a,2,mouse_x_position(b) if c<> a select a case 2:gosub cest_grid1 case 3:gosub cest_edit10 case 4:gosub cest_memo11 case 5:gosub cest_memo12 end_select end_if c=a end_if next a return arret: timer_off 20 return
cest_edit10:
caption 13,"on bouge la souris sur l'édit 10":return cest_memo11:
caption 13,"on parcourt la souris sur le memo 11":return cest_memo12:
caption 13,"on parcourt la souris sur le memo 12":return cest_grid1:
caption 13,"on parcourt la souris sur l'objet GRID":return
Il est évident que la demande faite pour la position en dehors du picture serait la bien venu. J'espère ne pas être hors sujet! |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Pour découper une image en petits rectangles SANS DLL Lun 6 Aoû 2012 - 19:55 | |
| Non, tu n'es pas hors sujet. Ton code montre par exemple que le combo ne peut pas être reconnu...
Perso, ce qui m'ennuie, c'est que les fonctions MOUSE_X_POSITION et son pendant en Y retournent toujours une valeur valide. Tant que le curseur est dans l'objet, tout est bon, Mais dès que le curseur quitte l'objet, la toute dernière position dans l'objet est mémorisée apparemment dans l'objet, et ces fonctions retournent systématiquement ces mêmes valeurs, comme si le curseur serait toujours à cet endroit.
Pire: s'il y a beaucoup d'objets, comme une série de pictures se chevauchant, il n'y a plus aucun moyen de savoir où le curseur se trouve vraiment : ces fonctions retournent une valeur valable pour peu que l'objet ait été survolé à un moment ou un autre, parce qu'ils mémorisent la dernière position de la souris dans l'objet ! Où est la souris ? Voilà la question !
Il faudrait que ces fonctions retournent -1 si le curseur n'est pas dans l'objet ciblé, ou alors, il faudrait qu'on ait une fonction ou une variable système qui nous dise dans quel objet se trouve le curseur. L'un ou l'autre, mais il y a vraiment quelque chose à faire. | |
| | | Invité Invité
| Sujet: Re: Pour découper une image en petits rectangles SANS DLL Lun 6 Aoû 2012 - 21:00 | |
| Oui, pour le combo, je n'avais pas remarqué. C'est un code d'essai que j'avais fait au début du grid, pour voir, si on pouvait mettre une aide automatique, selon le parcourt de la souris. Et je ne m'&tais pas préoccupé du combo, et je ne sais d'ailleur pas pourquoi j'en avais mis un.
J'ai vérifié la doc, et il n'y a rien de précisé concernant le combo. Il est seulement dit que mouse_x_position est un objet système qui concerne la 2D et la 3D. |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Pour découper une image en petits rectangles SANS DLL Mar 7 Aoû 2012 - 15:59 | |
| Bonjour à tous, Bon de passage vite fait, j'ai vu que mon idée ne fonctionne pas et que Klaus a fait une dll pour continuer à programmer ce petit jeu. Une autre idée: Si au moment des positions aléatoires des différents morceaux du puzzle on mémorisait dans un tableau à 2 dimensions le top et le left de chaque picture et qu'avec le number_click on sélectionne le picture et ses coordonnées, puis on attache ses coordonnées à celle de la souris sur le form pour le déplacer et en recliquant dessus, on le positionne aux nouvelles coordonnées de la souris et on les mémorise à la place des anciennes. Enfin je ne sais pas si Klaus me comprend dans mon explication? A plus | |
| | | Contenu sponsorisé
| Sujet: Re: Pour découper une image en petits rectangles SANS DLL | |
| |
| | | | Pour découper une image en petits rectangles SANS DLL | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |