使用图像板时,如何获得u8 RGB值的矢量?

时间:2018-06-12 15:43:15

标签: rust

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

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]);
}

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

我想要的只是u8的向量。我怎么做到的?

1 个答案:

答案 0 :(得分:2)

好吧,如果您只想要原始数据,可以拨打DynamicImage::raw_pixels

let im = image::open("wall.jpg").unwrap().to_rbg();
let rgb: Vec<u8> = im.raw_pixels();

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

let im = image::open("wall.jpg").unwrap();
let first_pixel = im.get_pixel(0, 0);

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

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