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
» Problème de compilateur.
par Pedro Alvarez Hier à 20:01

» COMPILATEUR V 0.9 beta 8 du 18 aout 2017
par Pedro Alvarez Hier à 19:54

» Pb 17 (en analyse): ITEM_SELECT ne fonctionne pas
par Jack Jeu 17 Aoû 2017 - 19:26

» Compilateur FBPano
par Mike Jeu 17 Aoû 2017 - 13:52

» un nouveau editeur panobasic
par Jean Claude Jeu 17 Aoû 2017 - 10:18

» Le compilateur.
par Pedro Alvarez Jeu 17 Aoû 2017 - 8:36

» Pb 16 (en analyse): ON_CLOSE plante à l'exécution
par Jack Mer 16 Aoû 2017 - 20:00

» Pb 15 (en analyse): TIMER_ON plante à l'exécution
par Jack Mer 16 Aoû 2017 - 19:58

» KGF_dll - nouvelles versions
par Yannick Dim 13 Aoû 2017 - 17:35

» probleme d'outil
par Yannick Dim 13 Aoû 2017 - 17:32

» Carte de France des régions
par Yannick Sam 12 Aoû 2017 - 21:33

» Pb 14 (en analyse): PRINT_LOCATE plante à l'exécution
par Jack Ven 11 Aoû 2017 - 22:37

» Petit avertissement [Mots réservés]
par papydall Ven 11 Aoû 2017 - 13:45

» Distances sur plan
par JL35 Jeu 10 Aoû 2017 - 21:29

» Tracé : Triangle, Carrée, Dents de scie, Sinusoïde redressée
par papydall Jeu 10 Aoû 2017 - 14:52

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Août 2017
LunMarMerJeuVenSamDim
 123456
78910111213
14151617181920
21222324252627
28293031   
CalendrierCalendrier

Partagez | 
 

 Assemblage d'images

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



Nombre de messages : 5920
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 : 5508
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/
JL35



Nombre de messages : 5920
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 : 5849
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 32 bits :: Vos sources, vos utilitaires à partager-
Sauter vers: