#嵌入式图形 #图标 #嵌入式设备 #框架 #GUI框架 # #iconoir

embedded-iconoir

1300+ 个嵌入式图形图标,来自 Iconoir 图标包的移植

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嵌入式开发 中排名

Download history 29/week @ 2024-04-02 7/week @ 2024-04-23 2/week @ 2024-05-07 9/week @ 2024-05-21 18/week @ 2024-05-28 21/week @ 2024-06-04 7/week @ 2024-06-11 4/week @ 2024-06-18 6/week @ 2024-06-25 24/week @ 2024-07-02 4/week @ 2024-07-09 42/week @ 2024-07-16

79 每月下载量
kolibri-embedded-gui 中使用

MIT 许可证

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 提供了可用的渲染分辨率的特性标志: 12px16px18px24px32px48px96px144px。您还可以启用 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 上提出问题。请注意,更大的分辨率以及大量的不同分辨率(例如 10px11px,...,47px48px)将最终与 crates.io 的最大包大小 10MB 冲突,因为图标是预烘焙的。所以,如果这对你的用例相关,最好是分叉存储库并将其作为 Git 依赖项使用。

本地开发

要本地开发 embedded-iconoir,请克隆存储库,然后执行 git submodule initgit submodule update 以将 Iconoir 拖入存储库。之后,运行 cargo xtask generate 以将图标渲染到 .bits 文件,并生成代码。

变更日志

0.2.3:低分辨率图标修复

  • 低分辨率图标现在质量更高

0.2.2:16px 图标

  • 图标现在也提供 16px 尺寸!
  • 重建图标(现在有更多来自 Iconoir 的图标可用)

0.2.1:图标标记特质

  • 现在有了不依赖于 embedded-graphicsPixelColorIconoirIcon 特质

0.2.0:对 embedded-graphics 0.8 的兼容性补丁

  • 更新了 embedded-graphics 依赖到 0.8
  • 修复了 embedded-graphics 兼容性问题
  • 重建图标(现在有更多来自 Iconoir 的图标可用)

0.1.0:初始发布

  • 所有图标都提供 12px18px24px32px48px96px144px 分辨率
  • 图标可以动态着色
  • 可以使用 embedded-graphics 在显示屏上绘制图标

贡献

如果你发现了一个错误,或者认为缺少一个功能,请在美国 GitHub 上提出问题。当然,合并请求也非常受欢迎。

所有有意贡献,除非明确说明,均采用MIT许可证。

依赖项

~3.5MB
~35K SLoC