#bitmap #pixel #drawing #framebuffer #blitter


This library performs various blitting and drawing operations on a 32 bits framebuffer

5 releases (3 breaking)

0.6.1 Aug 14, 2021
0.6.0 Apr 10, 2020
0.5.0 Mar 30, 2020
0.4.0 Jan 30, 2020
0.1.0 Jan 26, 2020

#23 in Rendering

21 downloads per month

MIT license

264 lines


Current Crates.io Version Downloads badge

This library performs various blitting and drawing operations on a raw 32 bits framebuffer, whatever the encoding.

  • Bitmap blitting / cropping
  • Blit a part of bitmap (ie. bitmap fonts)
  • Blit with a color or bits mask
  • Pixel plotting
  • Optional PNG decoding feature


// Framebuffer initialization
let mut pixels: Vec<u32> = vec!(0; WIDTH * HEIGHT);
let mut fb = Framebuffer {width: WIDTH, height: HEIGHT, pixels: &mut pixels};

// For example, you can push all the bitmaps in a single vec to give ownership of all bitmaps
let mut bitmaps = Vec::new();
bitmaps.push(Bitmap {w: 10, h: 10, x: 0, y: 0, pixels: &image::PIXELS});

while *display loop with some display library* {
    blitter_test(&mut fb, &mut bitmaps);
    *your display lib display update function with buffer &fb.pixels*

// For testing : moves a 10x10 square and prints a 4x4 pixel at the center of the screen
fn blitter_test(mut fb: &mut Framebuffer, bitmaps: &mut Vec<Bitmap>) {
    fb.clear_area(640, 10, 0, 0, 0).unwrap();
    bitmaps[0].blit(&mut fb).unwrap();   //copies a bitmap to the framebuffer
    if bitmaps[0].x < WIDTH - 10 { bitmaps[0].x = bitmaps[0].x+3; } else { fb.clear(0); }

You can also view and run some (very basic) examples using the minifb library in the 'examples' directory:

cargo run --example demo --features="png-decode"
cargo run --example minifb --features="png-decode"
cargo run --example square


License: MIT