FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Calculatrice
par papydall Hier à 22:54

» EPP_V01 éditeur pour Panoramic
par Minibug Mer 19 Sep 2018 - 21:03

» [RESOLU] Quelle ligne est sélectionnée dans SYNEDIT ?
par Jean Claude Mer 19 Sep 2018 - 21:02

» PanExpress : l'éditeur Panoramic avec création d'objet
par Minibug Mer 19 Sep 2018 - 15:58

» Planétarium virtuel.
par Pedro Alvarez Mer 19 Sep 2018 - 9:28

» Demande pour Jack concernant PanExpress
par Marc Mar 18 Sep 2018 - 23:56

» Petit coucou en passant !
par Minibug Dim 16 Sep 2018 - 15:03

» bug SEVERE fnc+sub : variables globales corrompus
par silverman Dim 16 Sep 2018 - 13:38

» Verrouiller un form en avant plan
par silverman Dim 16 Sep 2018 - 12:50

» Fin de l'aventure.
par Pedro Alvarez Sam 15 Sep 2018 - 18:16

» Demande d'explications Sur File_Write & File_writeln
par Jack Sam 15 Sep 2018 - 17:26

» MEMO avec des possibilités de commande
par Oscaribout Mer 12 Sep 2018 - 1:06

» La théorie du chaos
par jean_debord Mar 11 Sep 2018 - 9:30

» Orbites de l’ensemble de Mandelbrot
par Jean Claude Lun 10 Sep 2018 - 21:08

» Version instantanée V 0.9.29i2 du 4/09/2018
par silverman Mer 5 Sep 2018 - 10:15

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Septembre 2018
LunMarMerJeuVenSamDim
     12
3456789
10111213141516
17181920212223
24252627282930
CalendrierCalendrier

Partagez | 
 

 Utilitaire Découpe d'une image

Aller en bas 
AuteurMessage
Jean Claude

avatar

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

MessageSujet: Utilitaire Découpe d'une image   Mer 24 Jan 2018 - 9:37

Bonjour à tous,

D'abord, merci à JL35 et Silverman pour leur participation et conseils.

Voici l'utilitaire "Découpe d'une image" qui découle de ce post => http://panoramic.1fr1.net/t5595-fabgrilleforimage-bas#68275

Cet utilitaire est automatisé et simple d'emploi.
Précaution: créer un dossier et y insérer l'image à découper.
Les explications sont dans le code, sous forme de commentaires.

Code:
' DecoupeImgOrigine.bas  JC Janvier 2018
' Adaptation de la SUB Crop(f1$,f2$,x%,y%,w%,h%) de JL35
' OBJECTIF: tracer une grille sur une image et créer un nouveau fichier bmp de cette image avec sa grille.
'           plus un fichier txt de sauvegarde des élements pour utilisation ultérieure.
rem ============================================================================ Contenu du fichier txt
' Nom du fichier "Elements_"+ImgOrigine$+".txt"
' Contient les images de 1 à nombres de fragements (nblig%*nbcol%)
' Format des lignes: Nom du fragment (nom de l'image)|position en x|position en py%|Largeur du fragment|Hauteur du fragment
' et en dernière ligne (count):
' Nom de l'image d'origine|nb lignes|nb colonnes|Largeur img origine|Hauteur img origine|Epaisseur du trait de grille
rem ============================================================================ Avertissement
' Il est conseillé de créer un dossier contenant l'image à découper pour éviter ...
' ... d'éparpiller n'import'où les fragments d'image résultants de la découpe.
rem ============================================================================ Fonctionnement
' Lancez le programme, sélectionnez une image dans le dossier adéquate, ...
' ... puis remplissez le formulaire "Options de découpage.", et validez ...
' ... Vous retrouverez tous les éléments dans le dossier.
rem ============================================================================ Mise en place
  caption 0,"Découpe d'une image, création d'une grille et du fichier éléments."
  color 0,0,0,0 : application_title "Découpe d'une image..."
  top 0,(screen_y-height(0))/2 : left 0,(screen_x-width(0))/2
  message "ATTENTION: Les images résultantes de la découpe,..."+chr$(13)+"seront placées dans le répertoire sélectionné."+chr$(13)+chr$(13)+"Si vous n'êtes pas sur, quitter à la fenêtre suivante."
  dim no%,ImgOrigine$,NomFrag$,nblig%,nbcol%,ep%,Wimg1%,Himg1%,Rep$,ext$,Cfi$,fi$
' vérification répertoire
  no%=no%+1 : open_dialog no% : Cfi$=file_name$(no%)
  Rep$=file_extract_path$(Cfi$) : ext$=file_extract_extension$(Cfi$) : fi$=file_extract_name$(Cfi$)
  if fi$="_"
     message "Aucune sélection" : terminate
  else
     if ext$<>".bmp"
        message "L'image doit-être au format ''bmp'' !" : terminate
     else
        delete no% : no%=no%-1 : dir_change Rep$
     end_if
  end_if
' Dlist1% pour stocker les attributs des fragments
  dim Dlist1%: no%=no%+1 : Dlist1%=no% : dlist Dlist1%
' Paramètres à renseigner: Nom de l'image origine, son width, son height,
  ' nb colonnes, nb lignes, épaisseur du trait de la grille, nom des fragments
  ImgOrigine$=fi$ : RetourneTailleIMG(ImgOrigine$)
  dim Picture1% : no%=no%+1 : Picture1%=no% : PICTURE Picture1%
  width Picture1%,Wimg1%+ep% : height Picture1%,Himg1%+ep% : color Picture1%,155,155,155
  left Picture1%,2 : top Picture1%,2 : width 0,width(Picture1%)+20 : height 0,height(Picture1%)+44
  top 0,(screen_y-height(0))/2 : left 0,(screen_x-width(0))/2
  2D_TARGET_IS Picture1% : file_load Picture1%,ImgOrigine$
  message ImgOrigine$+" Dimension: "+str$(Wimg1%)+" X "+str$(Himg1%)
  RetourneLigColEp(): ' reste à renseigner
  NomFrag$=left$(ImgOrigine$,len(ImgOrigine$)-4)+"_" :' Sert à nommer les images résultantes (fragments de l'image d'origine)
rem ============================================================================ Fin
END :'------------------------------------------------------------------------------------------------------------------------
rem ============================================================================ Start
Start:
  nblig%=val(text$(SpinLig%)) : nbcol%=val(text$(SpinCol%)) : ep%=val(text$(SpinEp%)) : hide panel1%
  dim Picture2% : no%=no%+1 : Picture2%=no% : PICTURE Picture2%
  width Picture2%,Wimg1%+ep% : height Picture2%,Himg1%+ep% : color Picture2%,155,155,155
  left Picture2%,2 : top Picture2%,2 : width 0,width(Picture2%)+20 : height 0,height(Picture2%)+44 : hide Picture2%
  top 0,(screen_y-height(0))/2 : left 0,(screen_x-width(0))/2
  caption 0,"Patientez SVP...."
  DecoupeImgOrigine(ImgOrigine$,NomFrag$,nblig%,nbcol%,Wimg1%,Himg1%,ep%)
  message "Découpe terminée"
  SHOW Picture2% : 2D_TARGET_IS Picture2%
  ReconstitueImgOrigine(NomFrag$,nblig%,nbcol%,ep%)
  caption 0,"New_"+ImgOrigine$
RETURN
rem ============================================================================ SUB RetourneLigColEp()
SUB RetourneLigColEp()
    dim panel1%,SpinLig%,SpinCol%,SpinEp%,BtValid%,BtAbandon%
    label Start,Abandon
    no%=no%+1 : panel1%=no%: panel no% : font_bold no% : color no%,0,0,0 : font_color no%,100,255,255 : font_size no%,12
                width no%,400 : height no%,300 : top no%,(height(0)-height(no%))/2 : left no%,(width(0)-width(no%))/2
    no%=no%+1 : alpha no% : parent no%,panel1% : top no%,10 : left no%,5 : caption no%,string$(20," ")+"Options de découpage."
    no%=no%+1 : alpha no% : parent no%,panel1% : top no%,60 : left no%,5 : caption no%,"Nb  lignes:"
    no%=no%+1 : SpinLig%=no% : spin no% : parent no%,panel1% : top no%,top(no%-1)-5 : width no%,60 : left no%,120
                font_color no%,0,0,0 : position no%,5
    no%=no%+1 : alpha no% : parent no%,panel1% : top no%,120 : left no%,5 : caption no%,"Nb colonnes:"
    no%=no%+1 : SpinCol%=no% : spin no% : parent no%,panel1% : top no%,top(no%-1)-5 : width no%,60 : left no%,120
                font_color no%,0,0,0 : position no%,5
    no%=no%+1 : alpha no% : parent no%,panel1% : top no%,180 : left no%,5 : caption no%,"Epaisseur du trait:"
    no%=no%+1 : SpinEp%=no% : spin no% : parent no%,panel1% : top no%,top(no%-1)-5 : width no%,60 : left no%,160
                font_color no%,0,0,0 : position no%,1
    no%=no%+1 : BtValid%=no% : button no% : parent no%,panel1% : top no%,265 : left no%,width(panel1%)-90 : caption no%,"Valider"
                on_click no%,Start
    no%=no%+1 : BtAbandon%=no% : button no% : parent no%,panel1% : top no%,265 : left no%,15 : caption no%,"Annuler"
                on_click no%,Abandon
END_SUB
Abandon:
   terminate
RETURN
rem ============================================================================ SUB RetourneTailleIMG
SUB RetourneTailleIMG(ImgOr$)
    FILEBIN_OPEN_READ 1,ImgOr$: ' dimensions de l'image -> wi1%, hi1% (JL35)
        FILEBIN_POSITION 1,18: Wimg1% = FILEBIN_READ(1)+256*FILEBIN_READ(1)
        FILEBIN_POSITION 1,22: Himg1% = FILEBIN_READ(1)+256*FILEBIN_READ(1)
    FILEBIN_CLOSE 1
END_SUB
rem ============================================================================ SUB ReconstitueImgOrigine
SUB ReconstitueImgOrigine(NomImg$,nbl%,nbc%,pw%)
    dim_local nx%,ny%,ni%,numi$,Limg$,px%,py%,wi2%,hi2%
    wi2%=Wimg1%/nbc% : hi2%=Himg1%/nbl%
    px%=0-wi2%
    for ny%=1 to nbl%
        for nx%=1 to nbc%
            ni%=ni%+1
            if ni%<10 then numi$="00"+str$(ni%)
            if ni%<100 and ni%>9 then numi$="0"+str$(ni%)
            if ni%>99 then numi$=str$(ni%)
            Limg$=NomImg$+numi$+".bmp"
            no%=no%+1 : IMAGE no% : FILE_LOAD no%,Limg$
            px%=px%+wi2% : 2D_IMAGE_PASTE no%,px%+pw%,py%+pw% : DELETE no%
        next nx%
        px%=0-wi2% : py%=py%+hi2%
    next ny%
  file_save Picture2%,"New_"+ImgOrigine$
END_SUB
rem ============================================================================ SUB DecoupeImgOrigine
SUB DecoupeImgOrigine(ImgOr$,NomImg$,nbl%,nbc%,wi1%,hi1%,pw%)
'    if (nbl%*nbc%)>100 then message "Nombre d'images résultantes: maximum autorisé = 100" : stop : terminate
    dim_local px%,py%,nx%,ny%,ni%,numi$,Img2$,wi2%,hi2%
    wi2%=Wimg1%/nbc% : hi2%=Himg1%/nbl%
    px%=0-wi2%
    for ny%=1 to nbl%
       for nx%=1 to nbc%
           ni%=ni%+1
           if ni%<10 then numi$="00"+str$(ni%)
           if ni%<100 and ni%>9 then numi$="0"+str$(ni%)
           if ni%>99 then numi$=str$(ni%)
           Img2$=NomImg$+numi$+".bmp" : px%=px%+wi2% : Crop(ImgOr$,Img2$,px%,py%,wi2%,hi2%,pw%)
           item_add Dlist1%,Img2$+"|"+str$(px%)+"|"+str$(py%)+"|"+str$(wi2%)+"|"+str$(hi2%)
       next nx%
       px%=0-wi2% : py%=py%+hi2%
    next ny%
    ' remplacer le fichier
    item_add Dlist1%,ImgOr$+"|"+str$(nbl%)+"|"+str$(nbc%)+"|"+str$(wi1%)+"|"+str$(hi1%)+"|"+str$(pw%)
    file_open_write 1,"Elements_"+left$(ImgOr$,len(ImgOr$)-4)+".txt" : file_close 1
    file_save Dlist1%,"Elements_"+left$(ImgOr$,len(ImgOr$)-4)+".txt"
END_SUB
SUB Crop(f1$,f2$,x%,y%,w%,h%,pw%)
    ' JL35 modifiée JC
    DIM_LOCAL s2d%,p%,i%
    s2d% = NUMBER_2D_TARGET
    p%=1000: WHILE OBJECT_EXISTS(p%)=1: p%=p%+1: END_WHILE
    i%=p%+1: WHILE OBJECT_EXISTS(i%)=1: i%=i%+1: END_WHILE
    PICTURE p%: HIDE p%: IMAGE i% : FILE_LOAD p%,f1$: 2D_TARGET_IS p%: 2D_IMAGE_COPY i%,x%,y%,x%+w%-pw%,y%+h%-pw%
    WIDTH p%,w%-pw%: HEIGHT p%,h%-pw% : 2D_IMAGE_PASTE i%,0,0: FILE_SAVE p%,f2$ :2D_TARGET_IS s2d% : DELETE i%: DELETE p%
END_SUB
rem ============================================================================

A+

PS: réedité 24/012018 à 10h47 (correction d'un bug sur l'affichage et l'enregistrement de l'image finale)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

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

MessageSujet: Re: Utilitaire Découpe d'une image   Mer 24 Jan 2018 - 18:50

Bonsoir à tous,

Voici le même programme complètement automatisé et avec 2 nouveautés. (Ça fera plaisir à JL35  Very Happy )
1) Le programme crée automatiquement un dossier (son nom est fonction de l'image à découper. Ex: Fichiers_Rose) pour les images résultantes et le fichier Eléments.txt. Si vous recommencez, le programme vous demande si vous souhaitez vider le dossier avant de commencer.
2) Vous pouvez choisir entre 10 couleurs prédéfinies pour les traits de la grille. Par défaut la couleur est gris moyen.

Rassurez-vous le vidage du dossier à été testé sans souci. Il est d'ailleurs limité au fichier txt et bmp.

Pour ceux qui voudrait utiliser une image autre que bmp, je vous conseille PicPick pour les enregistrer en bmp. Il est très simple d'utilisation. Il existe aussi PhotoFiltre, plus complet, mais plus compliqué. La liste n'est pas exhaustive.


Code:
' DecoupeImgOrigine.bas  JC Janvier 2018
' Adaptation de la SUB Crop(f1$,f2$,x%,y%,w%,h%) de JL35
' OBJECTIF: tracer une grille sur une image et créer un nouveau fichier bmp de cette image avec sa grille.
'           plus un fichier txt de sauvegarde des élements pour utilisation ultérieure.
rem ============================================================================ Contenu du fichier txt
' Nom du fichier "Elements_"+ImgOrigine$+".txt"
' Contient les images de 1 à nombres de fragements (nblig%*nbcol%)
' Format des lignes: Nom du fragment (nom de l'image)|position en x|position en py%|Largeur du fragment|Hauteur du fragment
' et en dernière ligne (count):
' Nom image origine|nb lignes|nb colonnes|Largeur img origine|Hauteur img origine|Epaisseur du trait de grille|cr%|cg%|cb%
rem ============================================================================ Avertissement
' Il est conseillé de créer un dossier contenant l'image à découper
rem ============================================================================ Fonctionnement
' Lancez le programme, sélectionnez une image dans le dossier adéquate, ...
' Si un dossier de cette image existe déjà vous pourrez le vider ou pas en répondant au message
' ... puis remplissez le formulaire "Options de découpage.", et validez ...
' ... Vous retrouverez tous les éléments dans le dossier.
rem ============================================================================ Mise en place
  caption 0,"Découpe d'une image, création d'une grille et du fichier éléments."
  color 0,0,0,0 : application_title "Découpe d'une image..."
  top 0,(screen_y-height(0))/2 : left 0,(screen_x-width(0))/2
  message "Commencez par sélectionner l'image à découper."+chr$(13)+"Format d'image ''.bmp'' uniquement."
  dim no%,a$,m%,ImgOrigine$,NomFrag$,nblig%,nbcol%,ep%,Wimg1%,Himg1%,Rep$,ext$,Cfi$,fi$,NewRep$
' vérification sélection
  no%=no%+1 : open_dialog no% : Cfi$=file_name$(no%)
  Rep$=file_extract_path$(Cfi$) : ext$=file_extract_extension$(Cfi$) : fi$=file_extract_name$(Cfi$)
  if fi$="_"
     message "Aucune sélection" : terminate
  else
     if ext$<>".bmp"
        message "L'image doit-être au format ''bmp'' !" : terminate
     else
        delete no% : no%=no%-1 : dir_change Rep$
     end_if
  end_if
  NewRep$=Rep$+"Fichiers_"+left$(fi$,len(fi$)-4)
  if dir_exists(NewRep$)=0
     dir_make NewRep$
  else
     a$="Il esiste déjà un dossier: "+NewRep$+chr$(13)+"Voulez-vous le supprimer ?"+chr$(13)+"Yes = oui  *  No = Abandon  *  X rouge = continuer sans supprimer"
     m%=message_confirmation_yes_no(a$)
     if m%=1
        Vide(NewRep$)
     else
        if m%=2
           terminate
        end_if
     end_if
  end_if
  dir_change Rep$
' Dlist1% pour stocker les attributs des fragments
  dim Dlist1%: no%=no%+1 : Dlist1%=no% : dlist Dlist1%
' Paramètres à renseigner: Nom de l'image origine, son width, son height,
  ' nb colonnes, nb lignes, épaisseur du trait de la grille, nom des fragments
  ImgOrigine$=fi$ : RetourneTailleIMG(ImgOrigine$)
  dim Picture1% : no%=no%+1 : Picture1%=no% : PICTURE Picture1%
  width Picture1%,Wimg1%+ep% : height Picture1%,Himg1%+ep% : color Picture1%,150,150,150
  left Picture1%,2 : top Picture1%,2 : width 0,width(Picture1%)+20 : height 0,height(Picture1%)+44
  top 0,(screen_y-height(0))/2 : left 0,(screen_x-width(0))/2
  2D_TARGET_IS Picture1% : file_load Picture1%,ImgOrigine$
  message ImgOrigine$+" Dimension: "+str$(Wimg1%)+" X "+str$(Himg1%)
  RetourneLigColEp(): ' reste à renseigner
  NomFrag$=left$(ImgOrigine$,len(ImgOrigine$)-4)+"_" :' Sert à nommer les images résultantes (fragments de l'image d'origine)
rem ============================================================================ Fin
END :'------------------------------------------------------------------------------------------------------------------------
rem ============================================================================ SUB VideNewRep()
SUB Vide(Repertoire$)
 '  JL35, Minibug modifié JC
    DIR_CHANGE Repertoire$
    dim_local f$,extention1$,extention2$
    extention1$=".txt" : extention2$=".bmp"
    f$ = FILE_FIND_FIRST$
    WHILE f$ <> "_"
        IF f$ <> "." AND f$ <> ".."
           IF extention1$=FILE_EXTRACT_EXTENSION$(f$)
              file_delete f$
           END_IF
           IF extention2$=FILE_EXTRACT_EXTENSION$(f$)
              file_delete f$
           END_IF
        END_IF
        f$ = FILE_FIND_NEXT$
    END_WHILE
    FILE_FIND_CLOSE
END_SUB
rem ============================================================================ Start
Start:
  nblig%=val(text$(SpinLig%)) : nbcol%=val(text$(SpinCol%)) : ep%=val(text$(SpinEp%)) : hide panel1%
  dim Picture2% : no%=no%+1 : Picture2%=no% : PICTURE Picture2%
  width Picture2%,Wimg1%+ep% : height Picture2%,Himg1%+ep% : color Picture2%,cr%,cg%,cb%
  left Picture2%,2 : top Picture2%,2 : width 0,width(Picture2%)+20 : height 0,height(Picture2%)+44 : hide Picture2%
  top 0,(screen_y-height(0))/2 : left 0,(screen_x-width(0))/2
  caption 0,"Patientez SVP...."
  DecoupeImgOrigine(ImgOrigine$,NomFrag$,nblig%,nbcol%,Wimg1%,Himg1%,ep%)
  message "Découpe terminée"
  SHOW Picture2% : 2D_TARGET_IS Picture2%
  ReconstitueImgOrigine(NomFrag$,nblig%,nbcol%,ep%)
  caption 0,"New_"+ImgOrigine$
  dir_change Rep$
RETURN
rem ============================================================================ SUB RetourneLigColEp()
SUB RetourneLigColEp()
    dim panel1%,SpinLig%,SpinCol%,SpinEp%,BtValid%,BtAbandon%,cr%,cg%,cb%
    dim AlphaBl%,AlphaGc%,AlphaNo%,AlphaJa%,AlphaVe%,AlphaBc%,AlphaBf%,AlphaR%,AlphaRf%,AlphaRST%,AlphaV%
    label Start,Abandon,CouleurTrait
    no%=no%+1 : panel1%=no%: panel no% : font_bold no% : color no%,0,0,0 : font_color no%,100,255,255 : font_size no%,12
                width no%,400 : height no%,310 : top no%,(height(0)-height(no%))/2 : left no%,(width(0)-width(no%))/2
    no%=no%+1 : alpha no% : parent no%,panel1% : top no%,10 : left no%,5 : caption no%,string$(20," ")+"Options de découpage."
    no%=no%+1 : alpha no% : parent no%,panel1% : top no%,60 : left no%,5 : caption no%,"Nb  lignes:"
    no%=no%+1 : SpinLig%=no% : spin no% : parent no%,panel1% : top no%,top(no%-1)-5 : width no%,60 : left no%,120
                font_color no%,0,0,0 : position no%,5
    no%=no%+1 : alpha no% : parent no%,panel1% : top no%,120 : left no%,5 : caption no%,"Nb colonnes:"
    no%=no%+1 : SpinCol%=no% : spin no% : parent no%,panel1% : top no%,top(no%-1)-5 : width no%,60 : left no%,120
                font_color no%,0,0,0 : position no%,5
    no%=no%+1 : alpha no% : parent no%,panel1% : top no%,180 : left no%,5 : caption no%,"Epaisseur du trait:"
    no%=no%+1 : SpinEp%=no% : spin no% : parent no%,panel1% : top no%,top(no%-1)-5 : width no%,60 : left no%,160
                font_color no%,0,0,0 : position no%,1
    no%=no%+1 : BtValid%=no% : button no% : parent no%,panel1% : top no%,275 : left no%,width(panel1%)-90 : caption no%,"Valider"
                on_click no%,Start
    no%=no%+1 : BtAbandon%=no% : button no% : parent no%,panel1% : top no%,275 : left no%,15 : caption no%,"Annuler"
                on_click no%,Abandon
    no%=no%+1 : AlphaBl%=no% :alpha no% : parent no%,panel1% : top no%,230 : left no%,10 : caption no%,chr$(169)
                font_color no%,255,255,255 : font_size no%,14 : on_click no%,CouleurTrait
    no%=no%+1 : AlphaGc%=no% :alpha no% : parent no%,panel1% : top no%,230 : left no%,left(no%-1)+35 : caption no%,chr$(169)
                font_color no%,150,150,150 : font_size no%,14 : on_click no%,CouleurTrait
    no%=no%+1 : AlphaNo%=no% :alpha no% : parent no%,panel1% : top no%,230 : left no%,left(no%-1)+35 : caption no%,chr$(169)
                color no%,255,255,255 :font_color no%,0,0,0 : font_size no%,14 : on_click no%,CouleurTrait
    no%=no%+1 : AlphaJa%=no% :alpha no% : parent no%,panel1% : top no%,230 : left no%,left(no%-1)+35 : caption no%,chr$(169)
                font_color no%,255,255,0 : font_size no%,14 : on_click no%,CouleurTrait
    no%=no%+1 : AlphaVe%=no% :alpha no% : parent no%,panel1% : top no%,230 : left no%,left(no%-1)+35 : caption no%,chr$(169)
                font_color no%,55,255,55: font_size no%,14 : on_click no%,CouleurTrait
    no%=no%+1 : AlphaBc%=no% :alpha no% : parent no%,panel1% : top no%,230 : left no%,left(no%-1)+35 : caption no%,chr$(169)
                font_color no%,55,255,255: font_size no%,14 : on_click no%,CouleurTrait
    no%=no%+1 : AlphaBf%=no% :alpha no% : parent no%,panel1% : top no%,230 : left no%,left(no%-1)+35 : caption no%,chr$(169)
                font_color no%,0,125,255: font_size no%,14 : on_click no%,CouleurTrait
    no%=no%+1 : AlphaR%=no% :alpha no% : parent no%,panel1% : top no%,230 : left no%,left(no%-1)+35 : caption no%,chr$(169)
                font_color no%,255,0,0 : font_size no%,14 : on_click no%,CouleurTrait
    no%=no%+1 : AlphaRf%=no% :alpha no% : parent no%,panel1% : top no%,230 : left no%,left(no%-1)+35 : caption no%,chr$(169)
                font_color no%,100,0,0 : font_size no%,14 : on_click no%,CouleurTrait
    no%=no%+1 : AlphaV%=no% :alpha no% : parent no%,panel1% : top no%,230 : left no%,left(no%-1)+35 : caption no%,chr$(169)
                font_color no%,255,0,255 : font_size no%,14 : on_click no%,CouleurTrait
    no%=no%+1 : AlphaRST%=no% :alpha no% : parent no%,panel1% : top no%,230 : left no%,left(no%-1)+40 : caption no%," "+chr$(169)+" "
                color no%,205,235,255 : font_size no%,14
gosub CouleurTrait
END_SUB
CouleurTrait:
cr%=150 : cg%=150 : cb%=150
if number_click=AlphaBl% then cr%=255 : cg%=255 : cb%=255
if number_click=AlphaGc% then cr%=150 : cg%=150 : cb%=150
if number_click=AlphaNo% then cr%=0 : cg%=0 : cb%=0
if number_click=AlphaJa% then cr%=255 : cg%=255 : cb%=0
if number_click=AlphaVe% then cr%=55 : cg%=255 : cb%=55
if number_click=AlphaBc% then cr%=55 : cg%=255 : cb%=255
if number_click=AlphaBf% then cr%=0 : cg%=125 : cb%=255
if number_click=AlphaR% then cr%=255 : cg%=0 : cb%=0
if number_click=AlphaRf% then cr%=100 : cg%=0 : cb%=0
if number_click=AlphaV% then cr%=255 : cg%=0 : cb%=255
font_color AlphaRST%,cr%,cg%,cb%
RETURN
Abandon:
   terminate
RETURN
rem ============================================================================ SUB RetourneTailleIMG
SUB RetourneTailleIMG(ImgOr$)
    dim_local Wl,Hl
    FILEBIN_OPEN_READ 1,ImgOr$: ' dimensions de l'image -> wi1%, hi1% (JL35)
        FILEBIN_POSITION 1,18: Wl = FILEBIN_READ(1)+256*FILEBIN_READ(1)
        FILEBIN_POSITION 1,22: Hl = FILEBIN_READ(1)+256*FILEBIN_READ(1)
    FILEBIN_CLOSE 1
    if frac(Wl)>0.4
       Wimg1%=int(Wl)+1
    else
       Wimg1%=int(Wl)
    end_if
    if frac(Hl)>0.4
       Himg1%=int(Hl)+1
    else
       Himg1%=int(Hl)
    end_if
END_SUB
rem ============================================================================ SUB ReconstitueImgOrigine
SUB ReconstitueImgOrigine(NomImg$,nbl%,nbc%,pw%)
    dim_local nx%,ny%,ni%,numi$,Limg$,px%,py%,wi2%,hi2%
    wi2%=Wimg1%/nbc% : hi2%=Himg1%/nbl%
    px%=0-wi2%
    for ny%=1 to nbl%
        for nx%=1 to nbc%
            ni%=ni%+1
            if ni%<10 then numi$="00"+str$(ni%)
            if ni%<100 and ni%>9 then numi$="0"+str$(ni%)
            if ni%>99 then numi$=str$(ni%)
            Limg$=NomImg$+numi$+".bmp"
            no%=no%+1 : IMAGE no% : FILE_LOAD no%,Limg$
            px%=px%+wi2% : 2D_IMAGE_PASTE no%,px%+pw%,py%+pw% : DELETE no%
        next nx%
        px%=0-wi2% : py%=py%+hi2%
    next ny%
  file_save Picture2%,"New_"+ImgOrigine$
END_SUB
rem ============================================================================ SUB DecoupeImgOrigine
SUB DecoupeImgOrigine(ImgOr$,NomImg$,nbl%,nbc%,wi1%,hi1%,pw%)
'    if (nbl%*nbc%)>100 then message "Nombre d'images résultantes: maximum autorisé = 100" : stop : terminate
    dim_local px%,py%,nx%,ny%,ni%,numi$,Img2$,wi2%,hi2%
    wi2%=Wimg1%/nbc% : hi2%=Himg1%/nbl%
    px%=0-wi2%
    for ny%=1 to nbl%
       for nx%=1 to nbc%
           ni%=ni%+1
           if ni%<10 then numi$="00"+str$(ni%)
           if ni%<100 and ni%>9 then numi$="0"+str$(ni%)
           if ni%>99 then numi$=str$(ni%)
           Img2$=NomImg$+numi$+".bmp" : px%=px%+wi2% : Crop(ImgOr$,Img2$,px%,py%,wi2%,hi2%,pw%)
           item_add Dlist1%,Img2$+"|"+str$(px%)+"|"+str$(py%)+"|"+str$(wi2%)+"|"+str$(hi2%)
       next nx%
       px%=0-wi2% : py%=py%+hi2%
    next ny%

    ' remplacer le fichier
    item_add Dlist1%,ImgOr$+"|"+str$(nbl%)+"|"+str$(nbc%)+"|"+str$(wi1%)+"|"+str$(hi1%)+"|"+str$(pw%)+"|"+str$(cr%)+"|"+str$(cg%)+"|"+str$(cb%)
    file_open_write 1,"Elements_"+left$(ImgOr$,len(ImgOr$)-4)+".txt" : file_close 1
    file_save Dlist1%,"Elements_"+left$(ImgOr$,len(ImgOr$)-4)+".txt"
END_SUB
SUB Crop(f1$,f2$,x%,y%,w%,h%,pw%)
    ' JL35 modifiée JC
    DIM_LOCAL s2d%,p%,i%
    s2d% = NUMBER_2D_TARGET
    p%=1000: WHILE OBJECT_EXISTS(p%)=1: p%=p%+1: END_WHILE
    i%=p%+1: WHILE OBJECT_EXISTS(i%)=1: i%=i%+1: END_WHILE
    PICTURE p%: HIDE p%: IMAGE i%
    dir_change Rep$
    FILE_LOAD p%,f1$: 2D_TARGET_IS p%: 2D_IMAGE_COPY i%,x%,y%,x%+w%-pw%,y%+h%-pw%
    WIDTH p%,w%-pw%: HEIGHT p%,h%-pw% : 2D_IMAGE_PASTE i%,0,0
    dir_change NewRep$
    FILE_SAVE p%,f2$ :2D_TARGET_IS s2d% : DELETE i%: DELETE p%
