为多个Unicode范围提供不同尺寸的“ Noto sans Mono”字体的预先固定字符。该板条箱是no_std ,不需要分配或浮点操作。当仅可用“软浮动”时,可用于内核和引导加载程序。严格来说,该板条箱不仅仅是基本的位图字体,因为它将每个像素编码为字节而不是一点,而不是一点,这会在屏幕上产生更好的结果。
no_std ,零分配,无浮点操作
请检查贡献。
旧版(8x8)位图字体通常是指每个符号以8位编码的字体。字节中的( 0b00110000 )中的意思是“像素上的像素”,而零表示“像素”。但是,我的字体实际上将每个像素的强度从0到255编码为字节。因此,这比传统位图字体效率低,但看起来好多了。我仍然使用术语Bitmap字体,因为在低级上下文(例如启动过程)中谈论预先掌握字体/字体渲染时使用该术语。
如果要打印到Framebuffer,并且开发引导加载程序或内核,则通常不想启用FPU并避免浮动点指令(即仅使用Soft Float)。在这种情况下,我的板条箱是在屏幕上很好地打印字符的好选择。由于TTF字体的NICE实时字体渲染在很大程度上依赖于许多浮点操作,因此在低级别的二进制中并不是最佳的。传统8x8位图字体在屏幕上印刷时很难看。 noto_sans_mono_bitmap可以看作是一个很好的替代品,具有非常不错的抗声明。
如果您对浮点操作有标准的环境或支持,则可能需要用板条箱fontdue和一些TTF字体来栅格化字体,而不是使用我的板条箱。
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 ) ;
}
}
} external/check-size板条箱为您提供有关将此库静态编译到二进制的开销的见解。
默认情况下,仅包括合理的可能功能的一个合理子集。根据我的测量值,原始板条箱大小的大小是几个MIB,但是根据我的测量值,根据我的测量值,汇编并丢弃了无关紧要的部分(即14号,常规字体,仅ASCII),二进制尺寸应小于120 KIB。但是,即使具有all功能,根据您的代码,编译器也可以可靠地丢弃无法到达或未使用的代码路径。然而,建议包含比必要的功能更多的功能。
由于二进制中的所有功能都包含所有功能,并且不用编译器丢弃任何功能,因此您可以期待5个或更多MIB的内存消耗。但是,这将需要同时使用不同尺寸和字体权重的情况和所有Unicode范围。
$ cargo run --example show_chars_in_window
如果您想使用特殊的字符,例如{ä, ö, ü, �} ,在示例中,您可以使用
$ cargo run --example show_chars_in_window --features all
� 。 :栅格化是通过令人敬畏的Fontdue-Crate进行的。感谢原始作者!
请参阅存储库中的许可证文件。
生锈稳定1.56.1。