Ho bisogno di trovare la dimensione del carattere di un testo che rientra in una scatola.
Data la mia dimensione attuale del carattere, posso ottenere il rettangolo di delimitazione del testo.
Se imposto alcune dimensioni minime e massime del font, suppongo di poter incrementare o decrementare la dimensione del mio carattere fino a quando non arrivo alla casella specificata.
Sto pensando al metodo di bisezione:
ChangeFontMethod(float currentFont, float reqWidth)
float minFont = 1, maxFont = 1000
int tolerance = 0.001, maxIter = 1000
int n = 1
float currentWidth = textWithCurrentFont.boundingRect.Width
do
if currentWidth = reqWidth
break
else if currentWidth < reqWidth
minFont = currentFont
else
maxFont = currentFont
if maxFont - minFont < tolerance
break
currentFont = (minFont + maxFont)/2
currentWidth = textWithCurrentFont.boundingRect.Width
n++
while n <= maxIter
return currentFont
Da quello che ho letto dovrebbe avere una velocità logaritmica, ma ho anche letto che è "lento"
C'è un modo migliore?
Non so se posso migliorare la mia ricerca assumendo una relazione tra la dimensione del font e la larghezza del font - sicuramente ce n'è una, ma non è lineare. Quindi non so come migliorare la velocità con una "prima ipotesi" migliore