Fornece caracteres pré-mais elementos da fonte "Noto Sans Mono" em diferentes tamanhos e pesos de fonte para vários intervalos de unicode. Esta caixa é no_std e não precisa de alocações ou operações de ponto flutuante. Útil em kernels e carregadores de inicialização quando apenas o "ploat soft" está disponível. Estritamente falando, essa caixa é mais do que uma fonte básica de bitmap, porque codifica cada pixel como um byte e não como um pouco, o que resulta em um resultado muito melhor na tela.
no_std , alocações zero, sem operações de ponto flutuante
Por favor, verifique contribuindo.md.
As fontes de bitmap legadas (8x8) geralmente se referem a uma fonte onde cada símbolo é codificado em 8 bits. Os de um byte ( 0b00110000 ) significam "pixel em" e os zeros 'significa "pixel off". No entanto, minha fonte codifica a intensidade de cada pixel como um byte de 0 a 255. Portanto, isso é menos eficiente do que as fontes de bitmap herdadas, mas parece muito melhor. Eu ainda uso o termo fonte de bitmap, porque esse termo é usado e conhecido ao falar sobre fontes/fontes pré-alta, renderização em contextos de baixo nível, como o processo de inicialização.
Se você deseja imprimir em um Framebuffer e se você desenvolver um carregador de inicialização ou um kernel, geralmente não deseja ativar a FPU e evitar a instrução de ponto flutuante (ou seja, use apenas flutuação suave). Minha caixa é uma boa opção para imprimir bem os personagens na tela em tais cenários. Como a boa renderização de fontes ao vivo de fontes TTF depende fortemente de muitas operações de ponto flutuante, o que não é ideal dentro de um binário de baixo nível. As fontes de bitmap de 8x8 legadas são feias quando impressas na tela. noto_sans_mono_bitmap pode ser visto como um bom substituto por anti-aliasing muito agradável.
Se você possui um ambiente ou suporte padrão para operações de ponto flutuante, convém rasterizar a fonte sozinho com a caixa fontdue e algumas fontes TTF, em vez de usar meu caixote.
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 ) ;
}
}
} A caixa external/check-size fornece informações sobre a sobrecarga de ter essa biblioteca estaticamente compilada no binário.
Por padrão, apenas um subconjunto razoável de recursos possíveis está incluído. O tamanho do crate cru tem um tamanho de MIB, mas após a compilação e descarte peças irrelevantes (ou seja, tamanho 14, fonte regular, apenas ASCII), a sobrecarga deve estar em menos de 120 kib em tamanho binário, de acordo com minhas medidas. No entanto, mesmo com o recurso all , dependendo do seu código, o compilador pode descartar com segurança os caminhos de código inacessíveis ou não utilizados. No entanto, é recomendável incluir mais recursos do que o necessário.
Com todos os recursos incluídos dentro do binário e sem qualquer descarte pelo compilador, você pode esperar 5 ou mais MIB do consumo de memória. No entanto, isso exigiria o caso bastante improvável de que você use tamanhos e pesos de fontes diferentes simultaneamente e todos os intervalos de unicode.
$ cargo run --example show_chars_in_window
Se você quiser usar chars especiais, como {ä, ö, ü, �} , no exemplo, você pode usar
$ cargo run --example show_chars_in_window --features all
� cortado à esquerda e à direita. :A rasterização foi feita com o incrível Fontdue-Crate. Graças ao (s) autor (s) original (s)!
Consulte o arquivo de licença no repositório.
Ferrugem estável 1.56.1.