Mai 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | Calendrier |
|
| | Utilitaire Découpe d'une image | |
| | Auteur | Message |
---|
Jean Claude
Nombre de messages : 5950 Age : 69 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: 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 => https://panoramic.1fr1.net/t5595-fabgrilleforimage-bas#68275Cet 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) | |
| | | Jean Claude
Nombre de messages : 5950 Age : 69 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: 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 ) 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+ | |
| | | JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: 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 ? | |
| | | Jean Claude
Nombre de messages : 5950 Age : 69 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Utilitaire Découpe d'une image Mer 24 Jan 2018 - 20:57 | |
| JL35 est un devin ... Une idée derrière la tête? comment tu as deviné ? . 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. et j'ai un gros chantier qui m'attend dans les mois à venir (la salle de bain ). Le chantier fini, ce sera l'été , alors tu peux comprendre que, dans ma région, c'est interdit aux retraités de travailler 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+ | |
| | | JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: 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 ! | |
| | | Jean Claude
Nombre de messages : 5950 Age : 69 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Utilitaire Découpe d'une image Mer 24 Jan 2018 - 21:29 | |
| Mon dieu que c'est simple 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. A+ | |
| | | JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: 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 ! | |
| | | Jean Claude
Nombre de messages : 5950 Age : 69 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: 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. - 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+ | |
| | | silverman
Nombre de messages : 968 Age : 51 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: 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) | |
| | | Jean Claude
Nombre de messages : 5950 Age : 69 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: 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 ) Merci pour tes conseils. A+ | |
| | | Jean Claude
Nombre de messages : 5950 Age : 69 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: 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+ | |
| | | Jean Claude
Nombre de messages : 5950 Age : 69 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: 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 ( ) 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 ! | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Utilitaire Découpe d'une image Lun 29 Jan 2018 - 8:28 | |
| Bon courage, par Toutatis | |
| | | Marc
Nombre de messages : 2397 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Utilitaire Découpe d'une image Lun 29 Jan 2018 - 11:39 | |
| Bonjour à tous ! Bravo Jean-Claude 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 ! | |
| | | Jean Claude
Nombre de messages : 5950 Age : 69 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Utilitaire Découpe d'une image Lun 29 Jan 2018 - 20:38 | |
| Justement ! je vais en avoir besoin de cette potion magique J'avance à petit pas, faute de temps pour la programmation, mais ça viendra en son temps. A+ | |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: Utilitaire Découpe d'une image Sam 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: Il me reste à comprendre comment fonctionne le programme (c'est la moindre des choses ) et faire quelques adaptation spécifiques. Un Très grand merci | |
| | | Contenu sponsorisé
| Sujet: Re: Utilitaire Découpe d'une image | |
| |
| | | | Utilitaire Découpe d'une image | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |