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
» Une autre façon de terminer une application.
par Francis-mr Aujourd'hui à 12:07

» Compilateur FBPano
par jean_debord Aujourd'hui à 10:09

» Copier / coller du texte à partir de la fenêtre de commandes
par jean_debord Aujourd'hui à 9:46

» COMPILATEUR V 0.9 beta 8 du 18 aout 2017
par papydall Aujourd'hui à 5:01

» Mettre en windows en veille
par papydall Aujourd'hui à 4:15

» Stretch_on ne stretch plus...
par papydall Hier à 15:22

» Pb 18 (en analyse): RESTORE_LABEL avec DATA à la fin
par Jack Hier à 13:21

» Problème de traitement des opérateurs avec le compilateur.
par Pedro Alvarez Sam 19 Aoû 2017 - 20:01

» Pb 17 (résolu): ITEM_SELECT ne fonctionne pas
par Jack Jeu 17 Aoû 2017 - 19:26

» 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 (résolu): ON_CLOSE plante à l'exécution
par Jack Mer 16 Aoû 2017 - 20:00

» Pb 15 (résolu): 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

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 | 
 

 Traitement d'images (2)

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : 1, 2  Suivant
AuteurMessage
JL35



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

MessageSujet: Traitement d'images (2)   Lun 3 Nov 2014 - 16:26

Il y en avait déjà un ( http://panoramic.free-boards.net/t3696-traitement-d-images?highlight=traitement+images ), mais celui-ci n'est pas tout à fait la même chose.
On peut créer un dessin de toutes pièces, mais le but est plutôt de travailler sur une image, découper, redimensionner, pivoter, etc. et éventuellement d'y superposer du texte ou une image.
Il est fait appel pour l'essentiel des fonctions à KGF.dll de l'ami Klaus, c'est la seule ressource externe nécessaire.
Code:

' Traitement d'images
LABEL Quit, Chf, Affimint, Echelles, Chsp, Chtr, Ched, Chcou, Edcou
LABEL Rotsy, Rotsym, Resiz1, Resize, Decoup1, Vdec, Anvisu, Decoupe, Lumin, Filtre
LABEL Ngris, Applic, Valide, Txt1, Vtex, Texte, Fonte, Ctexte, Svav, Annul, Sauve
LABEL Dessiner, Aide
DIM a$,i%,j%,k%,wi%,res%,ed1%,ed2%,od%,sd%,p%,pv%,ph%,w%,h%,rwh,r,frot%,fdim%
DIM fdec%,spa%,f$,spd%,edd%,flum%,tb1%,edb%,br%,ga%,co%,ffil%,tb4%,edc%,fr%,fg%,fb%
DIM ftex%,fftx%,spt%,edt%,pico%,chk%,memt%,rgb%,rt%,gt%,bt%,xt%,yt%,fnt$,sz%,attr%
DIM fgri%,fs$,img1%,btl1%,btf1%,wp%,hp%,xd%,yd%,wd%,hd%,fsav$,rc$

fsav$ = "C:\TEMP\Fsave.bmp": ' sauvegarde (pour annulation éventuelle)
IF FILE_EXISTS(fsav$)=1 THEN FILE_DELETE fsav$

DLL_ON "C:\PANORAMIC\KLAUS\DLLs\KGF.dll"

wi% = 800
WIDTH 0,wi%+45: HEIGHT 0,wi%+105
COLOR 0,170,255,255: FONT_BOLD 0: BORDER_SMALL 0: ON_CLOSE 0,Quit
CAPTION 0,"                -  TRAITEMENT  D' IMAGES  -"
MAIN_MENU 10
SUB_MENU 20: PARENT 20,10: CAPTION 20,"Fichier"
  SUB_MENU 21: PARENT 21,20: CAPTION 21,"Ouvrir...": ON_CLICK 21,Chf
  SUB_MENU 23: PARENT 23,20: CAPTION 23,"Enregistrer sous...": ON_CLICK 23,Sauve
  SUB_MENU 25: PARENT 25,20: CAPTION 25,"Quitter": ON_CLICK 25,Quit
SUB_MENU 30: PARENT 30,10: CAPTION 30,"Fonction"
  SUB_MENU 31: PARENT 31,30: CAPTION 31,"Rotation/Symétrie": ON_CLICK 31,Rotsy
  SUB_MENU 32: PARENT 32,30: CAPTION 32,"Redimensionner": ON_CLICK 32,Resiz1
  SUB_MENU 33: PARENT 33,30: CAPTION 33,"Découper": ON_CLICK 33,Decoup1
  SUB_MENU 34: PARENT 34,30: CAPTION 34,"Gamma/Luminosité/Contraste": ON_CLICK 34,Lumin
  SUB_MENU 35: PARENT 35,30: CAPTION 35,"Filtre couleurs": ON_CLICK 35,Filtre
  SUB_MENU 36: PARENT 36,30: CAPTION 36,"Conversion en niveaux de gris": ON_CLICK 36,Ngris
  SUB_MENU 37: PARENT 37,30: CAPTION 37,"Insertion de texte": ON_CLICK 37,Txt1
  SUB_MENU 38: PARENT 38,30: CAPTION 38,"Dessiner": ON_CLICK 38,Dessiner
  SUB_MENU 39: PARENT 39,30: CAPTION 39,"Annuler la dernière opération": ON_CLICK 39,Annul
SUB_MENU 40: PARENT 40,10: CAPTION 40,"Aide": ON_CLICK 40,Aide

i% = 49: ' +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
i%=i%+1: ALPHA i%: TOP i%,6: LEFT i%,3: CAPTION i%,"Image:"
i%=i%+1: EDIT i%: TOP i%,3: LEFT i%,45: WIDTH i%,500: ON_CLICK i%,Chf
        TEXT i%," (clic pour choisir une image)": COLOR i%,255,255,128: ed1%=i%
i%=i%+1: EDIT i%: TOP i%,-1: LEFT i%,LEFT(i%-1)+WIDTH(i%-1)+20: WIDTH i%,160
        FONT_SIZE i%,12: COLOR i%,255,255,128: ed2%=i%
i%=i%+1: BUTTON i%: TOP i%,0: LEFT i%,WIDTH(0)-93: CAPTION i%,"Annuler": ON_CLICK i%,Annul
i%=i%+1: OPEN_DIALOG i%: od% = i%
i%=i%+1: SAVE_DIALOG i%: sd% = i%

i% = 59: ' +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
i%=i%+1: PICTURE i%: TOP i%,TOP(ed1%)+25: LEFT i%,25: WIDTH i%,wi%: HEIGHT i%,wi%
        STRETCH_ON i%: p%=i%
i%=i%+1: PICTURE i%: TOP i%,TOP(p%): LEFT i%,0: HEIGHT i%,wi%+1: WIDTH i%,25
        COLOR i%,200,200,200: pv%=i%
i%=i%+1: PICTURE i%: TOP i%,TOP(p%)+wi%: LEFT i%,LEFT(p%): WIDTH i%,wi%+1: HEIGHT i%,20
        COLOR i%,200,200,200: ph%=i%
i%=i%+1: IMAGE i%: img1%=i%

i% = 79: ' +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
i%=i%+1: FORM i%: TOP i%,wi%-100: LEFT i%,300: WIDTH i%,100: HEIGHT i%,170
        BORDER_SMALL i%: HIDE i%: CAPTION i%,"ROT./SYM.": frot% = i%
        COLOR i%,255,64,64: FONT_BOLD i%
i%=i%+1: BUTTON i%: PARENT i%,frot%: TOP i%,5: LEFT i%,10: WIDTH i%,100
        CAPTION i%,"Rotation 90° G"
i%=i%+1: BUTTON i%: PARENT i%,frot%: TOP i%,30: LEFT i%,10: WIDTH i%,WIDTH(i%-1)
        CAPTION i%,"Rotation 90° D"
i%=i%+1: BUTTON i%: PARENT i%,frot%: TOP i%,55: LEFT i%,10: WIDTH i%,WIDTH(i%-1)
        CAPTION i%,"Rotation 180°"
i%=i%+1: BUTTON i%: PARENT i%,frot%: TOP i%,80: LEFT i%,10: WIDTH i%,WIDTH(i%-1)
        CAPTION i%,"Symétrie H"
i%=i%+1: BUTTON i%: PARENT i%,frot%: TOP i%,105: LEFT i%,10: WIDTH i%,WIDTH(i%-1)
        CAPTION i%,"Symétrie V"
        FOR j%=frot%+1 TO frot%+5: ON_CLICK j%,Rotsym: NEXT j%

i% = 89: ' +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
i%=i%+1: FORM i%: TOP i%,wi%-100: LEFT i%,300: WIDTH i%,150: HEIGHT i%,130
        BORDER_SMALL i%: HIDE i%: CAPTION i%,"REDIMENSIONNER": fdim% = i%
        COLOR i%,255,64,64: FONT_BOLD i%
i%=i%+1: ALPHA i%: PARENT i%,fdim%: TOP i%,3: CAPTION i%," Nouvelles dimensions:"
i%=i%+1: SPIN i%: PARENT i%,fdim%: TOP i%,20: LEFT i%,5: WIDTH i%,58
        ON_CHANGE i%,Chsp: spd%=i%
i%=i%+1: ALPHA i%: PARENT i%,fdim%: TOP i%,TOP(i%-1)+3: LEFT i%,LEFT(i%-1)+WIDTH(i%-1)
        CAPTION i%," X"
i%=i%+1: EDIT i%: PARENT i%,fdim%: TOP i%,TOP(i%-2): LEFT i%,LEFT(i%-1)+16
        WIDTH i%,48: TEXT i%,"0": edd%=i%
i%=i%+1: BUTTON i%: PARENT i%,fdim%: TOP i%,55: LEFT i%,30: CAPTION i%,"Appliquer"
        ON_CLICK i%,Resize

i% = 99: ' +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
i%=i%+1: FORM i%: TOP i%,wi%-100: LEFT i%,300: WIDTH i%,340: HEIGHT i%,120
        BORDER_SMALL i%: HIDE i%: CAPTION i%,"DÉCOUPER": fdec% = i%
        COLOR i%,255,64,64: FONT_BOLD i%
i%=i%+1: ALPHA i%: PARENT i%,fdec%: TOP i%,20: LEFT i%,5
        CAPTION i%,"X=              Y=              W=              H="
i%=i%+1: SPIN i%: PARENT i%,fdec%: TOP i%,TOP(i%-1)-3: LEFT i%,20: WIDTH i%,55: spa%=i%
i%=i%+1: SPIN i%: PARENT i%,fdec%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+75: WIDTH i%,55
i%=i%+1: SPIN i%: PARENT i%,fdec%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+80: WIDTH i%,55
i%=i%+1: SPIN i%: PARENT i%,fdec%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+75: WIDTH i%,55
i%=i%+1: BUTTON i%: PARENT i%,fdec%: TOP i%,TOP(i%-1)+35: LEFT i%,WIDTH(fdec%)/2-130
        CAPTION i%,"Voir": ON_CLICK i%,Vdec
i%=i%+1: BUTTON i%: PARENT i%,fdec%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+90
        CAPTION i%,"Annuler": ON_CLICK i%,Anvisu
i%=i%+1: BUTTON i%: PARENT i%,fdec%: TOP i%,TOP(i%-1)
        LEFT i%,WIDTH(fdec%)/2+50: CAPTION i%,"Découper": ON_CLICK i%,Decoupe
       
i% = 109: ' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
i%=i%+1: FORM i%: TOP i%,wi%-100: LEFT i%,300: WIDTH i%,340: HEIGHT i%,130
        BORDER_SMALL i%: HIDE i%: CAPTION i%,"LUMINOSITÉ/GAMMA/CONTRASTE": flum% = i%
        COLOR i%,255,64,64: FONT_BOLD i%
i%=i%+1: ALPHA i%: PARENT i%,flum%: TOP i%,8: CAPTION i%,"Lum."
i%=i%+1: TRACK_BAR i%: PARENT i%,flum%: TOP i%,TOP(i%-1)-5: LEFT i%,LEFT(i%-1)+25
        WIDTH i%,WIDTH(flum%)-74: tb1%=i%
i%=i%+1: EDIT i%: PARENT i%,flum%: TOP i%,TOP(i%-2): LEFT i%,LEFT(i%-1)+WIDTH(i%-1)-2: WIDTH i%,30
        HEIGHT i%,15: edb%=i%
i%=i%+1: ALPHA i%: PARENT i%,flum%: TOP i%,27: CAPTION i%,"Gam."
i%=i%+1: TRACK_BAR i%: PARENT i%,flum%: TOP i%,TOP(i%-1)-5: LEFT i%,LEFT(tb1%): WIDTH i%,WIDTH(tb1%)
i%=i%+1: EDIT i%: PARENT i%,flum%: TOP i%,TOP(i%-1): LEFT i%,LEFT(tb1%)+WIDTH(tb1%)-2: WIDTH i%,30
        HEIGHT i%,15
i%=i%+1: ALPHA i%: PARENT i%,flum%: TOP i%,46: CAPTION i%,"Cont."
i%=i%+1: TRACK_BAR i%: PARENT i%,flum%: TOP i%,TOP(i%-1)-5: LEFT i%,LEFT(tb1%): WIDTH i%,WIDTH(tb1%)
i%=i%+1: EDIT i%: PARENT i%,flum%: TOP i%,TOP(i%-1): LEFT i%,LEFT(tb1%)+WIDTH(tb1%)-2: WIDTH i%,30
        HEIGHT i%,15
        FOR j% = tb1% TO tb1%+6 STEP 3
            MIN j%,-128: MAX j%,127: POSITION j%,0: ON_CHANGE j%,Chtr
        NEXT j%
        br%=0: ga%=0: co%=0: TEXT edb%,STR$(br%): TEXT edb%+3,STR$(ga%): TEXT edb%+6,STR$(co%)
        FOR j% = edb% TO edb%+6 STEP 3: ON_CHANGE j%,Ched: NEXT j%
i%=i%+1: BUTTON i%: PARENT i%,flum%: TOP i%,TOP(i%-1)+28: LEFT i%,LEFT(tb1%)
        CAPTION i%,"Aperçu": ON_CLICK i%,Applic: btl1%=i%
i%=i%+1: BUTTON i%: PARENT i%,flum%: TOP i%,TOP(i%-1): LEFT i%,LEFT(tb1%)+WIDTH(tb1%)-75
        CAPTION i%,"Valider": ON_CLICK i%,Valide
       
i% = 129: ' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
i%=i%+1: FORM i%: TOP i%,wi%-100: LEFT i%,300: WIDTH i%,340: HEIGHT i%,130
        BORDER_SMALL i%: HIDE i%: CAPTION i%,"FILTRE COULEURS": ffil% = i%
        COLOR i%,255,64,64: FONT_BOLD i%
i%=i%+1: ALPHA i%: PARENT i%,ffil%: TOP i%,8: CAPTION i%,"  R"
i%=i%+1: TRACK_BAR i%: PARENT i%,ffil%: TOP i%,TOP(i%-1)-5: LEFT i%,LEFT(i%-1)+25
        WIDTH i%,WIDTH(ffil%)-74: tb4%=i%
i%=i%+1: EDIT i%: PARENT i%,ffil%: TOP i%,TOP(i%-2): LEFT i%,LEFT(i%-1)+WIDTH(i%-1)-2: WIDTH i%,30
        HEIGHT i%,15: edc%=i%
i%=i%+1: ALPHA i%: PARENT i%,ffil%: TOP i%,27: CAPTION i%,"  G"
i%=i%+1: TRACK_BAR i%: PARENT i%,ffil%: TOP i%,TOP(i%-1)-5: LEFT i%,LEFT(tb4%): WIDTH i%,WIDTH(tb4%)
i%=i%+1: EDIT i%: PARENT i%,ffil%: TOP i%,TOP(i%-1): LEFT i%,LEFT(tb4%)+WIDTH(tb1%)-2: WIDTH i%,30
        HEIGHT i%,15
i%=i%+1: ALPHA i%: PARENT i%,ffil%: TOP i%,46: CAPTION i%,"  B"
i%=i%+1: TRACK_BAR i%: PARENT i%,ffil%: TOP i%,TOP(i%-1)-5: LEFT i%,LEFT(tb4%): WIDTH i%,WIDTH(tb4%)
i%=i%+1: EDIT i%: PARENT i%,ffil%: TOP i%,TOP(i%-1): LEFT i%,LEFT(tb4%)+WIDTH(tb4%)-2: WIDTH i%,30
        HEIGHT i%,15
        FOR j% = tb4% TO tb4%+6 STEP 3
            MIN j%,-1: MAX j%,255: POSITION j%,0: ON_CHANGE j%,Chcou
        NEXT j%
        fr%=-1: fg%=-1: fb%=-1: TEXT edc%,STR$(fr%): TEXT edc%+3,STR$(fg%): TEXT edc%+6,STR$(fb%)
        FOR j% = edc% TO edc%+6 STEP 3: ON_CHANGE j%,Ched: NEXT j%
i%=i%+1: BUTTON i%: PARENT i%,ffil%: TOP i%,TOP(i%-1)+28: LEFT i%,LEFT(tb1%)
        CAPTION i%,"Aperçu": ON_CLICK i%,Applic: btf1%=i%
i%=i%+1: BUTTON i%: PARENT i%,ffil%: TOP i%,TOP(i%-1): LEFT i%,LEFT(tb1%)+WIDTH(tb1%)-75
        CAPTION i%,"Valider": ON_CLICK i%,Valide

i% = 149: ' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
i%=i%+1: FORM i%: TOP i%,wi%-100: LEFT i%,300: WIDTH i%,220: HEIGHT i%,80
        BORDER_SMALL i%: HIDE i%: CAPTION i%,"CONVERSION EN NIVEAUX DE GRIS": fgri% = i%
        COLOR i%,255,64,64: FONT_BOLD i%
i%=i%+1: BUTTON i%: PARENT i%,fgri%: TOP i%,10: LEFT i%,20
        CAPTION i%,"Aperçu": ON_CLICK i%,Ngris
i%=i%+1: BUTTON i%: PARENT i%,fgri%: TOP i%,10: LEFT i%,110
        CAPTION i%,"Valider": ON_CLICK i%,Valide
       
i% = 159: ' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
i%=i%+1: FORM i%: TOP i%,wi%-100: LEFT i%,100: WIDTH i%,500: HIDE i%
        HEIGHT i%,170: BORDER_SMALL i%: CAPTION i%," -  TEXTE  SUR  IMAGE  -"
        FONT_BOLD i%: COLOR i%,0,255,255: ftex% = i%
i%=i%+1: ALPHA i%: PARENT i%,ftex%: TOP i%,5: LEFT i%,5: CAPTION i%,"X=            Y="
i%=i%+1: SPIN i%: PARENT i%,ftex%: TOP i%,TOP(i%-1)-3: LEFT i%,20: WIDTH i%,50: spt%=i%
i%=i%+1: SPIN i%: PARENT i%,ftex%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+70: WIDTH i%,WIDTH(i%-1)
i%=i%+1: EDIT i%: PARENT i%,ftex%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+55: WIDTH i%,120
        ON_CLICK i%,Fonte: TEXT i%,"Arial": edt%=i%
i%=i%+1: SPIN i%: PARENT i%,ftex%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+WIDTH(i%-1)+3
        WIDTH i%,50: POSITION i%,16
i%=i%+1: PICTURE i%: PARENT i%,ftex%: TOP i%,TOP(spt%)+2: LEFT i%,LEFT(i%-1)+WIDTH(i%-1)+3
        WIDTH i%,30: HEIGHT i%,20: COLOR i%,0,0,0: ON_CLICK i%,Ctexte: pico%=i%
i%=i%+1: CHECK i%: PARENT i%,ftex%: TOP i%,TOP(i%-1)+3: LEFT i%,LEFT(i%-1)+WIDTH(i%-1)+10
        CAPTION i%,"G": chk%=i%
i%=i%+1: CHECK i%: PARENT i%,ftex%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+35: WIDTH i%,30
        CAPTION i%,"I ": FONT_ITALIC i%
i%=i%+1: CHECK i%: PARENT i%,ftex%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+35: WIDTH i%,30
        CAPTION i%,"S": FONT_UNDERLINE i%
i%=i%+1: MEMO i%: PARENT i%,ftex%: TOP i%,TOP(spt%)+25: LEFT i%,0: WIDTH i%,WIDTH(ftex%)-16
        HEIGHT i%,80: FONT_NAME i%,"Arial": memt%=i%
i%=i%+1: BUTTON i%: PARENT i%,ftex%: TOP i%,TOP(i%-1)+HEIGHT(i%-1)+3: LEFT i%,WIDTH(ftex%)/2-130
        CAPTION i%,"Voir": ON_CLICK i%,Vtex
i%=i%+1: BUTTON i%: PARENT i%,ftex%: TOP i%,TOP(i%-1): LEFT i%,WIDTH(ftex%)/2-40
        CAPTION i%,"Annuler": ON_CLICK i%,Anvisu
i%=i%+1: BUTTON i%: PARENT i%,ftex%: TOP i%,TOP(i%-1): LEFT i%,WIDTH(ftex%)/2+50
        CAPTION i%,"Appliquer": ON_CLICK i%,Texte

i%=i%+1: FORM i%: TOP i%,TOP(ftex%)+48: LEFT i%,LEFT(ftex%)+LEFT(edt%): WIDTH i%,170
        HEIGHT i%,200: BORDER_HIDE i%: HIDE i%: fftx% = i%
i%=i%+1: LIST i%: PARENT i%,fftx%: FULL_SPACE i%
        FONT_NAMES_LOAD i%: ON_CLICK i%,Fonte
        FOR j% = COUNT(i%) TO 1 STEP -1
            IF LEFT$(ITEM_READ$(i%,j%),1) = "@" THEN ITEM_DELETE i%,j%
        NEXT j%
CLIPBOARD_STRING_COPY "": ' raz clipboard
rgb% = 0
GOSUB Echelles
' ==============================================================================
END: ' =========================================================================
' ==============================================================================
Quit:
TERMINATE
' ==============================================================================
Chf:
' choix d'un fichier image
f$ = FILE_NAME$(od%): IF LEN(f$)<4 THEN RETURN
TEXT ed1%,f$
res% = DLL_CALL1("LoadAnyImageFile",ADR(f$)): ' -> clipboard
res% = DLL_CALL0("LoadPicture"): ' clipboard -> image interne
res% = DLL_CALL1("SetImmediateMode",1): ' mise à jour systématique du clipboard
GOSUB Affimint: ' afficher
2D_TARGET_IS p%
2D_IMAGE_COPY img1%,0,0,WIDTH(p%),HEIGHT(p%): ' sauvegarde dans Image 103
RETURN
' ==============================================================================
Affimint:
' Afficher l'image interne
w% = DLL_CALL0("GetPictureWidth"): ' dimensions de l'image interne
h% = DLL_CALL0("GetPictureHeight")
IF w%>h%
    WIDTH p%,wi%: HEIGHT p%,WIDTH(p%)*h%/w%
ELSE
    HEIGHT p%,wi%: WIDTH p%,HEIGHT(p%)*w%/h%
END_IF
res% = DLL_CALL0("SavePicture"): ' image interne dans le clipboard
res% = DLL_CALL0("LoadPicture"): ' clipboard -> image interne
CLIPBOARD_PASTE p%: ' affichage
TEXT ed2%,STR$(w%)+" x "+STR$(h%)+" pixels."
rwh = w%/h%
GOSUB Echelles
RETURN
' ==============================================================================
Echelles:
' échelles verticale et horizontale, en pixels
IF w%<=0 THEN w% = WIDTH(p%): h% = HEIGHT(p%)
r = WIDTH(p%)/w%
2D_TARGET_IS pv%: PRINT_TARGET_IS pv%
CLS: COLOR pv%,200,200,200: 2D_FILL_COLOR 200,200,200
FOR i% = 0 TO h% STEP 50
    IF i%/100 = INT(i%/100)
        2D_LINE 4,i%*r,25,i%*r
        PRINT_LOCATE 0,i%*r-13: PRINT STR$(i%)
    ELSE
        2D_LINE 15,i%*r,25,i%*r
    END_IF
NEXT i%
TOP ph%,TOP(p%)+HEIGHT(p%)
2D_TARGET_IS ph%: PRINT_TARGET_IS ph%
CLS: COLOR ph%,200,200,200: 2D_FILL_COLOR 200,200,200
FOR i% = 0 TO w% STEP 50
    IF i%/100 = INT(i%/100)
        2D_LINE i%*r,0,i%*r,16
        a$=STR$(i%): j%=20: IF LEN(a$)>3 THEN j%=25
        PRINT_LOCATE i%*r-j%,6: PRINT a$
    ELSE
        2D_LINE i%*r,0,i%*r,6
    END_IF
NEXT i%
RETURN
' ==============================================================================
Chsp:
i% = POSITION(spd%): TEXT edd%,STR$(INT(i%/rwh))
RETURN
' ==============================================================================
Chtr:
IF POSITION(tb1%)<>br% THEN br%=POSITION(tb1%): TEXT edb%,STR$(br%)
IF POSITION(tb1%+3)<>ga% THEN ga%=POSITION(tb1%+3): TEXT edb%+3,STR$(ga%)
IF POSITION(tb1%+6)<>co% THEN co%=POSITION(tb1%+6): TEXT edb%+6,STR$(co%)
RETURN
' ==============================================================================
Ched:
i% = VAL(TEXT$(edb%)): IF i%<>br% THEN br%=i%: POSITION tb1%,i%
i% = VAL(TEXT$(edb%+3)): IF i%<>ga% THEN ga%=i%: POSITION tb1%+3,i%
i% = VAL(TEXT$(edb%+6)): IF i%<>co% THEN co%=i%: POSITION tb1%+6,i%
RETURN
' ==============================================================================
Chcou:
fr%=POSITION(tb4%): TEXT edc%,STR$(fr%)
fg%=POSITION(tb4%+3): TEXT edc%+3,STR$(fg%)
fb%=POSITION(tb4%+6): TEXT edc%+6,STR$(fb%)
RETURN
' ==============================================================================
Edcou:
IF TEXT$(edc%)="-" OR TEXT$(edc%+3)="-"OR TEXT$(edc%+6)="-" THEN RETURN
i% = VAL(TEXT$(edc%)): IF i%<>fr% THEN fr%=i%: POSITION tb4%,i%
i% = VAL(TEXT$(edc%+3)): IF i%<>fg% THEN fg%=i%: POSITION tb4%+3,i%
i% = VAL(TEXT$(edc%+6)): IF i%<>fb% THEN fb%=i%: POSITION tb4%+6,i%
RETURN
' ==============================================================================
Rotsy:
SHOW frot%
RETURN
' ==============================================================================
Rotsym:
' Rotation de l'image interne
i% = NUMBER_CLICK
GOSUB Svav: ' sauvegarde avant
SELECT i%
    CASE 81: res% = DLL_CALL0("RotateM90")
    CASE 82: res% = DLL_CALL0("Rotate90")
    CASE 83: res% = DLL_CALL0("Rotate180")
    CASE 84: res% = DLL_CALL1("MirrorPicture",2)
    CASE 85: res% = DLL_CALL1("MirrorPicture",1)
END_SELECT
HIDE frot%
GOSUB Affimint: ' afficher l'image interne (+ copie dans le clipboard)
RETURN
' ==============================================================================
Resiz1:
SHOW fdim%
RETURN
' ==============================================================================
Resize:
' Redimensionner
GOSUB Svav: ' sauvegarde avant
w% = POSITION(spd%): h% = VAL(TEXT$(edd%))
res% = DLL_CALL0("SavePicture"): ' image interne dans le clipboard
res% = DLL_CALL2("ResizePicture",w%,h%)
res% = DLL_CALL0("LoadPicture"): ' clipboard -> image interne
HIDE fdim%
GOSUB Affimint
RETURN
' ==============================================================================
Decoup1:
SHOW fdec%
RETURN
' ==============================================================================
Vdec:
' Tracé du rectangle de découpe, pour voir
xd% = POSITION(spa%): yd% = POSITION(spa%+1): wd% = POSITION(spa%+2): hd% = POSITION(spa%+3)
IF wd%<=0 OR hd%<=0 THEN RETURN
CLIPBOARD_PASTE p%
2D_TARGET_IS p%: 2D_PEN_COLOR 255,0,255: 2D_PEN_WIDTH 1
IF w% > 1000 THEN 2D_PEN_WIDTH 2: IF w%>2000 THEN 2D_PEN_WIDTH 4
2D_LINE xd%,yd%,xd%+wd%-1,yd%: 2D_POLY_TO xd%+wd%-1,yd%+hd%-1
2D_POLY_TO xd%,yd%+hd%-1: 2D_POLY_TO xd%,yd%
RETURN
' ==============================================================================
Anvisu:
CLIPBOARD_PASTE p%
RETURN
' ==============================================================================
Decoupe:
' Découpe d'un rectangle dans une image
CLIPBOARD_PASTE p%
GOSUB Svav: ' sauvegarde avant
xd% = POSITION(spa%): yd% = POSITION(spa%+1): wd% = POSITION(spa%+2): hd% = POSITION(spa%+3)
IF wd%<=0 OR hd%<=0 THEN RETURN
res% = DLL_CALL4("ExtractRectangleFromPicture",xd%,yd%,xd%+wd%-1,yd%+hd%-1)
HIDE fdec%
GOSUB Affimint
RETURN
' ==============================================================================
Lumin:
SHOW flum%
RETURN
' ==============================================================================
Filtre:
SHOW ffil%
RETURN
' ==============================================================================
Ngris:
' Conversion en niveaux de gris
i% = NUMBER_CLICK
IF i% = 36
    SHOW fgri%
ELSE
    IF i% = fgri%+1: ' Aperçu
        GOSUB Svav: ' sauvegarde avant
        2D_IMAGE_PASTE img1%,0,0
        CLIPBOARD_COPY p%: res%=DLL_CALL0("LoadPicture"): ' restore image interne
        res% = DLL_CALL0("SetPictureGrayScale"): ' -> image interne
        GOSUB Affimint: ' affichage résultat
    END_IF
END_IF
RETURN
' ==============================================================================
Applic:
GOSUB Svav: ' sauvegarde avant
i% = NUMBER_CLICK
IF i% = btl1%
    2D_TARGET_IS p%: 2D_IMAGE_PASTE img1%,0,0
    BRIGHTNESS p%,br%
    GAMMA p%,ga%
    CONTRAST p%,co%
ELSE
    2D_TARGET_IS p%: 2D_IMAGE_PASTE img1%,0,0
    CLIPBOARD_COPY p%: res%=DLL_CALL0("LoadPicture"): ' restore image interne
    res% = DLL_CALL3("SetPictureFilter",fr%,fg%,fb%): ' -> image interne
    GOSUB Affimint: ' affichage résultat
END_IF
RETURN
' ==============================================================================
Valide:
' validation de l'opération (écran courant)
CLIPBOARD_COPY p%
res% = DLL_CALL0("LoadPicture"): ' clipboard -> image interne
RETURN
' ==============================================================================
Txt1:
SHOW ftex%
RETURN
' ==============================================================================
Vtex:
' Tracé du rectangle enveloppant du texte, pour voir
j% = COUNT(memt%): IF j%<1 THEN RETURN: ' pas de texte
FONT_NAME p%,TEXT$(spt%+2): FONT_SIZE p%,POSITION(spt%+3)
xd% = POSITION(spt%): yd% = POSITION(spt%+1): wd%=0
FOR i% = 1 TO j%
    IF TEXT_WIDTH(ITEM_READ$(memt%,i%),p%)>wd% THEN wd%=TEXT_WIDTH(ITEM_READ$(memt%,i%),p%)
NEXT i%
hd% = j%*TEXT_HEIGHT("ABCjkl",p%)
IF wd%<=0 OR hd%<=0 THEN RETURN
CLIPBOARD_PASTE p%
2D_TARGET_IS p%: 2D_PEN_COLOR 255,0,255: 2D_PEN_WIDTH 1
IF w% > 1000 THEN 2D_PEN_WIDTH 2: IF w%>2000 THEN 2D_PEN_WIDTH 4
2D_LINE xd%,yd%,xd%+wd%-1,yd%: 2D_POLY_TO xd%+wd%-1,yd%+hd%-1
2D_POLY_TO xd%,yd%+hd%-1: 2D_POLY_TO xd%,yd%
RETURN
' ==============================================================================
Texte:
' Insertion de texte (plusieurs lignes éventuellement)
i% = NUMBER_CLICK
IF i% = 121
    SHOW ftex%
ELSE
    HIDE ftex%
    IF COUNT(memt%)>0
        CLIPBOARD_PASTE p%
        GOSUB Svav: ' sauvegarde avant
        a$ = ""
        FOR i% = 1 TO COUNT(memt%)
            a$ = a$+ITEM_READ$(memt%,i%)+CHR$(13)+CHR$(10)
        NEXT i%
        a$ = LEFT$(a$,LEN(a$)-2)
        xt% = POSITION(spt%): yt% = POSITION(spt%+1)
        fnt$ = TEXT$(spt%+2): sz% = POSITION(spt%+3): attr% = 0
        IF CHECKED(chk%) = 1 THEN attr% = 1
        IF CHECKED(chk%+1) = 1 THEN attr% = attr%+2
        IF CHECKED(chk%+2) = 1 THEN attr% = attr%+4
        Tx2Pic(p%,xt%,yt%,a$,fnt$,sz%,attr%,rgb%)
        CLIPBOARD_COPY p%: ' -> clipboard
    END_IF
END_IF
RETURN
' ==============================================================================
Fonte:
i% = NUMBER_CLICK
IF i% = edt%
    SHOW fftx%
ELSE
    TEXT edt%,ITEM_INDEX$(fftx%+1): FONT_NAME memt%,TEXT$(edt%)
    HIDE fftx%
END_IF
RETURN
' ==============================================================================
Ctexte:
Palette16(LEFT(ftex%)+140,TOP(ftex%)-20)
rt% = INT(rgb%/65536): gt% = BIN_AND(rgb%/256,255): bt% = BIN_AND(rgb%,255)
COLOR pico%,rt%,gt%,bt%
RETURN
' ==============================================================================
Svav:
' sauvegarde avant opération
wp% = WIDTH(p%): hp% = HEIGHT(p%)
FILE_SAVE p%,fsav$
RETURN
' ==============================================================================
Annul:
' Annulation: retour à l'état précédent
WIDTH p%,wp%: HEIGHT p%,hp%
IF FILE_EXISTS(fsav$) = 0 THEN RETURN
FILE_LOAD p%,fsav$
CLIPBOARD_COPY p%: ' -> clipboard
res% = DLL_CALL0("LoadPicture"): ' clipboard -> image interne
GOSUB Affimint: ' réaffichage
RETURN
' ==============================================================================
Sauve:
' Enregistrement de l'image résultante
fs$ = FILE_NAME$(sd%): IF LEN(fs$)<4 THEN RETURN
CLIPBOARD_COPY p%
res% = DLL_CALL1("SaveAnyImageFile",ADR(fs$)): ' sauvegarde de l'image du clipboard
RETURN
' ==============================================================================
Dessiner:
IF r = 0 THEN r = 1
Dessin(p%,r)
RETURN
' ==============================================================================
Aide:
' A voir...
rc$ = CHR$(13)+CHR$(10)
MESSAGE "Aide non implémentée !"
RETURN
' ==============================================================================
SUB Tx2Pic(p%,x%,y%,txt$,fnt$,sz%,attr%,coul%)
' Affichage de lignes de texte txt$ sur l'objet p%, en position x%,y%,
' police fnt$, taille sz% (->255), attributs attr% (= B=1, I=2, U=4)
' couleur coul% format RGB (=65536*R + 256*G + B)
' Si plusieurs lignes: séparées par '0D0A'
DIM_LOCAL p1%,wt%,ht%,r%,g%,b%,i%,j%,t2d%,tpt%,k%,a$
p1% = 998: WHILE OBJECT_EXISTS(p1%)=1: p1%=p1%+1: END_WHILE
tpt% = NUMBER_PRINT_TARGET: t2d% = NUMBER_2D_TARGET
PICTURE p1%: LEFT p1%,-2000
PRINT_TARGET_IS p1%: FONT_NAME p1%,fnt$: FONT_SIZE p1%,sz%
IF BIN_AND(attr%,1) = 1 THEN FONT_BOLD p1%
IF BIN_AND(attr%,2) = 2 THEN FONT_ITALIC p1%
IF BIN_AND(attr%,4) = 4 THEN FONT_UNDERLINE p1%
COLOR p1%,1,1,1: 2D_TARGET_IS p1%: 2D_FILL_COLOR 1,1,1
r%=INT(coul%/65536): g%=BIN_AND(coul%,255*256)/256: b%=BIN_AND(coul%,255)
2D_PEN_COLOR r%,g%,b%
2D_TARGET_IS p%: 2D_PEN_COLOR r%,g%,b%
k% = INSTR(txt$,CHR$(13)+CHR$(10))
WHILE k% > 0
    a$ = LEFT$(txt$,k%-1): txt$ = RIGHT_POS$(txt$,k%+2)
    wt%=TEXT_WIDTH(a$,p1%): ht% = TEXT_HEIGHT("ABCghi",p1%)
    WIDTH p1%,wt%: HEIGHT p1%,ht%: PRINT a$
    FOR j% = 0 TO ht%-1
        FOR i% = 0 TO wt%-1
            IF COLOR_PIXEL_RED(p1%,i%,j%) <> 1 THEN 2D_POINT x%+i%,y%+j%
        NEXT i%
        DISPLAY
    NEXT j%
    y% = y%+ht%
    k% = INSTR(txt$,CHR$(13)+CHR$(10))
    2D_TARGET_IS p1%: CLS: 2D_TARGET_IS p%
END_WHILE
wt%=TEXT_WIDTH(txt$,p1%): ht%=TEXT_HEIGHT(txt$,p1%)
WIDTH p1%,wt%: HEIGHT p1%,ht%: PRINT txt$
FOR j% = 0 TO ht%-1
    FOR i% = 0 TO wt%-1
        IF COLOR_PIXEL_RED(p1%,i%,j%) <> 1 THEN 2D_POINT x%+i%,y%+j%
    NEXT i%
    DISPLAY
NEXT j%
PRINT_TARGET_IS tpt%: 2D_TARGET_IS t2d%
DELETE p1%
END_SUB
' ==============================================================================
SUB Palette16(x,y)
' Choix d'une couleur dans une palette de 16 (couleurs html de base) affichée en x,y
' Résultat dans rgb% sous la forme 65536*r + 256*g + b
IF LABEL("Aff_pal16") = 0 THEN LABEL Aff_pal16
IF LABEL("Qui_pal16") = 0 THEN LABEL Qui_pal16
DIM_LOCAL ch$(16),nc$(16)
DIM_LOCAL a$, nf, np, nq, nt, nb, wc, hc, r, g, b, i, j, k, t2d%, tpt%, ff%
DATA "Pal16"
DATA "000000","000080","0000FF","008000","008080","00FF00","00FFFF","800000"
DATA "800080","808000","808080","C0C0C0","FF0000","FF00FF","FFFF00","FFFFFF"
DATA " black"," navy","  blue"," green"," teal","  lime"," cyan","maroon"," purple"
DATA " olive"," gray"," silver","  red","magenta","  yellow","  white": ' noms standards
RESTORE: READ a$: WHILE a$<>"Pal16": READ a$: END_WHILE
FOR i=1 TO 16: READ ch$(i): NEXT i: FOR i=1 TO 16: READ nc$(i): NEXT i
tpt% = NUMBER_PRINT_TARGET: t2d% = NUMBER_2D_TARGET: ff% = 0
wc = 40: hc = 20
nf=3000: WHILE OBJECT_EXISTS(nf)=1: nf=nf+1: END_WHILE
        FORM nf: TOP nf,y: LEFT nf,x: WIDTH nf,4*(wc+1)+16: HEIGHT nf,4*(hc+14)+66
        BORDER_SMALL nf
        CAPTION nf," -  16  COULEURS  HTML  -": ON_CLOSE nf,Qui_pal16
np=nf+1: WHILE OBJECT_EXISTS(np)=1: np=np+1: END_WHILE
        PICTURE np: PARENT np,nf: FULL_SPACE np: 2D_TARGET_IS np: PRINT_TARGET_IS np
        ON_CLICK np,Aff_pal16
nq=np+1: WHILE OBJECT_EXISTS(nq)=1: nq=nq+1: END_WHILE
        PICTURE nq: PARENT nq,nf: TOP nq,4*(hc+14)+5: LEFT nq,0: WIDTH nq,wc
        HEIGHT nq,25
nt=nq+1: WHILE OBJECT_EXISTS(nt)=1: nt=nt+1: END_WHILE
        ALPHA nt: PARENT nt,nf: TOP nt,TOP(nq): LEFT nt,LEFT(nq)+WIDTH(nq)+5
        FONT_NAME nt,"Lucida Console"
nb=nt+1: WHILE OBJECT_EXISTS(nb)=1: nb=nb+1: END_WHILE
        BUTTON nb: PARENT nb,nf:TOP nb,TOP(nq): WIDTH nb,40: LEFT nb,WIDTH(nf)-56
        CAPTION nb,"OK": ON_CLICK nb,Qui_pal16
k = 1
FOR j=0 TO 3
    y = j*(hc+14)
    FOR i = 0 TO 3
        a$ = ch$(k): r=HEX(LEFT$(a$,2)): g=HEX(MID$(a$,3,2)): b=HEX(RIGHT$(a$,2))
        x = i*(wc+1): 2D_PEN_COLOR r,g,b: 2D_FILL_COLOR r,g,b
        2D_RECTANGLE x,y,x+wc,y+hc
        2D_FILL_COLOR 255,255,255: PRINT_LOCATE x,y+hc: PRINT nc$(k)
        k = k+1
    NEXT i
NEXT j
r=0: g=0: b=0: COLOR nq,r,g,b
CAPTION nt,"#00 00 00"+CHR$(10)+STR$(r)+","+STR$(g)+","+STR$(b)
2D_TARGET_IS nq: 2D_PEN_COLOR 164,164,164
WHILE ff% = 0: WAIT 100: END_WHILE
EXIT_SUB
Aff_pal16:
x=MOUSE_X_LEFT_DOWN(np): y=MOUSE_Y_LEFT_DOWN(np)
r=COLOR_PIXEL_RED(np,x,y): g=COLOR_PIXEL_GREEN(np,x,y): b=COLOR_PIXEL_BLUE(np,x,y)
2D_FILL_COLOR r,g,b: 2D_RECTANGLE 0,0,WIDTH(nq),HEIGHT(nq)
a$ = "#"+RIGHT$("0"+HEX$(r),2)+" "+RIGHT$("0"+HEX$(g),2)+" "+RIGHT$("0"+HEX$(b),2)
a$ = a$ + CHR$(10)+STR$(r)+","+STR$(g)+","+STR$(b)
CAPTION nt,a$
RETURN
Qui_pal16:
PRINT_TARGET_IS tpt%: 2D_TARGET_IS t2d%: DELETE nf
rgb% = 65536*r + 256*g + b
ff% = 1
RETURN
END_SUB
' ==============================================================================
SUB Dessin(p%,r)
' Boîte à outils pour dessiner sur le picture p%
' r = facteur de correction des coordonnées
'    cas du stretch_on dans un picture: r = Largeur picture/Largeur réelle image
'    (r = 1 si picture = image)
IF r = 0 THEN r = 1: ' si paramètre absent
DIM_LOCAL f%,t%,i%,j%,k%,x%,y%,a$,tr%,tg%,tb%,n2t%,fig%,trac%,term%,ret%,an
DIM_LOCAL x1%,y1%,x2%,y2%,x3%,y3%,fpr$,btg%,cap$
fpr$ = "C:\TEMP\Savpre.bmp"
IF FILE_EXISTS(fpr$) = 1 THEN FILE_DELETE fpr$
IF LABEL("Desfin")=0 THEN LABEL Desfin
IF LABEL("Desopt")=0 THEN LABEL Desopt
IF LABEL("Desanu")=0 THEN LABEL Desanu
IF LABEL("Descou")=0 THEN LABEL Descou
IF LABEL("Destim")=0 THEN LABEL Destim
IF LABEL("Destra")=0 THEN LABEL Destra
IF LABEL("Deslib")=0 THEN LABEL Deslib
IF LABEL("Desrec")=0 THEN LABEL Desrec
IF LABEL("Desron")=0 THEN LABEL Desron
IF LABEL("Desrem")=0 THEN LABEL Desrem
DATA "Pal16": ' palette 16 couleurs
DATA "000000","000080","0000FF","008000","008080","00FF00","00FFFF","800000"
DATA "800080","808000","808080","C0C0C0","FF0000","FF00FF","FFFF00","FFFFFF"
n2t% = NUMBER_2D_TARGET
ON_CLICK p%,Desrem
f% = 850: WHILE OBJECT_EXISTS(f%)=1: f%=f%+1: END_WHILE
FORM f%: TOP f%,0: LEFT f%,LEFT(0)+WIDTH(0): HEIGHT f%,208: WIDTH f%,132: BORDER_SMALL f%
        COLOR f%,180,255,255: FONT_BOLD f%: FONT_NAME f%,"Arial": ON_CLOSE f%,Desfin
        CAPTION f%,"- OUTILS  DESSIN -"
i%=f%+1: ALPHA i%: PARENT i%,f%: TOP i%,3: CAPTION i%,"Trait:"
i%=f%+2: PICTURE i%: PARENT i%,f%: TOP i%,0: LEFT i%,32: WIDTH i%,35: HEIGHT i%,23
        COLOR i%,0,0,0
i%=f%+3: PICTURE i%: PARENT i%,f%: TOP i%,3: LEFT i%,35: WIDTH i%,WIDTH(i%-1)-5
        HEIGHT i%,18: COLOR i%,255,0,0
i%=f%+4: SPIN i%: PARENT i%,f%: LEFT i%,75: WIDTH i%,40: font_size i%,9
        MIN i%,1: MAX i%,20: POSITION i%,1
i%=f%+5: PICTURE i%: PARENT i%,f%: TOP i%,25: LEFT i%,0: WIDTH i%,WIDTH(f%)-17
        HEIGHT i%,63: 2D_TARGET_IS i%: ON_CLICK i%,Descou
        RESTORE: READ a$: WHILE a$<>"Pal16": READ a$: END_WHILE
        FOR j% = 1 TO 4
            FOR i% = 1 TO 4
                READ a$
                tr%=HEX(LEFT$(a$,2)): tg%=HEX(MID$(a$,3,2)): tb%=HEX(RIGHT$(a$,2))
                2D_FILL_COLOR tr%,tg%,tb%
                2D_RECTANGLE x%,y%,x%+28,y%+15: x%=x%+29
            NEXT i%
            y%=y%+16: x% = 0
        NEXT j%
        tr% = 0: tg% = 0: tb% = 0: COLOR f%+3,tr%,tg%,tb%
i%=f%+6: CONTAINER_OPTION i%: PARENT i%,f%: TOP i%,TOP(i%-1)+65: WIDTH i%,WIDTH(f%)-18
        LEFT i%,0: HEIGHT i%,63: COLOR i%,255,255,180
i%=f%+7:OPTION i%: PARENT i%,f%+6: TOP i%,10: LEFT i%,4: CAPTION i%,"Trait"
i%=f%+8:OPTION i%: PARENT i%,f%+6: TOP i%,25: LEFT i%,4: CAPTION i%,"Libre"
i%=f%+9:OPTION i%: PARENT i%,f%+6: TOP i%,10: LEFT i%,54: CAPTION i%,"Rectan."
i%=f%+10:OPTION i%: PARENT i%,f%+6: TOP i%,25: LEFT i%,54: CAPTION i%,"Cercle"
i%=f%+11:OPTION i%: PARENT i%,f%+6: TOP i%,40: LEFT i%,4: CAPTION i%,"Remplir"
        MARK_ON f%+7
FOR J%=f%+7 TO f%+11: ON_CLICK j%,Desopt: NEXT j%
i%=f%+12: BUTTON i%: PARENT i%,f%: WIDTH i%,60: TOP i%,TOP(f%+6)+HEIGHT(f%+6)
          HEIGHT i%,20: CAPTION i%,"Annuler": ON_CLICK i%,Desanu
i%=f%+13:BUTTON i%: PARENT i%,f%: WIDTH i%,55:TOP i%,TOP(i%-1): LEFT i%,60
        HEIGHT i%,20: CAPTION i%,"Quitter": ON_CLICK i%,Desfin
2D_TARGET_IS p%: 2D_PEN_DOT
t%=f%+14: TIMER t%: PARENT t%,f%: TIMER_INTERVAL t%,40: ON_TIMER t%,Destim
trac% = 0: term% = 0: btg% = 0
fig% = 1: ret% = 0: cap$ = CAPTION$(0)
CLIPBOARD_COPY p%
WHILE 1 > 0: WAIT 100: END_WHILE: GOTO Desfin
' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
Desopt:
fig% = 1: ' trait
IF CHECKED(f%+8) = 1
    fig% = 2: ' tracé libre
    FILE_SAVE p%,fpr$: ' sauvegarde préalable
ELSE
    IF CHECKED(f%+9) = 1
        fig% = 3: ' rectangle
    ELSE
        IF CHECKED(f%+10) = 1
            fig% = 4: ' cercle
        ELSE
            IF CHECKED(f%+11) = 1
                fig% = 5: ' remplissage
            END_IF
        END_IF
    END_IF
END_IF
RETURN
' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
Destim:
IF CHECKED(f%+11)=1 THEN RETURN: ' remplissage
x% = MOUSE_X_POSITION(p%)/r: y% = MOUSE_Y_POSITION(p%)/r: ' position actuelle souris
a$ =  "X= "+STR$(x%)+" pixels  Y= "+STR$(y%)+" pixels"
CAPTION 0,a$
2D_PEN_COLOR tr%,tg%,tb%: 2D_PEN_WIDTH POSITION(f%+4)
IF MOUSE_LEFT_DOWN(p%) = 1: ' bouton gauche enfoncé
    x1% = x%: y1% = y%: ' origine
    trac% = 1
    IF fig% = 2 AND btg% = 0 THEN FILE_SAVE p%,fpr$: ' sauvegarde préalable
    btg% = 1
END_IF
IF MOUSE_LEFT_UP(p%) = 1: ' relâche, tracé final
    btg% = 0
    IF x1% = -1 THEN RETURN
    TIMER_OFF t%
    ' clipboard_paste p%:
    term% = 1: 2D_PEN_SOLID
    SELECT fig%
        CASE 1: GOSUB Destra
        CASE 2: GOSUB Deslib
        CASE 3: GOSUB Desrec
        CASE 4: GOSUB Desron
        CASE 5: GOSUB Desrem
    END_SELECT
    ' x1% = sx1%: x2% = sx2%: y1% = sy1%: y2% = sy2%
    CLIPBOARD_COPY p%: term% = 0
    trac% = 0: 2D_PEN_DOT
    TIMER_ON t%
END_IF
IF trac% = 1
    ' tracé provisoire, en continu
    if x1% = -1 then return
    x2% = x%: y2% = y%: ' position actuelle
    IF x2%=x3% AND y2%=y3% THEN RETURN: ' position inchangée
    SELECT fig%
        CASE 1: GOSUB Destra
        CASE 2: GOSUB Deslib
        CASE 3: GOSUB Desrec
        CASE 4: GOSUB Desron
    END_SELECT
    x3% = x%: y3% = y%
END_IF
RETURN
' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
Destra:
CLIPBOARD_PASTE p%: IF term% = 1 THEN FILE_SAVE p%,fpr$: ' sauvegarde préalable
2D_LINE x1%,y1%,x2%,y2%
IF term% = 1 THEN x1% = -1
RETURN
' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
Deslib:
2D_PEN_SOLID
2D_LINE x1%,y1%,x2%,y2%: x1%=x2%: y1%=y2%
IF term% = 1 THEN x1% = -1
RETURN
' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
Desrec:
CLIPBOARD_PASTE p%: IF term% = 1 THEN FILE_SAVE p%,fpr$: ' sauvegarde préalable
2D_LINE x1%,y1%,x2%,y1%:2D_POLY_TO x2%,y2%:2D_POLY_TO x1%,y2%:2D_POLY_TO x1%,y1%
IF term% = 1 THEN x1% = -1
RETURN
' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
Desron:
CLIPBOARD_PASTE p%: IF term% = 1 THEN FILE_SAVE p%,fpr$: ' sauvegarde préalable
k% = SQR((y2%-y1%)*(y2%-y1%) + (x2%-x1%)*(x2%-x1%)): ' rayon du cercle
2D_POLY_FROM x1%+k%,y1%
FOR an = 0 TO 8*ATN(1)+.1 STEP .1
    2D_POLY_TO x1%+k%*COS(an), y1%+k%*SIN(an)
NEXT an
IF term% = 1 THEN x1% = -1
RETURN
' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
Desrem:
IF CHECKED(f%+11)=0 THEN RETURN
FILE_SAVE p%,fpr$: ' sauvegarde préalable
x% = MOUSE_X_LEFT_DOWN(p%)/r: y% = MOUSE_Y_LEFT_DOWN(p%)/r
2D_FLOOD x%,y%,tr%,tg%,tb%
x1% = -1
CLIPBOARD_COPY p%
RETURN
' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
Desanu:
IF FILE_EXISTS(fpr$) = 1 THEN FILE_LOAD p%,fpr$: CLIPBOARD_COPY p%
RETURN
' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
Descou:
x%=MOUSE_X_LEFT_DOWN(f%+5): y%=MOUSE_Y_LEFT_DOWN(f%+5)
tr%=COLOR_PIXEL_RED(f%+5,x%,y%): tg%=COLOR_PIXEL_GREEN(f%+5,x%,y%)
tb%=COLOR_PIXEL_BLUE(f%+5,x%,y%): COLOR f%+3,tr%,tg%,tb%
RETURN
' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
Desfin:
ret% = 1
TIMER_OFF t%: DELETE t%: OFF_CLICK p%: 2D_TARGET_IS n2t%
DELETE f%: CAPTION 0,cap$
WAIT 100
EXIT_SUB
RETURN
END_SUB
' ==============================================================================

PS pas beaucoup d'activité sur le forum ces jours-ci...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
mindstorm

avatar

Nombre de messages : 530
Age : 48
Localisation : charente
Date d'inscription : 13/02/2013

MessageSujet: Re: Traitement d'images (2)   Mer 3 Déc 2014 - 23:07

voici le complément idéal au problème de notre ami pedro
merci jl35
bizard
je ne parviens pas a insérer du texte
de plus j ai une erreur avec la seul fonction active ( dessiner)
CLIPBOARD_PASTE p%: IF term% = 1 THEN FILE_SAVE p%,fpr$: ' sauvegarde préalable
impossible to save to the FILE line 746
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Traitement d'images (2)   Jeu 4 Déc 2014 - 1:53

bonjour mindstorm,

vite fait,
1) Fonction 'Insertion de texte': tu tapes le texte dans la fenêtre, tu choisis les enrichissements et la couleur, tu indiques les coordonnées d'insertion x et y, et tu cliques 'Appliquer'
2) Pour le FILE_SAVE, tu as bien adapté à ton environnement le chemin de fpr$ en tête de la SUB Dessin ?
Chez moi c'est dans C:\Temp, mais peut-être ce répertoire n'existe pas chez toi... il faut ajuster, c'est un fichier temporaire que tu peux mettre n'importe où.

Il y a aussi en tête du programme des chemins à ajuster (dont celui de KGF.dll, mais tu l'as appris à tes dépens... Very Happy )
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
mindstorm

avatar

Nombre de messages : 530
Age : 48
Localisation : charente
Date d'inscription : 13/02/2013

MessageSujet: Re: Traitement d'images (2)   Jeu 4 Déc 2014 - 22:18

merci
je vois cela se soir
@ JL35
il a bien sur un léger mieux et je peux dessiner
mais aucune autre fonction n est active
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
mindstorm

avatar

Nombre de messages : 530
Age : 48
Localisation : charente
Date d'inscription : 13/02/2013

MessageSujet: Re: Traitement d'images (2)   Jeu 4 Déc 2014 - 23:34

@ JL35
non toujours rien
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Traitement d'images (2)   Ven 5 Déc 2014 - 0:43

Désolé mindstorm, j'ai fait quelques modifs chez moi, mais si je reprends telle quelle la version que j'ai publiée là-haut j'arrive bien à utiliser les fonctions proposées.
Quand tu appelles la fonction 'Dessiner', il s'affiche un Form spécial dessin dans lequel tu peux changer les paramètres du dessin.
Mais avant d'appeler une autre fonction par le menu, est-ce que tu as bien 'Quitté' la fonction dessin ?
On ne peut pas utiliser simultanément deux fonctions, il faut absolument quitter la précédente (sa fenêtre doit disparaître) avant de lancer la suivante.
Je n'ai pas mis de contrôle pour interdire ça (en fait on est dans une Sub, et il faut quitter cette sub pour pouvoir faire autre chose et je ne sais pas trop comment interdire de le faire).
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
mindstorm

avatar

Nombre de messages : 530
Age : 48
Localisation : charente
Date d'inscription : 13/02/2013

MessageSujet: Re: Traitement d'images (2)   Ven 5 Déc 2014 - 0:50

peut être faut il avoir une version supérieur a 25i9 pour travailler?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Traitement d'images (2)   Ven 5 Déc 2014 - 1:14

J'ai bien la 26i2 mais je ne vois pas ce qui gênerait pour une version précédente, il n'y a rien de stratégique là-dedans...
C'est vrai que j'ai eu la flemme de rédiger l'aide détaillée, mais ça me paraît assez simple... sauf je le répète qu'il ne faut pas lancer une fonction quand une fonction précédente est active.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
mindstorm

avatar

Nombre de messages : 530
Age : 48
Localisation : charente
Date d'inscription : 13/02/2013

MessageSujet: Re: Traitement d'images (2)   Ven 5 Déc 2014 - 1:20

je sais
il n y a pas de raison
mais
maintenant j ai un nouveau message d erreur
impossible de charger le fichier panoramic.exe et cela avec un chemin fantaisiste
affraid
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Traitement d'images (2)   Ven 5 Déc 2014 - 1:38

scratch là ce n'est plus de mon ressort, et puis il faut que Sleep
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
mindstorm

avatar

Nombre de messages : 530
Age : 48
Localisation : charente
Date d'inscription : 13/02/2013

MessageSujet: Re: Traitement d'images (2)   Ven 5 Déc 2014 - 11:28

merci pour votre soutient
de retour sur une version stable, la seul fonction disponible est le dessin ou tout marche pour le mieux
peut être n'ai je pas changé tout les chemins d’accès, mais je n'en vois pas d'autres:
fsav$
DLL_ON
fpr$
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Traitement d'images (2)   Ven 5 Déc 2014 - 17:56

Ce sont bien a priori les trois seuls chemins à adapter.
Le but du programme est le traitement d'une image, et la plupart des fonctions ne concernent que le traitement de cette image.
Et je me demande à quel niveau ça coince.
Si tu n'as plus d'erreurs au chargement,
- Est-ce que tu as bien une version relativement récente de KGF.dll ?
- Est-ce que tu arrives seulement à charger une image (Menu 'Fichier', 'Ouvrir') ? et est-ce que cette image s'affiche correctement, avec ses proportions et les graduations en pixels à gauche et en bas ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
mindstorm

avatar

Nombre de messages : 530
Age : 48
Localisation : charente
Date d'inscription : 13/02/2013

MessageSujet: Re: Traitement d'images (2)   Ven 5 Déc 2014 - 23:18

@JL35
Pour la version de KGF, comme je l'ai chargé cette semaine, je dois donc surement avoir une version récente !
pour le chargement tout semble se passer normalement et la fonction dessin semble elle aussi fonctionner.
J'ai même retrouvé dans Temp la sauvegarde.
Maintenant ce n'est pas que je voulais utiliser ton logiciel complet, mais je cherche a automatiser l’écriture des textes sur les faces du cube a pedro.
il me faut au moins l’écriture et la rotation.
Je pensais récupérer les sub pour faire un autre programme.
Malheureusement mes connaissances sont un peut juste pour suivre notre ami Klaus.

Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Traitement d'images (2)   Sam 6 Déc 2014 - 0:42

Bonsoir mindstorm,
Je ne sais pas trop si mon programme pouvait correspondre à ce que tu recherches, sans doute les fonctions graphiques de KGF.dll de l'ami Klaus seraient plus intéressantes, et je t'assure que ce n'est pas difficile à utiliser, le mode d'emploi est très bien fait.
Regarde la section 'Gestion d'images', avec notamment la fonction WriteTextOverPicture pour écrire un texte sur une image, comme son nom l'indique.
Maintenant, j'ai cru comprendre que c'est pour de la 3D, et là je n'ai aucune compétence...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
mindstorm

avatar

Nombre de messages : 530
Age : 48
Localisation : charente
Date d'inscription : 13/02/2013

MessageSujet: Re: Traitement d'images (2)   Dim 7 Déc 2014 - 23:01

merci JL35
Il va falloir que je me plonge réellement dans cette DLL si redouté.

Bien sur c'est pour la 3D, mais il ne faut pas croire , beaucoup de chose se pense en 2D et grâce à la magie de Jack cheers

Merci encore pour tes encouragements.
Malheureusement pour ton programme je ne suis vraiment pas au niveau.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Traitement d'images (2)   Dim 7 Déc 2014 - 23:34

Les dll ne sont pas bien compliquées à utiliser, ce sont des 'boîtes noires', tu leur donnes des paramètres à l'entrée et tu as un résultat à la sortie, il n'y a pas besoin de connaître leur fonctionnement interne (heureusement). Il suffit de dénicher le mode d'emploi de la fonction désirée dans la documentation de Klaus, c'est sans doute le plus difficile, elle est devenue tellement abondante !

Pour mon programme, il n'est pas très compliqué, le plus délicat est l'utilisation des timers pour le dessin en temps réel, affichage du tracé provisoire tant que la souris est enfoncée, et on est toujours à la merci d'un runtime error.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
mindstorm

avatar

Nombre de messages : 530
Age : 48
Localisation : charente
Date d'inscription : 13/02/2013

MessageSujet: Re: Traitement d'images (2)   Lun 8 Déc 2014 - 21:57

c'est tout de même bizarre qu il ne fonctionne pas chez moi!
dans le coup j'ai pris du retard dans mes deco de Noel ...
je devais faire une crèche avec la domotique Panoramic scratch
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Traitement d'images (2)   Lun 8 Déc 2014 - 22:50

Ça m'ennuie ton affaire mindstorm, et si tu me disais exactement ce qui ne va pas ?
J'ai cru comprendre que le dessin fonctionne mais pas les autres fonctions ?
Je pars du principe que tu commences par charger une image dans le picture (Menu 'Fichier', 'Ouvrir')
- Est-ce que l'image s'affiche bien, avec ses échelles en pixels à gauche et en bas ?
- Dans le menu 'Fonction', si tu cliques par exemple sur la fonction 'Rotation/Symétrie', est-ce que tu as bien l'affichage de la fenêtre de choix:
- Et si tu cliques par exemple sur 'Rotation 90° G' est-ce que l'image est pivotée vers la gauche de 90 degrés ? ou non ?

Je ne vois pas bien comment, si tu cliques sur une option du menu, tu peux ne pas aller dans le sous-programme correspondant...

Et même sans charger d'image,si tu prends la fonction d'insertion de texte, tu dois bien avoir l'affichage de la Form d'insertion:
et si tu saisis un texte quelconque, en modifiant éventuellement les coordonnées X et Y, puis 'Appliquer', le texte doit bien s'afficher dans le picture ?

PS: mais je reconnais, en torturant le programme dans tous les sens, que j'arrive à tomber sur des cas de blocage... Crying or Very sad
Il y a une gymnastique un peu délicate entre le picture, le presse-papier, et l'image interne...

Et pour les décos de Noël (ça presse), il vaut peut-être mieux compter sur un programme de dessin un peu plus élaboré, il y en a plein dans les gratuits sur internet...

Re PS : je te mets une nouvelle version, très peu différente, mais qui corrige quelques anomalies (notamment quand on crée le dessin de toutes pièces, sans image préalable):
Code:
' Traitement d'images
LABEL Quit, Chf, Affimint, Echelles, Chsp, Chtr, Ched, Chcou, Edcou
LABEL Rotsy, Rotsym, Resiz1, Resize, Decoup1, Vdec, Anvisu, Decoupe, Lumin, Filtre
LABEL Ngris, Applic, Valide, Txt1, Vtex, Majdep, Cltxt, Texte, Fonte, Ctexte, Svav, Annul
LABEL Sauve, Dessiner, Aide
DIM a$,i%,j%,k%,wi%,res%,ed1%,ed2%,od%,sd%,p%,pv%,ph%,w%,h%,rwh,r,frot%,fdim%
DIM fdec%,spa%,f$,spd%,edd%,flum%,tb1%,edb%,br%,ga%,co%,ffil%,tb4%,edc%,fr%,fg%,fb%
DIM ftex%,fftx%,spt%,edt%,pico%,chk%,memt%,rgb%,rt%,gt%,bt%,xt%,yt%,fnt$,sz%,attr%
DIM fl%,fgri%,fs$,img1%,btl1%,btf1%,wp%,hp%,xd%,yd%,wd%,hd%,fsav$,rc$

fsav$ = "C:\TEMP\Fsave.bmp": ' sauvegarde (pour annulation éventuelle)
IF FILE_EXISTS(fsav$)=1 THEN FILE_DELETE fsav$

DLL_ON "C:\PANORAMIC\KLAUS\DLLs\KGF.dll"

wi% = 800
WIDTH 0,wi%+45: HEIGHT 0,wi%+105
COLOR 0,170,255,255: FONT_BOLD 0: BORDER_SMALL 0: ON_CLOSE 0,Quit
CAPTION 0,"                -   TRAITEMENT   D' IMAGES   -"
MAIN_MENU 10
SUB_MENU 20: PARENT 20,10: CAPTION 20,"Fichier"
  SUB_MENU 21: PARENT 21,20: CAPTION 21,"Ouvrir...": ON_CLICK 21,Chf
  SUB_MENU 23: PARENT 23,20: CAPTION 23,"Enregistrer sous...": ON_CLICK 23,Sauve
  SUB_MENU 25: PARENT 25,20: CAPTION 25,"Quitter": ON_CLICK 25,Quit
SUB_MENU 30: PARENT 30,10: CAPTION 30,"Fonction"
  SUB_MENU 31: PARENT 31,30: CAPTION 31,"Rotation/Symétrie": ON_CLICK 31,Rotsy
  SUB_MENU 32: PARENT 32,30: CAPTION 32,"Redimensionner": ON_CLICK 32,Resiz1
  SUB_MENU 33: PARENT 33,30: CAPTION 33,"Découper": ON_CLICK 33,Decoup1
  SUB_MENU 34: PARENT 34,30: CAPTION 34,"Gamma/Luminosité/Contraste": ON_CLICK 34,Lumin
  SUB_MENU 35: PARENT 35,30: CAPTION 35,"Filtre couleurs": ON_CLICK 35,Filtre
  SUB_MENU 36: PARENT 36,30: CAPTION 36,"Conversion en niveaux de gris": ON_CLICK 36,Ngris
  SUB_MENU 37: PARENT 37,30: CAPTION 37,"Insertion de texte": ON_CLICK 37,Txt1
  SUB_MENU 38: PARENT 38,30: CAPTION 38,"Dessiner": ON_CLICK 38,Dessiner
  SUB_MENU 39: PARENT 39,30: CAPTION 39,"Annuler la dernière opération": ON_CLICK 39,Annul
SUB_MENU 40: PARENT 40,10: CAPTION 40,"Aide": ON_CLICK 40,Aide

i% = 49: ' +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
i%=i%+1: ALPHA i%: TOP i%,6: LEFT i%,3: CAPTION i%,"Image:"
i%=i%+1: EDIT i%: TOP i%,3: LEFT i%,45: WIDTH i%,500: ON_CLICK i%,Chf
         TEXT i%," (clic pour choisir une image)": COLOR i%,255,255,128: ed1%=i%
i%=i%+1: EDIT i%: TOP i%,-1: LEFT i%,LEFT(i%-1)+WIDTH(i%-1)+20: WIDTH i%,160
         FONT_SIZE i%,12: COLOR i%,255,255,128: ed2%=i%
i%=i%+1: BUTTON i%: TOP i%,0: LEFT i%,WIDTH(0)-93: CAPTION i%,"Annuler": ON_CLICK i%,Annul
i%=i%+1: OPEN_DIALOG i%: od% = i%
i%=i%+1: SAVE_DIALOG i%: sd% = i%

i% = 59: ' +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
i%=i%+1: PICTURE i%: TOP i%,TOP(ed1%)+25: LEFT i%,25: WIDTH i%,wi%: HEIGHT i%,wi%
         STRETCH_ON i%: p%=i%
i%=i%+1: PICTURE i%: TOP i%,TOP(p%): LEFT i%,0: HEIGHT i%,wi%+1: WIDTH i%,25
         COLOR i%,200,200,200: pv%=i%
i%=i%+1: PICTURE i%: TOP i%,TOP(p%)+wi%: LEFT i%,LEFT(p%): WIDTH i%,wi%+1: HEIGHT i%,20
         COLOR i%,200,200,200: ph%=i%
i%=i%+1: IMAGE i%: img1%=i%

i% = 79: ' +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
i%=i%+1: FORM i%: TOP i%,wi%-100: LEFT i%,300: WIDTH i%,100: HEIGHT i%,170
         BORDER_SMALL i%: HIDE i%: CAPTION i%,"ROT./SYM.": frot% = i%
         COLOR i%,255,64,64: FONT_BOLD i%
i%=i%+1: BUTTON i%: PARENT i%,frot%: TOP i%,5: LEFT i%,10: WIDTH i%,100
         CAPTION i%,"Rotation 90° G"
i%=i%+1: BUTTON i%: PARENT i%,frot%: TOP i%,30: LEFT i%,10: WIDTH i%,WIDTH(i%-1)
         CAPTION i%,"Rotation 90° D"
i%=i%+1: BUTTON i%: PARENT i%,frot%: TOP i%,55: LEFT i%,10: WIDTH i%,WIDTH(i%-1)
         CAPTION i%,"Rotation 180°"
i%=i%+1: BUTTON i%: PARENT i%,frot%: TOP i%,80: LEFT i%,10: WIDTH i%,WIDTH(i%-1)
         CAPTION i%,"Symétrie H"
i%=i%+1: BUTTON i%: PARENT i%,frot%: TOP i%,105: LEFT i%,10: WIDTH i%,WIDTH(i%-1)
         CAPTION i%,"Symétrie V"
         FOR j%=frot%+1 TO frot%+5: ON_CLICK j%,Rotsym: NEXT j%

i% = 89: ' +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
i%=i%+1: FORM i%: TOP i%,wi%-100: LEFT i%,300: WIDTH i%,150: HEIGHT i%,130
         BORDER_SMALL i%: HIDE i%: CAPTION i%,"REDIMENSIONNER": fdim% = i%
         COLOR i%,255,64,64: FONT_BOLD i%
i%=i%+1: ALPHA i%: PARENT i%,fdim%: TOP i%,3: CAPTION i%," Nouvelles dimensions:"
i%=i%+1: SPIN i%: PARENT i%,fdim%: TOP i%,20: LEFT i%,5: WIDTH i%,58
         ON_CHANGE i%,Chsp: spd%=i%
i%=i%+1: ALPHA i%: PARENT i%,fdim%: TOP i%,TOP(i%-1)+3: LEFT i%,LEFT(i%-1)+WIDTH(i%-1)
         CAPTION i%," X"
i%=i%+1: EDIT i%: PARENT i%,fdim%: TOP i%,TOP(i%-2): LEFT i%,LEFT(i%-1)+16
         WIDTH i%,48: TEXT i%,"0": edd%=i%
i%=i%+1: BUTTON i%: PARENT i%,fdim%: TOP i%,55: LEFT i%,30: CAPTION i%,"Appliquer"
         ON_CLICK i%,Resize

i% = 99: ' +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
i%=i%+1: FORM i%: TOP i%,wi%-100: LEFT i%,300: WIDTH i%,340: HEIGHT i%,120
         BORDER_SMALL i%: HIDE i%: CAPTION i%,"DÉCOUPER": fdec% = i%
         COLOR i%,255,64,64: FONT_BOLD i%
i%=i%+1: ALPHA i%: PARENT i%,fdec%: TOP i%,20: LEFT i%,5
         CAPTION i%,"X=               Y=               W=               H="
i%=i%+1: SPIN i%: PARENT i%,fdec%: TOP i%,TOP(i%-1)-3: LEFT i%,20: WIDTH i%,55: spa%=i%
i%=i%+1: SPIN i%: PARENT i%,fdec%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+75: WIDTH i%,55
i%=i%+1: SPIN i%: PARENT i%,fdec%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+80: WIDTH i%,55
i%=i%+1: SPIN i%: PARENT i%,fdec%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+75: WIDTH i%,55
i%=i%+1: BUTTON i%: PARENT i%,fdec%: TOP i%,TOP(i%-1)+35: LEFT i%,WIDTH(fdec%)/2-130
         CAPTION i%,"Voir": ON_CLICK i%,Vdec
i%=i%+1: BUTTON i%: PARENT i%,fdec%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+90
         CAPTION i%,"Annuler": ON_CLICK i%,Anvisu
i%=i%+1: BUTTON i%: PARENT i%,fdec%: TOP i%,TOP(i%-1)
         LEFT i%,WIDTH(fdec%)/2+50: CAPTION i%,"Découper": ON_CLICK i%,Decoupe
        
i% = 109: ' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
i%=i%+1: FORM i%: TOP i%,wi%-100: LEFT i%,300: WIDTH i%,340: HEIGHT i%,130
         BORDER_SMALL i%: HIDE i%: CAPTION i%,"LUMINOSITÉ/GAMMA/CONTRASTE": flum% = i%
         COLOR i%,255,64,64: FONT_BOLD i%
i%=i%+1: ALPHA i%: PARENT i%,flum%: TOP i%,8: CAPTION i%,"Lum."
i%=i%+1: TRACK_BAR i%: PARENT i%,flum%: TOP i%,TOP(i%-1)-5: LEFT i%,LEFT(i%-1)+25
         WIDTH i%,WIDTH(flum%)-74: tb1%=i%
i%=i%+1: EDIT i%: PARENT i%,flum%: TOP i%,TOP(i%-2): LEFT i%,LEFT(i%-1)+WIDTH(i%-1)-2: WIDTH i%,30
         HEIGHT i%,15: edb%=i%
i%=i%+1: ALPHA i%: PARENT i%,flum%: TOP i%,27: CAPTION i%,"Gam."
i%=i%+1: TRACK_BAR i%: PARENT i%,flum%: TOP i%,TOP(i%-1)-5: LEFT i%,LEFT(tb1%): WIDTH i%,WIDTH(tb1%)
i%=i%+1: EDIT i%: PARENT i%,flum%: TOP i%,TOP(i%-1): LEFT i%,LEFT(tb1%)+WIDTH(tb1%)-2: WIDTH i%,30
         HEIGHT i%,15
i%=i%+1: ALPHA i%: PARENT i%,flum%: TOP i%,46: CAPTION i%,"Cont."
i%=i%+1: TRACK_BAR i%: PARENT i%,flum%: TOP i%,TOP(i%-1)-5: LEFT i%,LEFT(tb1%): WIDTH i%,WIDTH(tb1%)
i%=i%+1: EDIT i%: PARENT i%,flum%: TOP i%,TOP(i%-1): LEFT i%,LEFT(tb1%)+WIDTH(tb1%)-2: WIDTH i%,30
         HEIGHT i%,15
         FOR j% = tb1% TO tb1%+6 STEP 3
             MIN j%,-128: MAX j%,127: POSITION j%,0: ON_CHANGE j%,Chtr
         NEXT j%
         br%=0: ga%=0: co%=0: TEXT edb%,STR$(br%): TEXT edb%+3,STR$(ga%): TEXT edb%+6,STR$(co%)
         FOR j% = edb% TO edb%+6 STEP 3: ON_CHANGE j%,Ched: NEXT j%
i%=i%+1: BUTTON i%: PARENT i%,flum%: TOP i%,TOP(i%-1)+28: LEFT i%,LEFT(tb1%)
         CAPTION i%,"Aperçu": ON_CLICK i%,Applic: btl1%=i%
i%=i%+1: BUTTON i%: PARENT i%,flum%: TOP i%,TOP(i%-1): LEFT i%,LEFT(tb1%)+WIDTH(tb1%)-75
         CAPTION i%,"Valider": ON_CLICK i%,Valide
        
i% = 129: ' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
i%=i%+1: FORM i%: TOP i%,wi%-100: LEFT i%,300: WIDTH i%,340: HEIGHT i%,130
         BORDER_SMALL i%: HIDE i%: CAPTION i%,"FILTRE COULEURS": ffil% = i%
         COLOR i%,255,64,64: FONT_BOLD i%
i%=i%+1: ALPHA i%: PARENT i%,ffil%: TOP i%,8: CAPTION i%,"  R"
i%=i%+1: TRACK_BAR i%: PARENT i%,ffil%: TOP i%,TOP(i%-1)-5: LEFT i%,LEFT(i%-1)+25
         WIDTH i%,WIDTH(ffil%)-74: tb4%=i%
i%=i%+1: EDIT i%: PARENT i%,ffil%: TOP i%,TOP(i%-2): LEFT i%,LEFT(i%-1)+WIDTH(i%-1)-2: WIDTH i%,30
         HEIGHT i%,15: edc%=i%
i%=i%+1: ALPHA i%: PARENT i%,ffil%: TOP i%,27: CAPTION i%,"  G"
i%=i%+1: TRACK_BAR i%: PARENT i%,ffil%: TOP i%,TOP(i%-1)-5: LEFT i%,LEFT(tb4%): WIDTH i%,WIDTH(tb4%)
i%=i%+1: EDIT i%: PARENT i%,ffil%: TOP i%,TOP(i%-1): LEFT i%,LEFT(tb4%)+WIDTH(tb1%)-2: WIDTH i%,30
         HEIGHT i%,15
i%=i%+1: ALPHA i%: PARENT i%,ffil%: TOP i%,46: CAPTION i%,"  B"
i%=i%+1: TRACK_BAR i%: PARENT i%,ffil%: TOP i%,TOP(i%-1)-5: LEFT i%,LEFT(tb4%): WIDTH i%,WIDTH(tb4%)
i%=i%+1: EDIT i%: PARENT i%,ffil%: TOP i%,TOP(i%-1): LEFT i%,LEFT(tb4%)+WIDTH(tb4%)-2: WIDTH i%,30
         HEIGHT i%,15
         FOR j% = tb4% TO tb4%+6 STEP 3
             MIN j%,-1: MAX j%,255: POSITION j%,0: ON_CHANGE j%,Chcou
         NEXT j%
         fr%=-1: fg%=-1: fb%=-1: TEXT edc%,STR$(fr%): TEXT edc%+3,STR$(fg%): TEXT edc%+6,STR$(fb%)
         FOR j% = edc% TO edc%+6 STEP 3: ON_CHANGE j%,Ched: NEXT j%
i%=i%+1: BUTTON i%: PARENT i%,ffil%: TOP i%,TOP(i%-1)+28: LEFT i%,LEFT(tb1%)
         CAPTION i%,"Aperçu": ON_CLICK i%,Applic: btf1%=i%
i%=i%+1: BUTTON i%: PARENT i%,ffil%: TOP i%,TOP(i%-1): LEFT i%,LEFT(tb1%)+WIDTH(tb1%)-75
         CAPTION i%,"Valider": ON_CLICK i%,Valide

i% = 149: ' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
i%=i%+1: FORM i%: TOP i%,wi%-100: LEFT i%,300: WIDTH i%,220: HEIGHT i%,80
         BORDER_SMALL i%: HIDE i%: CAPTION i%,"CONVERSION EN NIVEAUX DE GRIS": fgri% = i%
         COLOR i%,255,64,64: FONT_BOLD i%
i%=i%+1: BUTTON i%: PARENT i%,fgri%: TOP i%,10: LEFT i%,20
         CAPTION i%,"Aperçu": ON_CLICK i%,Ngris
i%=i%+1: BUTTON i%: PARENT i%,fgri%: TOP i%,10: LEFT i%,110
         CAPTION i%,"Valider": ON_CLICK i%,Valide
        
i% = 159: ' +++++++++++ FORM INSERTION DE TEXTE ++++++++++++++++++++++++++++++++
i%=i%+1: FORM i%: TOP i%,wi%-20: LEFT i%,100: WIDTH i%,500: HIDE i%
         HEIGHT i%,170: BORDER_SMALL i%: CAPTION i%," -   TEXTE   SUR   IMAGE   -"
         ON_CLOSE i%,Cltxt: FONT_BOLD i%: COLOR i%,255,128,64: ftex% = i%
i%=i%+1: ALPHA i%: PARENT i%,ftex%: TOP i%,5: LEFT i%,5: CAPTION i%,"X=             Y="
i%=i%+1: SPIN i%: PARENT i%,ftex%: TOP i%,TOP(i%-1)-3: LEFT i%,20: WIDTH i%,50: spt%=i%
i%=i%+1: SPIN i%: PARENT i%,ftex%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+70: WIDTH i%,WIDTH(i%-1)
i%=i%+1: EDIT i%: PARENT i%,ftex%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+55: WIDTH i%,120
         ON_CLICK i%,Fonte: TEXT i%,"Arial": edt%=i%
i%=i%+1: SPIN i%: PARENT i%,ftex%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+WIDTH(i%-1)+3
         WIDTH i%,50: POSITION i%,16
i%=i%+1: PICTURE i%: PARENT i%,ftex%: TOP i%,TOP(spt%)+1: LEFT i%,LEFT(i%-1)+WIDTH(i%-1)+3
         WIDTH i%,30: HEIGHT i%,20: COLOR i%,0,0,0: ON_CLICK i%,Ctexte: pico%=i%
i%=i%+1: CHECK i%: PARENT i%,ftex%: TOP i%,TOP(i%-1)+2: LEFT i%,LEFT(i%-1)+WIDTH(i%-1)+10
         CAPTION i%,"G": chk%=i%
i%=i%+1: CHECK i%: PARENT i%,ftex%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+35: WIDTH i%,30
         CAPTION i%,"I ": FONT_ITALIC i%
i%=i%+1: CHECK i%: PARENT i%,ftex%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+35: WIDTH i%,30
         CAPTION i%,"S": FONT_UNDERLINE i%
i%=i%+1: MEMO i%: PARENT i%,ftex%: TOP i%,TOP(spt%)+25: LEFT i%,0: WIDTH i%,WIDTH(ftex%)-16
         HEIGHT i%,80: FONT_NAME i%,"Arial": memt%=i%
        
i%=i%+1: BUTTON i%: PARENT i%,ftex%: TOP i%,HEIGHT(ftex%)-60: LEFT i%,2: WIDTH i%,25
         CAPTION i%,CHR$(231): fl% = i%
i%=i%+1: BUTTON i%: PARENT i%,ftex%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+25: WIDTH i%,25
         CAPTION i%,CHR$(233)
i%=i%+1: BUTTON i%: PARENT i%,ftex%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+25: WIDTH i%,25
         CAPTION i%,CHR$(234)
i%=i%+1: BUTTON i%: PARENT i%,ftex%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+25: WIDTH i%,25
         CAPTION i%,CHR$(232)
         FOR j% = i%-3 TO i%: FONT_NAME j%,"Wingdings": ON_CLICK j%,Majdep: NEXT j%
i%=i%+1: SPIN i%: PARENT i%,ftex%: TOP i%,TOP(i%-1)+1: LEFT i%,LEFT(i%-1)+25: WIDTH i%,40
         POSITION i%,5
i%=i%+1: ALPHA i%: PARENT i%,ftex%: TOP i%,TOP(i%-1)+3: LEFT i%,LEFT(i%-1)+40: CAPTION i%,"pixels"
i%=i%+1: BUTTON i%: PARENT i%,ftex%: TOP i%,HEIGHT(ftex%)-60: LEFT i%,WIDTH(ftex%)/2-75
         WIDTH i%,50: CAPTION i%,"Voir": ON_CLICK i%,Vtex
i%=i%+1: BUTTON i%: PARENT i%,ftex%: TOP i%,TOP(i%-1): LEFT i%,WIDTH(ftex%)/2+50
         CAPTION i%,"Annuler": ON_CLICK i%,Anvisu
i%=i%+1: BUTTON i%: PARENT i%,ftex%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+90
         CAPTION i%,"Appliquer": ON_CLICK i%,Texte

i%=i%+1: FORM i%: TOP i%,TOP(ftex%)+48: LEFT i%,LEFT(ftex%)+LEFT(edt%): WIDTH i%,170
         HEIGHT i%,200: BORDER_HIDE i%: HIDE i%: fftx% = i%
i%=i%+1: LIST i%: PARENT i%,fftx%: FULL_SPACE i%
         FONT_NAMES_LOAD i%: ON_CLICK i%,Fonte
         FOR j% = COUNT(i%) TO 1 STEP -1
             IF LEFT$(ITEM_READ$(i%,j%),1) = "@" THEN ITEM_DELETE i%,j%
         NEXT j%
CLIPBOARD_STRING_COPY "": ' raz clipboard
rgb% = 0
w% = wi%: h% = wi%: rwh = w%/h%: TEXT ed2%,STR$(w%)+" x "+STR$(h%)+" pixels."
GOSUB Echelles
' ==============================================================================
END: ' =========================================================================
' ==============================================================================
Quit:
TERMINATE
' ==============================================================================
Chf:
' choix d'un fichier image
f$ = FILE_NAME$(od%): IF LEN(f$)<4 THEN RETURN
TEXT ed1%,f$
res% = DLL_CALL1("LoadAnyImageFile",ADR(f$)): ' -> clipboard
res% = DLL_CALL0("LoadPicture"): ' clipboard -> image interne
res% = DLL_CALL1("SetImmediateMode",1): ' mise à jour systématique du clipboard
GOSUB Affimint: ' afficher
2D_TARGET_IS p%
2D_IMAGE_COPY img1%,0,0,WIDTH(p%),HEIGHT(p%): ' sauvegarde dans Image 103
RETURN
' ==============================================================================
Affimint:
' Afficher l'image interne
w% = DLL_CALL0("GetPictureWidth"): ' dimensions de l'image interne
h% = DLL_CALL0("GetPictureHeight")
IF w%>h%
    WIDTH p%,wi%: HEIGHT p%,WIDTH(p%)*h%/w%
ELSE
    HEIGHT p%,wi%: WIDTH p%,HEIGHT(p%)*w%/h%
END_IF
res% = DLL_CALL0("SavePicture"): ' image interne dans le clipboard
res% = DLL_CALL0("LoadPicture"): ' clipboard -> image interne
CLIPBOARD_PASTE p%: ' affichage
TEXT ed2%,STR$(w%)+" x "+STR$(h%)+" pixels."
rwh = w%/h%
GOSUB Echelles
RETURN
' ==============================================================================
Echelles:
' échelles verticale et horizontale, en pixels
IF w%<=0 THEN w% = WIDTH(p%): h% = HEIGHT(p%)
r = WIDTH(p%)/w%
2D_TARGET_IS pv%: PRINT_TARGET_IS pv%
CLS: COLOR pv%,200,200,200: 2D_FILL_COLOR 200,200,200
FOR i% = 0 TO h% STEP 50
    IF i%/100 = INT(i%/100)
        2D_LINE 4,i%*r,25,i%*r
        PRINT_LOCATE 0,i%*r-13: PRINT STR$(i%)
    ELSE
        2D_LINE 15,i%*r,25,i%*r
    END_IF
NEXT i%
TOP ph%,TOP(p%)+HEIGHT(p%)
2D_TARGET_IS ph%: PRINT_TARGET_IS ph%
CLS: COLOR ph%,200,200,200: 2D_FILL_COLOR 200,200,200
FOR i% = 0 TO w% STEP 50
    IF i%/100 = INT(i%/100)
        2D_LINE i%*r,0,i%*r,16
        a$=STR$(i%): j%=20: IF LEN(a$)>3 THEN j%=25
        PRINT_LOCATE i%*r-j%,6: PRINT a$
    ELSE
        2D_LINE i%*r,0,i%*r,6
    END_IF
NEXT i%
RETURN
' ==============================================================================
Chsp:
i% = POSITION(spd%): TEXT edd%,STR$(INT(i%/rwh))
RETURN
' ==============================================================================
Chtr:
IF POSITION(tb1%)<>br% THEN br%=POSITION(tb1%): TEXT edb%,STR$(br%)
IF POSITION(tb1%+3)<>ga% THEN ga%=POSITION(tb1%+3): TEXT edb%+3,STR$(ga%)
IF POSITION(tb1%+6)<>co% THEN co%=POSITION(tb1%+6): TEXT edb%+6,STR$(co%)
RETURN
' ==============================================================================
Ched:
i% = VAL(TEXT$(edb%)): IF i%<>br% THEN br%=i%: POSITION tb1%,i%
i% = VAL(TEXT$(edb%+3)): IF i%<>ga% THEN ga%=i%: POSITION tb1%+3,i%
i% = VAL(TEXT$(edb%+6)): IF i%<>co% THEN co%=i%: POSITION tb1%+6,i%
RETURN
' ==============================================================================
Chcou:
fr%=POSITION(tb4%): TEXT edc%,STR$(fr%)
fg%=POSITION(tb4%+3): TEXT edc%+3,STR$(fg%)
fb%=POSITION(tb4%+6): TEXT edc%+6,STR$(fb%)
RETURN
' ==============================================================================
Edcou:
IF TEXT$(edc%)="-" OR TEXT$(edc%+3)="-"OR TEXT$(edc%+6)="-" THEN RETURN
i% = VAL(TEXT$(edc%)): IF i%<>fr% THEN fr%=i%: POSITION tb4%,i%
i% = VAL(TEXT$(edc%+3)): IF i%<>fg% THEN fg%=i%: POSITION tb4%+3,i%
i% = VAL(TEXT$(edc%+6)): IF i%<>fb% THEN fb%=i%: POSITION tb4%+6,i%
RETURN
' ==============================================================================
Rotsy:
SHOW frot%
RETURN
' ==============================================================================
Rotsym:
' Rotation de l'image interne
i% = NUMBER_CLICK
CLIPBOARD_COPY p%
res% = DLL_CALL0("LoadPicture"): ' clipboard -> image interne
GOSUB Svav: ' sauvegarde avant
SELECT i%
    CASE 81: res% = DLL_CALL0("RotateM90")
    CASE 82: res% = DLL_CALL0("Rotate90")
    CASE 83: res% = DLL_CALL0("Rotate180")
    CASE 84: res% = DLL_CALL1("MirrorPicture",2)
    CASE 85: res% = DLL_CALL1("MirrorPicture",1)
END_SELECT
HIDE frot%
GOSUB Affimint: ' afficher l'image interne (+ copie dans le clipboard)
RETURN
' ==============================================================================
Resiz1:
SHOW fdim%
RETURN
' ==============================================================================
Resize:
' Redimensionner
GOSUB Svav: ' sauvegarde avant
w% = POSITION(spd%): h% = VAL(TEXT$(edd%))
res% = DLL_CALL0("SavePicture"): ' image interne dans le clipboard
res% = DLL_CALL2("ResizePicture",w%,h%)
res% = DLL_CALL0("LoadPicture"): ' clipboard -> image interne
HIDE fdim%
GOSUB Affimint
RETURN
' ==============================================================================
Decoup1:
SHOW fdec%
RETURN
' ==============================================================================
Vdec:
' Tracé du rectangle de découpe, pour voir
xd% = POSITION(spa%): yd% = POSITION(spa%+1): wd% = POSITION(spa%+2): hd% = POSITION(spa%+3)
IF wd%<=0 OR hd%<=0 THEN RETURN
CLIPBOARD_PASTE p%
2D_TARGET_IS p%: 2D_PEN_COLOR 255,0,255: 2D_PEN_WIDTH 1
IF w% > 1000 THEN 2D_PEN_WIDTH 2: IF w%>2000 THEN 2D_PEN_WIDTH 4
2D_LINE xd%,yd%,xd%+wd%-1,yd%: 2D_POLY_TO xd%+wd%-1,yd%+hd%-1
2D_POLY_TO xd%,yd%+hd%-1: 2D_POLY_TO xd%,yd%
RETURN
' ==============================================================================
Anvisu:
CLIPBOARD_PASTE p%
RETURN
' ==============================================================================
Decoupe:
' Découpe d'un rectangle dans une image
CLIPBOARD_PASTE p%
GOSUB Svav: ' sauvegarde avant
xd% = POSITION(spa%): yd% = POSITION(spa%+1): wd% = POSITION(spa%+2): hd% = POSITION(spa%+3)
IF wd%<=0 OR hd%<=0 THEN RETURN
res% = DLL_CALL4("ExtractRectangleFromPicture",xd%,yd%,xd%+wd%-1,yd%+hd%-1)
HIDE fdec%
GOSUB Affimint
RETURN
' ==============================================================================
Lumin:
SHOW flum%
RETURN
' ==============================================================================
Filtre:
SHOW ffil%
RETURN
' ==============================================================================
Ngris:
' Conversion en niveaux de gris
i% = NUMBER_CLICK
IF i% = 36
    SHOW fgri%
ELSE
    IF i% = fgri%+1: ' Aperçu
        GOSUB Svav: ' sauvegarde avant
        2D_IMAGE_PASTE img1%,0,0
        CLIPBOARD_COPY p%: res%=DLL_CALL0("LoadPicture"): ' restore image interne
        res% = DLL_CALL0("SetPictureGrayScale"): ' -> image interne
        GOSUB Affimint: ' affichage résultat
    END_IF
END_IF
RETURN
' ==============================================================================
Applic:
GOSUB Svav: ' sauvegarde avant
i% = NUMBER_CLICK
IF i% = btl1%
    2D_TARGET_IS p%: 2D_IMAGE_PASTE img1%,0,0
    BRIGHTNESS p%,br%
    GAMMA p%,ga%
    CONTRAST p%,co%
ELSE
    2D_TARGET_IS p%: 2D_IMAGE_PASTE img1%,0,0
    CLIPBOARD_COPY p%: res%=DLL_CALL0("LoadPicture"): ' restore image interne
    res% = DLL_CALL3("SetPictureFilter",fr%,fg%,fb%): ' -> image interne
    GOSUB Affimint: ' affichage résultat
END_IF
RETURN
' ==============================================================================
Valide:
' validation de l'opération (écran courant)
CLIPBOARD_COPY p%
res% = DLL_CALL0("LoadPicture"): ' clipboard -> image interne
RETURN
' ==============================================================================
Txt1:
SHOW ftex%: TO_FOREGROUND ftex%
FONT_NAME memt%,TEXT$(edt%)
clipboard_copy p%
RETURN
' ==============================================================================
Vtex:
' Tracé du rectangle enveloppant du texte, pour voir
j% = COUNT(memt%): IF j%<1 THEN RETURN: ' pas de texte
FONT_NAME p%,TEXT$(edt%): FONT_SIZE p%,POSITION(spt%+3)
xd% = POSITION(spt%): yd% = POSITION(spt%+1): wd%=0
FOR i% = 1 TO j%
    IF TEXT_WIDTH(ITEM_READ$(memt%,i%),p%)>wd% THEN wd%=TEXT_WIDTH(ITEM_READ$(memt%,i%),p%)
NEXT i%
hd% = j%*TEXT_HEIGHT("ABCjkl",p%)
IF wd%<=0 OR hd%<=0 THEN RETURN
CLIPBOARD_PASTE p%
2D_TARGET_IS p%: 2D_PEN_COLOR 255,0,255: 2D_PEN_DOT: 2D_PEN_WIDTH 1
IF w% > 1000 THEN 2D_PEN_WIDTH 2: IF w%>2000 THEN 2D_PEN_WIDTH 4
2D_LINE xd%,yd%,xd%+wd%-1,yd%: 2D_POLY_TO xd%+wd%-1,yd%+hd%-1
2D_POLY_TO xd%,yd%+hd%-1: 2D_POLY_TO xd%,yd%
RETURN
' ==============================================================================
Majdep:
' déplacement du texte (emplacement)
i% = NUMBER_CLICK
j% = POSITION(fl%+4): ' pas du déplacement (pixels)
IF i% = fl%
    POSITION spt%,POSITION(spt%)-j%
ELSE
    IF i% = fl%+1
        POSITION spt%+1,POSITION(spt%+1)-j%
    ELSE
        IF i% = fl%+2
            POSITION spt%+1,POSITION(spt%+1)+j%
        ELSE
            POSITION spt%,POSITION(spt%)+j%
        END_IF
    END_IF
END_IF
IF POSITION(spt%)<0 THEN POSITION spt%,0
IF POSITION(spt%+1)<0 THEN POSITION spt%+1,0
IF COUNT(memt%) > 0 THEN GOSUB Vtex
RETURN
' ==============================================================================
Cltxt:
CLIPBOARD_PASTE p%
RETURN
' ==============================================================================
Texte:
' Insertion de texte (plusieurs lignes éventuellement)
i% = NUMBER_CLICK
IF i% = 121
    SHOW ftex%: TO_FOREGROUND ftex%
ELSE
    HIDE ftex%
    IF COUNT(memt%)>0
        CLIPBOARD_PASTE p%
        GOSUB Svav: ' sauvegarde avant
        a$ = ""
        FOR i% = 1 TO COUNT(memt%)
            a$ = a$+ITEM_READ$(memt%,i%)+CHR$(13)+CHR$(10)
        NEXT i%
        a$ = LEFT$(a$,LEN(a$)-2)
        xt% = POSITION(spt%): yt% = POSITION(spt%+1)
        fnt$ = TEXT$(spt%+2): sz% = POSITION(spt%+3): attr% = 0
        IF CHECKED(chk%) = 1 THEN attr% = 1
        IF CHECKED(chk%+1) = 1 THEN attr% = attr%+2
        IF CHECKED(chk%+2) = 1 THEN attr% = attr%+4
        Tx2Pic(p%,xt%,yt%,a$,fnt$,sz%,attr%,rgb%)
        CLIPBOARD_COPY p%: ' -> clipboard
    END_IF
END_IF
RETURN
' ==============================================================================
Fonte:
i% = NUMBER_CLICK
IF i% = edt%
    SHOW fftx%
ELSE
    TEXT edt%,ITEM_INDEX$(fftx%+1): FONT_NAME memt%,TEXT$(edt%)
    HIDE fftx%
END_IF
RETURN
' ==============================================================================
Ctexte:
Palette16(LEFT(ftex%)+140,TOP(ftex%)-20)
rt% = INT(rgb%/65536): gt% = BIN_AND(rgb%/256,255): bt% = BIN_AND(rgb%,255)
COLOR pico%,rt%,gt%,bt%
RETURN
' ==============================================================================
Svav:
' sauvegarde avant opération
wp% = WIDTH(p%): hp% = HEIGHT(p%)
FILE_SAVE p%,fsav$
RETURN
' ==============================================================================
Annul:
' Annulation: retour à l'état précédent
WIDTH p%,wp%: HEIGHT p%,hp%
IF FILE_EXISTS(fsav$) = 0 THEN RETURN
FILE_LOAD p%,fsav$
CLIPBOARD_COPY p%: ' -> clipboard
res% = DLL_CALL0("LoadPicture"): ' clipboard -> image interne
GOSUB Affimint: ' réaffichage
RETURN
' ==============================================================================
Sauve:
' Enregistrement de l'image résultante
fs$ = FILE_NAME$(sd%): IF LEN(fs$)<4 THEN RETURN
CLIPBOARD_COPY p%
res% = DLL_CALL1("SaveAnyImageFile",ADR(fs$)): ' sauvegarde de l'image du clipboard
RETURN
' ==============================================================================
Dessiner:
IF r = 0 THEN r = 1
Dessin(p%,r)
RETURN
' ==============================================================================
Aide:
' A voir...
rc$ = CHR$(13)+CHR$(10)
a$ = " -  INSERTION  DE  TEXTE :"+rc$+rc$
a$=a$+"    Menu 'Insertion de texte', affichage d'une boîte de dialogue."+rc$
a$=a$+"    Taper le texte à insérer, définir sa police, sa taille, sa couleur et ses"+rc$
a$=a$+"enrichissements."+rc$
a$=a$+"    Définir les coordonnées de l'insertion X et Y, en fonction des échelles"+rc$
a$=a$+"en pixels qui encadrent l'écran. Le bouton 'Voir' permet de visualiser"+rc$
a$=a$+"sur l'image le rectangle enveloppant du texte, en fonction de sa taille,"+rc$
a$=a$+"de ses paramètres et de ses coordonnées d'insertion."+rc$
a$=a$+"    On peut déplacer ce rectangle par les boutons flèches, d'une valeur"+rc$
a$=a$+"en pixels à ajuster, pour une insertion précise."+rc$
a$=a$+"    Pour valider l'insertion : bouton 'Appliquer', puis fermer la fenêtre"+rc$
a$=a$+"d'insertion par la croix rouge de fermeture."+rc$+rc$
a$=a$+"NB: l'insertion de texte à fond transparent se fait pixel par pixel, et peut"+rc$
a$=a$+"       donc durer quelques secondes."
MESSAGE a$
RETURN
' ==============================================================================
SUB Tx2Pic(p%,x%,y%,txt$,fnt$,sz%,attr%,coul%)
' Affichage de lignes de texte txt$ sur l'objet p%, en position x%,y%,
' police fnt$, taille sz% (->255), attributs attr% (= B=1, I=2, U=4)
' couleur coul% format RGB (=65536*R + 256*G + B)
' Si plusieurs lignes: séparées par '0D0A'
DIM_LOCAL p1%,wt%,ht%,r%,g%,b%,i%,j%,t2d%,tpt%,k%,a$
p1% = 998: WHILE OBJECT_EXISTS(p1%)=1: p1%=p1%+1: END_WHILE
tpt% = NUMBER_PRINT_TARGET: t2d% = NUMBER_2D_TARGET
PICTURE p1%: LEFT p1%,-2000
PRINT_TARGET_IS p1%: FONT_NAME p1%,fnt$: FONT_SIZE p1%,sz%
IF BIN_AND(attr%,1) = 1 THEN FONT_BOLD p1%
IF BIN_AND(attr%,2) = 2 THEN FONT_ITALIC p1%
IF BIN_AND(attr%,4) = 4 THEN FONT_UNDERLINE p1%
COLOR p1%,1,1,1: 2D_TARGET_IS p1%: 2D_FILL_COLOR 1,1,1
r%=INT(coul%/65536): g%=BIN_AND(coul%,255*256)/256: b%=BIN_AND(coul%,255)
2D_PEN_COLOR r%,g%,b%
2D_TARGET_IS p%: 2D_PEN_COLOR r%,g%,b%
k% = INSTR(txt$,CHR$(13)+CHR$(10))
WHILE k% > 0
    a$ = LEFT$(txt$,k%-1): txt$ = RIGHT_POS$(txt$,k%+2)
    wt%=TEXT_WIDTH(a$,p1%): ht% = TEXT_HEIGHT("ABCghi",p1%)
    WIDTH p1%,wt%: HEIGHT p1%,ht%: PRINT a$
    FOR j% = 0 TO ht%-1
        FOR i% = 0 TO wt%-1
            IF COLOR_PIXEL_RED(p1%,i%,j%) <> 1 THEN 2D_POINT x%+i%,y%+j%
        NEXT i%
        DISPLAY
    NEXT j%
    y% = y%+ht%
    k% = INSTR(txt$,CHR$(13)+CHR$(10))
    2D_TARGET_IS p1%: CLS: 2D_TARGET_IS p%
END_WHILE
wt%=TEXT_WIDTH(txt$,p1%): ht%=TEXT_HEIGHT(txt$,p1%)
WIDTH p1%,wt%: HEIGHT p1%,ht%: PRINT txt$
FOR j% = 0 TO ht%-1
    FOR i% = 0 TO wt%-1
        IF COLOR_PIXEL_RED(p1%,i%,j%) <> 1 THEN 2D_POINT x%+i%,y%+j%
    NEXT i%
    DISPLAY
NEXT j%
PRINT_TARGET_IS tpt%: 2D_TARGET_IS t2d%
DELETE p1%
END_SUB
' ==============================================================================
SUB Palette16(x,y)
' Choix d'une couleur dans une palette de 16 (couleurs html de base) affichée en x,y
' Résultat dans rgb% sous la forme 65536*r + 256*g + b
IF LABEL("Aff_pal16") = 0 THEN LABEL Aff_pal16
IF LABEL("Qui_pal16") = 0 THEN LABEL Qui_pal16
DIM_LOCAL ch$(16),nc$(16)
DIM_LOCAL a$, nf, np, nq, nt, nb, wc, hc, r, g, b, i, j, k, t2d%, tpt%, ff%
DATA "Pal16"
DATA "000000","000080","0000FF","008000","008080","00FF00","00FFFF","800000"
DATA "800080","808000","808080","C0C0C0","FF0000","FF00FF","FFFF00","FFFFFF"
DATA " black"," navy","  blue"," green"," teal","  lime"," cyan","maroon"," purple"
DATA " olive"," gray"," silver","  red","magenta","  yellow","  white": ' noms standards
RESTORE: READ a$: WHILE a$<>"Pal16": READ a$: END_WHILE
FOR i=1 TO 16: READ ch$(i): NEXT i: FOR i=1 TO 16: READ nc$(i): NEXT i
tpt% = NUMBER_PRINT_TARGET: t2d% = NUMBER_2D_TARGET: ff% = 0
wc = 40: hc = 20
nf=3000: WHILE OBJECT_EXISTS(nf)=1: nf=nf+1: END_WHILE
         FORM nf: TOP nf,y: LEFT nf,x: WIDTH nf,4*(wc+1)+16: HEIGHT nf,4*(hc+14)+66
         BORDER_SMALL nf
         CAPTION nf," -   16  COULEURS  HTML   -": ON_CLOSE nf,Qui_pal16
np=nf+1: WHILE OBJECT_EXISTS(np)=1: np=np+1: END_WHILE
         PICTURE np: PARENT np,nf: FULL_SPACE np: 2D_TARGET_IS np: PRINT_TARGET_IS np
         ON_CLICK np,Aff_pal16
nq=np+1: WHILE OBJECT_EXISTS(nq)=1: nq=nq+1: END_WHILE
         PICTURE nq: PARENT nq,nf: TOP nq,4*(hc+14)+5: LEFT nq,0: WIDTH nq,wc
         HEIGHT nq,25
nt=nq+1: WHILE OBJECT_EXISTS(nt)=1: nt=nt+1: END_WHILE
         ALPHA nt: PARENT nt,nf: TOP nt,TOP(nq): LEFT nt,LEFT(nq)+WIDTH(nq)+5
         FONT_NAME nt,"Lucida Console"
nb=nt+1: WHILE OBJECT_EXISTS(nb)=1: nb=nb+1: END_WHILE
         BUTTON nb: PARENT nb,nf:TOP nb,TOP(nq): WIDTH nb,40: LEFT nb,WIDTH(nf)-56
         CAPTION nb,"OK": ON_CLICK nb,Qui_pal16
k = 1
FOR j=0 TO 3
    y = j*(hc+14)
    FOR i = 0 TO 3
        a$ = ch$(k): r=HEX(LEFT$(a$,2)): g=HEX(MID$(a$,3,2)): b=HEX(RIGHT$(a$,2))
        x = i*(wc+1): 2D_PEN_COLOR r,g,b: 2D_FILL_COLOR r,g,b
        2D_RECTANGLE x,y,x+wc,y+hc
        2D_FILL_COLOR 255,255,255: PRINT_LOCATE x,y+hc: PRINT nc$(k)
        k = k+1
    NEXT i
NEXT j
r=0: g=0: b=0: COLOR nq,r,g,b
CAPTION nt,"#00 00 00"+CHR$(10)+STR$(r)+","+STR$(g)+","+STR$(b)
2D_TARGET_IS nq: 2D_PEN_COLOR 164,164,164
WHILE ff% = 0: WAIT 100: END_WHILE
EXIT_SUB
Aff_pal16:
x=MOUSE_X_LEFT_DOWN(np): y=MOUSE_Y_LEFT_DOWN(np)
r=COLOR_PIXEL_RED(np,x,y): g=COLOR_PIXEL_GREEN(np,x,y): b=COLOR_PIXEL_BLUE(np,x,y)
2D_FILL_COLOR r,g,b: 2D_RECTANGLE 0,0,WIDTH(nq),HEIGHT(nq)
a$ = "#"+RIGHT$("0"+HEX$(r),2)+" "+RIGHT$("0"+HEX$(g),2)+" "+RIGHT$("0"+HEX$(b),2)
a$ = a$ + CHR$(10)+STR$(r)+","+STR$(g)+","+STR$(b)
CAPTION nt,a$
RETURN
Qui_pal16:
PRINT_TARGET_IS tpt%: 2D_TARGET_IS t2d%: DELETE nf
rgb% = 65536*r + 256*g + b
ff% = 1
RETURN
END_SUB
' ==============================================================================
SUB Dessin(p%,r)
' Boîte à outils pour dessiner sur le picture p%
' r = facteur de correction des coordonnées
'     cas du stretch_on dans un picture: r = Largeur picture/Largeur réelle image
'     (r = 1 si picture = image)
IF r = 0 THEN r = 1: ' si paramètre absent
DIM_LOCAL f%,t%,i%,j%,k%,x%,y%,a$,tr%,tg%,tb%,n2t%,fig%,trac%,term%,ret%,an
DIM_LOCAL x1%,y1%,x2%,y2%,x3%,y3%,fpr$,btg%,cap$
fpr$ = "C:\TEMP\Savpre.bmp"
IF FILE_EXISTS(fpr$) = 1 THEN FILE_DELETE fpr$
IF LABEL("Desfin")=0 THEN LABEL Desfin
IF LABEL("Desopt")=0 THEN LABEL Desopt
IF LABEL("Desanu")=0 THEN LABEL Desanu
IF LABEL("Descou")=0 THEN LABEL Descou
IF LABEL("Destim")=0 THEN LABEL Destim
IF LABEL("Destra")=0 THEN LABEL Destra
IF LABEL("Deslib")=0 THEN LABEL Deslib
IF LABEL("Desrec")=0 THEN LABEL Desrec
IF LABEL("Desron")=0 THEN LABEL Desron
IF LABEL("Desrem")=0 THEN LABEL Desrem
DATA "Pal16": ' palette 16 couleurs
DATA "000000","000080","0000FF","008000","008080","00FF00","00FFFF","800000"
DATA "800080","808000","808080","C0C0C0","FF0000","FF00FF","FFFF00","FFFFFF"
n2t% = NUMBER_2D_TARGET
ON_CLICK p%,Desrem
f% = 850: WHILE OBJECT_EXISTS(f%)=1: f%=f%+1: END_WHILE
FORM f%: TOP f%,0: LEFT f%,LEFT(0)+WIDTH(0): HEIGHT f%,208: WIDTH f%,132: BORDER_SMALL f%
         COLOR f%,180,255,255: FONT_BOLD f%: FONT_NAME f%,"Arial": ON_CLOSE f%,Desfin
         CAPTION f%,"- OUTILS  DESSIN -"
i%=f%+1: ALPHA i%: PARENT i%,f%: TOP i%,3: CAPTION i%,"Trait:"
i%=f%+2: PICTURE i%: PARENT i%,f%: TOP i%,0: LEFT i%,32: WIDTH i%,35: HEIGHT i%,23
         COLOR i%,0,0,0
i%=f%+3: PICTURE i%: PARENT i%,f%: TOP i%,3: LEFT i%,35: WIDTH i%,WIDTH(i%-1)-5
         HEIGHT i%,18: COLOR i%,255,0,0
i%=f%+4: SPIN i%: PARENT i%,f%: LEFT i%,75: WIDTH i%,40: font_size i%,9
         MIN i%,1: MAX i%,20: POSITION i%,1
i%=f%+5: PICTURE i%: PARENT i%,f%: TOP i%,25: LEFT i%,0: WIDTH i%,WIDTH(f%)-17
         HEIGHT i%,63: 2D_TARGET_IS i%: ON_CLICK i%,Descou
         RESTORE: READ a$: WHILE a$<>"Pal16": READ a$: END_WHILE
         FOR j% = 1 TO 4
             FOR i% = 1 TO 4
                 READ a$
                 tr%=HEX(LEFT$(a$,2)): tg%=HEX(MID$(a$,3,2)): tb%=HEX(RIGHT$(a$,2))
                 2D_FILL_COLOR tr%,tg%,tb%
                 2D_RECTANGLE x%,y%,x%+28,y%+15: x%=x%+29
             NEXT i%
             y%=y%+16: x% = 0
         NEXT j%
         tr% = 0: tg% = 0: tb% = 0: COLOR f%+3,tr%,tg%,tb%
i%=f%+6: CONTAINER_OPTION i%: PARENT i%,f%: TOP i%,TOP(i%-1)+65: WIDTH i%,WIDTH(f%)-18
         LEFT i%,0: HEIGHT i%,63: COLOR i%,255,255,180
i%=f%+7:OPTION i%: PARENT i%,f%+6: TOP i%,10: LEFT i%,4: CAPTION i%,"Trait"
i%=f%+8:OPTION i%: PARENT i%,f%+6: TOP i%,25: LEFT i%,4: CAPTION i%,"Libre"
i%=f%+9:OPTION i%: PARENT i%,f%+6: TOP i%,10: LEFT i%,54: CAPTION i%,"Rectan."
i%=f%+10:OPTION i%: PARENT i%,f%+6: TOP i%,25: LEFT i%,54: CAPTION i%,"Cercle"
i%=f%+11:OPTION i%: PARENT i%,f%+6: TOP i%,40: LEFT i%,4: CAPTION i%,"Remplir"
         MARK_ON f%+7
FOR J%=f%+7 TO f%+11: ON_CLICK j%,Desopt: NEXT j%
i%=f%+12: BUTTON i%: PARENT i%,f%: WIDTH i%,60: TOP i%,TOP(f%+6)+HEIGHT(f%+6)
          HEIGHT i%,20: CAPTION i%,"Annuler": ON_CLICK i%,Desanu
i%=f%+13:BUTTON i%: PARENT i%,f%: WIDTH i%,55:TOP i%,TOP(i%-1): LEFT i%,60
         HEIGHT i%,20: CAPTION i%,"Quitter": ON_CLICK i%,Desfin
2D_TARGET_IS p%: 2D_PEN_DOT
t%=f%+14: TIMER t%: PARENT t%,f%: TIMER_INTERVAL t%,40: ON_TIMER t%,Destim
trac% = 0: term% = 0: btg% = 0
fig% = 1: ret% = 0: cap$ = CAPTION$(0)
CLIPBOARD_COPY p%
WHILE 1 > 0: WAIT 100: END_WHILE: GOTO Desfin
' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
Desopt:
fig% = 1: ' trait
IF CHECKED(f%+8) = 1
    fig% = 2: ' tracé libre
    FILE_SAVE p%,fpr$: ' sauvegarde préalable
ELSE
    IF CHECKED(f%+9) = 1
        fig% = 3: ' rectangle
    ELSE
        IF CHECKED(f%+10) = 1
            fig% = 4: ' cercle
        ELSE
            IF CHECKED(f%+11) = 1
                fig% = 5: ' remplissage
            END_IF
        END_IF
    END_IF
END_IF
RETURN
' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
Destim:
IF CHECKED(f%+11)=1 THEN RETURN: ' remplissage
x% = MOUSE_X_POSITION(p%)/r: y% = MOUSE_Y_POSITION(p%)/r: ' position actuelle souris
a$ =  "X= "+STR$(x%)+" pixels  Y= "+STR$(y%)+" pixels"
CAPTION 0,a$
2D_PEN_COLOR tr%,tg%,tb%: 2D_PEN_WIDTH POSITION(f%+4)
IF MOUSE_LEFT_DOWN(p%) = 1: ' bouton gauche enfoncé
    x1% = x%: y1% = y%: ' origine
    trac% = 1
    IF fig% = 2 AND btg% = 0 THEN FILE_SAVE p%,fpr$: ' sauvegarde préalable
    btg% = 1
END_IF
IF MOUSE_LEFT_UP(p%) = 1: ' relâche, tracé final
    btg% = 0
    IF x1% = -1 THEN RETURN
    TIMER_OFF t%
    ' clipboard_paste p%:
    term% = 1: 2D_PEN_SOLID
    SELECT fig%
        CASE 1: GOSUB Destra
        CASE 2: GOSUB Deslib
        CASE 3: GOSUB Desrec
        CASE 4: GOSUB Desron
        CASE 5: GOSUB Desrem
    END_SELECT
    ' x1% = sx1%: x2% = sx2%: y1% = sy1%: y2% = sy2%
    CLIPBOARD_COPY p%: term% = 0
    trac% = 0: 2D_PEN_DOT
    TIMER_ON t%
END_IF
IF trac% = 1
    ' tracé provisoire, en continu
    if x1% = -1 then return
    x2% = x%: y2% = y%: ' position actuelle
    IF x2%=x3% AND y2%=y3% THEN RETURN: ' position inchangée
    SELECT fig%
        CASE 1: GOSUB Destra
        CASE 2: GOSUB Deslib
        CASE 3: GOSUB Desrec
        CASE 4: GOSUB Desron
    END_SELECT
    x3% = x%: y3% = y%
END_IF
RETURN
' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
Destra:
CLIPBOARD_PASTE p%: IF term% = 1 THEN FILE_SAVE p%,fpr$: ' sauvegarde préalable
2D_LINE x1%,y1%,x2%,y2%
IF term% = 1 THEN x1% = -1
RETURN
' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
Deslib:
2D_PEN_SOLID
2D_LINE x1%,y1%,x2%,y2%: x1%=x2%: y1%=y2%
IF term% = 1 THEN x1% = -1
RETURN
' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
Desrec:
CLIPBOARD_PASTE p%: IF term% = 1 THEN FILE_SAVE p%,fpr$: ' sauvegarde préalable
2D_LINE x1%,y1%,x2%,y1%:2D_POLY_TO x2%,y2%:2D_POLY_TO x1%,y2%:2D_POLY_TO x1%,y1%
IF term% = 1 THEN x1% = -1
RETURN
' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
Desron:
CLIPBOARD_PASTE p%: IF term% = 1 THEN FILE_SAVE p%,fpr$: ' sauvegarde préalable
k% = SQR((y2%-y1%)*(y2%-y1%) + (x2%-x1%)*(x2%-x1%)): ' rayon du cercle
2D_POLY_FROM x1%+k%,y1%
FOR an = 0 TO 8*ATN(1)+.1 STEP .1
    2D_POLY_TO x1%+k%*COS(an), y1%+k%*SIN(an)
NEXT an
IF term% = 1 THEN x1% = -1
RETURN
' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
Desrem:
IF CHECKED(f%+11)=0 THEN RETURN
FILE_SAVE p%,fpr$: ' sauvegarde préalable
x% = MOUSE_X_LEFT_DOWN(p%)/r: y% = MOUSE_Y_LEFT_DOWN(p%)/r
2D_FLOOD x%,y%,tr%,tg%,tb%
x1% = -1
CLIPBOARD_COPY p%
RETURN
' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
Desanu:
IF FILE_EXISTS(fpr$) = 1 THEN FILE_LOAD p%,fpr$: CLIPBOARD_COPY p%
RETURN
' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
Descou:
x%=MOUSE_X_LEFT_DOWN(f%+5): y%=MOUSE_Y_LEFT_DOWN(f%+5)
tr%=COLOR_PIXEL_RED(f%+5,x%,y%): tg%=COLOR_PIXEL_GREEN(f%+5,x%,y%)
tb%=COLOR_PIXEL_BLUE(f%+5,x%,y%): COLOR f%+3,tr%,tg%,tb%
RETURN
' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
Desfin:
ret% = 1
TIMER_OFF t%: DELETE t%: OFF_CLICK p%: 2D_TARGET_IS n2t%
DELETE f%: CAPTION 0,cap$
WAIT 100
EXIT_SUB
RETURN
END_SUB
' ==============================================================================
- N'OUBLIE PAS D'ACTUALISER LES PARAMÈTRES fsav$ et DLL_ON EN TÊTE, ET fpr$ DANS LA SUB DESSIN -
J'ai aussi rajouté des boutons flèches dans l'insertion de texte qui permettent de positionner le texte avec précision (on peut choisir le 'pas' du déplacement du cadre) :
- saisir le texte, choisir les enrichissements (police, taille etc.)
- saisir les coordonnées approximatives dans X et Y
- cliquer 'Voir': un rectangle se dessine en pointillé pour matérialiser l'emplacement d'insertion.
- on peut déplacer ce rectangle par les boutons flèches, par bonds de n pixels
- quand c'est à l'emplacement voulu, cliquer 'Appliquer'
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
mindstorm

avatar

Nombre de messages : 530
Age : 48
Localisation : charente
Date d'inscription : 13/02/2013

MessageSujet: Re: Traitement d'images (2)   Mar 9 Déc 2014 - 23:20

merci JL35
effectivement je n'ai pas l'affichage du Form d'insertion ni de la fenêtre de choix ( bien sur pas les deux à la fois)
il me semble avoir déjà lut quelque part un problème similaire qui tenait dans les temporisations qui se chevauchent quand le pc ne vas pas suffisamment vite.
Mon vieux EEPC sous XP ( il a cinq ans maintenant) ne tourne pas aussi vite que le tiens semble t il!
Pour les deco de Noël, je te rassure c'est avec Domoticon ( excuse moi pour le nom je n'arrive pas à le retenir) disons plutôt Panoramic que je dois les créer.J'ai la maison vide mais il faut la décorer à l’intérieur et  créer la partie projection Vidéo pour la cheminée et le sapin.
Tout cela dans 11".
suite:
après test il n'y a pas de changement et donc pas d'affichage des fenêtres de travail
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Traitement d'images (2)   Mar 9 Déc 2014 - 23:38

Bonsoir mindstorm;
Désolé, mais je ne vois pas bien ce qui peut se passer chez toi, même avec un pc lent. Je peux te dire que moi je n'ai pas une bête de course, quand mon précédent pc m'a lâché j'ai pris le moins cher que j'ai trouvé !, et certainement pas le plus rapide, avec le service minimum, 2G de mémoire vive, le reste à l'avenant (sous W7). Mais ça me suffit largement pour faire les tâches usuelles, dont du Panoramic.

Et même la lenteur pourrait expliquer des retards d'affichage, éventuellement, mais pas le non-affichage des forms... ou alors les clics sur les options ne sont pas pris en compte, mais je ne vois pas pourquoi.

Je pense à autre chose: tu parles d'un EEEPC avec un écran de 11 pouces... c'est très juste comme affichage, et je me demande si les Forms ne s'afficheraient pas en dehors de ton écran !!! qui doit avoir une définition du genre 1024x768 quelque chose comme ça, et c'est plutôt juste pour faire du dessin dans une si faible définition... déjà dans le programme le picture d'origine fait 800x800 pixels, et je fais en sorte que les Forms d'insertion se trouvent en dehors de ce picture, pour ne pas empiéter.

Je n'ai pas un pc de course, mais j'ai un bel écran de 1920x1200 (modèle d'expo, pas cher), alors j'ai tendance à prendre mes aises quand je programme...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
mindstorm

avatar

Nombre de messages : 530
Age : 48
Localisation : charente
Date d'inscription : 13/02/2013

MessageSujet: Re: Traitement d'images (2)   Mar 9 Déc 2014 - 23:55

OK JL35 si tu peux rapprocher les fenêtres Very Happy  
pour ma par, le choix du pc était identique au tiens car je devais acheter mon outil de travail.
Comme je suis itinérant, j'ai choisi le plus léger et le moins chère.
j'arrive toute fois a créer des objets 3D (très simples comme le cube pour pedro)

suite:
l'outil de dessin s'affiche bien dans mon écran
si tu peux mettre les autres dessous il reste de la place
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Traitement d'images (2)   Mer 10 Déc 2014 - 1:54

D'accord mais ça ne sera pas pour ce soir, je suis sur la fabrication de cartes de voeux ou menus de fêtes... et là c'est trop tard, on verra demain.
D'ailleurs j'ai aussi un eeePC chez moi, je ne m'en souvenais même plus, j'avais acheté ça pas cher en promo (une centaine d'euros je crois) pour les vacances et je ne m'en suis jamais servi, trop petit Very Happy
Je vais le ressortir, essuyer la poussière, et puis essayer mon programme dessus.

Effectivement, normalement la fenêtre de dessin est prévue pour s'afficher à droite du picture, et celle de texte en bas, ça doit dépasser ton écran. Je vais la remonter. Et remarque, tu peux le faire aussi toi-même:
Dans la 'FORM INSERTION DE TEXTE', au lieu de TOP i%,wi%-20, mettre par exemple wi%-200, pour voir.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
mindstorm

avatar

Nombre de messages : 530
Age : 48
Localisation : charente
Date d'inscription : 13/02/2013

MessageSujet: Re: Traitement d'images (2)   Mer 10 Déc 2014 - 15:12

bonjour JL35
je viens de faire une batterie de test mais rien ne s'affiche
il faut dire que je ne suis pas aguerrie aux variables (flottantes)
et là...
jocolor jocolor jocolor
a grand maux les grands remèdes
wi% = 400
là les fenêtres apparaissent
pirat pirat pirat
il vas falloir que j'adapte un peut car les conséquences sont ÉNORMES
mais tout marche
affaire réglé pour moi
MERCI JL35
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Traitement d'images (2)   Mer 10 Déc 2014 - 15:39

Merci à toi de m'avoir tenu au courant en tout cas. Et puis c'est bien que tu aies trouvé toi-même une solution, c'est toujours plus enrichissant.

C'est vrai que tout dépend de cette variable wi% qui définit la taille de la fenêtre image, et qu'il faut faire varier en fonction de la définition de l'écran qu'on possède, j'avais prévu un peu large (800) au départ, forcément avec mon grand écran Very Happy

Et la position des fenêtre texte et dessin est fonction de cette variable, alors ça devait déborder à l'extérieur chez toi.

Tu peux peut-être mettre un wi% plus grand, genre 600, pour être plus à l'aise, mais rectifier la position relative des fenêtres texte et dessin quitte à les faire rentrer à l'intérieur du picture, au moins en bas.

Bon, je remballe mon eeepc, sans regret.

Revenir en haut Aller en bas
Voir le profil de l'utilisateur
mindstorm

avatar

Nombre de messages : 530
Age : 48
Localisation : charente
Date d'inscription : 13/02/2013

MessageSujet: Re: Traitement d'images (2)   Mer 10 Déc 2014 - 15:46

pas si vite JL35
sort ton EEPC et test ça:
Code:
' Traitement d'images
LABEL Quit, Chf, Affimint, Echelles, Chsp, Chtr, Ched, Chcou, Edcou
LABEL Rotsy, Rotsym, Resiz1, Resize, Decoup1, Vdec, Anvisu, Decoupe, Lumin, Filtre
LABEL Ngris, Applic, Valide, Txt1, Vtex, Majdep, Cltxt, Texte, Fonte, Ctexte, Svav, Annul
LABEL Sauve, Dessiner, Aide
DIM a$,i%,j%,k%,wi%,res%,ed1%,ed2%,od%,sd%,p%,pv%,ph%,w%,h%,rwh,r,frot%,fdim%
DIM fdec%,spa%,f$,spd%,edd%,flum%,tb1%,edb%,br%,ga%,co%,ffil%,tb4%,edc%,fr%,fg%,fb%
DIM ftex%,fftx%,spt%,edt%,pico%,chk%,memt%,rgb%,rt%,gt%,bt%,xt%,yt%,fnt$,sz%,attr%
DIM fl%,fgri%,fs$,img1%,btl1%,btf1%,wp%,hp%,xd%,yd%,wd%,hd%,fsav$,rc$

fsav$ = "C:\TEMP\Fsave.bmp": ' sauvegarde (pour annulation éventuelle)
IF FILE_EXISTS(fsav$)=1 THEN FILE_DELETE fsav$

DLL_ON "C:\program files\Panoramic Editor V 0.9.23\KGF.dll"

wi% = 700
WIDTH 0,wi%+45: HEIGHT 0,wi%+105
COLOR 0,170,255,255: FONT_BOLD 0: BORDER_SMALL 0: ON_CLOSE 0,Quit
CAPTION 0,"                -   TRAITEMENT   D' IMAGES   -"
MAIN_MENU 10
SUB_MENU 20: PARENT 20,10: CAPTION 20,"Fichier"
  SUB_MENU 21: PARENT 21,20: CAPTION 21,"Ouvrir...": ON_CLICK 21,Chf
  SUB_MENU 23: PARENT 23,20: CAPTION 23,"Enregistrer sous...": ON_CLICK 23,Sauve
  SUB_MENU 25: PARENT 25,20: CAPTION 25,"Quitter": ON_CLICK 25,Quit
SUB_MENU 30: PARENT 30,10: CAPTION 30,"Fonction"
  SUB_MENU 31: PARENT 31,30: CAPTION 31,"Rotation/Symétrie": ON_CLICK 31,Rotsy
  SUB_MENU 32: PARENT 32,30: CAPTION 32,"Redimensionner": ON_CLICK 32,Resiz1
  SUB_MENU 33: PARENT 33,30: CAPTION 33,"Découper": ON_CLICK 33,Decoup1
  SUB_MENU 34: PARENT 34,30: CAPTION 34,"Gamma/Luminosité/Contraste": ON_CLICK 34,Lumin
  SUB_MENU 35: PARENT 35,30: CAPTION 35,"Filtre couleurs": ON_CLICK 35,Filtre
  SUB_MENU 36: PARENT 36,30: CAPTION 36,"Conversion en niveaux de gris": ON_CLICK 36,Ngris
  SUB_MENU 37: PARENT 37,30: CAPTION 37,"Insertion de texte": ON_CLICK 37,Txt1
  SUB_MENU 38: PARENT 38,30: CAPTION 38,"Dessiner": ON_CLICK 38,Dessiner
  SUB_MENU 39: PARENT 39,30: CAPTION 39,"Annuler la dernière opération": ON_CLICK 39,Annul
SUB_MENU 40: PARENT 40,10: CAPTION 40,"Aide": ON_CLICK 40,Aide

i% = 49: ' +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
i%=i%+1: ALPHA i%: TOP i%,6: LEFT i%,3: CAPTION i%,"Image:"
i%=i%+1: EDIT i%: TOP i%,3: LEFT i%,45: WIDTH i%,500: ON_CLICK i%,Chf
         TEXT i%," (clic pour choisir une image)": COLOR i%,255,255,128: ed1%=i%
i%=i%+1: EDIT i%: TOP i%,-1: LEFT i%,LEFT(i%-1)+WIDTH(i%-1)+20: WIDTH i%,160
         FONT_SIZE i%,12: COLOR i%,255,255,128: ed2%=i%
i%=i%+1: BUTTON i%: TOP i%,0: LEFT i%,WIDTH(0)-93: CAPTION i%,"Annuler": ON_CLICK i%,Annul
i%=i%+1: OPEN_DIALOG i%: od% = i%
i%=i%+1: SAVE_DIALOG i%: sd% = i%

i% = 59: ' +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
i%=i%+1: PICTURE i%: TOP i%,TOP(ed1%)+25: LEFT i%,25: WIDTH i%,wi%: HEIGHT i%,wi%
         STRETCH_ON i%: p%=i%
i%=i%+1: PICTURE i%: TOP i%,TOP(p%): LEFT i%,0: HEIGHT i%,wi%+1: WIDTH i%,25
         COLOR i%,200,200,200: pv%=i%
i%=i%+1: PICTURE i%: TOP i%,TOP(p%)+wi%: LEFT i%,LEFT(p%): WIDTH i%,wi%+1: HEIGHT i%,20
         COLOR i%,200,200,200: ph%=i%
i%=i%+1: IMAGE i%: img1%=i%

i% = 79: ' +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
i%=i%+1: FORM i%: TOP i%,wi%-300: LEFT i%,600: WIDTH i%,100: HEIGHT i%,170
         BORDER_SMALL i%: HIDE i%: CAPTION i%,"ROT./SYM.": frot% = i%
         COLOR i%,255,64,64: FONT_BOLD i%
i%=i%+1: BUTTON i%: PARENT i%,frot%: TOP i%,5: LEFT i%,10: WIDTH i%,100
         CAPTION i%,"Rotation 90° G"
i%=i%+1: BUTTON i%: PARENT i%,frot%: TOP i%,30: LEFT i%,10: WIDTH i%,WIDTH(i%-1)
         CAPTION i%,"Rotation 90° D"
i%=i%+1: BUTTON i%: PARENT i%,frot%: TOP i%,55: LEFT i%,10: WIDTH i%,WIDTH(i%-1)
         CAPTION i%,"Rotation 180°"
i%=i%+1: BUTTON i%: PARENT i%,frot%: TOP i%,80: LEFT i%,10: WIDTH i%,WIDTH(i%-1)
         CAPTION i%,"Symétrie H"
i%=i%+1: BUTTON i%: PARENT i%,frot%: TOP i%,105: LEFT i%,10: WIDTH i%,WIDTH(i%-1)
         CAPTION i%,"Symétrie V"
         FOR j%=frot%+1 TO frot%+5: ON_CLICK j%,Rotsym: NEXT j%

i% = 89: ' +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
i%=i%+1: FORM i%: TOP i%,wi%-300: LEFT i%,600: WIDTH i%,150: HEIGHT i%,130
         BORDER_SMALL i%: HIDE i%: CAPTION i%,"REDIMENSIONNER": fdim% = i%
         COLOR i%,255,64,64: FONT_BOLD i%
i%=i%+1: ALPHA i%: PARENT i%,fdim%: TOP i%,3: CAPTION i%," Nouvelles dimensions:"
i%=i%+1: SPIN i%: PARENT i%,fdim%: TOP i%,20: LEFT i%,5: WIDTH i%,58
         ON_CHANGE i%,Chsp: spd%=i%
i%=i%+1: ALPHA i%: PARENT i%,fdim%: TOP i%,TOP(i%-1)+3: LEFT i%,LEFT(i%-1)+WIDTH(i%-1)
         CAPTION i%," X"
i%=i%+1: EDIT i%: PARENT i%,fdim%: TOP i%,TOP(i%-2): LEFT i%,LEFT(i%-1)+16
         WIDTH i%,48: TEXT i%,"0": edd%=i%
i%=i%+1: BUTTON i%: PARENT i%,fdim%: TOP i%,55: LEFT i%,30: CAPTION i%,"Appliquer"
         ON_CLICK i%,Resize

i% = 99: ' +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
i%=i%+1: FORM i%: TOP i%,wi%-300: LEFT i%,600: WIDTH i%,340: HEIGHT i%,120
         BORDER_SMALL i%: HIDE i%: CAPTION i%,"DÉCOUPER": fdec% = i%
         COLOR i%,255,64,64: FONT_BOLD i%
i%=i%+1: ALPHA i%: PARENT i%,fdec%: TOP i%,20: LEFT i%,5
         CAPTION i%,"X=               Y=               W=               H="
i%=i%+1: SPIN i%: PARENT i%,fdec%: TOP i%,TOP(i%-1)-3: LEFT i%,20: WIDTH i%,55: spa%=i%
i%=i%+1: SPIN i%: PARENT i%,fdec%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+75: WIDTH i%,55
i%=i%+1: SPIN i%: PARENT i%,fdec%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+80: WIDTH i%,55
i%=i%+1: SPIN i%: PARENT i%,fdec%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+75: WIDTH i%,55
i%=i%+1: BUTTON i%: PARENT i%,fdec%: TOP i%,TOP(i%-1)+35: LEFT i%,WIDTH(fdec%)/2-130
         CAPTION i%,"Voir": ON_CLICK i%,Vdec
i%=i%+1: BUTTON i%: PARENT i%,fdec%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+90
         CAPTION i%,"Annuler": ON_CLICK i%,Anvisu
i%=i%+1: BUTTON i%: PARENT i%,fdec%: TOP i%,TOP(i%-1)
         LEFT i%,WIDTH(fdec%)/2+50: CAPTION i%,"Découper": ON_CLICK i%,Decoupe

i% = 109: ' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
i%=i%+1: FORM i%: TOP i%,wi%-300: LEFT i%,600: WIDTH i%,340: HEIGHT i%,130
         BORDER_SMALL i%: HIDE i%: CAPTION i%,"LUMINOSITÉ/GAMMA/CONTRASTE": flum% = i%
         COLOR i%,255,64,64: FONT_BOLD i%
i%=i%+1: ALPHA i%: PARENT i%,flum%: TOP i%,8: CAPTION i%,"Lum."
i%=i%+1: TRACK_BAR i%: PARENT i%,flum%: TOP i%,TOP(i%-1)-5: LEFT i%,LEFT(i%-1)+25
         WIDTH i%,WIDTH(flum%)-74: tb1%=i%
i%=i%+1: EDIT i%: PARENT i%,flum%: TOP i%,TOP(i%-2): LEFT i%,LEFT(i%-1)+WIDTH(i%-1)-2: WIDTH i%,30
         HEIGHT i%,15: edb%=i%
i%=i%+1: ALPHA i%: PARENT i%,flum%: TOP i%,27: CAPTION i%,"Gam."
i%=i%+1: TRACK_BAR i%: PARENT i%,flum%: TOP i%,TOP(i%-1)-5: LEFT i%,LEFT(tb1%): WIDTH i%,WIDTH(tb1%)
i%=i%+1: EDIT i%: PARENT i%,flum%: TOP i%,TOP(i%-1): LEFT i%,LEFT(tb1%)+WIDTH(tb1%)-2: WIDTH i%,30
         HEIGHT i%,15
i%=i%+1: ALPHA i%: PARENT i%,flum%: TOP i%,46: CAPTION i%,"Cont."
i%=i%+1: TRACK_BAR i%: PARENT i%,flum%: TOP i%,TOP(i%-1)-5: LEFT i%,LEFT(tb1%): WIDTH i%,WIDTH(tb1%)
i%=i%+1: EDIT i%: PARENT i%,flum%: TOP i%,TOP(i%-1): LEFT i%,LEFT(tb1%)+WIDTH(tb1%)-2: WIDTH i%,30
         HEIGHT i%,15
         FOR j% = tb1% TO tb1%+6 STEP 3
             MIN j%,-128: MAX j%,127: POSITION j%,0: ON_CHANGE j%,Chtr
         NEXT j%
         br%=0: ga%=0: co%=0: TEXT edb%,STR$(br%): TEXT edb%+3,STR$(ga%): TEXT edb%+6,STR$(co%)
         FOR j% = edb% TO edb%+6 STEP 3: ON_CHANGE j%,Ched: NEXT j%
i%=i%+1: BUTTON i%: PARENT i%,flum%: TOP i%,TOP(i%-1)+28: LEFT i%,LEFT(tb1%)
         CAPTION i%,"Aperçu": ON_CLICK i%,Applic: btl1%=i%
i%=i%+1: BUTTON i%: PARENT i%,flum%: TOP i%,TOP(i%-1): LEFT i%,LEFT(tb1%)+WIDTH(tb1%)-75
         CAPTION i%,"Valider": ON_CLICK i%,Valide

i% = 129: ' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
i%=i%+1: FORM i%: TOP i%,wi%-300: LEFT i%,600: WIDTH i%,340: HEIGHT i%,130
         BORDER_SMALL i%: HIDE i%: CAPTION i%,"FILTRE COULEURS": ffil% = i%
         COLOR i%,255,64,64: FONT_BOLD i%
i%=i%+1: ALPHA i%: PARENT i%,ffil%: TOP i%,8: CAPTION i%,"  R"
i%=i%+1: TRACK_BAR i%: PARENT i%,ffil%: TOP i%,TOP(i%-1)-5: LEFT i%,LEFT(i%-1)+25
         WIDTH i%,WIDTH(ffil%)-74: tb4%=i%
i%=i%+1: EDIT i%: PARENT i%,ffil%: TOP i%,TOP(i%-2): LEFT i%,LEFT(i%-1)+WIDTH(i%-1)-2: WIDTH i%,30
         HEIGHT i%,15: edc%=i%
i%=i%+1: ALPHA i%: PARENT i%,ffil%: TOP i%,27: CAPTION i%,"  G"
i%=i%+1: TRACK_BAR i%: PARENT i%,ffil%: TOP i%,TOP(i%-1)-5: LEFT i%,LEFT(tb4%): WIDTH i%,WIDTH(tb4%)
i%=i%+1: EDIT i%: PARENT i%,ffil%: TOP i%,TOP(i%-1): LEFT i%,LEFT(tb4%)+WIDTH(tb1%)-2: WIDTH i%,30
         HEIGHT i%,15
i%=i%+1: ALPHA i%: PARENT i%,ffil%: TOP i%,46: CAPTION i%,"  B"
i%=i%+1: TRACK_BAR i%: PARENT i%,ffil%: TOP i%,TOP(i%-1)-5: LEFT i%,LEFT(tb4%): WIDTH i%,WIDTH(tb4%)
i%=i%+1: EDIT i%: PARENT i%,ffil%: TOP i%,TOP(i%-1): LEFT i%,LEFT(tb4%)+WIDTH(tb4%)-2: WIDTH i%,30
         HEIGHT i%,15
         FOR j% = tb4% TO tb4%+6 STEP 3
             MIN j%,-1: MAX j%,255: POSITION j%,0: ON_CHANGE j%,Chcou
         NEXT j%
         fr%=-1: fg%=-1: fb%=-1: TEXT edc%,STR$(fr%): TEXT edc%+3,STR$(fg%): TEXT edc%+6,STR$(fb%)
         FOR j% = edc% TO edc%+6 STEP 3: ON_CHANGE j%,Ched: NEXT j%
i%=i%+1: BUTTON i%: PARENT i%,ffil%: TOP i%,TOP(i%-1)+28: LEFT i%,LEFT(tb1%)
         CAPTION i%,"Aperçu": ON_CLICK i%,Applic: btf1%=i%
i%=i%+1: BUTTON i%: PARENT i%,ffil%: TOP i%,TOP(i%-1): LEFT i%,LEFT(tb1%)+WIDTH(tb1%)-75
         CAPTION i%,"Valider": ON_CLICK i%,Valide

i% = 149: ' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
i%=i%+1: FORM i%: TOP i%,wi%-300: LEFT i%,600: WIDTH i%,220: HEIGHT i%,80
         BORDER_SMALL i%: HIDE i%: CAPTION i%,"CONVERSION EN NIVEAUX DE GRIS": fgri% = i%
         COLOR i%,255,64,64: FONT_BOLD i%
i%=i%+1: BUTTON i%: PARENT i%,fgri%: TOP i%,10: LEFT i%,20
         CAPTION i%,"Aperçu": ON_CLICK i%,Ngris
i%=i%+1: BUTTON i%: PARENT i%,fgri%: TOP i%,10: LEFT i%,110
         CAPTION i%,"Valider": ON_CLICK i%,Valide

i% = 159: ' +++++++++++ FORM INSERTION DE TEXTE ++++++++++++++++++++++++++++++++
i%=i%+1: FORM i%: TOP i%,wi%-520: LEFT i%,500: WIDTH i%,500: HIDE i%
         HEIGHT i%,170: BORDER_SMALL i%: CAPTION i%," -   TEXTE   SUR   IMAGE   -"
         ON_CLOSE i%,Cltxt: FONT_BOLD i%: COLOR i%,255,128,64: ftex% = i%
i%=i%+1: ALPHA i%: PARENT i%,ftex%: TOP i%,5: LEFT i%,5: CAPTION i%,"X=             Y="
i%=i%+1: SPIN i%: PARENT i%,ftex%: TOP i%,TOP(i%-1)-3: LEFT i%,20: WIDTH i%,50: spt%=i%
i%=i%+1: SPIN i%: PARENT i%,ftex%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+70: WIDTH i%,WIDTH(i%-1)
i%=i%+1: EDIT i%: PARENT i%,ftex%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+55: WIDTH i%,120
         ON_CLICK i%,Fonte: TEXT i%,"Arial": edt%=i%
i%=i%+1: SPIN i%: PARENT i%,ftex%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+WIDTH(i%-1)+3
         WIDTH i%,50: POSITION i%,16
i%=i%+1: PICTURE i%: PARENT i%,ftex%: TOP i%,TOP(spt%)+1: LEFT i%,LEFT(i%-1)+WIDTH(i%-1)+3
         WIDTH i%,30: HEIGHT i%,20: COLOR i%,0,0,0: ON_CLICK i%,Ctexte: pico%=i%
i%=i%+1: CHECK i%: PARENT i%,ftex%: TOP i%,TOP(i%-1)+2: LEFT i%,LEFT(i%-1)+WIDTH(i%-1)+10
         CAPTION i%,"G": chk%=i%
i%=i%+1: CHECK i%: PARENT i%,ftex%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+35: WIDTH i%,30
         CAPTION i%,"I ": FONT_ITALIC i%
i%=i%+1: CHECK i%: PARENT i%,ftex%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+35: WIDTH i%,30
         CAPTION i%,"S": FONT_UNDERLINE i%
i%=i%+1: MEMO i%: PARENT i%,ftex%: TOP i%,TOP(spt%)+25: LEFT i%,0: WIDTH i%,WIDTH(ftex%)-16
         HEIGHT i%,80: FONT_NAME i%,"Arial": memt%=i%

i%=i%+1: BUTTON i%: PARENT i%,ftex%: TOP i%,HEIGHT(ftex%)-60: LEFT i%,2: WIDTH i%,25
         CAPTION i%,CHR$(231): fl% = i%
i%=i%+1: BUTTON i%: PARENT i%,ftex%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+25: WIDTH i%,25
         CAPTION i%,CHR$(233)
i%=i%+1: BUTTON i%: PARENT i%,ftex%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+25: WIDTH i%,25
         CAPTION i%,CHR$(234)
i%=i%+1: BUTTON i%: PARENT i%,ftex%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+25: WIDTH i%,25
         CAPTION i%,CHR$(232)
         FOR j% = i%-3 TO i%: FONT_NAME j%,"Wingdings": ON_CLICK j%,Majdep: NEXT j%
i%=i%+1: SPIN i%: PARENT i%,ftex%: TOP i%,TOP(i%-1)+1: LEFT i%,LEFT(i%-1)+25: WIDTH i%,40
         POSITION i%,5
i%=i%+1: ALPHA i%: PARENT i%,ftex%: TOP i%,TOP(i%-1)+3: LEFT i%,LEFT(i%-1)+40: CAPTION i%,"pixels"
i%=i%+1: BUTTON i%: PARENT i%,ftex%: TOP i%,HEIGHT(ftex%)-60: LEFT i%,WIDTH(ftex%)/2-75
         WIDTH i%,50: CAPTION i%,"Voir": ON_CLICK i%,Vtex
i%=i%+1: BUTTON i%: PARENT i%,ftex%: TOP i%,TOP(i%-1): LEFT i%,WIDTH(ftex%)/2+50
         CAPTION i%,"Annuler": ON_CLICK i%,Anvisu
i%=i%+1: BUTTON i%: PARENT i%,ftex%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+90
         CAPTION i%,"Appliquer": ON_CLICK i%,Texte

i%=i%+1: FORM i%: TOP i%,TOP(ftex%)+48: LEFT i%,LEFT(ftex%)+LEFT(edt%): WIDTH i%,170
         HEIGHT i%,200: BORDER_HIDE i%: HIDE i%: fftx% = i%
i%=i%+1: LIST i%: PARENT i%,fftx%: FULL_SPACE i%
         FONT_NAMES_LOAD i%: ON_CLICK i%,Fonte
         FOR j% = COUNT(i%) TO 1 STEP -1
             IF LEFT$(ITEM_READ$(i%,j%),1) = "@" THEN ITEM_DELETE i%,j%
         NEXT j%
CLIPBOARD_STRING_COPY "": ' raz clipboard
rgb% = 0
w% = wi%: h% = wi%: rwh = w%/h%: TEXT ed2%,STR$(w%)+" x "+STR$(h%)+" pixels."
GOSUB Echelles
' ==============================================================================
END: ' =========================================================================
' ==============================================================================
Quit:
TERMINATE
' ==============================================================================
Chf:
' choix d'un fichier image
f$ = FILE_NAME$(od%): IF LEN(f$)<4 THEN RETURN
TEXT ed1%,f$
res% = DLL_CALL1("LoadAnyImageFile",ADR(f$)): ' -> clipboard
res% = DLL_CALL0("LoadPicture"): ' clipboard -> image interne
res% = DLL_CALL1("SetImmediateMode",1): ' mise à jour systématique du clipboard
GOSUB Affimint: ' afficher
2D_TARGET_IS p%
2D_IMAGE_COPY img1%,0,0,WIDTH(p%),HEIGHT(p%): ' sauvegarde dans Image 103
RETURN
' ==============================================================================
Affimint:
' Afficher l'image interne
w% = DLL_CALL0("GetPictureWidth"): ' dimensions de l'image interne
h% = DLL_CALL0("GetPictureHeight")
IF w%>h%
    WIDTH p%,wi%: HEIGHT p%,WIDTH(p%)*h%/w%
ELSE
    HEIGHT p%,wi%: WIDTH p%,HEIGHT(p%)*w%/h%
END_IF
res% = DLL_CALL0("SavePicture"): ' image interne dans le clipboard
res% = DLL_CALL0("LoadPicture"): ' clipboard -> image interne
CLIPBOARD_PASTE p%: ' affichage
TEXT ed2%,STR$(w%)+" x "+STR$(h%)+" pixels."
rwh = w%/h%
GOSUB Echelles
RETURN
' ==============================================================================
Echelles:
' échelles verticale et horizontale, en pixels
IF w%<=0 THEN w% = WIDTH(p%): h% = HEIGHT(p%)
r = WIDTH(p%)/w%
2D_TARGET_IS pv%: PRINT_TARGET_IS pv%
CLS: COLOR pv%,200,200,200: 2D_FILL_COLOR 200,200,200
FOR i% = 0 TO h% STEP 50
    IF i%/100 = INT(i%/100)
        2D_LINE 4,i%*r,25,i%*r
        PRINT_LOCATE 0,i%*r-13: PRINT STR$(i%)
    ELSE
        2D_LINE 15,i%*r,25,i%*r
    END_IF
NEXT i%
TOP ph%,TOP(p%)+HEIGHT(p%)
2D_TARGET_IS ph%: PRINT_TARGET_IS ph%
CLS: COLOR ph%,200,200,200: 2D_FILL_COLOR 200,200,200
FOR i% = 0 TO w% STEP 50
    IF i%/100 = INT(i%/100)
        2D_LINE i%*r,0,i%*r,16
        a$=STR$(i%): j%=20: IF LEN(a$)>3 THEN j%=25
        PRINT_LOCATE i%*r-j%,6: PRINT a$
    ELSE
        2D_LINE i%*r,0,i%*r,6
    END_IF
NEXT i%
RETURN
' ==============================================================================
Chsp:
i% = POSITION(spd%): TEXT edd%,STR$(INT(i%/rwh))
RETURN
' ==============================================================================
Chtr:
IF POSITION(tb1%)<>br% THEN br%=POSITION(tb1%): TEXT edb%,STR$(br%)
IF POSITION(tb1%+3)<>ga% THEN ga%=POSITION(tb1%+3): TEXT edb%+3,STR$(ga%)
IF POSITION(tb1%+6)<>co% THEN co%=POSITION(tb1%+6): TEXT edb%+6,STR$(co%)
RETURN
' ==============================================================================
Ched:
i% = VAL(TEXT$(edb%)): IF i%<>br% THEN br%=i%: POSITION tb1%,i%
i% = VAL(TEXT$(edb%+3)): IF i%<>ga% THEN ga%=i%: POSITION tb1%+3,i%
i% = VAL(TEXT$(edb%+6)): IF i%<>co% THEN co%=i%: POSITION tb1%+6,i%
RETURN
' ==============================================================================
Chcou:
fr%=POSITION(tb4%): TEXT edc%,STR$(fr%)
fg%=POSITION(tb4%+3): TEXT edc%+3,STR$(fg%)
fb%=POSITION(tb4%+6): TEXT edc%+6,STR$(fb%)
RETURN
' ==============================================================================
Edcou:
IF TEXT$(edc%)="-" OR TEXT$(edc%+3)="-"OR TEXT$(edc%+6)="-" THEN RETURN
i% = VAL(TEXT$(edc%)): IF i%<>fr% THEN fr%=i%: POSITION tb4%,i%
i% = VAL(TEXT$(edc%+3)): IF i%<>fg% THEN fg%=i%: POSITION tb4%+3,i%
i% = VAL(TEXT$(edc%+6)): IF i%<>fb% THEN fb%=i%: POSITION tb4%+6,i%
RETURN
' ==============================================================================
Rotsy:
SHOW frot%
RETURN
' ==============================================================================
Rotsym:
' Rotation de l'image interne
i% = NUMBER_CLICK
CLIPBOARD_COPY p%
res% = DLL_CALL0("LoadPicture"): ' clipboard -> image interne
GOSUB Svav: ' sauvegarde avant
SELECT i%
    CASE 81: res% = DLL_CALL0("RotateM90")
    CASE 82: res% = DLL_CALL0("Rotate90")
    CASE 83: res% = DLL_CALL0("Rotate180")
    CASE 84: res% = DLL_CALL1("MirrorPicture",2)
    CASE 85: res% = DLL_CALL1("MirrorPicture",1)
END_SELECT
HIDE frot%
GOSUB Affimint: ' afficher l'image interne (+ copie dans le clipboard)
RETURN
' ==============================================================================
Resiz1:
SHOW fdim%
RETURN
' ==============================================================================
Resize:
' Redimensionner
GOSUB Svav: ' sauvegarde avant
w% = POSITION(spd%): h% = VAL(TEXT$(edd%))
res% = DLL_CALL0("SavePicture"): ' image interne dans le clipboard
res% = DLL_CALL2("ResizePicture",w%,h%)
res% = DLL_CALL0("LoadPicture"): ' clipboard -> image interne
HIDE fdim%
GOSUB Affimint
RETURN
' ==============================================================================
Decoup1:
SHOW fdec%
RETURN
' ==============================================================================
Vdec:
' Tracé du rectangle de découpe, pour voir
xd% = POSITION(spa%): yd% = POSITION(spa%+1): wd% = POSITION(spa%+2): hd% = POSITION(spa%+3)
IF wd%<=0 OR hd%<=0 THEN RETURN
CLIPBOARD_PASTE p%
2D_TARGET_IS p%: 2D_PEN_COLOR 255,0,255: 2D_PEN_WIDTH 1
IF w% > 1000 THEN 2D_PEN_WIDTH 2: IF w%>2000 THEN 2D_PEN_WIDTH 4
2D_LINE xd%,yd%,xd%+wd%-1,yd%: 2D_POLY_TO xd%+wd%-1,yd%+hd%-1
2D_POLY_TO xd%,yd%+hd%-1: 2D_POLY_TO xd%,yd%
RETURN
' ==============================================================================
Anvisu:
CLIPBOARD_PASTE p%
RETURN
' ==============================================================================
Decoupe:
' Découpe d'un rectangle dans une image
CLIPBOARD_PASTE p%
GOSUB Svav: ' sauvegarde avant
xd% = POSITION(spa%): yd% = POSITION(spa%+1): wd% = POSITION(spa%+2): hd% = POSITION(spa%+3)
IF wd%<=0 OR hd%<=0 THEN RETURN
res% = DLL_CALL4("ExtractRectangleFromPicture",xd%,yd%,xd%+wd%-1,yd%+hd%-1)
HIDE fdec%
GOSUB Affimint
RETURN
' ==============================================================================
Lumin:
SHOW flum%
RETURN
' ==============================================================================
Filtre:
SHOW ffil%
RETURN
' ==============================================================================
Ngris:
' Conversion en niveaux de gris
i% = NUMBER_CLICK
IF i% = 36
    SHOW fgri%
ELSE
    IF i% = fgri%+1: ' Aperçu
        GOSUB Svav: ' sauvegarde avant
        2D_IMAGE_PASTE img1%,0,0
        CLIPBOARD_COPY p%: res%=DLL_CALL0("LoadPicture"): ' restore image interne
        res% = DLL_CALL0("SetPictureGrayScale"): ' -> image interne
        GOSUB Affimint: ' affichage résultat
    END_IF
END_IF
RETURN
' ==============================================================================
Applic:
GOSUB Svav: ' sauvegarde avant
i% = NUMBER_CLICK
IF i% = btl1%
    2D_TARGET_IS p%: 2D_IMAGE_PASTE img1%,0,0
    BRIGHTNESS p%,br%
    GAMMA p%,ga%
    CONTRAST p%,co%
ELSE
    2D_TARGET_IS p%: 2D_IMAGE_PASTE img1%,0,0
    CLIPBOARD_COPY p%: res%=DLL_CALL0("LoadPicture"): ' restore image interne
    res% = DLL_CALL3("SetPictureFilter",fr%,fg%,fb%): ' -> image interne
    GOSUB Affimint: ' affichage résultat
END_IF
RETURN
' ==============================================================================
Valide:
' validation de l'opération (écran courant)
CLIPBOARD_COPY p%
res% = DLL_CALL0("LoadPicture"): ' clipboard -> image interne
RETURN
' ==============================================================================
Txt1:
SHOW ftex%: TO_FOREGROUND ftex%
FONT_NAME memt%,TEXT$(edt%)
clipboard_copy p%
RETURN
' ==============================================================================
Vtex:
' Tracé du rectangle enveloppant du texte, pour voir
j% = COUNT(memt%): IF j%<1 THEN RETURN: ' pas de texte
FONT_NAME p%,TEXT$(edt%): FONT_SIZE p%,POSITION(spt%+3)
xd% = POSITION(spt%): yd% = POSITION(spt%+1): wd%=0
FOR i% = 1 TO j%
    IF TEXT_WIDTH(ITEM_READ$(memt%,i%),p%)>wd% THEN wd%=TEXT_WIDTH(ITEM_READ$(memt%,i%),p%)
NEXT i%
hd% = j%*TEXT_HEIGHT("ABCjkl",p%)
IF wd%<=0 OR hd%<=0 THEN RETURN
CLIPBOARD_PASTE p%
2D_TARGET_IS p%: 2D_PEN_COLOR 255,0,255: 2D_PEN_DOT: 2D_PEN_WIDTH 1
IF w% > 1000 THEN 2D_PEN_WIDTH 2: IF w%>2000 THEN 2D_PEN_WIDTH 4
2D_LINE xd%,yd%,xd%+wd%-1,yd%: 2D_POLY_TO xd%+wd%-1,yd%+hd%-1
2D_POLY_TO xd%,yd%+hd%-1: 2D_POLY_TO xd%,yd%
RETURN
' ==============================================================================
Majdep:
' déplacement du texte (emplacement)
i% = NUMBER_CLICK
j% = POSITION(fl%+4): ' pas du déplacement (pixels)
IF i% = fl%
    POSITION spt%,POSITION(spt%)-j%
ELSE
    IF i% = fl%+1
        POSITION spt%+1,POSITION(spt%+1)-j%
    ELSE
        IF i% = fl%+2
            POSITION spt%+1,POSITION(spt%+1)+j%
        ELSE
            POSITION spt%,POSITION(spt%)+j%
        END_IF
    END_IF
END_IF
IF POSITION(spt%)<0 THEN POSITION spt%,0
IF POSITION(spt%+1)<0 THEN POSITION spt%+1,0
IF COUNT(memt%) > 0 THEN GOSUB Vtex
RETURN
' ==============================================================================
Cltxt:
CLIPBOARD_PASTE p%
RETURN
' ==============================================================================
Texte:
' Insertion de texte (plusieurs lignes éventuellement)
i% = NUMBER_CLICK
IF i% = 121
    SHOW ftex%: TO_FOREGROUND ftex%
ELSE
    HIDE ftex%
    IF COUNT(memt%)>0
        CLIPBOARD_PASTE p%
        GOSUB Svav: ' sauvegarde avant
        a$ = ""
        FOR i% = 1 TO COUNT(memt%)
            a$ = a$+ITEM_READ$(memt%,i%)+CHR$(13)+CHR$(10)
        NEXT i%
        a$ = LEFT$(a$,LEN(a$)-2)
        xt% = POSITION(spt%): yt% = POSITION(spt%+1)
        fnt$ = TEXT$(spt%+2): sz% = POSITION(spt%+3): attr% = 0
        IF CHECKED(chk%) = 1 THEN attr% = 1
        IF CHECKED(chk%+1) = 1 THEN attr% = attr%+2
        IF CHECKED(chk%+2) = 1 THEN attr% = attr%+4
        Tx2Pic(p%,xt%,yt%,a$,fnt$,sz%,attr%,rgb%)
        CLIPBOARD_COPY p%: ' -> clipboard
    END_IF
END_IF
RETURN
' ==============================================================================
Fonte:
i% = NUMBER_CLICK
IF i% = edt%
    SHOW fftx%
ELSE
    TEXT edt%,ITEM_INDEX$(fftx%+1): FONT_NAME memt%,TEXT$(edt%)
    HIDE fftx%
END_IF
RETURN
' ==============================================================================
Ctexte:
Palette16(LEFT(ftex%)+140,TOP(ftex%)-20)
rt% = INT(rgb%/65536): gt% = BIN_AND(rgb%/256,255): bt% = BIN_AND(rgb%,255)
COLOR pico%,rt%,gt%,bt%
RETURN
' ==============================================================================
Svav:
' sauvegarde avant opération
wp% = WIDTH(p%): hp% = HEIGHT(p%)
FILE_SAVE p%,fsav$
RETURN
' ==============================================================================
Annul:
' Annulation: retour à l'état précédent
WIDTH p%,wp%: HEIGHT p%,hp%
IF FILE_EXISTS(fsav$) = 0 THEN RETURN
FILE_LOAD p%,fsav$
CLIPBOARD_COPY p%: ' -> clipboard
res% = DLL_CALL0("LoadPicture"): ' clipboard -> image interne
GOSUB Affimint: ' réaffichage
RETURN
' ==============================================================================
Sauve:
' Enregistrement de l'image résultante
fs$ = FILE_NAME$(sd%): IF LEN(fs$)<4 THEN RETURN
CLIPBOARD_COPY p%
res% = DLL_CALL1("SaveAnyImageFile",ADR(fs$)): ' sauvegarde de l'image du clipboard
RETURN
' ==============================================================================
Dessiner:
IF r = 0 THEN r = 1
Dessin(p%,r)
RETURN
' ==============================================================================
Aide:
' A voir...
rc$ = CHR$(13)+CHR$(10)
a$ = " -  INSERTION  DE  TEXTE :"+rc$+rc$
a$=a$+"    Menu 'Insertion de texte', affichage d'une boîte de dialogue."+rc$
a$=a$+"    Taper le texte à insérer, définir sa police, sa taille, sa couleur et ses"+rc$
a$=a$+"enrichissements."+rc$
a$=a$+"    Définir les coordonnées de l'insertion X et Y, en fonction des échelles"+rc$
a$=a$+"en pixels qui encadrent l'écran. Le bouton 'Voir' permet de visualiser"+rc$
a$=a$+"sur l'image le rectangle enveloppant du texte, en fonction de sa taille,"+rc$
a$=a$+"de ses paramètres et de ses coordonnées d'insertion."+rc$
a$=a$+"    On peut déplacer ce rectangle par les boutons flèches, d'une valeur"+rc$
a$=a$+"en pixels à ajuster, pour une insertion précise."+rc$
a$=a$+"    Pour valider l'insertion : bouton 'Appliquer', puis fermer la fenêtre"+rc$
a$=a$+"d'insertion par la croix rouge de fermeture."+rc$+rc$
a$=a$+"NB: l'insertion de texte à fond transparent se fait pixel par pixel, et peut"+rc$
a$=a$+"       donc durer quelques secondes."
MESSAGE a$
RETURN
' ==============================================================================
SUB Tx2Pic(p%,x%,y%,txt$,fnt$,sz%,attr%,coul%)
' Affichage de lignes de texte txt$ sur l'objet p%, en position x%,y%,
' police fnt$, taille sz% (->255), attributs attr% (= B=1, I=2, U=4)
' couleur coul% format RGB (=65536*R + 256*G + B)
' Si plusieurs lignes: séparées par '0D0A'
DIM_LOCAL p1%,wt%,ht%,r%,g%,b%,i%,j%,t2d%,tpt%,k%,a$
p1% = 998: WHILE OBJECT_EXISTS(p1%)=1: p1%=p1%+1: END_WHILE
tpt% = NUMBER_PRINT_TARGET: t2d% = NUMBER_2D_TARGET
PICTURE p1%: LEFT p1%,-2000
PRINT_TARGET_IS p1%: FONT_NAME p1%,fnt$: FONT_SIZE p1%,sz%
IF BIN_AND(attr%,1) = 1 THEN FONT_BOLD p1%
IF BIN_AND(attr%,2) = 2 THEN FONT_ITALIC p1%
IF BIN_AND(attr%,4) = 4 THEN FONT_UNDERLINE p1%
COLOR p1%,1,1,1: 2D_TARGET_IS p1%: 2D_FILL_COLOR 1,1,1
r%=INT(coul%/65536): g%=BIN_AND(coul%,255*256)/256: b%=BIN_AND(coul%,255)
2D_PEN_COLOR r%,g%,b%
2D_TARGET_IS p%: 2D_PEN_COLOR r%,g%,b%
k% = INSTR(txt$,CHR$(13)+CHR$(10))
WHILE k% > 0
    a$ = LEFT$(txt$,k%-1): txt$ = RIGHT_POS$(txt$,k%+2)
    wt%=TEXT_WIDTH(a$,p1%): ht% = TEXT_HEIGHT("ABCghi",p1%)
    WIDTH p1%,wt%: HEIGHT p1%,ht%: PRINT a$
    FOR j% = 0 TO ht%-1
        FOR i% = 0 TO wt%-1
            IF COLOR_PIXEL_RED(p1%,i%,j%) <> 1 THEN 2D_POINT x%+i%,y%+j%
        NEXT i%
        DISPLAY
    NEXT j%
    y% = y%+ht%
    k% = INSTR(txt$,CHR$(13)+CHR$(10))
    2D_TARGET_IS p1%: CLS: 2D_TARGET_IS p%
END_WHILE
wt%=TEXT_WIDTH(txt$,p1%): ht%=TEXT_HEIGHT(txt$,p1%)
WIDTH p1%,wt%: HEIGHT p1%,ht%: PRINT txt$
FOR j% = 0 TO ht%-1
    FOR i% = 0 TO wt%-1
        IF COLOR_PIXEL_RED(p1%,i%,j%) <> 1 THEN 2D_POINT x%+i%,y%+j%
    NEXT i%
    DISPLAY
NEXT j%
PRINT_TARGET_IS tpt%: 2D_TARGET_IS t2d%
DELETE p1%
END_SUB
' ==============================================================================
SUB Palette16(x,y)
' Choix d'une couleur dans une palette de 16 (couleurs html de base) affichée en x,y
' Résultat dans rgb% sous la forme 65536*r + 256*g + b
IF LABEL("Aff_pal16") = 0 THEN LABEL Aff_pal16
IF LABEL("Qui_pal16") = 0 THEN LABEL Qui_pal16
DIM_LOCAL ch$(16),nc$(16)
DIM_LOCAL a$, nf, np, nq, nt, nb, wc, hc, r, g, b, i, j, k, t2d%, tpt%, ff%
DATA "Pal16"
DATA "000000","000080","0000FF","008000","008080","00FF00","00FFFF","800000"
DATA "800080","808000","808080","C0C0C0","FF0000","FF00FF","FFFF00","FFFFFF"
DATA " black"," navy","  blue"," green"," teal","  lime"," cyan","maroon"," purple"
DATA " olive"," gray"," silver","  red","magenta","  yellow","  white": ' noms standards
RESTORE: READ a$: WHILE a$<>"Pal16": READ a$: END_WHILE
FOR i=1 TO 16: READ ch$(i): NEXT i: FOR i=1 TO 16: READ nc$(i): NEXT i
tpt% = NUMBER_PRINT_TARGET: t2d% = NUMBER_2D_TARGET: ff% = 0
wc = 40: hc = 20
nf=3000: WHILE OBJECT_EXISTS(nf)=1: nf=nf+1: END_WHILE
         FORM nf: TOP nf,y: LEFT nf,x: WIDTH nf,4*(wc+1)+16: HEIGHT nf,4*(hc+14)+66
         BORDER_SMALL nf
         CAPTION nf," -   16  COULEURS  HTML   -": ON_CLOSE nf,Qui_pal16
np=nf+1: WHILE OBJECT_EXISTS(np)=1: np=np+1: END_WHILE
         PICTURE np: PARENT np,nf: FULL_SPACE np: 2D_TARGET_IS np: PRINT_TARGET_IS np
         ON_CLICK np,Aff_pal16
nq=np+1: WHILE OBJECT_EXISTS(nq)=1: nq=nq+1: END_WHILE
         PICTURE nq: PARENT nq,nf: TOP nq,4*(hc+14)+5: LEFT nq,0: WIDTH nq,wc
         HEIGHT nq,25
nt=nq+1: WHILE OBJECT_EXISTS(nt)=1: nt=nt+1: END_WHILE
         ALPHA nt: PARENT nt,nf: TOP nt,TOP(nq): LEFT nt,LEFT(nq)+WIDTH(nq)+5
         FONT_NAME nt,"Lucida Console"
nb=nt+1: WHILE OBJECT_EXISTS(nb)=1: nb=nb+1: END_WHILE
         BUTTON nb: PARENT nb,nf:TOP nb,TOP(nq): WIDTH nb,40: LEFT nb,WIDTH(nf)-56
         CAPTION nb,"OK": ON_CLICK nb,Qui_pal16
k = 1
FOR j=0 TO 3
    y = j*(hc+14)
    FOR i = 0 TO 3
        a$ = ch$(k): r=HEX(LEFT$(a$,2)): g=HEX(MID$(a$,3,2)): b=HEX(RIGHT$(a$,2))
        x = i*(wc+1): 2D_PEN_COLOR r,g,b: 2D_FILL_COLOR r,g,b
        2D_RECTANGLE x,y,x+wc,y+hc
        2D_FILL_COLOR 255,255,255: PRINT_LOCATE x,y+hc: PRINT nc$(k)
        k = k+1
    NEXT i
NEXT j
r=0: g=0: b=0: COLOR nq,r,g,b
CAPTION nt,"#00 00 00"+CHR$(10)+STR$(r)+","+STR$(g)+","+STR$(b)
2D_TARGET_IS nq: 2D_PEN_COLOR 164,164,164
WHILE ff% = 0: WAIT 100: END_WHILE
EXIT_SUB
Aff_pal16:
x=MOUSE_X_LEFT_DOWN(np): y=MOUSE_Y_LEFT_DOWN(np)
r=COLOR_PIXEL_RED(np,x,y): g=COLOR_PIXEL_GREEN(np,x,y): b=COLOR_PIXEL_BLUE(np,x,y)
2D_FILL_COLOR r,g,b: 2D_RECTANGLE 0,0,WIDTH(nq),HEIGHT(nq)
a$ = "#"+RIGHT$("0"+HEX$(r),2)+" "+RIGHT$("0"+HEX$(g),2)+" "+RIGHT$("0"+HEX$(b),2)
a$ = a$ + CHR$(10)+STR$(r)+","+STR$(g)+","+STR$(b)
CAPTION nt,a$
RETURN
Qui_pal16:
PRINT_TARGET_IS tpt%: 2D_TARGET_IS t2d%: DELETE nf
rgb% = 65536*r + 256*g + b
ff% = 1
RETURN
END_SUB
' ==============================================================================
SUB Dessin(p%,r)
' Boîte à outils pour dessiner sur le picture p%
' r = facteur de correction des coordonnées
'     cas du stretch_on dans un picture: r = Largeur picture/Largeur réelle image
'     (r = 1 si picture = image)
IF r = 0 THEN r = 1: ' si paramètre absent
DIM_LOCAL f%,t%,i%,j%,k%,x%,y%,a$,tr%,tg%,tb%,n2t%,fig%,trac%,term%,ret%,an
DIM_LOCAL x1%,y1%,x2%,y2%,x3%,y3%,fpr$,btg%,cap$
fpr$ = "C:\TEMP\Savpre.bmp"
IF FILE_EXISTS(fpr$) = 1 THEN FILE_DELETE fpr$
IF LABEL("Desfin")=0 THEN LABEL Desfin
IF LABEL("Desopt")=0 THEN LABEL Desopt
IF LABEL("Desanu")=0 THEN LABEL Desanu
IF LABEL("Descou")=0 THEN LABEL Descou
IF LABEL("Destim")=0 THEN LABEL Destim
IF LABEL("Destra")=0 THEN LABEL Destra
IF LABEL("Deslib")=0 THEN LABEL Deslib
IF LABEL("Desrec")=0 THEN LABEL Desrec
IF LABEL("Desron")=0 THEN LABEL Desron
IF LABEL("Desrem")=0 THEN LABEL Desrem
DATA "Pal16": ' palette 16 couleurs
DATA "000000","000080","0000FF","008000","008080","00FF00","00FFFF","800000"
DATA "800080","808000","808080","C0C0C0","FF0000","FF00FF","FFFF00","FFFFFF"
n2t% = NUMBER_2D_TARGET
ON_CLICK p%,Desrem
f% = 850: WHILE OBJECT_EXISTS(f%)=1: f%=f%+1: END_WHILE
FORM f%: TOP f%,0: LEFT f%,LEFT(0)+WIDTH(0): HEIGHT f%,208: WIDTH f%,132: BORDER_SMALL f%
         COLOR f%,180,255,255: FONT_BOLD f%: FONT_NAME f%,"Arial": ON_CLOSE f%,Desfin
         CAPTION f%,"- OUTILS  DESSIN -"
i%=f%+1: ALPHA i%: PARENT i%,f%: TOP i%,3: CAPTION i%,"Trait:"
i%=f%+2: PICTURE i%: PARENT i%,f%: TOP i%,0: LEFT i%,32: WIDTH i%,35: HEIGHT i%,23
         COLOR i%,0,0,0
i%=f%+3: PICTURE i%: PARENT i%,f%: TOP i%,3: LEFT i%,35: WIDTH i%,WIDTH(i%-1)-5
         HEIGHT i%,18: COLOR i%,255,0,0
i%=f%+4: SPIN i%: PARENT i%,f%: LEFT i%,75: WIDTH i%,40: font_size i%,9
         MIN i%,1: MAX i%,20: POSITION i%,1
i%=f%+5: PICTURE i%: PARENT i%,f%: TOP i%,25: LEFT i%,0: WIDTH i%,WIDTH(f%)-17
         HEIGHT i%,63: 2D_TARGET_IS i%: ON_CLICK i%,Descou
         RESTORE: READ a$: WHILE a$<>"Pal16": READ a$: END_WHILE
         FOR j% = 1 TO 4
             FOR i% = 1 TO 4
                 READ a$
                 tr%=HEX(LEFT$(a$,2)): tg%=HEX(MID$(a$,3,2)): tb%=HEX(RIGHT$(a$,2))
                 2D_FILL_COLOR tr%,tg%,tb%
                 2D_RECTANGLE x%,y%,x%+28,y%+15: x%=x%+29
             NEXT i%
             y%=y%+16: x% = 0
         NEXT j%
         tr% = 0: tg% = 0: tb% = 0: COLOR f%+3,tr%,tg%,tb%
i%=f%+6: CONTAINER_OPTION i%: PARENT i%,f%: TOP i%,TOP(i%-1)+65: WIDTH i%,WIDTH(f%)-18
         LEFT i%,0: HEIGHT i%,63: COLOR i%,255,255,180
i%=f%+7:OPTION i%: PARENT i%,f%+6: TOP i%,10: LEFT i%,4: CAPTION i%,"Trait"
i%=f%+8:OPTION i%: PARENT i%,f%+6: TOP i%,25: LEFT i%,4: CAPTION i%,"Libre"
i%=f%+9:OPTION i%: PARENT i%,f%+6: TOP i%,10: LEFT i%,54: CAPTION i%,"Rectan."
i%=f%+10:OPTION i%: PARENT i%,f%+6: TOP i%,25: LEFT i%,54: CAPTION i%,"Cercle"
i%=f%+11:OPTION i%: PARENT i%,f%+6: TOP i%,40: LEFT i%,4: CAPTION i%,"Remplir"
         MARK_ON f%+7
FOR J%=f%+7 TO f%+11: ON_CLICK j%,Desopt: NEXT j%
i%=f%+12: BUTTON i%: PARENT i%,f%: WIDTH i%,60: TOP i%,TOP(f%+6)+HEIGHT(f%+6)
          HEIGHT i%,20: CAPTION i%,"Annuler": ON_CLICK i%,Desanu
i%=f%+13:BUTTON i%: PARENT i%,f%: WIDTH i%,55:TOP i%,TOP(i%-1): LEFT i%,60
         HEIGHT i%,20: CAPTION i%,"Quitter": ON_CLICK i%,Desfin
2D_TARGET_IS p%: 2D_PEN_DOT
t%=f%+14: TIMER t%: PARENT t%,f%: TIMER_INTERVAL t%,40: ON_TIMER t%,Destim
trac% = 0: term% = 0: btg% = 0
fig% = 1: ret% = 0: cap$ = CAPTION$(0)
CLIPBOARD_COPY p%
WHILE 1 > 0: WAIT 100: END_WHILE: GOTO Desfin
' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
Desopt:
fig% = 1: ' trait
IF CHECKED(f%+8) = 1
    fig% = 2: ' tracé libre
    FILE_SAVE p%,fpr$: ' sauvegarde préalable
ELSE
    IF CHECKED(f%+9) = 1
        fig% = 3: ' rectangle
    ELSE
        IF CHECKED(f%+10) = 1
            fig% = 4: ' cercle
        ELSE
            IF CHECKED(f%+11) = 1
                fig% = 5: ' remplissage
            END_IF
        END_IF
    END_IF
END_IF
RETURN
' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
Destim:
IF CHECKED(f%+11)=1 THEN RETURN: ' remplissage
x% = MOUSE_X_POSITION(p%)/r: y% = MOUSE_Y_POSITION(p%)/r: ' position actuelle souris
a$ =  "X= "+STR$(x%)+" pixels  Y= "+STR$(y%)+" pixels"
CAPTION 0,a$
2D_PEN_COLOR tr%,tg%,tb%: 2D_PEN_WIDTH POSITION(f%+4)
IF MOUSE_LEFT_DOWN(p%) = 1: ' bouton gauche enfoncé
    x1% = x%: y1% = y%: ' origine
    trac% = 1
    IF fig% = 2 AND btg% = 0 THEN FILE_SAVE p%,fpr$: ' sauvegarde préalable
    btg% = 1
END_IF
IF MOUSE_LEFT_UP(p%) = 1: ' relâche, tracé final
    btg% = 0
    IF x1% = -1 THEN RETURN
    TIMER_OFF t%
    ' clipboard_paste p%:
    term% = 1: 2D_PEN_SOLID
    SELECT fig%
        CASE 1: GOSUB Destra
        CASE 2: GOSUB Deslib
        CASE 3: GOSUB Desrec
        CASE 4: GOSUB Desron
        CASE 5: GOSUB Desrem
    END_SELECT
    ' x1% = sx1%: x2% = sx2%: y1% = sy1%: y2% = sy2%
    CLIPBOARD_COPY p%: term% = 0
    trac% = 0: 2D_PEN_DOT
    TIMER_ON t%
END_IF
IF trac% = 1
    ' tracé provisoire, en continu
    if x1% = -1 then return
    x2% = x%: y2% = y%: ' position actuelle
    IF x2%=x3% AND y2%=y3% THEN RETURN: ' position inchangée
    SELECT fig%
        CASE 1: GOSUB Destra
        CASE 2: GOSUB Deslib
        CASE 3: GOSUB Desrec
        CASE 4: GOSUB Desron
    END_SELECT
    x3% = x%: y3% = y%
END_IF
RETURN
' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
Destra:
CLIPBOARD_PASTE p%: IF term% = 1 THEN FILE_SAVE p%,fpr$: ' sauvegarde préalable
2D_LINE x1%,y1%,x2%,y2%
IF term% = 1 THEN x1% = -1
RETURN
' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
Deslib:
2D_PEN_SOLID
2D_LINE x1%,y1%,x2%,y2%: x1%=x2%: y1%=y2%
IF term% = 1 THEN x1% = -1
RETURN
' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
Desrec:
CLIPBOARD_PASTE p%: IF term% = 1 THEN FILE_SAVE p%,fpr$: ' sauvegarde préalable
2D_LINE x1%,y1%,x2%,y1%:2D_POLY_TO x2%,y2%:2D_POLY_TO x1%,y2%:2D_POLY_TO x1%,y1%
IF term% = 1 THEN x1% = -1
RETURN
' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
Desron:
CLIPBOARD_PASTE p%: IF term% = 1 THEN FILE_SAVE p%,fpr$: ' sauvegarde préalable
k% = SQR((y2%-y1%)*(y2%-y1%) + (x2%-x1%)*(x2%-x1%)): ' rayon du cercle
2D_POLY_FROM x1%+k%,y1%
FOR an = 0 TO 8*ATN(1)+.1 STEP .1
    2D_POLY_TO x1%+k%*COS(an), y1%+k%*SIN(an)
NEXT an
IF term% = 1 THEN x1% = -1
RETURN
' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
Desrem:
IF CHECKED(f%+11)=0 THEN RETURN
FILE_SAVE p%,fpr$: ' sauvegarde préalable
x% = MOUSE_X_LEFT_DOWN(p%)/r: y% = MOUSE_Y_LEFT_DOWN(p%)/r
2D_FLOOD x%,y%,tr%,tg%,tb%
x1% = -1
CLIPBOARD_COPY p%
RETURN
' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
Desanu:
IF FILE_EXISTS(fpr$) = 1 THEN FILE_LOAD p%,fpr$: CLIPBOARD_COPY p%
RETURN
' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
Descou:
x%=MOUSE_X_LEFT_DOWN(f%+5): y%=MOUSE_Y_LEFT_DOWN(f%+5)
tr%=COLOR_PIXEL_RED(f%+5,x%,y%): tg%=COLOR_PIXEL_GREEN(f%+5,x%,y%)
tb%=COLOR_PIXEL_BLUE(f%+5,x%,y%): COLOR f%+3,tr%,tg%,tb%
RETURN
' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
Desfin:
ret% = 1
TIMER_OFF t%: DELETE t%: OFF_CLICK p%: 2D_TARGET_IS n2t%
DELETE f%: CAPTION 0,cap$
WAIT 100
EXIT_SUB
RETURN
END_SUB
'
il est vraiment bien ton programme
merci
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Traitement d'images (2)   

Revenir en haut Aller en bas
 
Traitement d'images (2)
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 2Aller à la page : 1, 2  Suivant
 Sujets similaires
-
» [Tutoriel]Initiation au traitement d'images numériques
» Traitement d'images
» [Résolu] Affichage images dans un mail
» Insérer des images dans vos sujets.
» Hébergement gratuit images photos fichiers

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: