使用图像箱时如何获得 u8 RGB 值的向量?

Mad*_*bat 6 rust

我需要拍摄图像并获取 RGB 字节值列表。我正在使用图像箱。这就是我所拥有的:

extern crate image;

fn main() {
    let im = image::open("wall.jpg").unwrap().to_rgb();
    let data: Vec<[u8; 3]> = im.pixels().flat_map(|p| vec![p.data]).collect();
    let rgb: Vec<&u8> = data.iter().flat_map(|p| p.iter()).collect();
    println!("First Pixel: {} {} {}", rgb[0], rgb[1], rgb[2]);
}
Run Code Online (Sandbox Code Playgroud)

这看起来很丑陋。我必须引入一个中间变量,然后我得到一个指向我真正需要的值的指针向量,所以在我做其他事情之前,我必须再次映射它以获得实际值。

我想要的只是一个向量u8。我怎么得到它?

Wes*_*ser 7

好吧,如果你只想要原始数据本身,你可以调用DynamicImage::raw_pixels

let im = image::open("wall.jpg").unwrap().to_rgb();
let rgb: Vec<u8> = im.raw_pixels();
Run Code Online (Sandbox Code Playgroud)

如果您真正感兴趣的是第一个像素,我建议您致电GenericImage::get_pixel

let im = image::open("wall.jpg").unwrap();
let first_pixel = im.get_pixel(0, 0);
Run Code Online (Sandbox Code Playgroud)

然后您可以将其转换[u8; 3]为 RGB 数据数组:

let rgb = first_pixel.to_rbg();
println!("First Pixel: {} {} {}", rgb.data[0], rgb.data[1], rgb.data[2]);
Run Code Online (Sandbox Code Playgroud)