JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Texte sur cercle Sam 25 Aoû 2018 - 20:30 | |
| Le but était l'apposition d'un texte donné sur la périphérie d'un cercle. Le problème était donc l'inclinaison variable des lettres du texte en fonction de leur position sur la circonférence. Je l'avais fait avec une ressource externe (convert.exe de ImageMagick), mais j'ai pu le faire grâce à une dll de l'ami Klaus, fonction 'TorturePicture': C'est donc sous la forme d'une SUB Texte_sur_cercle() ... original n'est-il pas ? - Code:
-
' Texte sur cercle DIM f$,fr$,q$,xc%,yc%,ry%,tx$,pol$,sz%,rgb%,gis$ fr$ = "Z:\Img.jpg" tx$ = " JOYEUX PANORAMIC !" PICTURE 1: FULL_SPACE 1: 2D_TARGET_IS 1
PRINT_TARGET_IS 1 pol$ = "Lucida Console": sz% = 32: ' police, taille gis$ = "G": rgb% = 255*65536: ' gras, rouge xc% = 250: yc% = 220: ry% = 150: ' cercle Texte_sur_cercle(1,xc%,yc%,ry%,tx$,pol$,sz%,rgb%,gis$) END ' ============================================================================== SUB Texte_sur_cercle(p%,xc%,yc%,ry%,tx$,pol$,sz%,rgb%,gis$) ' Apposition dans le picture p% du texte tx$ sur le cercle ' centré en xc%,yc%,de rayon ry% ' Police texte pol$, taille sz%, couleur rgb% (R*65536+G*256+B) ' enrichissements gis$ = "G", "I", "S", combinables. IF LABEL("Rotima") = 0 THEN LABEL Rotima DIM_LOCAL px%,q$,wt%,wc%,hc%,rt%,ci%,an%,a1%,a2%,ac%,aa%,rot%,i%,a$,x%,y% DIM_LOCAL rtm$,f$,fr$,ftm$ DIM_LOCAL w%,h%,ax%,ay%,dx%,dy%,res%,hg$,hd$,bd$,bg$,r%,g%,b% DIM_LOCAL kgf$: kgf$ = "C:\PANORAMIC\KGF\KGF.dll": ' <===== A AJUSTER ! rtm$ = "C:\TEMP": ' répertoire des fichiers provisoires A AJUSTER f$ = rtm$+"Im1.bmp" fr$ = rtm$+"Im2.bmp" ftm$ = rtm$+"TmpImg.bmp": ' A ajuster q$ = CHR$(34) 2D_TARGET_IS p% DEGREES px%=990: PICTURE px%: HIDE px%: FONT_NAME px%,pol$: FONT_SIZE px%,sz% gis$ = UPPER$(gis$): IF INSTR(gis$,"G") > 0 THEN FONT_BOLD px% IF INSTR(gis$,"I") > 0 THEN FONT_ITALIC px% IF INSTR(gis$,"S") > 0 THEN FONT_UNDERLINE px% r% = INT(rgb%/65536): g% = BIN_AND(rgb%,65280)/256: b% = BIN_AND(rgb%,255) FONT_COLOR px%,r%,g%,b% PRINT_TARGET_IS px% wt% = TEXT_WIDTH(tx$,px%): ' largeur du texte, en pixels wt% = wt%+wt%/5: ' + écartement supplémentaire wc% = wt%/LEN(tx$): hc% = TEXT_HEIGHT(tx$,px%): ' dimensions d'un caractère i% = wc%: IF hc%>wc% THEN i% = hc% WIDTH px%,i%: HEIGHT px%,i% IMAGE px%+1 ci% = 2*PI*ry%: ' circonférence an% = 360*wt%/ci%: ' angle occupé par tout le texte ac% = an%/LEN(tx$): ' angle occupé par un caractère a1% = 90+an%/2: ' angle de départ rt% = ry%+hc%: ' rayon de base des caractères rt% = rt%+rt%/20 aa% = a1% DLL_ON kgf$ FOR i% = 1 TO LEN(tx$) a$ = MID$(tx$,i%,1) IF a$ <> " " PRINT_LOCATE 0,0: PRINT a$ IF aa% > 90 rot% = -1*(aa%-90) ELSE rot% = 90-aa% END_IF CLIPBOARD_COPY px% w% = WIDTH(px%): h% = HEIGHT(px%) GOSUB Rotima x% = xc%+rt%*COS(aa%): y% = yc%-rt%*SIN(aa%) 2D_IMAGE_PASTE px%+1,x%,y% END_IF aa% = aa%-ac% NEXT i% DLL_OFF PRINT_TARGET_IS p%: DELETE px%: DELETE px%+1 EXIT_SUB Rotima: IF FILE_EXISTS(ftm$) = 1 THEN FILE_DELETE ftm$ ax% = w%*COS(rot%): ay% = h%*COS(rot%) dx% = h%*SIN(rot%): dy% = w%*SIN(rot%) hg$ = STR$(dx%)+",0": hd$ = STR$(dx%+ax%)+","+STR$(dy%) bd$ = STR$(ax%)+","+STR$(dy%+ay%): bg$ = "0,"+STR$(ay%) res% = DLL_CALL0("LoadPicture") res% = DLL_CALL4("TorturePicture",ADR(hg$),ADR(hd$),ADR(bd$),ADR(bg$)) res% = DLL_CALL0("SavePicture") CLIPBOARD_PASTE px%+1: ' -> IMAGE RETURN END_SUB ' ============================================================================== On doit pouvoir le faire aussi sur une ellipse, quant à une courbe quelconque, j'aime mieux ne pas y penser ! On pourra remarquer que les caractères très inclinés ne sont pas forcément très bien définis, c'est inévitable à mon avis, dû à la rotation. Le résultat est acceptable mais pas parfait, il y a de petits défaut dus à la rotation, et tel quel ça ne marche qu'avec une police à pas fixe. | |
|
silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Texte sur cercle Dim 26 Aoû 2018 - 12:31 | |
| | |
|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Texte sur cercle Dim 26 Aoû 2018 - 12:52 | |
| Merci silverman, mais j'envisage d'utiliser des sprites pour les caractères, pour les problèmes de chevauchement, on va voir... | |
|
Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Texte sur cercle Dim 26 Aoû 2018 - 21:00 | |
| Oui, c'est sympa et original ! - JL35 a écrit:
- mais j'envisage d'utiliser des sprites pour les caractères, pour les problèmes de chevauchement
Pour mémoire, tu as la couleur 0,0,0 qui est transparente qui très pratique. Bonne soirée ! | |
|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Texte sur cercle Dim 26 Aoû 2018 - 21:15 | |
| Bonsoir Marc,
C'est évidemment la couleur de transparence (noir pur) qui fait l'intérêt de la méthode sprite. J'ai fait quelques tentatives d'adaptation, mais ce n'est pas très concluant... | |
|
Contenu sponsorisé
| Sujet: Re: Texte sur cercle | |
| |
|