JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Bricoler des images Jeu 25 Aoû 2016 - 22:40 | |
| Pour meubler un peu le silence ambiant... Deux petites subs qui permettent: - d'assembler deux images côte à côte en une seule, avec un intervalle éventuel, réglable. Les images peuvent être de tailles différentes, l'ajustage se fera automatiquement sur la plus grande. Le sens d'assemblage peut être horizontal ou vertical. - de rogner une partie d'image d'un nombre de pixels donné (en vue d'assemblage ?). Le rognage se fait au choix en haut, en bas, à gauche ou à droite de l'image. Les images d'origine peuvent être au format BMP ou JPG, l'image résultat sera obligatoirement au format BMP (Panoramic ne sait pas sauvegarder dans un autre format, le code est tout en panoramic). - Code:
-
DIM f1$,f2$,fr$,e%,n% f1$ = "C:\TEMP\i1.jpg" f2$ = "C:\GRAPH\JPG\Goldgate.jpg" fr$ = "Z:\Result.bmp" e% = 0 n% = 40 Rogner(f2$,"D",n%,fr$) ' Assemble(f2$,f1$,"V",e%,fr$) Message "Terminé !" Terminate ' ============================================================================== SUB Assemble(f1$,f2$,sens$,e%,fr$) ' Assembler deux images f1$ et f2$ ' horizontalement (sens$="H") ou verticalement (sens$="V") ' écart e% pixels ' Résultat dans fr$ (image bmp) DIM_LOCAL fm$,w1%,h1%,w2%,h2%,w%,h%,x%,y% fm$ = "C:\TEMP\Provy.bmp" FORM 900: HIDE 900 PICTURE 901: PARENT 901,900: ' manoeuvre PICTURE 902: PARENT 902,900: ' image finale IMAGE 903 FILE_LOAD 901,f1$: FILE_SAVE 901,fm$ FILEBIN_OPEN_READ 1,fm$: ' dimensions image 1 FILEBIN_POSITION 1,18: w1% = FILEBIN_READ(1)+256*FILEBIN_READ(1) FILEBIN_POSITION 1,22: h1% = FILEBIN_READ(1)+256*FILEBIN_READ(1) FILEBIN_CLOSE 1 FILE_LOAD 901,f2$: FILE_SAVE 901,fm$ FILEBIN_OPEN_READ 1,fm$: ' dimensions image 2 FILEBIN_POSITION 1,18: w2% = FILEBIN_READ(1)+256*FILEBIN_READ(1) FILEBIN_POSITION 1,22: h2% = FILEBIN_READ(1)+256*FILEBIN_READ(1) FILEBIN_CLOSE 1 FILE_DELETE fm$ IF sens$ = "H" w% = w1%+w2%+e%: h% = MAX(h1%,h2%) x% = w1%+e%: y% = 0 ELSE w% = MAX(w1%,w2%): h% = h1%+h2%+e% x% = 0: y% = h1%+e% END_IF WIDTH 902,w%: HEIGHT 902,h% FILE_LOAD 901,f1$: CLIPBOARD_COPY 901: CLIPBOARD_PASTE 903 2D_TARGET_IS 902: 2D_IMAGE_PASTE 903,0,0 FILE_LOAD 901,f2$: CLIPBOARD_COPY 901: CLIPBOARD_PASTE 903 2D_TARGET_IS 902: 2D_IMAGE_PASTE 903,x%,y% FILE_SAVE 902,fr$ 2D_TARGET_IS 0: DELETE 900: DELETE 903 END_SUB ' ============================================================================== SUB Rogner(f$,sens$,n%,fr$) ' Rogner n% pixels d'une image f$ ' en haut (sens$="H"), en bas ("B"), à gauche ("G") ou à droite ("D") ' Résultat dans fr$ (BMP) DIM_LOCAL fm$,w%,h%,x%,y%,wp%,hp% fm$ = "C:\TEMP\Provy.bmp" FORM 900: HIDE 900 PICTURE 901: PARENT 901,900 IMAGE 902 FILE_LOAD 901,f$: FILE_SAVE 901,fm$ FILEBIN_OPEN_READ 1,fm$: ' dimensions de l'image FILEBIN_POSITION 1,18: w% = FILEBIN_READ(1)+256*FILEBIN_READ(1) FILEBIN_POSITION 1,22: h% = FILEBIN_READ(1)+256*FILEBIN_READ(1) FILEBIN_CLOSE 1 2D_TARGET_IS 901 IF sens$ = "H": ' rogner en haut 2D_IMAGE_COPY 902,0,n%,w%,h%: wp% = w%: hp% = h%-n% ELSE IF sens$ = "B": ' rogner en bas 2D_IMAGE_COPY 902,0,0,w%,h%-n%: wp% = w%: hp% = h%-n% ELSE IF sens$ = "G": ' rogner à gauche 2D_IMAGE_COPY 902,n%,0,w%,h%: wp% = w%-n%: hp% = h% ELSE: ' "D" rogner à droite 2D_IMAGE_COPY 902,0,0,w%-n%,h%: wp% = w%-n%: hp% = h% END_IF END_IF END_IF CLS: WIDTH 901,wp%: HEIGHT 901,hp%: 2D_IMAGE_PASTE 902,0,0 FILE_SAVE 901,fr$ 2D_TARGET_IS 0: DELETE 900: DELETE 902 END_SUB ' ============================================================================== Les exemples sont à adapter. On peut évidemment assembler des images de proche en proche, pour faire par exemple un panoramic... euh, un panoramique, en rognant les parties qui se chevauchent. | |
|