32个版本
0.8.1 | 2023年8月10日 |
---|---|
0.8.0 | 2023年5月14日 |
0.7.1 | 2021年6月15日 |
0.7.0-alpha.3 | 2021年2月3日 |
0.2.0 | 2018年7月27日 |
#13 in 嵌入式开发
每月 30,710 下载
用于 174 个 crates (164 直接)
2.5MB
22K SLoC
嵌入式图形
嵌入式-graphics是一个专注于内存受限嵌入式设备的2D图形库。
嵌入式-graphics的核心目标是在不使用任何缓冲区的情况下绘制图形;该crate兼容no_std
,无需动态内存分配器,也不需要预分配大量内存。为了实现这一点,它采用了一种基于Iterator
的方法,其中像素颜色和位置是实时计算的,最小化保存状态。这使得消费应用程序可以使用更少的RAM,而几乎不牺牲性能。
它包含内置项,使得绘制2D图形原语变得容易
外部crate提供的一些附加功能
嵌入式-graphics被设计为可以被应用程序或其他crate扩展。这包括添加对不同图像格式的支持或实现自定义字体。
- BMP图像 -
tinybmp
- TGA图像 -
tinytga
- QOI图像 -
tinyqoi
- 大量字体 -
u8g2-fonts
- ProFont等宽字体 -
profont
- Picofont Pico8字体 -
embedded-picofont
- IBM437字体 -
ibm437
- 嵌入式-graphics 0.6版本中包含的字体 -
embedded-vintage-fonts
- 简单的布局/对齐函数 -
embedded-layout
- 具有文本对齐选项的文本框 -
embedded-text
- 适用于小型嵌入式目标的零堆栈绘图库 -
embedded-plots
- 虚拟七段显示器 -
eg-seven-segment
- 在显示之前绘制画布 -
embedded-canvas
- 嵌入式设备的每秒帧数计数器 -
embedded-fps
- 支持DMA的帧缓冲区 -
embedded-graphics-framebuf
请注意,这些crate中的一些可能不支持嵌入式图形的最新版本。
如果您知道列表中不存在的crate,请创建一个问题以添加它。
显示驱动程序
为了支持许多不同类型的显示,嵌入式图形不包括任何直接驱动程序,但在DrawTarget
API中提供了embedded-graphics-core
,该API可以通过外部crate实现。除了真实显示器的驱动程序外,模拟器还可以用于开发过程中的代码测试。
这只是社区为嵌入式图形添加支持的一些显示器。此列表来自crates.io上的依赖crate列表,可能遗漏了一些未发布的条目。如果有显示驱动程序应该添加到此列表中,请创建一个问题。
请注意,某些驱动程序可能不支持嵌入式图形的最新版本。
- 嵌入式图形Web模拟器:通过Webassembly在浏览器中模拟显示
- epd-waveshare:Waveshare各种电子纸显示器(EPD)的驱动程序
- hub75:hub75 rgb矩阵显示的rust驱动程序
- ili9341:与ILI9341(和ILI9340C)TFT LCD显示器接口的平台无关驱动程序
- ls010b7dh01:LS010B7DH01存储LCD显示器的平台无关驱动程序
- push2_display:Ableton Push2嵌入式图形显示驱动程序
- sh1106:SH1106 OLED显示器的I2C驱动程序
- smart-leds-matrix:基于智能LED(如ws2812)的LED矩阵的驱动程序
- ssd1306:SSD1306 OLED显示器的I2C和SPI(4线)驱动程序
- ssd1309:100% Rust编写的SSD1309 OLED显示器的I2C/SPI驱动程序
- ssd1322:SSD1322 OLED显示芯片的纯Rust驱动程序
- ssd1331:SSD1331 OLED显示器的SPI(4线)驱动程序
- ssd1351:SSD1351驱动程序
- ssd1675:Solomon Systech SSD1675电子纸显示器(EPD)控制器的Rust驱动程序
- st7565:基于ST7565的显示器的SPI驱动程序
- st7735-lcd:使用ST7735驱动程序的显示器的Rust库
- st7789:ST7789显示器的Rust驱动程序库
- st7920:Rust中的ST7920 LCD驱动程序
- gc9a01-rs:Gc9a01显示驱动程序的SPI 4线驱动程序
模拟器
嵌入式图形包含一个模拟器!该模拟器可用于测试和调试嵌入式图形代码,或生成示例和交互式演示以展示嵌入式图形功能。
查看示例存储库,了解嵌入式图形能做什么,以及它在显示屏上可能看起来是什么样子。您可以按以下方式运行示例
git clone https://github.com/embedded-graphics/examples.git
cd examples/eg-0.7
cargo run --example hello-world
功能特性
可以通过将以下功能添加到您的Cargo.toml
中启用附加功能。
-
nalgebra_support
- 使用具有no_std
支持的Nalgebra crate,以启用从nalgebra::Vector2
到Point
和Size
的转换。 -
fixed_point
- 使用定点算术代替所有三角计算中的浮点数。 -
defmt
- 在可能的情况下为所有类型提供defmt::Format
的实现。defmt
是一个日志库,尽可能将工作转移到单独的日志机器上,使其特别适合低资源MCU。请注意,defmt
可能不适用于嵌入式图形支持的较旧版本的rustc。
从旧版本迁移
实现显示驱动程序的embedded_graphics
支持
要为显示驱动程序添加嵌入式图形支持,必须实现DrawTarget
(来自embedded-graphics-core
)。这允许所有嵌入式图形项由显示渲染。请参阅DrawTarget
文档以了解实现细节。
示例
绘图示例
有关使用嵌入式图形绘制原语、文本和图像的示例可以在此处找到。
形状和文本
以下示例将一些形状和文本绘制到用于目标硬件的MockDisplay
中。该模拟器也可以用于调试、开发或硬件不可用的情况下。
use embedded_graphics::{
mono_font::{ascii::FONT_6X10, MonoTextStyle},
pixelcolor::BinaryColor,
prelude::*,
primitives::{
Circle, PrimitiveStyle, PrimitiveStyleBuilder, Rectangle, StrokeAlignment, Triangle,
},
text::{Alignment, Text},
mock_display::MockDisplay,
};
fn main() -> Result<(), std::convert::Infallible> {
// Create a new mock display
let mut display: MockDisplay<BinaryColor> = MockDisplay::new();
// Create styles used by the drawing operations.
let thin_stroke = PrimitiveStyle::with_stroke(BinaryColor::On, 1);
let thick_stroke = PrimitiveStyle::with_stroke(BinaryColor::On, 3);
let border_stroke = PrimitiveStyleBuilder::new()
.stroke_color(BinaryColor::On)
.stroke_width(3)
.stroke_alignment(StrokeAlignment::Inside)
.build();
let fill = PrimitiveStyle::with_fill(BinaryColor::On);
let character_style = MonoTextStyle::new(&FONT_6X10, BinaryColor::On);
let yoffset = 10;
// Draw a 3px wide outline around the display.
display
.bounding_box()
.into_styled(border_stroke)
.draw(&mut display)?;
// Draw a triangle.
Triangle::new(
Point::new(16, 16 + yoffset),
Point::new(16 + 16, 16 + yoffset),
Point::new(16 + 8, yoffset),
)
.into_styled(thin_stroke)
.draw(&mut display)?;
// Draw a filled square
Rectangle::new(Point::new(52, yoffset), Size::new(16, 16))
.into_styled(fill)
.draw(&mut display)?;
// Draw a circle with a 3px wide stroke.
Circle::new(Point::new(88, yoffset), 17)
.into_styled(thick_stroke)
.draw(&mut display)?;
// Draw centered text.
let text = "embedded-graphics";
Text::with_alignment(
text,
display.bounding_box().center() + Point::new(0, 15),
character_style,
Alignment::Center,
)
.draw(&mut display)?;
Ok(())
}
此示例也包含在示例存储库中,可以使用cargo run --example hello-world
运行。它产生以下输出
更多示例可以在示例存储库中找到。
最低支持的Rust版本
嵌入式图形的最低支持Rust版本为1.71.1
或更高版本。请确保您安装了正确的Rust版本,最好是https://rustup.rs。
开发设置
请参阅开发设置指南。
许可
许可协议为以下之一
- Apache许可证版本2.0(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任您选择。
贡献
除非您明确表示,否则您有意提交以供包含在作品中的任何贡献,如Apache-2.0许可证中定义的,应如上所述双重许可,不附加任何额外条款或条件。