代码之家  ›  专栏  ›  技术社区  ›  Timmmm

未找到image::ImageBuffer::from_vec()的函数或关联项

  •  0
  • Timmmm  · 技术社区  · 7 年前

    image 板条箱,代码如下:

    use image::{Rgb, ImageBuffer, Pixel};
    
    let image = Vec::<Rgb<u8>>::new();
    
    let image_buffer = ImageBuffer::<Rgb<u8>, Vec<Rgb<u8>>>::from_vec(
        width, height
        image,
    ).unwrap();
    

    error[E0599]: no function or associated item named `from_vec` found for type `image::ImageBuffer<image::Rgb<u8>, std::vec::Vec<image::Rgb<u8>>>` in the current scope
       --> src/main.rs:348:21
        |
    348 |     let image_buffer = ImageBuffer::<Rgb<u8>, Vec<Rgb<u8>>>::from_vec(
        |                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ function or associated item not found in `image::ImageBuffer<image::Rgb<u8>, std::vec::Vec<image::Rgb<u8>>>`
    

    我不明白为什么。很明显,它在里面 the documentation ,就我所知,这些类型似乎是正确的。

    2 回复  |  直到 7 年前
        1
  •  3
  •   Shepmaster Tim Diekmann    7 年前

    稍微扩展一下:在上面的例子中,我们有一个 ImageBuffer::<Rgb<u8>, Vec<Rgb<u8>> . 以及 ImageBuffer 提供了 from_vec

    impl<P, Container> ImageBuffer<P, Container>
    where
        P: Pixel<Subpixel = u8> + 'static,
        Container: Deref<Target = [u8]>, 
    
    impl<P: Pixel + 'static> ImageBuffer<P, Vec<P::Subpixel>>
    where
        P::Subpixel: 'static, 
    

    这两个都不管用因为 Container 输入参数类型 ImageBuffer<Rgb<u8>, Vec<Rgb<u8>> 是一个向量 Rgb<u8> [Rgb<u8>] ,使其与第一个实现不兼容,第二个实现需要一个亚像素值向量( <P as Pixel>::Subpixel )而不是实际的像素值( Rgb<u8> ). 这通常是 此板条箱中的类型应作为其像素数据容器。

    工作示例:

    extern crate image;
    
    use image::{ImageBuffer, Pixel, Rgb};
    
    fn main() {
        let width = 64;
        let height = 64;
        let image = vec![0x7F_u8; width as usize * height as usize * 3];
    
        let image_buffer =
            ImageBuffer::<Rgb<u8>, Vec<u8>>::from_vec(width, height, image).unwrap();
    }
    

    Playground

        2
  •  0
  •   Shepmaster Tim Diekmann    7 年前

    啊,一定是一个 Vec<P::Subpixel> ,即。 Vec<u8> 而不是 Vec<Rgb<u8>>

    推荐文章