จัดเตรียมอักขระที่มีการแช่อยู่ล่วงหน้าจากแบบอักษร "Noto Sans Mono" ในขนาดที่แตกต่างกันและน้ำหนักตัวอักษรสำหรับช่วง Unicode หลายช่วง ลังนี้เป็น no_std และไม่จำเป็นต้องมีการจัดสรรหรือการดำเนินการจุดลอยตัว มีประโยชน์ในเมล็ดและ bootloaders เมื่อมีเพียง "soft-float" เท่านั้น การพูดอย่างเคร่งครัดลังนี้เป็นมากกว่าตัวอักษรบิตแมปพื้นฐานเพราะมันเข้ารหัสแต่ละพิกเซลเป็นไบต์และไม่เป็นบิตซึ่งส่งผลให้เกิดผลลัพธ์ที่ดีกว่าบนหน้าจอ
no_std , การจัดสรรเป็นศูนย์, ไม่มีการดำเนินการจุดลอยตัว
โปรดตรวจสอบการบริจาค
มรดก (8x8) บิตแมปแบบอักษรมักจะอ้างถึงแบบอักษรที่แต่ละสัญลักษณ์ถูกเข้ารหัสใน 8 บิต อันที่อยู่ในไบต์ ( 0b00110000 ) หมายถึง "พิกเซลบน" และศูนย์ 'หมายถึง "พิกเซลปิด" อย่างไรก็ตามตัวอักษรของฉันเข้ารหัสความเข้มของแต่ละพิกเซลเป็นไบต์จาก 0 ถึง 255 ดังนั้นนี่คือขนาดที่มีประสิทธิภาพน้อยกว่าแบบอักษรบิตแมปดั้งเดิม แต่ดูดีกว่ามาก ฉันยังคงใช้คำว่าบิตแมปแบบอักษรเพราะคำนั้นถูกใช้และเป็นที่รู้จักเมื่อพูดถึงการแสดงแบบอักษร/ตัวอักษรล่วงหน้าในบริบทระดับต่ำเช่นกระบวนการบูต
หากคุณต้องการพิมพ์ไปยัง FrameBuffer และหากคุณพัฒนา bootloader หรือเคอร์เนลคุณมักจะไม่ต้องการเปิดใช้งาน FPU และงดเว้นจากคำแนะนำของจุดลอยตัว (เช่นใช้ Soft Float เท่านั้น) ลังของฉันเป็นตัวเลือกที่ดีในการพิมพ์อักขระลงบนหน้าจอในสถานการณ์เช่นนี้ เนื่องจากการแสดงตัวอักษรสดของแบบอักษร 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 ให้ข้อมูลเชิงลึกเกี่ยวกับค่าใช้จ่ายของการมีไลบรารีนี้อย่างคงที่ที่รวบรวมไว้ในไบนารี
โดยค่าเริ่มต้นจะมีเพียงชุดย่อยที่เหมาะสมของคุณสมบัติที่เป็นไปได้เท่านั้น ขนาดลังดิบมีขนาดไม่กี่ 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
� ตัดออกไปทางซ้ายและขวา -Rasterization ทำด้วย Fontdue-Crate ที่ยอดเยี่ยม ขอบคุณผู้เขียนต้นฉบับ!
ดูไฟล์ใบอนุญาตในที่เก็บ
Rust เสถียร 1.56.1