embedded-rgba 0.1.1

RGBA support for embedded-graphics with fast framebuffers
Documentation
  • Coverage
  • 25%
    3 out of 12 items documented0 out of 0 items with examples
  • Size
  • Source code size: 158.77 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 4.16 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 18s Average build duration of successful builds.
  • all releases: 18s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • Homepage
  • dempfi/embedded-rgba
    2 1 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • dempfi

Embedded RGBA

embedded-rgba

A lightweight, no_std RGBA framebuffer and canvas abstraction for the embedded-graphics ecosystem. It adds alpha blending, buffering strategies, and a practical way to manage drawing pipelines on microcontrollers and resource‑constrained devices.

Check out the MiniType for a font format that takes full advantage of RGBA canvas.

✨ Features

  • Alpha blending – draw Rgba pixels onto RGB framebuffers with fast per‑pixel transparency.
  • Flexible buffering – choose between double buffering, single buffering, or scanline buffering (coming soon) depending on memory and performance tradeoffs.
  • Drop‑in integration with embedded-graphics’s DrawTarget and PixelColor.
  • No heap allocation – designed for MCUs without a heap.
  • Optimized for speed – fast fill paths and alpha blending.

🚀 Usage

Create a canvas

use embedded_rgba::Canvas;
use embedded_graphics::mock_display::MockDisplay;
use embedded_graphics::pixelcolor::Rgb565;

let display = MockDisplay::new();

// Create a double buffered canvas
let mut canvas = Canvas::<_, _, {240 * 320}, 240, 320>::double_buffered(display);
// or a single buffer
let mut canvas = Canvas::<_, _, {240 * 320}, 240, 320>::single_buffered(display);

✨ Draw with Rgba colors

// `Rgba` is a normal embedded_graphics color
let transparent_orange = Rgba::new(Rgb565::CSS_ORANGE, 128);
let style = PrimitiveStyleBuilder::new().fill_color(transparent_orange).build();
// `canvas.alpha()` is a temporary draw target that can be drawn onto with `Rgba` color
Rectangle::new(Point::zero(), Size::new(50, 50)).draw_styled(&style, &mut canvas.alpha())?;
// Commit the update pixels to the display
canvas.flush().unwrap();

📊 When to use which buffer?

  • Double buffer → flicker‑free updates, at the cost of RAM (2 full framebuffers).
  • Single buffer → less RAM, may tear if drawn while refreshing.
  • Line buffer → minimal RAM (1 row), best for preplanned scanline rendering.

🔮 Roadmap

  • SIMD‑style blending optimizations for all RGB colors
  • Region‑based dirty rectangle updates
  • Line buffer