FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» A propos des attributs de fichier
par Oscaribout Aujourd'hui à 1:53

» Problème de math
par Marc37 Hier à 23:04

» Problème de math
par braveen Hier à 21:40

» I Love You
par papydall Hier à 19:22

» Un petit "coucou" à tous les Panoramiciens !
par mindstorm Hier à 17:06

» MARK_ON déclenche un événement ON_CLICK à la place de ...
par Jean Claude Mer 18 Oct 2017 - 18:08

» mise a jour calculatrice
par joeeee2017 Mer 18 Oct 2017 - 15:57

» [solved] 3D_LINE How to ?
par Jicehel Mer 18 Oct 2017 - 11:01

» Convertisseur de base 10 de 2 à 36
par gigi75 Mar 17 Oct 2017 - 18:49

» calculatrice avec touches movibles
par joeeee2017 Dim 15 Oct 2017 - 1:11

» CORTANA
par gigi75 Sam 14 Oct 2017 - 16:32

» Calculatrice
par Jean Claude Sam 14 Oct 2017 - 12:30

» Compilateur FBPano
par jean_debord Jeu 12 Oct 2017 - 9:53

» KGF_dll - nouvelles versions
par Klaus Mar 10 Oct 2017 - 18:49

» à propos de Panoramic_Editor [Résolu]
par Klaus Mar 10 Oct 2017 - 3:19

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Octobre 2017
LunMarMerJeuVenSamDim
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
CalendrierCalendrier

Partagez | 
 

 Assemblage d'images

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
JL35



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

MessageSujet: Assemblage d'images   Jeu 13 Mar 2014 - 16:59

Pour regrouper plusieurs (jusqu'à 4) images en une seule, horizontalement ou verticalement (genre panorama).
On peut soit laisser leurs dimensions d'origine aux images, soit les redimensionner à la plus grande hauteur (assemblage horizontal) ou largeur (assemblage vertical).
On peut également ajuster l'espacement entre images.
Par exemple (images avec leurs dimensions d'origine, espacement 20 pixels):
ou (images redimensionnées: bouton 'Égaliser')
(pour les curieux, les deux premières sont des tableaux de Gustave Caillebotte (1848-1894), la troisième c'est moi en vacances mais je n'arrive pas à me rappeler où, en tout cas il y avait du soleil.
Code:
LABEL Chf, Svf, Apercu, Exec, Egal
DIM a$, f$(10), wi%, hi%, w%(10), h%(10), wt%, ht%, i%, j%, sens%, nbi%, ecart%
DIM wa%, ha%, x1%, y1%, x2%, y2%, i1%, i2%, i3%, i4%, rap, tmp$, res%
DIM xp%,yp%,p%(10)

WIDTH 0,916: HEIGHT 0,970: COLOR 0,164,255,255: FONT_BOLD 0: BORDER_SMALL 0
CAPTION 0, "  -  ASSEMBLAGE  D' IMAGES  -"
i%=10
ALPHA i%: TOP i%,10: LEFT i%,5: CAPTION i%," Image 1: ": COLOR i%,255,255,0
EDIT i%+1: TOP i%+1,TOP(i%)-5: LEFT i%+1,60: WIDTH i%+1,430: ON_CLICK i%+1,Chf
ALPHA i%+2: TOP i%+2,TOP(i%): LEFT i%+2,LEFT(i%+1)+WIDTH(i%+1)+5
i% = 13
ALPHA i%: TOP i%,TOP(i%-1)+25: LEFT i%,5: CAPTION i%," Image 2: ": COLOR i%,255,255,0
EDIT i%+1: TOP i%+1,TOP(i%)-5: LEFT i%+1,60: WIDTH i%+1,430: ON_CLICK i%+1,Chf
ALPHA i%+2: TOP i%+2,TOP(i%): LEFT i%+2,LEFT(i%+1)+WIDTH(i%+1)+5
i% = 16
ALPHA i%: TOP i%,TOP(i%-1)+25: LEFT i%,5: CAPTION i%," Image 3: ": COLOR i%,255,255,0
EDIT i%+1: TOP i%+1,TOP(i%)-5: LEFT i%+1,60: WIDTH i%+1,430: ON_CLICK i%+1,Chf
ALPHA i%+2: TOP i%+2,TOP(i%): LEFT i%+2,LEFT(i%+1)+WIDTH(i%+1)+5
i% = 19
ALPHA i%: TOP i%,TOP(i%-1)+25: LEFT i%,5: CAPTION i%," Image 4: ": COLOR i%,255,255,0
EDIT i%+1: TOP i%+1,TOP(i%)-5: LEFT i%+1,60: WIDTH i%+1,430: ON_CLICK i%+1,Chf
ALPHA i%+2: TOP i%+2,TOP(i%): LEFT i%+2,LEFT(i%+1)+WIDTH(i%+1)+5

i% = 22
ALPHA i%: TOP i%,TOP(i%-1)+25: LEFT i%,5: CAPTION i%," Sauvegarder sous: ": COLOR i%,255,255,0
EDIT i%+1: TOP i%+1,TOP(i%)-5: LEFT i%+1,120: WIDTH i%+1,370: ON_CLICK i%+1,Svf
ALPHA i%+2: TOP i%+2,TOP(i%): LEFT i%+2,LEFT(i%+1)+WIDTH(i%+1)+5

BUTTON 26: TOP 26,5: LEFT 26,LEFT(12)+80: WIDTH 26,70: HEIGHT 26,100
CAPTION 26,"<- Égaliser": ON_CLICK 26,Egal

CONTAINER_OPTION 30: TOP 30,5: LEFT 30,WIDTH(11)+260: WIDTH 30,180: HEIGHT 30,40
CAPTION 30,"Assemblage:": COLOR 30,255,255,190
OPTION 31: PARENT 31,30: TOP 31,15: LEFT 31,10: WIDTH 31,80: CAPTION 31,"Horizontal"
OPTION 32: PARENT 32,30: TOP 32,TOP(31): LEFT 32,100: WIDTH 32,80: CAPTION 32,"Vertical"
MARK_ON 31
ALPHA 35: TOP 35,60: LEFT 35,LEFT(30): CAPTION 35," Espacement:              pixels"
COLOR 35,255,255,0
SPIN 36: TOP 36,TOP(35)-3: LEFT 36,LEFT(35)+80: WIDTH 36,50
BUTTON 40: TOP 40,90: LEFT 40,LEFT(35): CAPTION 40,"Aperçu": ON_CLICK 40,Apercu
BUTTON 41: TOP 41,TOP(40): LEFT 41,LEFT(40)+80: CAPTION 41,"Exec": ON_CLICK 41,Exec

xp% = 0: yp% = 134
PICTURE 60: TOP 60,yp%: LEFT 60,xp%: WIDTH 60,900: HEIGHT 60,800
2D_TARGET_IS 60: 2D_FILL_COLOR 0,0,0: 2D_FILL_DIAGONAL_UP: 2D_RECTANGLE 0,0,WIDTH(60),HEIGHT(60)
PICTURE 61: TOP 61,-5000: HIDE 61: ' pour l'image résultat
PICTURE 62: LEFT 62,-5000: HIDE 62: ' picture de stockage auxiliaire
IMAGE 63
p%(1) = 80: PICTURE p%(1): TOP p%(1),TOP(60): HIDE p%(1): STRETCH_ON p%(1)
FOR i% = 2 TO 4
    p%(i%) = p%(i%-1)+1: PICTURE p%(i%): TOP p%(i%),TOP(60): HIDE p%(i%)
    STRETCH_ON p%(i%)
NEXT i%: ' pictures réservés

OPEN_DIALOG 100
SAVE_DIALOG 101

DLL_ON "C:\PANORAMIC\KLAUS\DLLs\KGF.dll"
tmp$ = "Z:\": ' répertoire de travail temporaire

END
' ==============================================================================
Chf:
a$ = FILE_NAME$(100): IF LEN(a$)<4 THEN RETURN
i% = DLL_CALL3("AnalyzeImageFile",ADR(a$),ADR(wi%),ADR(hi%))
j% = NUMBER_CLICK
i% = INT(j%/4)-1: ' n° d'image
f$(i%) = a$: w%(i%) = wi%: h%(i%) = hi%
TEXT j%,a$: CAPTION j%+1,STR$(wi%)+" x " + STR$(hi%)
nbi% = 0
FOR i% = 1 TO 4
    IF FILE_EXISTS(f$(i%)) = 1 THEN nbi% = nbi%+1
NEXT i%
RETURN
' ==============================================================================
Svf:
a$ = FILE_NAME$(101): IF LEN(a$)<4 THEN RETURN
TEXT 23,a$
CLIPBOARD_COPY 61: i% = DLL_CALL1("SaveAnyImageFile",ADR(a$))
RETURN
' ==============================================================================
Apercu:
IF f$(1) = "" OR f$(2) = "" THEN MESSAGE "Manque au moins un fichier image !": RETURN
nbi% = 0
FOR i% = 11 TO 20 STEP 3
    a$ = TEXT$(i%)
    IF FILE_EXISTS(a$) = 1 THEN nbi% = nbi%+1
NEXT i%
sens% = 0: IF CHECKED(32) = 1 THEN sens% = 1
' dimensions totales
wt% = 0: ht% = 0
ecart% = POSITION(36)
IF sens% = 0
    FOR i% = 1 TO nbi%
        wt% = wt% + w%(i%) + ecart%
        IF h%(i%) > ht% THEN ht% = h%(i%)
    NEXT i%
    wt% = wt% - ecart%
ELSE
    FOR i% = 1 TO nbi%
        ht% = ht% + h%(i%) + ecart%
        IF w%(i%) > wt% THEN wt% = w%(i%)
    NEXT i%
    ht% = ht% - ecart%
END_IF
CAPTION 24, STR$(wt%) + " x " + STR$(ht%)
FOR i% = 1 TO 4: HIDE p%(i%): NEXT i%
2D_TARGET_IS 60: 2D_FILL_COLOR 0,0,0: 2D_FILL_DIAGONAL_UP
2D_RECTANGLE 0,0,WIDTH(60),HEIGHT(60)
IF wt% > ht%
    wa% = WIDTH(60): ha% = wa%*ht%/wt%: rap = wa%/wt%
    2D_FILL_COLOR 255,255,255: 2D_PEN_COLOR 192,192,192
    2D_RECTANGLE 0,0,wa%,ha%: ' fond d'image résultante
    x1% = 0: y1% = 0: x2% = w%(1)*wa%/wt%: y2% = h%(1)*rap: ' image 1
    TOP p%(1),TOP(60)+y1%: LEFT p%(1),x1%: WIDTH p%(1),x2%: HEIGHT p%(1),y2%
    FILE_LOAD p%(1),f$(1): SHOW p%(1)
    FOR i% = 2 TO nbi%
        x1% = x2%+ecart%*rap: y1% = 0: x2% = x1%+w%(i%)*rap: y2% = h%(i%)*rap
        TOP p%(i%),TOP(60)+y1%: LEFT p%(i%),x1%: WIDTH p%(i%),w%(i%)*rap
        HEIGHT p%(i%),h%(i%)*rap
        FILE_LOAD p%(i%),f$(i%): SHOW p%(i%)
    NEXT i%
ELSE
    ha% = HEIGHT(60): wa% = ha%*wt%/ht% : rap = ha%/ht%
    2D_FILL_COLOR 255,255,255: 2D_PEN_COLOR 192,192,192
    2D_RECTANGLE 0,0,wa%,ha%: ' fond d'image résultante
    x1% = 0: y1% = 0: x2% = w%(1)*ha%/ht%: y2% = h%(1)*rap: ' image 1
    TOP p%(1),TOP(60)+y1%: LEFT p%(1),x1%: WIDTH p%(1),x2%: HEIGHT p%(1),y2%
    FILE_LOAD p%(1),f$(1): SHOW p%(1)
    FOR i% = 2 TO nbi%
        x1% = 0: y1% = y2%+ecart%*rap: x2% = w%(i%)*rap: y2% = y1%+h%(i%)*rap
        TOP p%(i%),TOP(60)+y1%: LEFT p%(i%),x1%: WIDTH p%(i%),w%(i%)*rap
        HEIGHT p%(i%),h%(i%)*rap
        FILE_LOAD p%(i%),f$(i%): SHOW p%(i%)
    NEXT i%
END_IF
RETURN
' ==============================================================================
Exec:
IF wt% = 0 OR ht% = 0
    GOSUB Apercu
    IF wt% = 0 OR ht% = 0 THEN RETURN
END_IF
WIDTH 61,wt%: HEIGHT 61,ht%

a$ = f$(1)
i% = DLL_CALL1("LoadAnyImageFile",ADR(a$)): ' -> clipboard
WIDTH 62,w%(1): HEIGHT 62,h%(1)
2D_TARGET_IS 62
CLIPBOARD_PASTE 62: 2D_IMAGE_COPY 63,0,0,w%(1),h%(1)
x1% = 0: y1% = 0
2D_TARGET_IS 61: 2D_IMAGE_PASTE 63,x1%,y1%: ' mise en place de l'image 1

FOR i% = 2 TO nbi%
    a$ = f$(i%)
    j% = DLL_CALL1("LoadAnyImageFile",ADR(a$)): ' -> clipboard
    WIDTH 62,w%(i%): HEIGHT 62,h%(i%)
    2D_TARGET_IS 62
    CLIPBOARD_PASTE 62: 2D_IMAGE_COPY 63,0,0,w%(i%),h%(i%)
    2D_TARGET_IS 61
    IF sens% = 0
        x1% = x1%+w%(i%-1)+ecart%: y1% = 0
    ELSE
        x1% = 0: y1% = y1%+h%(i%-1)+ecart%
    END_IF
    2D_IMAGE_PASTE 63,x1%,y1%: ' mise en place de l'image suivante
NEXT i%
CLIPBOARD_COPY 61
RETURN
' ==============================================================================
Egal:
j% = 0
IF sens% = 0
    ' égaliser les hauteurs
    FOR i% = 1 TO nbi%
        IF h%(i%) > j% THEN j% = h%(i%)
    NEXT i%
    FOR i% = 1 TO nbi%
        IF h%(i%) < j%
            a$ = f$(i%)
            res% = DLL_CALL1("LoadAnyImageFile",ADR(a$)): ' image -> clipboard
            ha% = j%: wa% = ha%*w%(i%)/h%(i%): ' redim proportionnel
            a$ = tmp$ + "Image"+STR$(i%)+".jpg"
            res% = DLL_CALL2("ResizePicture",wa%,ha%)
            res% = DLL_CALL1("SaveAnyImageFile",ADR(a$))
            f$(i%) = a$: w%(i%) = wa%: h%(i%) = ha%
            CAPTION 9+3*i%,STR$(wa%)+" x " + STR$(ha%)
        END_IF
    NEXT i%
ELSE
    ' égaliser les largeurs
    FOR i% = 1 TO nbi%
        IF w%(i%) > j% THEN j% = w%(i%)
    NEXT i%
    FOR i% = 1 TO nbi%
        IF w%(i%) <  j%
            a$ = f$(i%)
            res% = DLL_CALL1("LoadAnyImageFile",ADR(a$)): ' image -> clipboard
            wa% = j%: ha% = wa%*h%(i%)/w%(i%)
            a$ = tmp$ + "Image"+STR$(i%)+".jpg"
            res% = DLL_CALL2("ResizePicture",wa%,ha%)
            res% = DLL_CALL1("SaveAnyImageFile",ADR(a$))
            f$(i%) = a$: w%(i%) = wa%: h%(i%) = ha%
            CAPTION 9+3*i%,STR$(wa%)+" x " + STR$(ha%)
        END_IF
    NEXT i%
END_IF
RETURN
' ==============================================================================
Comme on peut le voir, je fais largement appel à KGF.dll dont les fonctions traitement d'images sont bien pratiques (merci Klaus).
A ajuster, le chemin de KGF.dll et le répertoire de manoeuvre (tmp$).

On peut enregistrer l'image résultante ('Sauvegarder sous...'), mais je précise qu'elle est systématiquement copiée dans le presse-papier.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

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

MessageSujet: Re: Assemblage d'images   Jeu 13 Mar 2014 - 20:12

JL35 a écrit:
la troisième c'est moi en vacances mais je n'arrive pas à me rappeler où, en tout cas il y avait du soleil.

J’avais cru, l’espace d’une seconde, que c’était au Sahara.
Mais comme tu as écrit qu'il y avait du soleil, alors ce n'est pas le lieu!



En tout cas, merci pour le partage.  Laughing
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/ En ligne
JL35



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

MessageSujet: Re: Assemblage d'images   Ven 14 Mar 2014 - 19:28

C'est vrai, c'est bien connu qu'au Sahara il flotte tout le temps ! pourtant il y a de belles plages de sable, dommage.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5858
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Assemblage d'images   Ven 14 Mar 2014 - 23:56

La plage est belle et spacieuse mais la mer est loin ...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Assemblage d'images   

Revenir en haut Aller en bas
 
Assemblage d'images
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Assemblage d'images pour faire mes boutons
» [Résolu] Affichage images dans un mail
» Insérer des images dans vos sujets.
» Hébergement gratuit images photos fichiers
» Récupérer des images du presse-papier

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: