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 图像

Download history 35/week @ 2024-03-11 22/week @ 2024-03-18 3/week @ 2024-03-25 77/week @ 2024-04-01 58/week @ 2024-04-08 44/week @ 2024-04-15 40/week @ 2024-04-22 58/week @ 2024-04-29 40/week @ 2024-05-06 47/week @ 2024-05-13 81/week @ 2024-05-20 37/week @ 2024-05-27 40/week @ 2024-06-03 27/week @ 2024-06-10 55/week @ 2024-06-17 34/week @ 2024-06-24

每月157次下载
用于 4 crate

MIT 协议

15KB
329

外函数图像处理

license Build Status

此 crate 提供了 Rust 中的图像像素处理和转换功能。它旨在与来自外函数的图像缓冲区一起工作,这些缓冲区可能是一个 C API 或将设备缓冲区映射到用户空间的相机驱动程序。

像素表示为数组包装类型,例如,[T; 3] 将是 Rgb 像素的内部类型。此 crate 提供迭代器扩展,您可以使用它们轻松地在颜色格式之间转换,例如 YuvRgb

打包和平面 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