Fournit des caractères pré-rasterisés de la police "noto sans mono" dans différentes tailles et poids de police pour plusieurs gammes Unicode. Cette caisse est no_std et n'a pas besoin d'allocations ou d'opérations de points flottants. Utile dans les grains et les chargeurs de démarrage lorsque seul le "sol doux" est disponible. À strictement parler, cette caisse est plus qu'une police bitmap de base, car elle code chaque pixel comme un octet et non comme un peu, ce qui se traduit par un résultat beaucoup plus agréable à l'écran.
no_std , ALLOCATIONS ZÉRO, NO
Veuillez vérifier la contribution.md.
Les polices bitmap héritées (8x8) se réfèrent généralement à une police où chaque symbole est codé en 8 bits. Ceux dans un octet ( 0b00110000 ) signifient "pixel sur" et le Zeroes signifie "pixel off". Cependant, ma police code en réalité l'intensité de chaque pixel sous forme d'un octet de 0 à 255. Par conséquent, c'est moins efficace de taille que les polices bitmap héritées, mais semble beaucoup mieux. J'utilise toujours le terme police bitmap, car ce terme est utilisé et connu lorsque je parle de rendements de polices / polices pré-rasterisés dans des contextes de bas niveau, tels que le processus de démarrage.
Si vous souhaitez imprimer sur un FrameBuffer et si vous développez un chargeur de démarrage ou un noyau, vous ne voulez généralement pas activer le FPU et vous abstenir de l'instruction de point flottante (c'est-à-dire utiliser uniquement le flotteur). Ma caisse est une bonne option pour imprimer bien les caractères à l'écran dans de tels scénarios. En tant que joli rendu de police en direct des polices TTF, repose fortement sur de nombreuses opérations de points flottants, ce qui n'est pas optimal à l'intérieur d'un binaire de bas niveau. Les polices bitmap héritées 8x8 sont laides lorsqu'elles sont imprimées à l'écran. noto_sans_mono_bitmap peut être considéré comme un bon remplacement avec une très belle anti-aliasing.
Si vous avez un environnement ou une prise en charge standard pour les opérations de points flottants, vous voudrez peut-être raspérer la police par vous-même avec la fontdue de caisse et quelques polices TTF plutôt que d'utiliser ma caisse.
use noto_sans_mono_bitmap :: { get_raster , get_raster_width , FontWeight , RasterHeight } ;
// Minimal example.
fn main ( ) {
let width = get_raster_width ( FontWeight :: Regular , RasterHeight :: Size16 ) ;
println ! (
"Each char of the mono-spaced font will be {}px in width if the font
weight={:?} and the bitmap height={}" ,
width ,
FontWeight :: Regular ,
RasterHeight :: Size16 . val ( )
) ;
let char_raster =
get_raster ( 'A' , FontWeight :: Regular , RasterHeight :: Size16 ) . expect ( "unsupported char" ) ;
println ! ( "{:?}" , char_raster ) ;
for ( row_i , row ) in char_raster . raster ( ) . iter ( ) . enumerate ( ) {
for ( col_i , pixel ) in row . iter ( ) . enumerate ( ) {
println ! ( "[{:02}][{:02}]: {:03}" , row_i , col_i , pixel ) ;
}
}
} La caisse external/check-size vous fournit des informations sur les frais généraux de la compilation statiquement de cette bibliothèque dans le binaire.
Par défaut, seul un sous-ensemble raisonnable de fonctionnalités possibles est inclus. La taille de la caisse brute est de quelques MIB, mais après compilation et jetant des pièces non pertinentes (c.-à-d. Taille 14, police régulière, uniquement ASCII), les frais généraux doivent être à moins de 120 kib en taille binaire, selon mes mesures. Cependant, même avec la fonctionnalité all , selon votre code, le compilateur peut rejeter de manière fiable des chemins de code inaccessibles ou inutilisés. Néanmoins, il est recommandé de ne pas inclure plus de fonctionnalités que nécessaire.
Avec toutes les fonctionnalités incluses à l'intérieur du binaire et sans aucun rejet par le compilateur, vous pouvez vous attendre à 5 MIB ou plus de consommation de mémoire. Cependant, cela nécessiterait le cas assez improbable que vous utilisez différentes tailles et poids de police simultanément et toutes les gammes Unicode.
$ cargo run --example show_chars_in_window
Si vous souhaitez utiliser des caractères spéciaux, comme {ä, ö, ü, �} , dans l'exemple, vous pouvez utiliser
$ cargo run --example show_chars_in_window --features all
� coupé à gauche et à droite. :La raspérisation a été réalisée avec le génial Fontdue-Crate. Merci aux auteurs originaux!
Voir le fichier de licence dans le référentiel.
Écurie de rouille 1.56.1.