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 |
|
|
| Calcul de la hauteur de base d'une police | |
| | Auteur | Message |
---|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Calcul de la hauteur de base d'une police Sam 3 Fév 2018 - 18:16 | |
| Pour savoir où est la base d'alignement (base des caractères majuscules par exemple) par rapport à la hauteur totale de la police donnée par TEXT_HEIGHT. Par exemple pour aligner sur une même ligne de texte des polices différentes et/ou de taille différente, sur un Picture. - Code:
-
LABEL Police,Pol1,Affiche,Coord DIM x%,y%,f$,a$,nl%,hl%,r%,z f$ = "C:\TEXTES\Fetes.txt": ' <====== à adapter =========== HEIGHT 0,500: WIDTH 0,500: BORDER_SMALL 0: FONT_BOLD 0: COLOR 0,180,255,255 EDIT 1: TOP 1,1: WIDTH 1,140: TEXT 1,"Arial": ON_CLICK 1,Police SPIN 2: LEFT 2,WIDTH(1): WIDTH 2,50: MIN 2,6: MAX 2,255: POSITION 2,255 BUTTON 3: LEFT 3,LEFT(2)+WIDTH(2)+5: WIDTH 3,40: CAPTION 3,"OK": ON_CLICK 3,Affiche ALPHA 5: TOP 5,0: LEFT 5,LEFT(3)+45: FONT_SIZE 5,14 COLOR 5,255,255,0: FONT_COLOR 5,164,0,0 ALPHA 10: TOP 10,25: COLOR 10,255,255,0: FONT_SIZE 10,12 PICTURE 15: TOP 15,50: WIDTH 15,25: HEIGHT 15,HEIGHT(0)-85: COLOR 15,255,255,128 PICTURE 16: TOP 16,TOP(15): LEFT 16,WIDTH(15): HEIGHT 16,HEIGHT(15): WIDTH 16,WIDTH(0)-50 ON_CLICK 16,Coord 2D_TARGET_IS 15 FOR y% = 0 TO HEIGHT(15) STEP 10 2D_LINE 15,y%,25,y% NEXT y% FOR y% = 0 TO HEIGHT(15) STEP 100 2D_LINE 5,y%,25,y% NEXT y% LIST 20: HIDE 20: TOP 20,TOP(1)+25: WIDTH 20,200: HEIGHT 20,HEIGHT(15) FONT_NAMES_LOAD 20: ON_CLICK 20,Pol1 GOSUB Affiche END ' ---------------------- Police: SHOW 20 RETURN Pol1: TEXT 1,ITEM_INDEX$(20) HIDE 20 GOSUB Affiche RETURN ' ------------------------ Affiche: 2D_TARGET_IS 16: CLS PRINT_TARGET_IS 16: FONT_NAME 16,TEXT$(1): FONT_SIZE 16,POSITION(2) hl% = TEXT_HEIGHT("Abc_ïxyz",16) CAPTION 5," HL = "+STR$(hl%)+" " y% = 0: nl% = 0 PRINT_LOCATE 0,y%: PRINT "E_" 2D_PEN_COLOR 255,0,0: 2D_LINE 0,hl%,400,hl% x% = POSITION(2)/2 FOR y% = hl% TO 0 STEP -1 r% = COLOR_PIXEL_RED(16,x%,y%) IF r% = 0 THEN EXIT_FOR NEXT y% x%= 1000*y%/hl%: z = x%/1000 a$ = "Hauteur totale = "+STR$(hl%)+", hauteur base = "+STR$(y%) a$ = a$+", rapport = "+STR$(z) caption 10, a$ RETURN ' ------------------------ Coord: y% = MOUSE_Y_LEFT_DOWN(16) CAPTION 0,STR$(y%) RETURN | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Calcul de la hauteur de base d'une police Sam 3 Fév 2018 - 19:00 | |
| On peut aussi analyser la taille d'un caractère ou de toute une ligne de texte de la manière suivante (100 % Panoramic): - Code:
-
label choix, analyser, imprimer
dim i%, hauteur%, largeur%
combo 1 : width 1,200 : font_names_load 1 : on_click 1,choix alpha 2 : left 2,width(1)+10 : caption 2,str$(count(1))+" polices" spin 3 : left 3,300 : width 3,100 : min 3,8 : max 3,64 : position 3,12
picture 10 : top 10,40 : left 10,10 : width 10,400 : height 10,300 print_target_is 10 : color 10,255,255,0
button 11 : top 11,170 : left 11,left(10)+width(10)+10 : caption 11,"Analyser" : on_click 11,analyser
alpha 20 : top 20,top(10)+height(10)+10 : left 20,10 : caption 20,"Text:" edit 21 : top 21,top(20) : left 21,40 : width 21,200 button 22 : top 22,top(21) : left 22,left(21)+width(21) : caption 22,"Imprimer" : on_click 22,imprimer
end
imprimer: print_locate 0,0 color 10,255,255,0 print text$(21) return
choix: font_name 10,item_index$(1) font_size 10,position(3) print_locate 0,0 color 10,255,255,0 print "W" return
analyser: for i%=0 to height(10) if color_pixel_blue(10,i%,0)=0 largeur = i% exit_for end_if next i% for i%=0 to width(10) if color_pixel_blue(10,0,i%)=0 hauteur = i% exit_for end_if next i% message "Hauteur="+str$(hauteur%)+" Largeur="+str$(largeur%) return
| |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Calcul de la hauteur de base d'une police Sam 3 Fév 2018 - 19:18 | |
| En fait, le problème est de savoir où se trouve la ligne de base des caractères (par exemple la base d'une majuscule) par rapport à la hauteur totale (suite à une question de Oscaribout). Pour pouvoir aligner des textes sur une même ligne, de tailles et/ou de polices différentes. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Calcul de la hauteur de base d'une police Sam 3 Fév 2018 - 19:54 | |
| Là, on trouve la base: - Code:
-
' analyser_taille_police.bas
label choix, analyser, imprimer, base
dim i%, hauteur%, largeur%, n%, k%, h%, base%
combo 1 : width 1,200 : font_names_load 1 : on_click 1,choix alpha 2 : left 2,width(1)+10 : caption 2,str$(count(1))+" polices" spin 3 : left 3,300 : width 3,100 : min 3,8 : max 3,64 : position 3,12
picture 10 : top 10,40 : left 10,10 : width 10,400 : height 10,300 print_target_is 10 : color 10,255,255,0 : 2d_target_is 10
button 11 : top 11,170 : left 11,left(10)+width(10)+10 : caption 11,"Analyser" : on_click 11,analyser button 12 : top 12,200 : left 12,left(10)+width(10)+10 : caption 12,"Ligne de base" : on_click 12,base
alpha 20 : top 20,top(10)+height(10)+10 : left 20,10 : caption 20,"Text:" edit 21 : top 21,top(20) : left 21,40 : width 21,200 button 22 : top 22,top(21) : left 22,left(21)+width(21) : caption 22,"Imprimer" : on_click 22,imprimer
end
imprimer: print_locate 0,0 color 10,255,255,0 print text$(21) return
choix: font_name 10,item_index$(1) font_size 10,position(3) print_locate 0,0 color 10,255,255,0 print "W" return
analyser: for i%=0 to width(10) if color_pixel_blue(10,i%,0)=0 largeur% = i% exit_for end_if next i% for i%=0 to height(10) if color_pixel_blue(10,0,i%)=0 hauteur% = i% exit_for end_if next i% message "Hauteur="+str$(hauteur%)+" Largeur="+str$(largeur%) return base: font_name 10,item_index$(1) font_size 10,position(3) print_locate 0,0 color 10,255,255,0 print "E" ' largeur for i%=0 to width(10) if color_pixel_blue(10,i%,0)=0 largeur% = i% exit_for end_if next i% ' hauteur for i%=0 to height(10) if color_pixel_blue(10,0,i%)=0 hauteur% = i% exit_for end_if next i% ' chercher la barre verticale du E h% = hauteur%/2 2d_line 0,h%-1,width(10),h%-1 for i%=0 to width(10) if color_pixel_red(10,i%,h%)<>255 k% = i% exit_for end_if next i% ' chercher le haut du E 2d_line k%-1,0,k%-1,height(10) for i%=0 to height(10) if color_pixel_red(10,k%,i%)<>255 n% = i% exit_for end_if next i% ' chercher le bas du E 2d_line 0,n%,width(10),n% for i%=n%+1 to height(10) if color_pixel_red(10,k%,i%)=255 base% = i% exit_for end_if next i% 2d_line 0,base%,width(10),base% display message "Base="+str$(base%) + " Hauteur="+str$(hauteur%)+" Largeur="+str$(largeur%) return
| |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Calcul de la hauteur de base d'une police Sam 3 Fév 2018 - 20:07 | |
| A mon avis, c'est plus simple que ça, si j'ai bien compris le problème d'Oscaribout: aligner des polices ou tailles différentes sur une même ligne: - Code:
-
DIM x%,y%,f$,a$,nl%,hl%,r%,z,d%,p%,fnt$,sz% f$ = "C:\TEXTES\Fetes.txt": ' <====== à adapter =========== HEIGHT 0,200: WIDTH 0,840: BORDER_SMALL 0: FONT_BOLD 0: COLOR 0,180,255,255 p% = 16 PICTURE p%: HEIGHT p%,150: WIDTH p%,WIDTH(0)-30 print_target_is p% x% = 0: y% = 80: ' ligne de base ' ----- a$ = "Au clair": fnt$ = "Arial": sz% = 20 font_name p%,fnt$: font_size p%,sz%: hl% = TEXT_HEIGHT(a$,p%) Base_Carac(fnt$,sz%) d% = VAL(CLIPBOARD_STRING_PASTE$) PRINT_LOCATE x%,y%-d%: PRINT a$: x% = x%+TEXT_WIDTH(a$,p%) ' ----- a$ = " de la lune": fnt$ = "Times New Roman": sz% = 32 font_name p%,fnt$: font_size p%,sz%: hl% = TEXT_HEIGHT(a$,p%) Base_Carac(fnt$,sz%) d% = VAL(CLIPBOARD_STRING_PASTE$) PRINT_LOCATE x%,y%-d%: PRINT a$: x% = x%+TEXT_WIDTH(a$,p%) ' ----- a$ = " mon ami Pierrot,": fnt$ = "Lucida Console": sz% = 12 font_name p%,fnt$: font_size p%,sz%: hl% = TEXT_HEIGHT(a$,p%) Base_Carac(fnt$,sz%) d% = VAL(CLIPBOARD_STRING_PASTE$) PRINT_LOCATE x%,y%-d%: PRINT a$: x% = x%+TEXT_WIDTH(a$,p%) ' ----- a$ = " prête-moi": fnt$ = "Calibri": sz% = 60 font_name p%,fnt$: font_size p%,sz%: hl% = TEXT_HEIGHT(a$,p%) Base_Carac(fnt$,sz%) d% = VAL(CLIPBOARD_STRING_PASTE$) PRINT_LOCATE x%,y%-d%: PRINT a$: x% = x%+TEXT_WIDTH(a$,p%) ' ----- 2D_TARGET_IS p%: 2d_line 0,y%,width(p%),y%: ' pour voir l'alignement END ' ---------------------- ------------------------------------------------------- SUB Base_Carac(fnt$,sz%) ' Calcul de l'emplacement de la ligne de base des caractères par rapport au ' sommet de la police, résultat en pixels rendu dans le presse-papier ' Usage: pour aligner sur une même ligne des textes de polices et/ou de tailles ' ----- différentes DIM_LOCAL n2d%,npr%,p%,x%,y%,hl%,r% n2d% = NUMBER_2D_TARGET: npr% = NUMBER_PRINT_TARGET p% = 900: PICTURE p%: HIDE p% PRINT_TARGET_IS p%: FONT_NAME p%,fnt$: FONT_SIZE p%,sz% hl% = TEXT_HEIGHT("Ey",p%): ' hauteur totale de la police PRINT_LOCATE 0,0: PRINT "E" 2D_TARGET_IS p% x% = sz%/2 FOR y% = hl% TO 0 STEP -1 r% = COLOR_PIXEL_RED(p%,x%,y%): IF r% = 0 THEN EXIT_FOR NEXT y% CLIPBOARD_STRING_COPY STR$(y%): ' ligne de base depuis le sommet 2D_TARGET_IS n2d%: PRINT_TARGET_IS npr%: DELETE p% END_SUB ' ---------------------- ------------------------------------------------------- Pour obtenir quelque chose comme ça: (Arial taille 20, Times New Roman taille 32, Lucida Console taille 12, Calibri taille 60)
Dernière édition par JL35 le Sam 3 Fév 2018 - 21:08, édité 2 fois | |
| | | Oscaribout
Nombre de messages : 471 Date d'inscription : 29/12/2016
| Sujet: Re: Calcul de la hauteur de base d'une police Sam 3 Fév 2018 - 20:10 | |
| Travaillez, prenez de la peine, c'est le fond qui manque le moins (de mémoire il y a beaucoup d'eau tombé depuis).
Je ne peux plus suivre, vous allez trop vite pour moi. Mais c'est très bien! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Calcul de la hauteur de base d'une police Sam 3 Fév 2018 - 20:12 | |
| C'est tout simple, la sub fait tout le boulot ! (c'est 'le Laboureur et ses enfants', non ?) | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Calcul de la hauteur de base d'une police Sam 3 Fév 2018 - 21:36 | |
| Une variante plus simple de mon code, mais qui marche aussi avec des polices pour lesquelles le E n'est pas composé de lignes droites: - Code:
-
' analyser_taille_police.bas
label choix, analyser, imprimer, base
dim i%, hauteur%, largeur%, n%, k%, h%, l%, base%, b1%, b2%, b3%
combo 1 : width 1,200 : font_names_load 1 : on_click 1,choix alpha 2 : left 2,width(1)+10 : caption 2,str$(count(1))+" polices" spin 3 : left 3,300 : width 3,100 : min 3,8 : max 3,64 : position 3,12
picture 10 : top 10,40 : left 10,10 : width 10,400 : height 10,300 print_target_is 10 : color 10,255,255,0 : 2d_target_is 10
button 11 : top 11,170 : left 11,left(10)+width(10)+10 : caption 11,"Analyser" : on_click 11,analyser button 12 : top 12,200 : left 12,left(10)+width(10)+10 : caption 12,"Ligne de base" : on_click 12,base
alpha 20 : top 20,top(10)+height(10)+10 : left 20,10 : caption 20,"Text:" edit 21 : top 21,top(20) : left 21,40 : width 21,200 button 22 : top 22,top(21) : left 22,left(21)+width(21) : caption 22,"Imprimer" : on_click 22,imprimer
edit 30 : top 30,top(21)+height(21)+10 : width 30,width(10)
end
imprimer: print_locate 0,0 color 10,255,255,0 print text$(21) return
choix: font_name 10,item_index$(1) font_size 10,position(3) print_locate 0,0 color 10,255,255,0 print "W" return
analyser: for i%=0 to width(10) if color_pixel_blue(10,i%,0)=0 largeur% = i% exit_for end_if next i% for i%=0 to height(10) if color_pixel_blue(10,0,i%)=0 hauteur% = i% exit_for end_if next i% text 30, "Hauteur="+str$(hauteur%)+" Largeur="+str$(largeur%) return base: font_name 10,item_index$(1) font_size 10,position(3) print_locate 0,0 color 10,255,255,0 print "E" ' largeur for i%=width(10) to 0 step -1 if color_pixel_blue(10,i%,0)<>0 largeur% = i% exit_for end_if next i% 2d_line largeur%,0,largeur%,width(10) ' hauteur for i%=height(10) to 0 step -1 if color_pixel_blue(10,0,i%)<>0 hauteur% = i% exit_for end_if next i% 2d_line 0,hauteur%,width(10),hauteur% ' chercher la barre horizontale du bas du E l% = largeur%/2 for i%=hauteur%-1 to 0 step -1 if color_pixel_red(10,l%,i%)<>255 b1% = i% exit_for end_if next i% l% = largeur%/4 for i%=hauteur%-1 to 0 step -1 if color_pixel_red(10,l%,i%)<>255 b2% = i% exit_for end_if next i% l% = (largeur%*3)/4 for i%=hauteur%-1 to 0 step -1 if color_pixel_red(10,l%,i%)<>255 b3% = i% exit_for end_if next i% base% = (b1%+b2%+b3%)/3 2d_pen_color 0,0,255 2d_line 0,base%,width(10),base% 2d_pen_color 0,0,0 display text 30, "Base="+str$(base%) + " Hauteur="+str$(hauteur%)+" Largeur="+str$(largeur%) return
| |
| | | Contenu sponsorisé
| Sujet: Re: Calcul de la hauteur de base d'une police | |
| |
| | | | Calcul de la hauteur de base d'une police | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |