Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Traitement d'images (2) | |
| | |
Auteur | Message |
---|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Traitement d'images (2) Lun 3 Nov 2014 - 14:26 | |
| Il y en avait déjà un ( https://panoramic.1fr1.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... | |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: Traitement d'images (2) Mer 3 Déc 2014 - 21: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 | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Traitement d'images (2) Mer 3 Déc 2014 - 23: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... ) | |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: Traitement d'images (2) Jeu 4 Déc 2014 - 20: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 | |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: Traitement d'images (2) Jeu 4 Déc 2014 - 21:34 | |
| | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Traitement d'images (2) Jeu 4 Déc 2014 - 22: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). | |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: Traitement d'images (2) Jeu 4 Déc 2014 - 22:50 | |
| peut être faut il avoir une version supérieur a 25i9 pour travailler? | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Traitement d'images (2) Jeu 4 Déc 2014 - 23: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. | |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: Traitement d'images (2) Jeu 4 Déc 2014 - 23: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 | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| | | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: Traitement d'images (2) Ven 5 Déc 2014 - 9: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$ | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Traitement d'images (2) Ven 5 Déc 2014 - 15: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 ? | |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: Traitement d'images (2) Ven 5 Déc 2014 - 21: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.
| |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Traitement d'images (2) Ven 5 Déc 2014 - 22: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... | |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: Traitement d'images (2) Dim 7 Déc 2014 - 21: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 Merci encore pour tes encouragements. Malheureusement pour ton programme je ne suis vraiment pas au niveau. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Traitement d'images (2) Dim 7 Déc 2014 - 21: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. | |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: Traitement d'images (2) Lun 8 Déc 2014 - 19: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 | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Traitement d'images (2) Lun 8 Déc 2014 - 20: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... 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' | |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: Traitement d'images (2) Mar 9 Déc 2014 - 21: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 | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Traitement d'images (2) Mar 9 Déc 2014 - 21: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... | |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: Traitement d'images (2) Mar 9 Déc 2014 - 21:55 | |
| OK JL35 si tu peux rapprocher les fenêtres 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 | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Traitement d'images (2) Mar 9 Déc 2014 - 23: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 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. | |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: Traitement d'images (2) Mer 10 Déc 2014 - 13: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à... a grand maux les grands remèdes wi% = 400 là les fenêtres apparaissent il vas falloir que j'adapte un peut car les conséquences sont ÉNORMES mais tout marche affaire réglé pour moi MERCI JL35 | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Traitement d'images (2) Mer 10 Déc 2014 - 13: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 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. | |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: Traitement d'images (2) Mer 10 Déc 2014 - 13: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 | |
| | | Contenu sponsorisé
| Sujet: Re: Traitement d'images (2) | |
| |
| | | | Traitement d'images (2) | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |