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
» Gestion d'un système client-serveur.
Utilitaire Découpe d'une image Emptypar Klaus Ven 17 Mai 2024 - 14:02

» item_index(résolu)
Utilitaire Découpe d'une image Emptypar jjn4 Mar 14 Mai 2024 - 19:38

» Bataille terrestre
Utilitaire Découpe d'une image Emptypar jjn4 Lun 13 Mai 2024 - 15:01

» SineCube
Utilitaire Découpe d'une image Emptypar Marc Sam 11 Mai 2024 - 12:38

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Utilitaire Découpe d'une image Emptypar Marc Sam 11 Mai 2024 - 12:22

» Philharmusique
Utilitaire Découpe d'une image Emptypar jjn4 Ven 10 Mai 2024 - 13:58

» PANORAMIC V 1
Utilitaire Découpe d'une image Emptypar papydall Jeu 9 Mai 2024 - 3:22

» select intégrés [résolu]
Utilitaire Découpe d'une image Emptypar jjn4 Mer 8 Mai 2024 - 17:00

» number_mouse_up
Utilitaire Découpe d'une image Emptypar jjn4 Mer 8 Mai 2024 - 11:59

» Aide de PANORAMIC
Utilitaire Découpe d'une image Emptypar jjn4 Mer 8 Mai 2024 - 11:16

» trop de fichiers en cours
Utilitaire Découpe d'une image Emptypar lepetitmarocain Mer 8 Mai 2024 - 10:43

» Je teste PANORAMIC V 1 beta 1
Utilitaire Découpe d'une image Emptypar papydall Mer 8 Mai 2024 - 4:17

» bouton dans autre form que 0(résolu)
Utilitaire Découpe d'une image Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
Utilitaire Découpe d'une image Emptypar Klaus Lun 6 Mai 2024 - 11:41

» @Jack
Utilitaire Découpe d'une image Emptypar Jack Mar 30 Avr 2024 - 20:40

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 :
Funko POP! Jumbo One Piece Kaido Dragon Form : ...
Voir le deal

 

 Utilitaire Découpe d'une image

Aller en bas 
+2
JL35
Jean Claude
6 participants
AuteurMessage
Jean Claude

Jean Claude


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

Utilitaire Découpe d'une image Empty
MessageSujet: Utilitaire Découpe d'une image   Utilitaire Découpe d'une image EmptyMer 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 => https://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
Jean Claude

Jean Claude


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

Utilitaire Découpe d'une image Empty
MessageSujet: Re: Utilitaire Découpe d'une image   Utilitaire Découpe d'une image EmptyMer 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
JL35




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

Utilitaire Découpe d'une image Empty
MessageSujet: Re: Utilitaire Découpe d'une image   Utilitaire Découpe d'une image EmptyMer 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
Jean Claude

Jean Claude


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

Utilitaire Découpe d'une image Empty
MessageSujet: Re: Utilitaire Découpe d'une image   Utilitaire Découpe d'une image EmptyMer 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
JL35




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

Utilitaire Découpe d'une image Empty
MessageSujet: Re: Utilitaire Découpe d'une image   Utilitaire Découpe d'une image EmptyMer 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
Jean Claude

Jean Claude


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

Utilitaire Découpe d'une image Empty
MessageSujet: Re: Utilitaire Découpe d'une image   Utilitaire Découpe d'une image EmptyMer 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
JL35




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

Utilitaire Découpe d'une image Empty
MessageSujet: Re: Utilitaire Découpe d'une image   Utilitaire Découpe d'une image EmptyMer 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
Jean Claude

Jean Claude


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

Utilitaire Découpe d'une image Empty
MessageSujet: Re: Utilitaire Découpe d'une image   Utilitaire Découpe d'une image EmptyJeu 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
silverman

silverman


Nombre de messages : 968
Age : 51
Localisation : Picardie
Date d'inscription : 18/03/2015

Utilitaire Découpe d'une image Empty
MessageSujet: Re: Utilitaire Découpe d'une image   Utilitaire Découpe d'une image EmptyJeu 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
Jean Claude

Jean Claude


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

Utilitaire Découpe d'une image Empty
MessageSujet: Re: Utilitaire Découpe d'une image   Utilitaire Découpe d'une image EmptyJeu 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
Jean Claude

Jean Claude


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

Utilitaire Découpe d'une image Empty
MessageSujet: Re: Utilitaire Découpe d'une image   Utilitaire Découpe d'une image EmptyVen 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
Jean Claude

Jean Claude


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

Utilitaire Découpe d'une image Empty
MessageSujet: Re: Utilitaire Découpe d'une image   Utilitaire Découpe d'une image EmptyDim 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
Jicehel

Jicehel


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

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

Bon courage, par Toutatis
Revenir en haut Aller en bas
Marc

Marc


Nombre de messages : 2397
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Utilitaire Découpe d'une image Empty
MessageSujet: Re: Utilitaire Découpe d'une image   Utilitaire Découpe d'une image EmptyLun 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
Jean Claude

Jean Claude


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

Utilitaire Découpe d'une image Empty
MessageSujet: Re: Utilitaire Découpe d'une image   Utilitaire Découpe d'une image EmptyLun 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
mindstorm

mindstorm


Nombre de messages : 685
Age : 55
Localisation : charente
Date d'inscription : 13/02/2013

Utilitaire Découpe d'une image Empty
MessageSujet: Re: Utilitaire Découpe d'une image   Utilitaire Découpe d'une image EmptySam 4 Juil 2020 - 22:30

Bonsoir à tous
Jean Claude, je ne sais pas ou en est ton jeu mais tu me donne un sacré coup de pouce pour mon projet.
Et vue ma lenteur en programmation...
Je souhaite faire un afficheur dynamique pour "Fly Simulator" et il faut découper l'image en pièces de 64x64.
et voici le test:
Utilitaire Découpe d'une image 8047fcc2515ea6a46fffe121f5023610
Il me reste à comprendre comment fonctionne le programme (c'est la moindre des choses Embarassed )
et faire quelques adaptation spécifiques.
Un Très grand merci
Revenir en haut Aller en bas
Contenu sponsorisé





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

Revenir en haut Aller en bas
 
Utilitaire Découpe d'une image
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Découpe dans une image
» Découpe dans une image
» Récupérer l'image d'un IMAGE dans un picture
» image copy image paste
» Lanceur multiple pour un programme découpé.

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: