9个不稳定版本
0.5.0 | 2023年5月17日 |
---|---|
0.4.1 | 2021年6月16日 |
0.4.0-beta.1 | 2021年5月24日 |
0.4.0-alpha.1 | 2020年12月27日 |
0.1.0 | 2019年6月4日 |
#160 in 图像
每月399次下载
在3个crate中使用(通过retro-display)
170KB
917 代码行
TinyTGA
文档
一个小型的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 License,版本 2.0(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可协议(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则您有意提交以包含在作品中并由 Apache-2.0 许可协议定义的任何贡献,都将按照上述双许可协议进行许可,不附加任何额外条款或条件。
依赖项
约 4.5MB
约 54K SLoC