Contrairement à un PC ou une tablette, la plupart des appareils embarqués disposent d'un espace mémoire limité pour stocker le contenu graphique. Ces contraintes matérielles font de la conception d'une interface utilisateur graphique (GUI) de haute qualité une tâche difficile pour les concepteurs. Dans cet article de la série de blogs Altia Developer, nous fournirons quelques techniques de conception et des exemples de conceptions créés avec Altia Design, notre éditeur d'interface graphique, pour montrer comment créer une utilisation efficace des polices dans les interfaces graphiques de votre appareil intégré.

Méthodes de gestion des polices

Altia gère les polices de deux manières différentes. Avec la première méthode, les glyphes de police peuvent être générés et enregistrés dans un fichier reflash au moment de la génération du code. Avec la deuxième méthode, vous pouvez générer du code avec des polices d'exécution qui généreront des glyphes de police au fur et à mesure qu'ils seront nécessaires pendant l'exécution.

Tout d'abord, nous parlerons de l'option plus simple de générer tous les glyphes de police nécessaires à la conception lors de la génération du code. Ces caractères de police générés sont également appelés glyphes pré-rendus. Chaque police utilisée dans votre conception nécessite que son catalogue complet de caractères soit ajouté aux éléments de reflashage. De plus, chaque taille de chaque police nécessite que ces données soient ajoutées aux données de reflash. C'est la même chose pour chaque gras dans chaque taille dans chaque police, pour chaque italique dans chaque taille dans chaque police… vous obtenez l'image.

En regardant votre dossier reflash/fonts, vous pourrez voir le nombre, les tailles et les variations de polices que vous utilisez dans votre conception. Dans l'image ci-dessous, vous pouvez voir que cette conception utilise Arial Bold Italic 18, Arial Bold 17, Arial Italic 16, Arial Italic 17 et Arial Normal 17.

fichiers de polices

Notre deuxième méthode de gestion des polices, utilisant des polices d'exécution, le code source du moteur de police utilisé dans la conception est généré et chargé sur votre matériel. Ensuite, lorsqu'un caractère est nécessaire, le glyphe de la police est généré à partir de ce code. Cela peut être particulièrement avantageux si vous utilisez des langues comme le chinois où des dizaines de milliers de caractères sont nécessaires. Au lieu de charger chacun des caractères dont vous pourriez avoir besoin dans votre interface graphique de production, chacun est généré selon les besoins.

Alors, quelle méthode choisissez-vous ? Honnêtement, ça dépend. Les polices d'exécution sont généralement recommandées si la taille du moteur de police et du code de mise en forme est inférieure à la taille des fichiers de police de glyphes générés. S'ils sont égaux, nous vous recommandons d'utiliser les glyphes pré-rendus (première méthode), car les glyphes pré-rendus n'ont pas les mêmes exigences en matière de CPU et de RAM qu'un moteur de polices d'exécution. De plus, dans certains cas particuliers, lorsque le bon pipeline de rendu est utilisé, les glyphes pré-rendus auront des formats d'encodage et de compression plus petits que l'option d'exécution.

Gamme de polices

Un autre excellent moyen d'économiser de l'espace sur votre matériel consiste à modifier votre fichier .gen pour que la génération de code ne charge que certaines plages de polices. Si vous avez une conception qui utilise une seule taille de police ou ne tapez qu'une seule fois dans un écran de démarrage, vous pouvez programmer votre logiciel pour charger uniquement la section des lettres anglaises ASCII avec une police Unicode. Cela peut économiser beaucoup d'espace sur le matériel !

code de police à l'écran

Dans l'exemple ci-dessus, vous pouvez voir à quel point il est simple de manipuler une plage de polices. Dans la première ligne, nous chargeons uniquement la plage de caractères [\32-\127]. Dans la deuxième ligne, la plage de caractères est appliquée à une police désignée spécifique dans le projet. -Arial-moyen-r-normal–_-170. Il s'agit de la seule police impactée, donc cette police n'aura que les caractères imprimables prédéterminés chargés sur le matériel. La troisième ligne applique la limite à toutes les polices d'une certaine famille, la police ci-dessus incluse. Le %FONTRANGEFLAG% prend en charge jusqu'à 1024 sélections (1024 plages différentes entre crochets de l'exemple), et ces sélections peuvent être des caractères ou des codes de caractères. Ces lignes ne seraient pas utilisées ensemble dans le même fichier .gen ; ce ne sont que trois exemples d'une seule ligne.

Résultats de l'optimisation des polices

Veuillez noter que les tailles de fichier de reflash suivantes s'appliquent aux conceptions de test très simples de cet article. La seule façon de savoir comment ils affecteront vos conceptions est d'utiliser ces tests sur vos propres projets d'interface graphique.

Dans l'exemple A, vous verrez 13 polices différentes. La deuxième conception, l'exemple B, utilise une seule police. L'exemple A a une taille de fichier reflash .bin de 73 Ko. L'exemple B utilise une seule police et n'inclut ni gras ni italique, a une taille .bin de 24 Ko. Lorsque nous générons du code pour l'exemple B et utilisons %FONTRANGEFLAG% * [\32-~] dans le fichier .gen, nous réduisons la taille du .bin à 2 Ko !

image spéciale de la police
Exemple A
police spéciale
Exemple B

Il est important de noter que des optimisations de cette ampleur peuvent avoir un impact sur l'expérience utilisateur globale de votre interface graphique. Il est essentiel de trouver le bon équilibre entre la conception et l'utilisation de la mémoire, alors assurez-vous de tester tôt et souvent. Une partie de ces tests peut consister à comprendre si chaque police utilisée dans votre conception est nécessaire. Altia facilite les tests utilisateur pendant le développement afin que vous puissiez trouver cet équilibre avant même de passer au matériel. La mise en œuvre de tout commentaire est également rapide !

L'utilisation de la gamme de polices peut également faire une énorme différence dans la taille du fichier .bin. Cela aussi doit être fait avec soin. Si vous utilisez un caractère dans votre interface graphique qui n'est pas inclus dans la plage de polices spécifiée, vous obtiendrez une erreur. Raison de plus pour intégrer les tests à votre processus de développement !

Enfin, réduire la conception de votre interface graphique à un nombre minimal de polices peut permettre d'incroyables économies de RAM. Même s'il n'est peut-être pas logique de réduire votre utilisation de police à une seule comme nous l'avons fait dans notre exemple, c'est un domaine où votre équipe de conception peut vraiment avoir un impact sur votre utilisation de la mémoire.

Conclusion

Il existe de nombreuses façons d'empêcher les concepteurs de se heurter à des problèmes d'espace RAM et d'utilisation du processeur lors de la conception d'interfaces graphiques de haute qualité pour les périphériques intégrés. Ces techniques de conception de polices pour les interfaces graphiques intégrées ne sont que quelques-unes à prendre en compte.

Altia se spécialise dans l'obtention de graphiques à fort impact sur le matériel le plus bas possible. Nos experts GUI disposent de techniques puissantes pour créer et mettre en œuvre des graphiques de haute qualité avec moins de temps et d'efforts. N'hésitez pas à demander une démo avec notre équipe pour discuter de la façon dont vous pouvez créer des interfaces graphiques riches et intéressantes pour votre matériel à mémoire limitée.