END_SUB
rem ============================================================================

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Utilitaire Découpe d'une image   Mer 24 Jan 2018 - 20:18

Effectivement c'est mieux comme ça, ça évite de faire des bêtises.

Remarque: en plus du format bmp en entrée, tu aurais pu facilement accepter le format jpg (qui constitue l'immense majorité, sinon tous, des formats d'appareils photo numériques par exemple), pour éviter de faire appel à une ressource externe et une manoeuvre manuelle (la conversion jpg->bmp) préalable. Il suffit dans Panoramic de charger le fichier dans un picture quelconque, même caché, puis de sauvegarder ce picture en bmp.

Sinon c'est sympa.

Mais... tu dois bien avoir une idée derrière la tête de ce que tu fais ensuite de tes découpes d'images ? Very Happy

Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

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

MessageSujet: Re: Utilitaire Découpe d'une image   Mer 24 Jan 2018 - 20:57

JL35 est un devin ... Very Happy

Une idée derrière la tête? comment tu as deviné  ? Razz . Je ne fais rien pour rien.
Oui, il y en a une, mais elle n'est pas prête de voir le jour ... C'est une idée de jeu, et j'ai besoin de fragments d'image pour la concrétiser. Ce sera long, car j'en suis au point 0.5. Razz  et j'ai un gros chantier qui m'attend dans les mois à venir (la salle de bain  drunken ).
Le chantier fini, ce sera l'été Cool sunny  , alors tu peux comprendre que, dans ma région, c'est interdit aux retraités de travailler  Evil or Very Mad
Donc, il vaut mieux s'attendre, pour la surprise, que vers la fin d'année. Je suis dans une phase de préparation, tu l'as deviné, et c'est pour moi une phase plaisante en terme de programmation.

En tous cas, s'il n'y avait pas le forum et Panoramic tous cela ne serait pas envisageable !

Pour le format JPG, vu ce que tu dis, ça parait on ne peut plus simple. Je vais y regarder. Mais pour les images résultantes je préfère rester en bmp pour obtenir une meilleure qualité (même si c'est plus lourd en terme de fichier).

Il y aura une suite, mais quand, je ne sais pas moi-même...

Maintenant, je vais me retirer (juste un peu) pour m'occuper des extérieurs avant d'attaquer mon chantier intérieur.

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Utilitaire Découpe d'une image   Mer 24 Jan 2018 - 21:16

Bon, ben... le suspense n'est pas près de s'arrêter !

Concernant le format JPG:
- pour les images 'sources', comme j'ai dit tu peux très facilement convertir en bmp en Panoramic, et question qualité ce sera aussi bon qu'avec n'importe quel logiciel externe.
- pour les images découpées, évidemment ce sera du bmp, Panoramic ne connaît que ce format en sortie.

Par exemple (j'ai fait une sub, mais autant mettre la seule ligne dans le code, ça ne sert qu'une fois):
Code:
SUB ConvertJpgToBmp(f$,fr$)
  ' Conversion d'une image f$ (jpg) en fr$ (bmp)
  PICTURE 1000: HIDE 1000: FILE_LOAD 1000,f$: FILE_SAVE 1000,fr$: DELETE 1000
END_SUB

Et bon courage pour ton chantier, Panoramic c'est quand même moins fatiguant, et les erreurs sont plus faciles à réparer !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

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

MessageSujet: Re: Utilitaire Découpe d'une image   Mer 24 Jan 2018 - 21:29

Mon dieu que c'est simple Exclamation
Je vais intégrer ça dans mon code pour simplifier les choses.

Citation :
bon courage pour ton chantier, Panoramic c'est quand même moins fatiguant, et les erreurs sont plus faciles à réparer !

Ben ... Oui, c'est pour ça qu'il faut que je prépare ce chantier sur le papier. Et comme un programme informatique, il faut le penser, l'écrire, tout prévoir... Et faire attention aux éventuels "bourrins"" qui vont se présenter. What a Face Razz

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Utilitaire Découpe d'une image   Mer 24 Jan 2018 - 21:48

Ouais, et pas question de te planter au moment de l'exécution ! Smile
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

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

MessageSujet: Re: Utilitaire Découpe d'une image   Jeu 25 Jan 2018 - 12:23

Bonjour à tous,

Suite au cadeau fait par JL35, j'ai amélioré le programme DecoupeImgOrigine.bas.

Maintenant le programme accepte les images JPG.
Notez qu'il transforme l'image JPG en BMP et l'image.jpg d'origine reste intacte.
J'ai aussi ajouté un avertissement en cas de dépassement de l'image par rapport à l'écran, avec le choix de continuer ou de quitter.

A ce sujet JL35, j'ai vu que tu as fait une sub voir => ICI

Cette SUB fonctionne bien, je vais en conséquence, dès que j'aurai un peux de temps, proposer le redimensionnement dans une prochaine version. En attendant, les intéressés peuvent se servir de ton code.  Very Happy


Code:
' DecoupeImgOrigine.bas  JC Janvier 2018
' Adaptation de la SUB Crop(f1$,f2$,x%,y%,w%,h%) de JL35
' OBJECTIF: tracer une grille sur une image et créer un nouveau fichier bmp de cette image avec sa grille.
'           plus un fichier txt de sauvegarde des élements pour utilisation ultérieure.
rem ============================================================================ Contenu du fichier txt
' Nom du fichier "Elements_"+ImgOrigine$+".txt"
' Contient les images de 1 à nombres de fragements (nblig%*nbcol%)
' Format des lignes: Nom du fragment (nom de l'image)|position en x|position en py%|Largeur du fragment|Hauteur du fragment
' et en dernière ligne (count):
' Nom image origine|nb lignes|nb colonnes|Largeur img origine|Hauteur img origine|Epaisseur du trait de grille|cr%|cg%|cb%
rem ============================================================================ Avertissement
' Il est conseillé de créer un dossier contenant l'image à découper pour éviter ...
' ... d'éparpiller n'import'où les fragments d'image résultants de la découpe.
rem ============================================================================ Fonctionnement
' Lancez le programme, sélectionnez une image dans le dossier adéquate, ...
' Si un dossier de cette image existe déjà vous pourrez le vider ou pas en répondant au message
' ... puis remplissez le formulaire "Options de découpage.", et validez ...
' ... Vous retrouverez tous les éléments dans le dossier.
rem ============================================================================ Mise en place
  caption 0,"Découpe d'une image, création d'une grille et du fichier éléments."
  color 0,0,0,0 : application_title "Découpe d'une image..."
  top 0,(screen_y-height(0))/2 : left 0,(screen_x-width(0))/2
  message "Commencez par sélectionner l'image à découper."+chr$(13)+"Format d'image ''bmp'' ou ''jpg''."
  dim no%,a$,m%,ImgOrigine$,NomFrag$,nblig%,nbcol%,ep%,Wimg1%,Himg1%,Rep$,ext$,Cfi$,fi$,NewRep$,fc$,vid$
' vérification sélection
  no%=no%+1 : open_dialog no% : Cfi$=file_name$(no%)
  Rep$=file_extract_path$(Cfi$) : ext$=file_extract_extension$(Cfi$) : fi$=file_extract_name$(Cfi$)
  if fi$="_"
     message "Aucune sélection" : terminate
  else
     if ext$<>".bmp"
        if ext$=".jpg"
           a$="L'image "+fi$+" est convertie au format bmp."+chr$(13)+"L'image d'origine ''"+fi$+"'' est conservée."
           message a$ : fc$=left$(fi$,len(fi$)-4)+".bmp" : ConvertJpgToBmp(fi$,fc$) : fi$=fc$
        else
           message "L'image sélectionnée a un format, non compatible avec ce programme,"+chr$(13)+"ou ce n'est pas une image ! Le programme doit-être relancé." : terminate
        end_if
     else
        delete no% : no%=no%-1 : dir_change Rep$
     end_if
  end_if
  NewRep$=Rep$+"Fichiers_"+left$(fi$,len(fi$)-4)
  if dir_exists(NewRep$)=0
     dir_make NewRep$
  else
     a$="Il esiste déjà un dossier: "+NewRep$+chr$(13)+"Voulez-vous le vider ? (Effectif si le programme arrive à son terme)"+chr$(13)+"Yes = oui  *  No = Abandon  *  X rouge = continuer sans supprimer"
     m%=message_confirmation_yes_no(a$)
     if m%=1
        vid$="Oui"
     else
        if m%=2
           terminate
        end_if
     end_if
  end_if
' Dlist1% pour stocker les attributs des fragments
  dim Dlist1%: no%=no%+1 : Dlist1%=no% : dlist Dlist1%
' Paramètres à renseigner: Nom de l'image origine, son width, son height,
  ' nb colonnes, nb lignes, épaisseur du trait de la grille, nom des fragments
  ImgOrigine$=fi$ : RetourneTailleIMG(ImgOrigine$)
  if Wimg1%>screen_x or Himg1%>screen_y
     a$="La dimension de "+ImgOrigine$+" ("+str$(Wimg1%)+" X "+str$(Himg1%)+")"+chr$(13)+"est supérieure à celle de votre écran. ("+str$(screen_x)+" X "+str$(screen_y)+")"+chr$(13)+chr$(13)+"Voulez-vous continuer ?"
     m%=message_confirmation_yes_no(a$)
     if m%=1
        ' on continue
     else
        if m%=2
           terminate
        else
           message "Vous n'avez pas répondu à la question ! Le programme doit-être relancé." : terminate
        end_if
     end_if
  end_if
  dim Picture1% : no%=no%+1 : Picture1%=no% : PICTURE Picture1%
  width Picture1%,Wimg1%+ep% : height Picture1%,Himg1%+ep% : color Picture1%,150,150,150
  left Picture1%,2 : top Picture1%,2 : width 0,width(Picture1%)+20 : height 0,height(Picture1%)+44
  top 0,(screen_y-height(0))/2 : left 0,(screen_x-width(0))/2
  2D_TARGET_IS Picture1% : file_load Picture1%,ImgOrigine$
  message ImgOrigine$+" Dimension: "+str$(Wimg1%)+" X "+str$(Himg1%)+chr$(13)+"Remplissez le formulaire qui va suivre pour pouvoir continuer."
  RetourneLigColEp(): ' reste à renseigner
  NomFrag$=left$(ImgOrigine$,len(ImgOrigine$)-4)+"_" :' Sert à nommer les images résultantes (fragments de l'image d'origine)
  if vid$="Oui" then Vide(NewRep$) : dir_change Rep$
rem ============================================================================ Fin
END :'------------------------------------------------------------------------------------------------------------------------
rem ============================================================================ ConvertJpgToBmp()
SUB ConvertJpgToBmp(f$,fr$)
  ' Conversion d'une image f$ (jpg) en fr$ (bmp)
  PICTURE 1000: HIDE 1000: FILE_LOAD 1000,f$: FILE_SAVE 1000,fr$: DELETE 1000
END_SUB
rem ============================================================================ SUB VideNewRep()
SUB Vide(Repertoire$)
 '  JL35, Minibug modifié JC
    DIR_CHANGE Repertoire$
    dim_local f$,extention1$,extention2$
    extention1$=".txt" : extention2$=".bmp"
    f$ = FILE_FIND_FIRST$
    WHILE f$ <> "_"
        IF f$ <> "." AND f$ <> ".."
           IF extention1$=FILE_EXTRACT_EXTENSION$(f$)
              file_delete f$
           END_IF
           IF extention2$=FILE_EXTRACT_EXTENSION$(f$)
              file_delete f$
           END_IF
        END_IF
        f$ = FILE_FIND_NEXT$
    END_WHILE
    FILE_FIND_CLOSE
END_SUB
rem ============================================================================ Start
Start:
  nblig%=val(text$(SpinLig%)) : nbcol%=val(text$(SpinCol%)) : ep%=val(text$(SpinEp%)) : hide panel1%
  dim Picture2% : no%=no%+1 : Picture2%=no% : PICTURE Picture2%
  width Picture2%,Wimg1%+ep% : height Picture2%,Himg1%+ep% : color Picture2%,cr%,cg%,cb%
  left Picture2%,2 : top Picture2%,2 : width 0,width(Picture2%)+20 : height 0,height(Picture2%)+44 : hide Picture2%
  top 0,(screen_y-height(0))/2 : left 0,(screen_x-width(0))/2
  caption 0,"Patientez SVP...."
  DecoupeImgOrigine(ImgOrigine$,NomFrag$,nblig%,nbcol%,Wimg1%,Himg1%,ep%)
  message "Découpe terminée"
  SHOW Picture2% : 2D_TARGET_IS Picture2%
  ReconstitueImgOrigine(NomFrag$,nblig%,nbcol%,ep%)
  caption 0,"New_"+ImgOrigine$
  dir_change Rep$
RETURN
rem ============================================================================ SUB RetourneLigColEp()
SUB RetourneLigColEp()
    dim panel1%,SpinLig%,SpinCol%,SpinEp%,BtValid%,BtAbandon%,cr%,cg%,cb%
    dim AlphaBl%,AlphaGc%,AlphaNo%,AlphaJa%,AlphaVe%,AlphaBc%,AlphaBf%,AlphaR%,AlphaRf%,AlphaRST%,AlphaV%
    label Start,Abandon,CouleurTrait
    no%=no%+1 : panel1%=no%: panel no% : font_bold no% : color no%,0,0,0 : font_color no%,100,255,255 : font_size no%,12
                width no%,400 : height no%,310 : top no%,(height(0)-height(no%))/2 : left no%,(width(0)-width(no%))/2
    no%=no%+1 : alpha no% : parent no%,panel1% : top no%,10 : left no%,5 : caption no%,string$(20," ")+"Options de découpage."
    no%=no%+1 : alpha no% : parent no%,panel1% : top no%,60 : left no%,5 : caption no%,"Nb  lignes:"
    no%=no%+1 : SpinLig%=no% : spin no% : parent no%,panel1% : top no%,top(no%-1)-5 : width no%,60 : left no%,120
                font_color no%,0,0,0 : position no%,5
    no%=no%+1 : alpha no% : parent no%,panel1% : top no%,120 : left no%,5 : caption no%,"Nb colonnes:"
    no%=no%+1 : SpinCol%=no% : spin no% : parent no%,panel1% : top no%,top(no%-1)-5 : width no%,60 : left no%,120
                font_color no%,0,0,0 : position no%,5
    no%=no%+1 : alpha no% : parent no%,panel1% : top no%,180 : left no%,5 : caption no%,"Epaisseur du trait:"
    no%=no%+1 : SpinEp%=no% : spin no% : parent no%,panel1% : top no%,top(no%-1)-5 : width no%,60 : left no%,160
                font_color no%,0,0,0 : position no%,1
    no%=no%+1 : BtValid%=no% : button no% : parent no%,panel1% : top no%,275 : left no%,width(panel1%)-90 : caption no%,"Valider"
                on_click no%,Start
    no%=no%+1 : BtAbandon%=no% : button no% : parent no%,panel1% : top no%,275 : left no%,15 : caption no%,"Annuler"
                on_click no%,Abandon
    no%=no%+1 : AlphaBl%=no% :alpha no% : parent no%,panel1% : top no%,230 : left no%,10 : caption no%,chr$(169)
                font_color no%,255,255,255 : font_size no%,14 : on_click no%,CouleurTrait
    no%=no%+1 : AlphaGc%=no% :alpha no% : parent no%,panel1% : top no%,230 : left no%,left(no%-1)+35 : caption no%,chr$(169)
                font_color no%,150,150,150 : font_size no%,14 : on_click no%,CouleurTrait
    no%=no%+1 : AlphaNo%=no% :alpha no% : parent no%,panel1% : top no%,230 : left no%,left(no%-1)+35 : caption no%,chr$(169)
                color no%,255,255,255 :font_color no%,0,0,0 : font_size no%,14 : on_click no%,CouleurTrait
    no%=no%+1 : AlphaJa%=no% :alpha no% : parent no%,panel1% : top no%,230 : left no%,left(no%-1)+35 : caption no%,chr$(169)
                font_color no%,255,255,0 : font_size no%,14 : on_click no%,CouleurTrait
    no%=no%+1 : AlphaVe%=no% :alpha no% : parent no%,panel1% : top no%,230 : left no%,left(no%-1)+35 : caption no%,chr$(169)
                font_color no%,55,255,55: font_size no%,14 : on_click no%,CouleurTrait
    no%=no%+1 : AlphaBc%=no% :alpha no% : parent no%,panel1% : top no%,230 : left no%,left(no%-1)+35 : caption no%,chr$(169)
                font_color no%,55,255,255: font_size no%,14 : on_click no%,CouleurTrait
    no%=no%+1 : AlphaBf%=no% :alpha no% : parent no%,panel1% : top no%,230 : left no%,left(no%-1)+35 : caption no%,chr$(169)
                font_color no%,0,125,255: font_size no%,14 : on_click no%,CouleurTrait
    no%=no%+1 : AlphaR%=no% :alpha no% : parent no%,panel1% : top no%,230 : left no%,left(no%-1)+35 : caption no%,chr$(169)
                font_color no%,255,0,0 : font_size no%,14 : on_click no%,CouleurTrait
    no%=no%+1 : AlphaRf%=no% :alpha no% : parent no%,panel1% : top no%,230 : left no%,left(no%-1)+35 : caption no%,chr$(169)
                font_color no%,100,0,0 : font_size no%,14 : on_click no%,CouleurTrait
    no%=no%+1 : AlphaV%=no% :alpha no% : parent no%,panel1% : top no%,230 : left no%,left(no%-1)+35 : caption no%,chr$(169)
                font_color no%,255,0,255 : font_size no%,14 : on_click no%,CouleurTrait
    no%=no%+1 : AlphaRST%=no% :alpha no% : parent no%,panel1% : top no%,230 : left no%,left(no%-1)+40 : caption no%," "+chr$(169)+" "
                color no%,205,235,255 : font_size no%,14
gosub CouleurTrait
END_SUB
CouleurTrait:
cr%=150 : cg%=150 : cb%=150
if number_click=AlphaBl% then cr%=255 : cg%=255 : cb%=255
if number_click=AlphaGc% then cr%=150 : cg%=150 : cb%=150
if number_click=AlphaNo% then cr%=0 : cg%=0 : cb%=0
if number_click=AlphaJa% then cr%=255 : cg%=255 : cb%=0
if number_click=AlphaVe% then cr%=55 : cg%=255 : cb%=55
if number_click=AlphaBc% then cr%=55 : cg%=255 : cb%=255
if number_click=AlphaBf% then cr%=0 : cg%=125 : cb%=255
if number_click=AlphaR% then cr%=255 : cg%=0 : cb%=0
if number_click=AlphaRf% then cr%=100 : cg%=0 : cb%=0
if number_click=AlphaV% then cr%=255 : cg%=0 : cb%=255
font_color AlphaRST%,cr%,cg%,cb%
RETURN
Abandon:
   terminate
RETURN
rem ============================================================================ SUB RetourneTailleIMG
SUB RetourneTailleIMG(ImgOr$)
    dim_local Wl,Hl
    FILEBIN_OPEN_READ 1,ImgOr$: ' dimensions de l'image -> wi1%, hi1% (JL35)
        FILEBIN_POSITION 1,18: Wl = FILEBIN_READ(1)+256*FILEBIN_READ(1)
        FILEBIN_POSITION 1,22: Hl = FILEBIN_READ(1)+256*FILEBIN_READ(1)
    FILEBIN_CLOSE 1
    if frac(Wl)>0.4
       Wimg1%=int(Wl)+1
    else
       Wimg1%=int(Wl)
    end_if
    if frac(Hl)>0.4
       Himg1%=int(Hl)+1
    else
       Himg1%=int(Hl)
    end_if
END_SUB
rem ============================================================================ SUB ReconstitueImgOrigine
SUB ReconstitueImgOrigine(NomImg$,nbl%,nbc%,pw%)
    dim_local nx%,ny%,ni%,numi$,Limg$,px%,py%,wi2%,hi2%
    wi2%=Wimg1%/nbc% : hi2%=Himg1%/nbl%
    px%=0-wi2%
    for ny%=1 to nbl%
        for nx%=1 to nbc%
            ni%=ni%+1
            if ni%<10 then numi$="00"+str$(ni%)
            if ni%<100 and ni%>9 then numi$="0"+str$(ni%)
            if ni%>99 then numi$=str$(ni%)
            Limg$=NomImg$+numi$+".bmp"
            no%=no%+1 : IMAGE no% : FILE_LOAD no%,Limg$
            px%=px%+wi2% : 2D_IMAGE_PASTE no%,px%+pw%,py%+pw% : DELETE no%
        next nx%
        px%=0-wi2% : py%=py%+hi2%
    next ny%
  file_save Picture2%,"New_"+ImgOrigine$
END_SUB
rem ============================================================================ SUB DecoupeImgOrigine
SUB DecoupeImgOrigine(ImgOr$,NomImg$,nbl%,nbc%,wi1%,hi1%,pw%)
'    if (nbl%*nbc%)>100 then message "Nombre d'images résultantes: maximum autorisé = 100" : stop : terminate
    dim_local px%,py%,nx%,ny%,ni%,numi$,Img2$,wi2%,hi2%
    wi2%=Wimg1%/nbc% : hi2%=Himg1%/nbl%
    px%=0-wi2%
    for ny%=1 to nbl%
       for nx%=1 to nbc%
           ni%=ni%+1
           if ni%<10 then numi$="00"+str$(ni%)
           if ni%<100 and ni%>9 then numi$="0"+str$(ni%)
           if ni%>99 then numi$=str$(ni%)
           Img2$=NomImg$+numi$+".bmp" : px%=px%+wi2% : Crop(ImgOr$,Img2$,px%,py%,wi2%,hi2%,pw%)
           item_add Dlist1%,Img2$+"|"+str$(px%)+"|"+str$(py%)+"|"+str$(wi2%)+"|"+str$(hi2%)
       next nx%
       px%=0-wi2% : py%=py%+hi2%
    next ny%

    ' remplacer le fichier
    item_add Dlist1%,ImgOr$+"|"+str$(nbl%)+"|"+str$(nbc%)+"|"+str$(wi1%)+"|"+str$(hi1%)+"|"+str$(pw%)+"|"+str$(cr%)+"|"+str$(cg%)+"|"+str$(cb%)
    file_open_write 1,"Elements_"+left$(ImgOr$,len(ImgOr$)-4)+".txt" : file_close 1
    file_save Dlist1%,"Elements_"+left$(ImgOr$,len(ImgOr$)-4)+".txt"
END_SUB
SUB Crop(f1$,f2$,x%,y%,w%,h%,pw%)
    ' JL35 modifiée JC
    DIM_LOCAL s2d%,p%,i%
    s2d% = NUMBER_2D_TARGET
    p%=1000: WHILE OBJECT_EXISTS(p%)=1: p%=p%+1: END_WHILE
    i%=p%+1: WHILE OBJECT_EXISTS(i%)=1: i%=i%+1: END_WHILE
    PICTURE p%: HIDE p%: IMAGE i%
    dir_change Rep$
    FILE_LOAD p%,f1$: 2D_TARGET_IS p%: 2D_IMAGE_COPY i%,x%,y%,x%+w%-pw%,y%+h%-pw%
    WIDTH p%,w%-pw%: HEIGHT p%,h%-pw% : 2D_IMAGE_PASTE i%,0,0
    dir_change NewRep$
    FILE_SAVE p%,f2$ :2D_TARGET_IS s2d% : DELETE i%: DELETE p%
END_SUB
rem ============================================================================

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
silverman

avatar

Nombre de messages : 675
Age : 46
Localisation : Picardie
Date d'inscription : 18/03/2015

MessageSujet: Re: Utilitaire Découpe d'une image   Jeu 25 Jan 2018 - 12:56

Pour l''open_dialog', utilise le nouveau conçu pour les images, à savoir 'open_dialog_pic'(panoramic 028i12) et ajoute un 'filter' pour ne sélectionner que les fichiers image. (L''open_dialog_pic' est vraiment très pratique pour les images, je l'ai inclu dans mon projet)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

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

MessageSujet: Re: Utilitaire Découpe d'une image   Jeu 25 Jan 2018 - 13:25

Bien vu Silverman,

Je code avec la version V9.27 de Panoramic, c'est la raison de cet oubli. J'ai la dernière version qui a cet objet OPEN_DIALOG_PIC je vais l'intégrer prochainement.
FILTER, j'aurais dû y penser (ça fera un message en moins Very Happy )

Merci pour tes conseils.

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

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

MessageSujet: Re: Utilitaire Découpe d'une image   Ven 26 Jan 2018 - 9:41

Bonjour à tous,

Voici la dernière version du programme (il n'y en aura pas d'autres).

Les plus:
1) Ajout de la commande FILTER
2) Si l'image sélectionnée est plus grande que l'écran, vous avez la possibilité de la redimensionner.
- L'image d'origine reste intact, la nouvelle image redimensionnée à le même nom avec "N_" devant.
- Ex: Rose.bmp <=> N_Rose.bmp
- Ensuite il faut relancer le programme et sélectionner cette nouvelle image.

Les commentaires on été rectifiés en fonction des nouveautés.

Pour ceux qui utilise la dernière version de Panoramic vous pouvez changer l' OPEN_DIALOG par OPEN_DIALOG_PIC à la ligne 32 du code.

Code:
' DecoupeImgOrigine.bas (BMP ou JPG) JC Janvier 2018
' Adaptation de la SUB Crop(f1$,f2$,x%,y%,w%,h%) de JL35
' OBJECTIF: Tracer une grille sur une image et créer un nouveau fichier bmp de cette image avec sa grille.
'          Générer une image pour chaque fragment issu de la découpe.
'          Générer un fichier txt de sauvegarde des élements pour utilisation ultérieure (Ex: Elements_Rose.txt).
' Les images résultantes ainsi que le fichier des éléments (Ex: Elements_Rose.txt),
' seront stocker dans un dossier nommé Fichiers_+le nom de l'image (EX: Fichiers_Rose)
rem ============================================================================ Contenu du fichier txt
' Nom du fichier "Elements_"+ImgOrigine$+".txt"
' Contient les images de 1 à nombres de fragements (nblig%*nbcol%)
' Format des lignes: Nom du fragment (nom de l'image)|position en x|position en py%|Largeur du fragment|Hauteur du fragment
' et en dernière ligne (count):
' Nom image origine|nb lignes|nb colonnes|Largeur img origine|Hauteur img origine|Epaisseur du trait de grille|cr%|cg%|cb%
rem ============================================================================ Avertissement
' Il est conseillé de créer un dossier contenant l'image à découper.
' Aucune modification dans le code.bas n'est nécessaire.
rem ============================================================================ Fonctionnement
' De préférence, faites un exécutable du programme, mais ce n'est pas obligatoire.
' Lancez le programme, sélectionnez une image dans le dossier adéquate. ...
'    A noter:
'    Si un dossier de cette image existe déjà vous pourrez le vider (ou pas) en répondant au message.
'    Si l'image sélectionnée est plus grande que votre écran vous pourrez la redimensionner (ou pas) en répondant au message.
' Puis remplissez le formulaire "Options de découpage.", et validez.
' Vous retrouverez tous les éléments dans le dossier correspondant à l'image.
rem ============================================================================ Mise en place
  caption 0,"RECHERCHEZ L'IMAGE A DECOUPER"
  color 0,0,0,0 : application_title "Découpe d'une image..."
  width 0,700 : height 0,500 : top 0,(screen_y-height(0))/4 : left 0,(screen_x-width(0))/2
'  message "Commencez par sélectionner l'image à découper."+chr$(13)+"Format d'image ''bmp'' ou ''jpg''."
  dim no%,a$,m%,ImgOrigine$,NomFrag$,nblig%,nbcol%,ep%,Wimg1%,Himg1%,Rep$,ext$,Cfi$,fi$,NewRep$,fc$,vid$,RepTemp$,FicTemp$,NewImg$
' vérification sélection
  no%=no%+1 : open_dialog no% : filter no%,"Image|*.bmp;*.jpg" : Cfi$=file_name$(no%)
  Rep$=file_extract_path$(Cfi$) : ext$=file_extract_extension$(Cfi$) : fi$=file_extract_name$(Cfi$)
  caption 0,"Découpe d'une image, création d'une grille et du fichier éléments."
  if fi$="_"
    message "Aucune sélection" : terminate
  else
    if ext$<>".bmp"
        if ext$=".jpg"
          a$="L'image "+fi$+" est convertie au format bmp."+chr$(13)+"L'image d'origine ''"+fi$+"'' est conservée."
          message a$ : fc$=left$(fi$,len(fi$)-4)+".bmp" : ConvertJpgToBmp(fi$,fc$) : fi$=fc$
        end_if
    else
        delete no% : no%=no%-1 : dir_change Rep$
    end_if
  end_if
  NewRep$=Rep$+"Fichiers_"+left$(fi$,len(fi$)-4)
  if dir_exists(NewRep$)=0
    dir_make NewRep$
  else
    Sonde(NewRep$) : dir_change Rep$
    if a$<>"_"
        a$="Il esiste déjà un dossier: "+NewRep$+chr$(13)+"Voulez-vous le vider ? (Effectif si le programme arrive à son terme)"+chr$(13)+"Yes = oui  *  No = Abandon  *  X rouge = continuer sans supprimer"
        m%=message_confirmation_yes_no(a$)
        if m%=1
          vid$="Oui"
        else
          if m%=2
              terminate
          end_if
        end_if
    end_if
  end_if
' Dlist1% pour stocker les attributs des fragments
  dim Dlist1%: no%=no%+1 : Dlist1%=no% : dlist Dlist1%
' Paramètres à renseigner: Nom de l'image origine, son width, son height,
  ' nb colonnes, nb lignes, épaisseur du trait de la grille, nom des fragments
  ImgOrigine$=fi$ : RetourneTailleIMG(ImgOrigine$)
  if Wimg1%>screen_x or Himg1%>screen_y
    a$="La dimension de "+ImgOrigine$+" ("+str$(Wimg1%)+" X "+str$(Himg1%)+")"+chr$(13)+"est supérieure à celle de votre écran. ("+str$(screen_x)+" X "+str$(screen_y)+")"+chr$(13)+chr$(13)+"Yes = Redimensionner  *  No = Continuer sans redimensionner"+chr$(13)+chr$(13)+"Votre Choix ?."
    m%=message_confirmation_yes_no(a$)
    if m%=1
        NewImg$="N_"+ImgOrigine$ : RepTemp$=Rep$+"TEMP"
        if dir_exists(RepTemp$)=0 then dir_make RepTemp$
        FicTemp$=RepTemp$+"\"+ImgOrigine$
        PrepRedimImg(ImgOrigine$,Wimg1%,Himg1%,NewImg$)
    else
        if m%=2
          ' continu
        else
          message "Vous n'avez pas répondu à la question ! Le programme doit-être relancé." : terminate
        end_if
    end_if
  end_if
  dim Picture1% : no%=no%+1 : Picture1%=no% : PICTURE Picture1%
  width Picture1%,Wimg1%+ep% : height Picture1%,Himg1%+ep% : color Picture1%,150,150,150
  left Picture1%,2 : top Picture1%,2 : width 0,width(Picture1%)+20 : height 0,height(Picture1%)+44
  if Wimg1%<400 then width 0,500 : height 0,450
  if Himg1%<300 then width 0,500 : height 0,450
  top 0,(screen_y-height(0))/2 : left 0,(screen_x-width(0))/2
  2D_TARGET_IS Picture1% : file_load Picture1%,ImgOrigine$
  message ImgOrigine$+" Dimension: "+str$(Wimg1%)+" X "+str$(Himg1%)+chr$(13)+"Remplissez le formulaire qui va suivre pour pouvoir continuer."
  RetourneLigColEp(): ' reste à renseigner
  NomFrag$=left$(ImgOrigine$,len(ImgOrigine$)-4)+"_" :' Sert à nommer les images résultantes (fragments de l'image d'origine)
  if vid$="Oui" then Vide(NewRep$) : dir_change Rep$
rem ============================================================================ Fin
END :'------------------------------------------------------------------------------------------------------------------------
rem ============================================================================ SUB RedimImg()
SUB PrepRedimImg(ImgOrigine$,Wimg1%,Himg1%,NewImg$)
  if variable("PanelTemp%")=0
    dim PanelTemp%,SpinW%,SpinH%,BtVld%,BtAbd%
    label Continu,Quitte
    no%=no%+1 : PanelTemp%=no% : panel no% :font_bold no% : color no%,50,50,50 : font_color no%,100,255,255 : font_size no%,12
    width no%,500 : height no%,310 : top no%,(height(0)-height(no%))/2 : left no%,(width(0)-width(no%))/2
    no%=no%+1 : alpha no% : parent no%,PanelTemp% : top no%,10 : left no%,5 : caption no%,string$(1," ")+"Nouvelles Dimensions pour "+NewImg$
    no%=no%+1 : alpha no% : parent no%,PanelTemp% : top no%,60 : left no%,5 : caption no%,"Nouvelle Largeur:"
    no%=no%+1 : SpinW%=no% : spin no% : parent no%,PanelTemp% : top no%,top(no%-1)-5 : width no%,100 : left no%,180
                font_color no%,0,0,0 : position no%,Wimg1%
    no%=no%+1 : alpha no% : parent no%,PanelTemp% : top no%,120 : left no%,5 : caption no%,"Nouvelle Hauteur:"
    no%=no%+1 : SpinH%=no% : spin no% : parent no%,PanelTemp% : top no%,top(no%-1)-5 : width no%,100 : left no%,180
                font_color no%,0,0,0 : position no%,Himg1%
    no%=no%+1 : BtVld%=no% : button no% : parent no%,PanelTemp% : top no%,275 : left no%,width(PanelTemp%)-90 : caption no%,"Valider"
                on_click no%,Continu
    no%=no%+1 : BtAbd%=no% : button no% : parent no%,PanelTemp% : top no%,275 : left no%,10 : caption no%,"Annuler"
                on_click no%,Quitte
    no%=no%+1 : alpha no% : parent no%,PanelTemp% : top no%,180 : left no%,5 : font_color no%,200,0,0
    a$="Si vous souhaitez conserver les proportions de l'image,"+chr$(13)+"renseignez uniquement une des 2 dimensions,"+chr$(13)+"et tapez 0 dans l'autre dimension."
    caption no%,a$
    end_if
    a$="" : while a$="" : end_while
END_SUB
Quitte:
    a$="OK" : terminate
RETURN
Continu:
    hide PanelTemp%
    a$="OK" : RedimImg(ImgOrigine$,position(SpinW%),position(SpinH%),NewImg$)
RETURN
SUB RedimImg(f$,w%,h%,fr$)
    a$=""
' message f$+" "+str$(w%)+" "+str$(h%)+" "+fr$ : stop
  ' Redimensionner l'image f$ (BMP ou JPG) en w% x h%, résultat dans fr$ (BMP)
  ' Si w% = 0 ou h% = 0: redimensionnement proportionnel
  DIM_LOCAL fm$,wi%,hi%,cx,cy,op%
  fm$ = FicTemp$
  op% = 1000: ' objet provisoire
  IF UPPER$(FILE_EXTRACT_EXTENSION$(f$)) = ".JPG"
      PICTURE op%: FILE_LOAD op%,f$: FILE_SAVE op%,fm$: DELETE op%: f$ = fm$
  END_IF
  FILEBIN_OPEN_READ 1,f$
      FILEBIN_POSITION 1,18: wi% = FILEBIN_READ(1)+256*FILEBIN_READ(1)
      FILEBIN_POSITION 1,22: hi% = FILEBIN_READ(1)+256*FILEBIN_READ(1)
  FILEBIN_CLOSE 1
  IF h% = 0
      h% = w%*hi%/wi%
  ELSE
      IF w% = 0 THEN w% = h%*wi%/hi%
  END_IF
  cx = w%/wi%: cy = h%/hi%
  SCENE2D op%: HIDE op%: WIDTH op%,w%: HEIGHT op%,h%
  SPRITE op%: SPRITE_FILE_LOAD op%,f$: SPRITE_SCALE op%,cx,cy
  SNAPSHOT op%,fr$
  DELETE op%: IF FILE_EXISTS(fm$) = 1 THEN FILE_DELETE fm$
  DIR_REMOVE RepTemp$
  message "Une nouvelle image ("+NewImg$+") a été créée aux dimensions demandées."+chr$(13)+chr$(13)+"Vous devez relancer le programme et la sélectionner pour continuer."
  TERMINATE
END_SUB
rem ============================================================================ ConvertJpgToBmp()
SUB ConvertJpgToBmp(f$,fr$)
  ' Conversion d'une image f$ (jpg) en fr$ (bmp)
  PICTURE 1000: HIDE 1000: FILE_LOAD 1000,f$: FILE_SAVE 1000,fr$: DELETE 1000
END_SUB
rem ============================================================================ SUB VideNewRep()
SUB Vide(Repertoire$)
 '  JL35, Minibug modifié JC
    DIR_CHANGE Repertoire$
    dim_local f$,extention1$,extention2$
    extention1$=".txt" : extention2$=".bmp"
    f$ = FILE_FIND_FIRST$
    WHILE f$ <> "_"
        IF f$ <> "." AND f$ <> ".."
          IF extention1$=FILE_EXTRACT_EXTENSION$(f$)
              file_delete f$
          END_IF
          IF extention2$=FILE_EXTRACT_EXTENSION$(f$)
              file_delete f$
          END_IF
        END_IF
        f$ = FILE_FIND_NEXT$
    END_WHILE
    FILE_FIND_CLOSE
END_SUB
SUB Sonde(Repertoire$)
    a$=""
    DIR_CHANGE Repertoire$
    a$ = FILE_FIND_FIRST$
    WHILE a$ <> "_"
        IF a$ <> "." AND a$ <> ".."
          EXIT_WHILE
        END_IF
        a$ = FILE_FIND_NEXT$
    END_WHILE
    FILE_FIND_CLOSE
END_SUB
rem ============================================================================ Start
Start:
  nblig%=val(text$(SpinLig%)) : nbcol%=val(text$(SpinCol%)) : ep%=val(text$(SpinEp%)) : hide panel1%
  dim Picture2% : no%=no%+1 : Picture2%=no% : PICTURE Picture2%
  width Picture2%,Wimg1%+ep% : height Picture2%,Himg1%+ep% : color Picture2%,cr%,cg%,cb%
  left Picture2%,2 : top Picture2%,2 : width 0,width(Picture2%)+20 : height 0,height(Picture2%)+44 : hide Picture2%
  top 0,(screen_y-height(0))/2 : left 0,(screen_x-width(0))/2
  caption 0,"Patientez SVP...."
  DecoupeImgOrigine(ImgOrigine$,NomFrag$,nblig%,nbcol%,Wimg1%,Himg1%,ep%)
  message "Découpe terminée"
  SHOW Picture2% : 2D_TARGET_IS Picture2%
  ReconstitueImgOrigine(NomFrag$,nblig%,nbcol%,ep%)
  caption 0,"New_"+ImgOrigine$
  dir_change Rep$
RETURN
rem ============================================================================ SUB RetourneLigColEp()
SUB RetourneLigColEp()
    dim panel1%,SpinLig%,SpinCol%,SpinEp%,BtValid%,BtAbandon%,cr%,cg%,cb%
    dim AlphaBl%,AlphaGc%,AlphaNo%,AlphaJa%,AlphaVe%,AlphaBc%,AlphaBf%,AlphaR%,AlphaRf%,AlphaRST%,AlphaV%
    label Start,Abandon,CouleurTrait
    no%=no%+1 : panel1%=no%: panel no% : font_bold no% : color no%,0,0,0 : font_color no%,100,255,255 : font_size no%,12
                width no%,400 : height no%,310 : top no%,(height(0)-height(no%))/2 : left no%,(width(0)-width(no%))/2
    no%=no%+1 : alpha no% : parent no%,panel1% : top no%,10 : left no%,5 : caption no%,string$(20," ")+"Options de découpage."
    no%=no%+1 : alpha no% : parent no%,panel1% : top no%,60 : left no%,5 : caption no%,"Nb  lignes:"
    no%=no%+1 : SpinLig%=no% : spin no% : parent no%,panel1% : top no%,top(no%-1)-5 : width no%,60 : left no%,120
                font_color no%,0,0,0 : position no%,5
    no%=no%+1 : alpha no% : parent no%,panel1% : top no%,120 : left no%,5 : caption no%,"Nb colonnes:"
    no%=no%+1 : SpinCol%=no% : spin no% : parent no%,panel1% : top no%,top(no%-1)-5 : width no%,60 : left no%,120
                font_color no%,0,0,0 : position no%,5
    no%=no%+1 : alpha no% : parent no%,panel1% : top no%,180 : left no%,5 : caption no%,"Epaisseur du trait:"
    no%=no%+1 : SpinEp%=no% : spin no% : parent no%,panel1% : top no%,top(no%-1)-5 : width no%,60 : left no%,160
                font_color no%,0,0,0 : position no%,1
    no%=no%+1 : BtValid%=no% : button no% : parent no%,panel1% : top no%,275 : left no%,width(panel1%)-90 : caption no%,"Valider"
                on_click no%,Start
    no%=no%+1 : BtAbandon%=no% : button no% : parent no%,panel1% : top no%,275 : left no%,15 : caption no%,"Annuler"
                on_click no%,Abandon
    no%=no%+1 : AlphaBl%=no% :alpha no% : parent no%,panel1% : top no%,230 : left no%,10 : caption no%,chr$(169)
                font_color no%,255,255,255 : font_size no%,14 : on_click no%,CouleurTrait
    no%=no%+1 : AlphaGc%=no% :alpha no% : parent no%,panel1% : top no%,230 : left no%,left(no%-1)+35 : caption no%,chr$(169)
                font_color no%,150,150,150 : font_size no%,14 : on_click no%,CouleurTrait
    no%=no%+1 : AlphaNo%=no% :alpha no% : parent no%,panel1% : top no%,230 : left no%,left(no%-1)+35 : caption no%,chr$(169)
                color no%,255,255,255 :font_color no%,0,0,0 : font_size no%,14 : on_click no%,CouleurTrait
    no%=no%+1 : AlphaJa%=no% :alpha no% : parent no%,panel1% : top no%,230 : left no%,left(no%-1)+35 : caption no%,chr$(169)
                font_color no%,255,255,0 : font_size no%,14 : on_click no%,CouleurTrait
    no%=no%+1 : AlphaVe%=no% :alpha no% : parent no%,panel1% : top no%,230 : left no%,left(no%-1)+35 : caption no%,chr$(169)
                font_color no%,55,255,55: font_size no%,14 : on_click no%,CouleurTrait
    no%=no%+1 : AlphaBc%=no% :alpha no% : parent no%,panel1% : top no%,230 : left no%,left(no%-1)+35 : caption no%,chr$(169)
                font_color no%,55,255,255: font_size no%,14 : on_click no%,CouleurTrait
    no%=no%+1 : AlphaBf%=no% :alpha no% : parent no%,panel1% : top no%,230 : left no%,left(no%-1)+35 : caption no%,chr$(169)
                font_color no%,0,125,255: font_size no%,14 : on_click no%,CouleurTrait
    no%=no%+1 : AlphaR%=no% :alpha no% : parent no%,panel1% : top no%,230 : left no%,left(no%-1)+35 : caption no%,chr$(169)
                font_color no%,255,0,0 : font_size no%,14 : on_click no%,CouleurTrait
    no%=no%+1 : AlphaRf%=no% :alpha no% : parent no%,panel1% : top no%,230 : left no%,left(no%-1)+35 : caption no%,chr$(169)
                font_color no%,100,0,0 : font_size no%,14 : on_click no%,CouleurTrait
    no%=no%+1 : AlphaV%=no% :alpha no% : parent no%,panel1% : top no%,230 : left no%,left(no%-1)+35 : caption no%,chr$(169)
                font_color no%,255,0,255 : font_size no%,14 : on_click no%,CouleurTrait
    no%=no%+1 : AlphaRST%=no% :alpha no% : parent no%,panel1% : top no%,230 : left no%,left(no%-1)+40 : caption no%," "+chr$(169)+" "
                color no%,205,235,255 : font_size no%,14
gosub CouleurTrait
END_SUB
CouleurTrait:
cr%=150 : cg%=150 : cb%=150
if number_click=AlphaBl% then cr%=255 : cg%=255 : cb%=255
if number_click=AlphaGc% then cr%=150 : cg%=150 : cb%=150
if number_click=AlphaNo% then cr%=0 : cg%=0 : cb%=0
if number_click=AlphaJa% then cr%=255 : cg%=255 : cb%=0
if number_click=AlphaVe% then cr%=55 : cg%=255 : cb%=55
if number_click=AlphaBc% then cr%=55 : cg%=255 : cb%=255
if number_click=AlphaBf% then cr%=0 : cg%=125 : cb%=255
if number_click=AlphaR% then cr%=255 : cg%=0 : cb%=0
if number_click=AlphaRf% then cr%=100 : cg%=0 : cb%=0
if number_click=AlphaV% then cr%=255 : cg%=0 : cb%=255
font_color AlphaRST%,cr%,cg%,cb%
RETURN
Abandon:
  terminate
RETURN
rem ============================================================================ SUB RetourneTailleIMG
SUB RetourneTailleIMG(ImgOr$)
    dim_local Wl,Hl
    FILEBIN_OPEN_READ 1,ImgOr$: ' dimensions de l'image -> wi1%, hi1% (JL35)
        FILEBIN_POSITION 1,18: Wl = FILEBIN_READ(1)+256*FILEBIN_READ(1)
        FILEBIN_POSITION 1,22: Hl = FILEBIN_READ(1)+256*FILEBIN_READ(1)
    FILEBIN_CLOSE 1
    if frac(Wl)>0.4
      Wimg1%=int(Wl)+1
    else
      Wimg1%=int(Wl)
    end_if
    if frac(Hl)>0.4
      Himg1%=int(Hl)+1
    else
      Himg1%=int(Hl)
    end_if
END_SUB
rem ============================================================================ SUB ReconstitueImgOrigine
SUB ReconstitueImgOrigine(NomImg$,nbl%,nbc%,pw%)
    dim_local nx%,ny%,ni%,numi$,Limg$,px%,py%,wi2%,hi2%
    wi2%=Wimg1%/nbc% : hi2%=Himg1%/nbl%
    px%=0-wi2%
    for ny%=1 to nbl%
        for nx%=1 to nbc%
            ni%=ni%+1
            if ni%<10 then numi$="00"+str$(ni%)
            if ni%<100 and ni%>9 then numi$="0"+str$(ni%)
            if ni%>99 then numi$=str$(ni%)
            Limg$=NomImg$+numi$+".bmp"
            no%=no%+1 : IMAGE no% : FILE_LOAD no%,Limg$
            px%=px%+wi2% : 2D_IMAGE_PASTE no%,px%+pw%,py%+pw% : DELETE no%
        next nx%
        px%=0-wi2% : py%=py%+hi2%
    next ny%
  file_save Picture2%,"New_"+ImgOrigine$
END_SUB
rem ============================================================================ SUB DecoupeImgOrigine
SUB DecoupeImgOrigine(ImgOr$,NomImg$,nbl%,nbc%,wi1%,hi1%,pw%)
'    if (nbl%*nbc%)>100 then message "Nombre d'images résultantes: maximum autorisé = 100" : stop : terminate
    dim_local px%,py%,nx%,ny%,ni%,numi$,Img2$,wi2%,hi2%
    wi2%=Wimg1%/nbc% : hi2%=Himg1%/nbl%
    px%=0-wi2%
    for ny%=1 to nbl%
      for nx%=1 to nbc%
          ni%=ni%+1
          if ni%<10 then numi$="00"+str$(ni%)
          if ni%<100 and ni%>9 then numi$="0"+str$(ni%)
          if ni%>99 then numi$=str$(ni%)
          Img2$=NomImg$+numi$+".bmp" : px%=px%+wi2% : Crop(ImgOr$,Img2$,px%,py%,wi2%,hi2%,pw%)
          item_add Dlist1%,Img2$+"|"+str$(px%)+"|"+str$(py%)+"|"+str$(wi2%)+"|"+str$(hi2%)
      next nx%
      px%=0-wi2% : py%=py%+hi2%
    next ny%

    ' remplacer le fichier
    item_add Dlist1%,ImgOr$+"|"+str$(nbl%)+"|"+str$(nbc%)+"|"+str$(wi1%)+"|"+str$(hi1%)+"|"+str$(pw%)+"|"+str$(cr%)+"|"+str$(cg%)+"|"+str$(cb%)
    file_open_write 1,"Elements_"+left$(ImgOr$,len(ImgOr$)-4)+".txt" : file_close 1
    file_save Dlist1%,"Elements_"+left$(ImgOr$,len(ImgOr$)-4)+".txt"
END_SUB
SUB Crop(f1$,f2$,x%,y%,w%,h%,pw%)
    ' JL35 modifiée JC
    DIM_LOCAL s2d%,p%,i%
    s2d% = NUMBER_2D_TARGET
    p%=1000: WHILE OBJECT_EXISTS(p%)=1: p%=p%+1: END_WHILE
    i%=p%+1: WHILE OBJECT_EXISTS(i%)=1: i%=i%+1: END_WHILE
    PICTURE p%: HIDE p%: IMAGE i%
    dir_change Rep$
    FILE_LOAD p%,f1$: 2D_TARGET_IS p%: 2D_IMAGE_COPY i%,x%,y%,x%+w%-pw%,y%+h%-pw%
    WIDTH p%,w%-pw%: HEIGHT p%,h%-pw% : 2D_IMAGE_PASTE i%,0,0
    dir_change NewRep$
    FILE_SAVE p%,f2$ :2D_TARGET_IS s2d% : DELETE i%: DELETE p%
END_SUB
rem ============================================================================

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

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

MessageSujet: Re: Utilitaire Découpe d'une image   Dim 28 Jan 2018 - 13:55

Bonjours à tous,

JL35 (un peu plus haut) a écrit:
Mais... tu dois bien avoir une idée derrière la tête de ce que tu fais ensuite de tes découpes d'images ?

j'avais répondu exact.

Je confirme: l'idée, c'est un jeu 2D.
Je viens de terminer la phase de test, qui découle de mon découpage, et j'ai constaté que tout ça est exploitable.

Ce jeu en 2D est commencé, c'est une ébauche, mais il est loin d'être terminé.

Juste pour vous faire trépigner d'impatiente ( bounce ) je vous dévoile l'idée générale:

César est très content de son empire, MAIS il reste ces irréductibles gaulois dont le chef se nomme Abraracourcix, qui l'empêchent de finaliser son empire. Alors, il tente de mettre au pas ces satanés gaulois, mais c'est sans compter sur leur secret ..........

Maintenant que je vous ai mis l'eau à la bouche, je vous dit: à je ne sais pas quand !  Razz
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5929
Age : 46
Localisation : 77500
Date d'inscription : 18/04/2011

MessageSujet: Re: Utilitaire Découpe d'une image   Lun 29 Jan 2018 - 8:28

Bon courage, par Toutatis
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Marc

avatar

Nombre de messages : 865
Age : 57
Localisation : TOURS
Date d'inscription : 17/03/2014

MessageSujet: Re: Utilitaire Découpe d'une image   Lun 29 Jan 2018 - 11:39

Bonjour à tous !

cheers Bravo Jean-Claude cheers
J'ai testé ton massicot automatique d'image.
Il est parfaitement affûté !
Belle réalisation !

Pour la suite, si je peux me permettre, voici un petit coup de main :

Spoiler:
 

Merci et bon courage !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

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

MessageSujet: Re: Utilitaire Découpe d'une image   Lun 29 Jan 2018 - 20:38

lol!

Justement ! je vais en avoir besoin de cette potion magique Razz

J'avance à petit pas, faute de temps pour la programmation, mais ça viendra en son temps.

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Utilitaire Découpe d'une image   

Revenir en haut Aller en bas
 
Utilitaire Découpe d'une image
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Probleme Media Center - Image se fige
» coupure son et image qui se bloque sur la bbox tv
» PGX, coupe faim
» Image défilante
» création d' une image pour tagger

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: