#interop #frame #width-height #plane #vec2d #stride

imgref

用于安全、方便地处理具有宽度、高度和步长的像素缓冲区的二维切片

11 个稳定版本

1.10.1 2024年1月21日
1.10.0 2023年10月17日
1.9.4 2022年9月18日
1.9.2 2022年6月12日
1.2.0 2017年7月28日

#5 in 图像

Download history 73990/week @ 2024-05-01 74098/week @ 2024-05-08 71340/week @ 2024-05-15 59237/week @ 2024-05-22 86536/week @ 2024-05-29 127922/week @ 2024-06-05 141791/week @ 2024-06-12 153217/week @ 2024-06-19 184141/week @ 2024-06-26 133263/week @ 2024-07-03 138546/week @ 2024-07-10 128760/week @ 2024-07-17 143982/week @ 2024-07-24 143330/week @ 2024-07-31 131196/week @ 2024-08-07 101169/week @ 2024-08-14

544,674 每月下载量
用于 132 个crate(直接使用38个)

CC0-1.0 OR Apache-2.0

62KB
1K SLoC

图像的二维切片

这是一个表示二维向量和其矩形切片的最小结构体。它旨在描述图像数据和图像区域(也称为位图描述符、具有间距或步长的帧)。当处理图像数据时,它非常有用,可以用作在crate之间交换图像像素的共同结构体。

在图形代码中,通常需要将 widthheight 与一个 Vec 或像素切片一起传递,所有这些都作为独立的参数。这非常重复,并且可能导致错误。

此外,一些图形代码需要使用 stride,这允许在不复制的情况下定义图像的子区域。这对于切片和贴图以及支持需要填充的位图(例如,将帧大小四舍五入到块大小的倍数的视频格式)非常有用。

这个crate是一个简单的结构体,它为底层的像素缓冲区添加了维度。这使得正确跟踪图像大小变得更容易,并允许通过一个函数参数而不是三个或四个参数来传递图像。为了方便,它还实现了像素/行的高效迭代器和使用 img[(x,y)] 进行索引的有效迭代器。

use imgref::*;

fn main() {
    let img = Img::new(vec![0; 1000], 50, 20); // 1000 pixels of a 50×20 image

    let new_image = some_image_processing_function(img.as_ref()); // Use imgvec.as_ref() instead of &imgvec for better efficiency

    println!("New size is {}×{}", new_image.width(), new_image.height());
    println!("And the top left pixel is {:?}", new_image[(0u32,0u32)]);

    let first_row_slice = &new_image[0];

    for row in new_image.rows() {}
    for px in new_image.pixels() {}

    // slice (x, y, width, height) by reference - no copy!
    let fragment = img.sub_image(5, 5, 15, 15);

    // create a vec of pixels without stride, for compatibility with software
    // that expects pixels without any "gaps"
    let (vec, width, height) = fragment.to_contiguous_buf();
}

类型别名

Illustration: stride is width of the whole buffer.

这些在参考中描述得更为详细

ImgVec

它拥有自己的像素(存储在 Vec 中)。它类似于二维的 Vec。使用此类型从函数中创建和返回新图像。

不要使用 &ImgVec。相反,调用 ImgVec.as_ref() 从其中获取引用(需要显式调用 ImgRef.as_ref(),因为 Rust 尚不支持 自定义转换。)

ImgRef

ImgRef 是指向某些 ImgVec 或切片拥有的像素的引用。它类似于二维的 &[]

使用此类型将只读图像作为函数的参数。请注意,ImgRef 是一个 Copy 类型。传递 ImgRef,而不是 &ImgRef

要求

  • 最新的稳定 Rust (1.42+)

无运行时依赖

特性