為多個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。