找不到 image::ImageBuffer::from_vec() 的函数或关联项
function or associated item not found for image::ImageBuffer::from_vec()
我正在使用 Piston 的 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 中,据我所知,类型似乎是正确的。
啊,它必须是 Vec<P::Subpixel>
,即 Vec<u8>
而不是 Vec<Rgb<u8>>
。这有点烦人。
扩大一点:在上面的例子中,我们有一个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,
这些都在这里不起作用,因为 ImageBuffer<Rgb<u8>, Vec<Rgb<u8>>
中的 Container
参数类型是 Rgb<u8>
值的向量。它将取消引用 [Rgb<u8>]
的切片,使其与第一个实现不兼容,第二个实现需要子像素值向量 (<P as Pixel>::Subpixel
) 而不是实际像素值 (Rgb<u8>
) .这通常是此 crate 中的 ImageBuffer
类型所期望的像素数据容器。
工作示例:
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();
}
我正在使用 Piston 的 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 中,据我所知,类型似乎是正确的。
啊,它必须是 Vec<P::Subpixel>
,即 Vec<u8>
而不是 Vec<Rgb<u8>>
。这有点烦人。
扩大一点:在上面的例子中,我们有一个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,
这些都在这里不起作用,因为 ImageBuffer<Rgb<u8>, Vec<Rgb<u8>>
中的 Container
参数类型是 Rgb<u8>
值的向量。它将取消引用 [Rgb<u8>]
的切片,使其与第一个实现不兼容,第二个实现需要子像素值向量 (<P as Pixel>::Subpixel
) 而不是实际像素值 (Rgb<u8>
) .这通常是此 crate 中的 ImageBuffer
类型所期望的像素数据容器。
工作示例:
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();
}