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
» select intégrés
Pour découper une image en petits rectangles SANS DLL Emptypar jjn4 Aujourd'hui à 18:33

» Aide de PANORAMIC
Pour découper une image en petits rectangles SANS DLL Emptypar leclode Aujourd'hui à 18:23

» PANORAMIC V 1
Pour découper une image en petits rectangles SANS DLL Emptypar Klaus Aujourd'hui à 9:53

» Je teste PANORAMIC V 1 beta 1
Pour découper une image en petits rectangles SANS DLL Emptypar Klaus Aujourd'hui à 9:52

» bouton dans autre form que 0
Pour découper une image en petits rectangles SANS DLL Emptypar leclode Hier à 13:59

» KGF_dll - nouvelles versions
Pour découper une image en petits rectangles SANS DLL Emptypar Klaus Hier à 11:41

» Gestion d'un système client-serveur.
Pour découper une image en petits rectangles SANS DLL Emptypar Klaus Hier à 10:23

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Pour découper une image en petits rectangles SANS DLL Emptypar Froggy One Jeu 2 Mai 2024 - 11:16

» @Jack
Pour découper une image en petits rectangles SANS DLL Emptypar Jack Mar 30 Avr 2024 - 20:40

» trop de fichiers en cours
Pour découper une image en petits rectangles SANS DLL Emptypar papydall Lun 29 Avr 2024 - 23:39

» Une calculatrice en une ligne de programme
Pour découper une image en petits rectangles SANS DLL Emptypar jean_debord Dim 28 Avr 2024 - 8:47

» Form(résolu)
Pour découper une image en petits rectangles SANS DLL Emptypar leclode Sam 27 Avr 2024 - 17:59

» Bataille navale SM
Pour découper une image en petits rectangles SANS DLL Emptypar jjn4 Ven 26 Avr 2024 - 17:39

» Les maths du crocodile
Pour découper une image en petits rectangles SANS DLL Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

» Naissance de Crocodile Basic
Pour découper une image en petits rectangles SANS DLL Emptypar jean_debord Jeu 25 Avr 2024 - 8:45

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 du moment : -20%
-20% Récupérateur à eau mural 300 ...
Voir le deal
79 €

 

 Pour découper une image en petits rectangles SANS DLL

Aller en bas 
+4
Severin
Jean Claude
Yannick
Klaus
8 participants
Aller à la page : 1, 2  Suivant
AuteurMessage
Klaus

Klaus


Nombre de messages : 12293
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Pour découper une image en petits rectangles SANS DLL Empty
MessageSujet: Pour découper une image en petits rectangles SANS DLL   Pour découper une image en petits rectangles SANS DLL EmptyDim 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
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Yannick




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

Pour découper une image en petits rectangles SANS DLL Empty
MessageSujet: re   Pour découper une image en petits rectangles SANS DLL EmptyDim 5 Aoû 2012 - 20:44

Effectivement, BRAVO !!!

Mais je ne maîtrise pas encore assez bien pour faire çà... Laughing

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... Laughing


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ù.... Laughing

Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12293
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Pour découper une image en petits rectangles SANS DLL Empty
MessageSujet: Re: Pour découper une image en petits rectangles SANS DLL   Pour découper une image en petits rectangles SANS DLL EmptyDim 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.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jean Claude

Jean Claude


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

Pour découper une image en petits rectangles SANS DLL Empty
MessageSujet: Re: Pour découper une image en petits rectangles SANS DLL   Pour découper une image en petits rectangles SANS DLL EmptyDim 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+
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

Pour découper une image en petits rectangles SANS DLL Empty
MessageSujet: Re: Pour découper une image en petits rectangles SANS DLL   Pour découper une image en petits rectangles SANS DLL EmptyDim 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+
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12293
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Pour découper une image en petits rectangles SANS DLL Empty
MessageSujet: Re: Pour découper une image en petits rectangles SANS DLL   Pour découper une image en petits rectangles SANS DLL EmptyDim 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 !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Severin




Nombre de messages : 547
Localisation : Braunschweig / Germany
Date d'inscription : 13/12/2010

Pour découper une image en petits rectangles SANS DLL Empty
MessageSujet: Re: Pour découper une image en petits rectangles SANS DLL   Pour découper une image en petits rectangles SANS DLL EmptyDim 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
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12293
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Pour découper une image en petits rectangles SANS DLL Empty
MessageSujet: Re: Pour découper une image en petits rectangles SANS DLL   Pour découper une image en petits rectangles SANS DLL EmptyLun 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
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Yannick




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

Pour découper une image en petits rectangles SANS DLL Empty
MessageSujet: re   Pour découper une image en petits rectangles SANS DLL EmptyLun 6 Aoû 2012 - 2:58

cheers cheers 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..... Laughing Laughing Laughing
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 7004
Age : 73
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Pour découper une image en petits rectangles SANS DLL Empty
MessageSujet: Re: Pour découper une image en petits rectangles SANS DLL   Pour découper une image en petits rectangles SANS DLL EmptyLun 6 Aoû 2012 - 5:03

Quand Klaus se met au jeu, il ne va pas par quatre chemins.
Il va droit au but. Arrow
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Pour découper une image en petits rectangles SANS DLL Empty
MessageSujet: Re: Pour découper une image en petits rectangles SANS DLL   Pour découper une image en petits rectangles SANS DLL EmptyLun 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.
Revenir en haut Aller en bas
Minibug

Minibug


Nombre de messages : 4566
Age : 57
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

Pour découper une image en petits rectangles SANS DLL Empty
MessageSujet: Re: Pour découper une image en petits rectangles SANS DLL   Pour découper une image en petits rectangles SANS DLL EmptyLun 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...

Razz Razz Razz
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Invité
Invité




Pour découper une image en petits rectangles SANS DLL Empty
MessageSujet: Re: Pour découper une image en petits rectangles SANS DLL   Pour découper une image en petits rectangles SANS DLL EmptyLun 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
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12293
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Pour découper une image en petits rectangles SANS DLL Empty
MessageSujet: Re: Pour découper une image en petits rectangles SANS DLL   Pour découper une image en petits rectangles SANS DLL EmptyLun 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.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
bignono

bignono


Nombre de messages : 1127
Age : 66
Localisation : Val de Marne
Date d'inscription : 13/11/2011

Pour découper une image en petits rectangles SANS DLL Empty
MessageSujet: Re: Pour découper une image en petits rectangles SANS DLL   Pour découper une image en petits rectangles SANS DLL EmptyLun 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
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Pour découper une image en petits rectangles SANS DLL Empty
MessageSujet: Re: Pour découper une image en petits rectangles SANS DLL   Pour découper une image en petits rectangles SANS DLL EmptyLun 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 Smile
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 ... Wink
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 Smile
En plus en règle générale ça te permet de faire quelques sources avec des idées sympas
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12293
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Pour découper une image en petits rectangles SANS DLL Empty
MessageSujet: Re: Pour découper une image en petits rectangles SANS DLL   Pour découper une image en petits rectangles SANS DLL EmptyLun 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é...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Pour découper une image en petits rectangles SANS DLL Empty
MessageSujet: Re: Pour découper une image en petits rectangles SANS DLL   Pour découper une image en petits rectangles SANS DLL EmptyLun 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)
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12293
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Pour découper une image en petits rectangles SANS DLL Empty
MessageSujet: Re: Pour découper une image en petits rectangles SANS DLL   Pour découper une image en petits rectangles SANS DLL EmptyLun 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...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Pour découper une image en petits rectangles SANS DLL Empty
MessageSujet: Re: Pour découper une image en petits rectangles SANS DLL   Pour découper une image en petits rectangles SANS DLL EmptyLun 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 ...
Revenir en haut Aller en bas
Yannick




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

Pour découper une image en petits rectangles SANS DLL Empty
MessageSujet: re   Pour découper une image en petits rectangles SANS DLL EmptyLun 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.
Revenir en haut Aller en bas
Invité
Invité




Pour découper une image en petits rectangles SANS DLL Empty
MessageSujet: Re: Pour découper une image en petits rectangles SANS DLL   Pour découper une image en petits rectangles SANS DLL EmptyLun 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!
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12293
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Pour découper une image en petits rectangles SANS DLL Empty
MessageSujet: Re: Pour découper une image en petits rectangles SANS DLL   Pour découper une image en petits rectangles SANS DLL EmptyLun 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.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Pour découper une image en petits rectangles SANS DLL Empty
MessageSujet: Re: Pour découper une image en petits rectangles SANS DLL   Pour découper une image en petits rectangles SANS DLL EmptyLun 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.
Revenir en haut Aller en bas
bignono

bignono


Nombre de messages : 1127
Age : 66
Localisation : Val de Marne
Date d'inscription : 13/11/2011

Pour découper une image en petits rectangles SANS DLL Empty
MessageSujet: Re: Pour découper une image en petits rectangles SANS DLL   Pour découper une image en petits rectangles SANS DLL EmptyMar 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
Revenir en haut Aller en bas
Contenu sponsorisé





Pour découper une image en petits rectangles SANS DLL Empty
MessageSujet: Re: Pour découper une image en petits rectangles SANS DLL   Pour découper une image en petits rectangles SANS DLL Empty

Revenir en haut Aller en bas
 
Pour découper une image en petits rectangles SANS DLL
Revenir en haut 
Page 1 sur 2Aller à la page : 1, 2  Suivant
 Sujets similaires
-
» Découper un rectangle dans une image
» Outil pour écriture sans SCENE2D ou ailleurs
» Pour mes petits-enfants et pour les vôtres
» Comment afficher une image sans fond.
» Impression d'image sans ressource externe

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: