Calcul de taille de texte automatique

Salut,

J'ai un souci pour trouver un algorithme performant dans le calcul de taille de texte automatique en fonction d'une zone. J'ai déjà codé un algorithme simpliste qui ne me convient pas, car peu performant quand les tailles de polices sont trop grandes comparativement à une petite zone de texte. Mon code est en C# et le calcul de la taille d'un mot est effectué via la bibliothèque GDI+ et prend en moyenne 0,93 ms sur ma machine, un iCore5. Je dois faire tourner mon algorithme sur des dual core datant d'une dizaine d'années.

Je vais expliquer plus clairement le problème : Un texte contenant des tailles de polices différentes, des polices et des styles différents doit s'inscrire dans une zone de texte. Il n'y a pas de longueur limite au texte, les mots ne doivent pas être coupés. Lorsque le texte est trop grand, et pas quand il est plus petit que la zone, l'algorithme doit trouver la taille de texte qui se rapproche le plus de la taille de la zone, sans jamais dépasser ni la largeur, ni la hauteur.

Actuellement, je calcule le texte d'origine pour qu'il se cale en largeur grâce à une fonction récursive qui construit chacune de mes lignes (qui peuvent donc être de taille différentes), puis tant que la hauteur de mon texte n'a pas atteint la hauteur de la zone, je diminue la taille de police de tous les mots de mon texte de 0,5 pixels et le code de calcul de largeur est exécuté. La force de ce code est qu'il est simple et robuste, efficace dans la plupart des cas.

Mes cours de maths sont bien loin, et j'ai recherché quelques algorithmes sur wikipedia sans réussir à établir un lien entre ceux-ci et mon problème...
Avez-vous une idée pour coder cela de manière plus efficiente ?

Réponses

  • U moyen simple pour améliorer l'efficacité serait d utiliser une dichotomie pour calculer ta hauteur au lieu de diminuer par pas de 0.5px.
  • Après il existe sûrement des algos voire des bibliothèques qui te font le travail.
Connectez-vous ou Inscrivez-vous pour répondre.