さまざまなサイズの「Noto Sans Mono」フォントからの事前にラスター化された文字を提供し、複数のユニコード範囲にフォントウェイトを提供します。このクレートはno_stdであり、割り当てや浮動ポイント操作は必要ありません。 「ソフトフロート」のみが利用可能な場合、カーネルとブートローダーで役立ちます。厳密に言えば、このクレートは基本的なビットマップフォント以上のものです。これは、各ピクセルをバイトとしてエンコードし、少しではなく、画面上ではるかに優れた結果をもたらすためです。
no_std 、ゼロ割り当て、フローティングポイント操作なし
Converting.mdを確認してください。
レガシー(8x8)ビットマップフォントは通常、各シンボルが8ビットでエンコードされるフォントを参照します。バイト( 0b00110000 )のものは「ピクセルオン」を意味し、ゼロは「ピクセルオフ」を意味します。ただし、私のフォントは実際には、各ピクセルの強度を0から255のバイトとしてエンコードします。したがって、これはレガシービットマップフォントよりもサイズ効率が低くなりますが、はるかに良く見えます。ブートプロセスなどの低レベルのコンテキストで事前にラスター化されたフォント/フォントレンダリングについて話すときにその用語が使用され、その用語が使用され、その用語が使用されているため、私はまだビットマップフォントという用語を使用しています。
フレームバッファーに印刷し、ブートローダーまたはカーネルを開発する場合は、通常、FPUを有効にして、フローティングポイント命令を控えたくない(つまり、ソフトフロートのみを使用します)。私の木枠は、このようなシナリオで画面にキャラクターをうまく印刷するのに適したオプションです。 TTFフォントの素敵なライブフォントレンダリングは、低レベルのバイナリ内では最適ではない多くのフローティングポイント操作に大きく依存しています。レガシー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クレートは、このライブラリをバイナリに静的にコンパイルするというオーバーヘッドに関する洞察を提供します。
デフォルトでは、可能な機能の合理的なサブセットのみが含まれています。生のクレートサイズは数ミブのサイズですが、無関係な部分を編集して破棄した後(つまり、サイズ14、通常のフォント、ASCIIのみ)、オーバーヘッドは私の測定に従ってバイナリサイズで120キブ未満でなければなりません。ただし、 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。