5 个版本
0.2.3 | 2024年1月15日 |
---|---|
0.2.2 | 2023年8月4日 |
0.2.1 | 2023年6月21日 |
0.2.0 | 2023年6月21日 |
0.1.0 | 2023年3月23日 |
119 在 嵌入式开发 中排名
79 每月下载量
在 kolibri-embedded-gui 中使用
1MB
12K SLoC
embedded-iconoir - 为所有设备提供图标。
什么是嵌入式-iconor?
embedded-iconoir
是一个库,允许您在嵌入式设备上使用 Iconoir,使用 Rust 和 embedded-graphics
库。
它最初是为了在 Kolibri 嵌入式GUI框架 中使用而编写的。
有多少个图标?
本库支持 Iconoir 提供的所有 1300 多个图标。它们按类别排序,因此如果您需要预览,请查看 Iconoir 网站 以挑选出您需要的确切图标。
这会增加我的二进制文件多大?
实际上并不多。只有您实际使用的图标会被包含在内,而且它们非常小。每个像素只占用一个位,因此每个图标的大小为 resolution^2 / 8
字节。对于 24px
分辨率,每个图标只有 72 字节。这意味着您可以将所有 1300 多个图标在 24px
分辨率下放入不到 100kb!这比这张极度压缩的猫的图片小 20% 以上: (图片来源)
使用方法
选择分辨率
embedded-iconoir
提供了可用的渲染分辨率的特性标志: 12px
、16px
、18px
、24px
、32px
、48px
、96px
和 144px
。您还可以启用 all-resolutions
特性以获取所有这些,但请注意这将显著增加您的编译时间。
使用图标
图标按大小和类别组织成模块。因此,你可以通过以下方式选择特定分辨率下的特定图标:icons::sizeXXpx::CATEGORY::CamelCaseIconName
。如果你只使用一个分辨率,建议导入 embedded_iconoir::icons::sizeXXpx::*
,这样你可以直接访问所有类别。
下面是一个示例
fn main() -> anyhow::Result<()> {
// init display
let color = Rgb888::CSS_CYAN;
// Color is specified during icon creation
let mut icon_tiny = icons::size12px::development::CodeBracketsSquare::new(color);
let mut icon_normal = icons::size24px::development::CodeBracketsSquare::new(color);
let mut icon_large = icons::size48px::development::CodeBracketsSquare::new(color);
let mut icon_huge = icons::size144px::development::CodeBracketsSquare::new(color);
// Icons must be wrapped into images to draw them properly
let image_tiny = Image::new(&icon_tiny, Point::new(10, 10));
// ...
image_tiny.draw(&mut display)?;
// ...
// Changing colors after creation:
let mut idx = 0u8;
let colorscheme = colorous::RAINBOW;
loop {
let Color { r, g, b } = colorscheme.eval_rational(idx as usize, u8::MAX as usize);
let idx = idx.overflowing_add(1).0;
// Colors can be changed dynamically during runtime
icon_tiny.set_color(Rgb888::new(r, g, b));
// ...
// But the images need to be recreated each time, because of their reference to the icon
let image_tiny = Image::new(&icon_tiny, Point::new(10, 10));
// ...
image_tiny.draw(&mut display)?;
// ...
}
Ok(())
}
运行此代码,你将得到类似的结果
此代码的完整版本可以在 examples/src/bin/cover_example.rs
中查看。
"但我想使用不同的分辨率!"
这当然可以做到。所有分辨率都是动态生成的,可用的分辨率是因为它们似乎适合相当广泛的用例。如果你认为有缺失,请在 GitHub 上提出问题。请注意,更大的分辨率以及大量的不同分辨率(例如 10px
,11px,...,
47px,
48px
)将最终与 crates.io 的最大包大小 10MB 冲突,因为图标是预烘焙的。所以,如果这对你的用例相关,最好是分叉存储库并将其作为 Git 依赖项使用。
本地开发
要本地开发 embedded-iconoir
,请克隆存储库,然后执行 git submodule init
和 git submodule update
以将 Iconoir
拖入存储库。之后,运行 cargo xtask generate
以将图标渲染到 .bits
文件,并生成代码。
变更日志
0.2.3:低分辨率图标修复
- 低分辨率图标现在质量更高
0.2.2:16px 图标
- 图标现在也提供
16px
尺寸! - 重建图标(现在有更多来自
Iconoir
的图标可用)
0.2.1:图标标记特质
- 现在有了不依赖于
embedded-graphics
的PixelColor
的IconoirIcon
特质
0.2.0:对 embedded-graphics
0.8 的兼容性补丁
- 更新了
embedded-graphics
依赖到0.8
- 修复了
embedded-graphics
兼容性问题 - 重建图标(现在有更多来自
Iconoir
的图标可用)
0.1.0:初始发布
- 所有图标都提供
12px
、18px
、24px
、32px
、48px
、96px
和144px
分辨率 - 图标可以动态着色
- 可以使用
embedded-graphics
在显示屏上绘制图标
贡献
如果你发现了一个错误,或者认为缺少一个功能,请在美国 GitHub 上提出问题。当然,合并请求也非常受欢迎。
所有有意贡献,除非明确说明,均采用MIT许可证。
依赖项
~3.5MB
~35K SLoC