9个不稳定版本

0.5.0 2023年5月17日
0.4.1 2021年6月16日
0.4.0-beta.12021年5月24日
0.4.0-alpha.12020年12月27日
0.1.0 2019年6月4日

#160 in 图像

Download history 90/week @ 2024-03-11 78/week @ 2024-03-18 44/week @ 2024-03-25 146/week @ 2024-04-01 133/week @ 2024-04-08 200/week @ 2024-04-15 128/week @ 2024-04-22 108/week @ 2024-04-29 152/week @ 2024-05-06 90/week @ 2024-05-13 87/week @ 2024-05-20 126/week @ 2024-05-27 103/week @ 2024-06-03 90/week @ 2024-06-10 103/week @ 2024-06-17 89/week @ 2024-06-24

每月399次下载
3个crate中使用(通过retro-display

MIT/Apache

170KB
917 代码行

TinyTGA

Build Status Crates.io Docs.rs embedded-graphics on Matrix

文档

一个小型的TGA解析器,专为与embedded-graphics一起使用,针对无std环境设计,但可在任何地方使用。除了解析图像头外,不再进行其他分配。

tinytga提供了两种访问TGA文件内像素数据的方法。最方便的方法是使用embedded-graphics提供的颜色类型来定义TGA文件内存储的格式。但也可以直接访问原始像素表示。

示例

使用Tga绘制图像

此示例演示了如何将TGA图像绘制到embedded-graphics绘制目标。

use embedded_graphics::{image::Image, pixelcolor::Rgb888, prelude::*};
use tinytga::Tga;

// Include an image from a local path as bytes
let data = include_bytes!("../tests/chessboard_4px_rle.tga");

let tga: Tga<Rgb888> = Tga::from_slice(data).unwrap();

let image = Image::new(&tga, Point::zero());

image.draw(&mut display)?;

使用嵌入式图形颜色类型访问像素

如果未使用embedded-graphics来绘制TGA图像,则可以使用embedded-graphics提供的颜色类型通过pixels方法访问像素数据。

use embedded_graphics::{prelude::*, pixelcolor::Rgb888};
use tinytga::Tga;

// Include an image from a local path as bytes
let data = include_bytes!("../tests/chessboard_4px_rle.tga");

// Create a TGA instance from a byte slice.
// The color type is set by defining the type of the `img` variable.
let img: Tga<Rgb888> = Tga::from_slice(data).unwrap();

// Check the size of the image.
assert_eq!(img.size(), Size::new(4, 4));

// Collect pixels into a vector.
let pixels: Vec<_> = img.pixels().collect();

访问原始像素数据

如果目标应用未使用embedded-graphics,则可以使用RawTga上的pixels方法访问原始图像数据。返回的迭代器为每个像素值产生一个u32

use embedded_graphics::{prelude::*, pixelcolor::Rgb888};
use tinytga::{Bpp, Compression, DataType, ImageOrigin, RawPixel, RawTga, TgaHeader};

// Include an image from a local path as bytes.
let data = include_bytes!("../tests/chessboard_4px_rle.tga");

// Create a TGA instance from a byte slice.
let img = RawTga::from_slice(data).unwrap();

// Take a look at the raw image header.
assert_eq!(
    img.header(),
    TgaHeader {
        id_len: 0,
        has_color_map: false,
        data_type: DataType::TrueColor,
        compression: Compression::Rle,
        color_map_start: 0,
        color_map_len: 0,
        color_map_depth: None,
        x_origin: 0,
        y_origin: 4,
        width: 4,
        height: 4,
        pixel_depth: Bpp::Bits24,
        image_origin: ImageOrigin::TopLeft,
        alpha_channel_depth: 0,
    }
);

// Collect raw pixels into a vector.
let pixels: Vec<_> = img.pixels().collect();

嵌入式图形绘制性能

tinytga 使用不同的代码路径来绘制不同 ImageOrigin 的图像。不同原点之间的性能差异将取决于显示驱动程序,但通常使用左上角为原点的图像将获得最佳性能。

最低支持的 Rust 版本

tinytga 最低支持的 Rust 版本为 1.61 或更高版本。请确保您安装了正确的 Rust 版本,最好是通过 https://rustup.rs

许可协议

您可以选择以下任一许可协议:

任选其一。

贡献

除非您明确声明,否则您有意提交以包含在作品中并由 Apache-2.0 许可协议定义的任何贡献,都将按照上述双许可协议进行许可,不附加任何额外条款或条件。

依赖项

约 4.5MB
约 54K SLoC