Download the free trial version
Basic4android Video
Features
Tutorials and manuals
Showcase
Screenshots

Go Back   Android Development Forum - Basic4android > Foreign Languages > French Forum
Documentation Wiki Register Members List B4P Search Today's Posts Mark Forums Read

MeasureStringHeight - Bug ?

Reply
 
LinkBack Thread Tools Display Modes
  #1 (permalink)  
Old 10-23-2011, 04:21 PM
Junior Member
 
Join Date: Oct 2011
Posts: 26
Default MeasureStringHeight - Bug ?

Bonjour

J'utilise une fonction pour tracer du texte sur un canvas d'une ImageView et je rencontre un problème

La fonction :
Code:
Sub DrawTextCenter(T As String, Cv As Canvas,Obj As ImageView,Bg As Bitmap, Cl As Int)
Dim Wt As Int
Dim Ht As Int
Dim Src,Dst As Rect
Wt = Cv.MeasureStringWidth(T, 
Typeface.DEFAULT,FontStd)
Ht = Cv.MeasureStringHeight(
"p",Typeface.DEFAULT,FontStd)
cl=
Colors.White
Src.Initialize(
0,0,Bg.Width,Bg.Height)
Dst.Initialize(
0,0,obj.Width,Obj.Height)
Cv.DrawBitmap(Bg,Src,Dst)
Cv.DrawText(T,Obj.Width/
2,(Obj.Height+Ht)/2Typeface.DEFAULT,FontStd,Cl,"CENTER")
End Sub

La fonction MesureStringWidth fonctionne parfaitement, par contre MesureStringHeight ne retourne pas la bonne dimension lorsque on a un jambage descendant.

Par exemple :le mot "Gestion" sera bien centré verticalement mais pas le mot "Apercevoir"

Par contre si on ne passe que "p" a MesureStringWidth alors Apercevoir sera parfaitement centré verticalement

Avez vous déjà rencontré ce PB ?
Reply With Quote
  #2 (permalink)  
Old 10-23-2011, 06:57 PM
klaus's Avatar
Basic4ppc Expert
 
Join Date: Oct 2007
Location: Fully, Switzerland
Posts: 4,463
Awards Showcase
Forum Contributer Beta Tester Competition Winner 
Total Awards: 3
Default

La fonction MesureStringHeight donne la hauteur effective du texte et non la hauteur de la ligne compète.
Par exemple:
Log(cv.MeasureStringHeight("Option",Typeface.DEFAU LT,16))
Log(cv.MeasureStringHeight("O",Typeface.DEFAULT,16 ))
Log(cv.MeasureStringHeight("p",Typeface.DEFAULT,16 ))

Option > 16
O > 12
p > 13

donc pour être sûr que tout texte soit centré de même manière il faut utiliser systématiquement au moins une majuscule et une lettre avec un jambage:
Log(cv.MeasureStringHeight("Op",Typeface.DEFAULT,1 6))

Meilleures salutations.
__________________
Klaus
Switzerland

Beginner's Guide / User's Guide
Reply With Quote
  #3 (permalink)  
Old 10-24-2011, 09:12 AM
Junior Member
 
Join Date: Oct 2011
Posts: 26
Default

En fait le souci vient de "drawtext" qui trace le texte, non pas a partir du haut ou du bas du texte, mais à l'origine de la lettre sans jambage.
Un peu comme on écrirait sur un cahier d'écolier
un petit dessin étant plus parlant



Y0 et le point Zéro du drawtext
Ht et le retour de la fonction MeasureStringHeight



Pour avoir un texte centré verticalement il faut donc savoir si on a un jambage et en soustraire la moitié

Code:
Y0 = Cv.MeasureStringHeight("o",Typeface.DEFAULT,FontStd)
Ymini = Cv.MeasureStringHeight(
"p",Typeface.DEFAULT,FontStd)
Jambage=Ymini-Y0
Cv.DrawText(T,Obj.Width/
2,(Obj.Height/2)+(((Obj.Height/2)-Jambage)/2), Typeface.DEFAULT,FontStd,Cl,"CENTER")
Reply With Quote
  #4 (permalink)  
Old 10-24-2011, 04:23 PM
klaus's Avatar
Basic4ppc Expert
 
Join Date: Oct 2007
Location: Fully, Switzerland
Posts: 4,463
Awards Showcase
Forum Contributer Beta Tester Competition Winner 
Total Awards: 3
Default

Je n'avais jamais pris garde que la cote y0 correspondait à la ligne de base du texte, je pensais que c'était par rapport à la ligne inférieure.
Mais finalement ça dépend de ce que l'on entend par centrer un texte. Centrer par rapport à quoi, le centre de la hauteur du texte actuel donc 4 hauteurs différents possibles: "o" "O" "p" "Op"?
Du moment que la cote y0 correspond à la ligne de base je choisirais plutôt de centrer par rapport aux minuscules sans jambage. Les majuscules débordant vers le haut et les lettres avec jambage déborderaient vers le bas.

Meilleures salutations.
__________________
Klaus
Switzerland

Beginner's Guide / User's Guide
Reply With Quote
  #5 (permalink)  
Old 10-24-2011, 06:25 PM
Junior Member
 
Join Date: Oct 2011
Posts: 26
Default

Oui c'est vrai que le terme "centré" est très relatif

Dans mon cas, je cherche à avoir autant d'espace entre les parties extremes haute/basse du texte par rapport au bord sup et inf de l'élément sur lequel je trace.

Ce qui m'a fait chercher un moment, c'est cette ligne de base qui dans les autres compilo que j'utilise et généralement en haut du texte.
Reply With Quote
Reply


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are Off
Pingbacks are Off
Refbacks are On

Similar Threads
Thread Thread Starter Forum Replies Last Post
MeasureStringHeight problem klaus Bugs & wishlist 6 04-29-2012 06:22 AM
Measuring MeasureStringHeight / Width ? boten Basic4android Updates and Questions 23 08-22-2011 04:42 AM


All times are GMT. The time now is 05:53 PM.


Powered by vBulletin® Version 3.6.12
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0