13 个版本 (重大更新)
0.10.0 | 2023年10月28日 |
---|---|
0.9.0 | 2021年3月6日 |
0.8.2 | 2020年10月25日 |
0.7.1 | 2020年7月19日 |
#381 in 图像
每月157次下载
用于 4 crate
15KB
329 行
外函数图像处理
此 crate 提供了 Rust 中的图像像素处理和转换功能。它旨在与来自外函数的图像缓冲区一起工作,这些缓冲区可能是一个 C API 或将设备缓冲区映射到用户空间的相机驱动程序。
像素表示为数组包装类型,例如,[T; 3]
将是 Rgb
像素的内部类型。此 crate 提供迭代器扩展,您可以使用它们轻松地在颜色格式之间转换,例如 Yuv
和 Rgb
。
打包和平面 API
打包图像的像素在内存中相互重叠,而平面图像则需要为像素组件分别分配内存平面。
例如,在内存中打包 RGB 图像看起来像这样
R1G1B1 .. RnGnnn (单个内存平面)
而平面 YUV420p 图像则如下所示
Y1Y2 .. Yn | U1U2 .. Un | V1V2 .. Vn (三个内存平面)
用法
下面您可以找到一个快速使用此 crate 的示例。它介绍了图像转换所需的基本知识。
use ffimage::color::{Gray, Rgb};
use ffimage::iter::{BytesExt, ColorConvertExt, PixelsExt};
fn main() {
// This is our RGB image memory (2x2 pixels).
// Usually, this will be allocated by a foreign function (e.g. kernel driver) and contain
// read-only memory.
let rgb = [10; 4 * 3];
// We need an output buffer as well to host the converted grayscale pixels.
let mut gray = [0; 4 * 1];
// Convert from rgb to grayscale by mapping each pixel. The Pixels iterator extension creates
// a typed pixel iterator from a bytestream. The ColorConvert extension knows how to convert
// between pixel types and the Write extension finally writes the pixels back into a
// bytestream.
rgb.iter()
.copied()
.pixels::<Rgb<u8>>()
.colorconvert::<Gray<u8>>()
.bytes()
.write(&mut gray);
}
基准测试
此 crate 包含基准测试套件。使用以下命令运行它
$ cargo bench
这些是我的在 MacBook Pro 14" (M1 Pro) 上运行 ffimage v0.10.0
的结果
输入 | 输出 | 640x480 | 1280x720 |
---|---|---|---|
Rgb[u8] | Bgr[u8] | 18.028 µs | 53.882 µs |
Rgb[u8] | Gray[u8] | 381.48 µs | 1.1442 ms |
Yuv[u8] | Rgb[u8] | 165.32 µs | 496.33 µs |
Yuv422[u8] | Rgb[u8] | 1.2097 ms | 3.6284 ms |
依赖项
~155KB