我的应用程序旨在使用RGB像素格式处理图像数据。我需要允许它拍摄所有编码的图像。我的第一个想法是在处理之前将图像转换为RGB格式:
extern crate image;
use std::ops;
use image::ConvertBuffer;
pub fn process_generic<P,C>(im: image::ImageBuffer<P,C>)
where P: image::Pixel + 'static,
P::Subpixel: 'static,
C: ops::Deref<Target = [P::Subpixel]>
{
let result: image::ImageBuffer<image::Rgb<u8>, Vec<u8>> = im.convert();
}
fn main() {}
编译这会给我一个错误
error[E0277]: the trait bound `image::Rgb<u8>: image::color::FromColor<P>` is not satisfied
--> src/main.rs:12:66
|
12 | let result: image::ImageBuffer<image::Rgb<u8>, Vec<u8>> = im.convert();
| ^^^^^^^ the trait `image::color::FromColor<P>` is not implemented for `image::Rgb<u8>`
|
= help: consider adding a `where image::Rgb<u8>: image::color::FromColor<P>` bound
= note: required because of the requirements on the impl of `image::ConvertBuffer<image::ImageBuffer<image::Rgb<u8>, std::vec::Vec<u8>>>` for `image::ImageBuffer<P, C>`
我无法添加绑定,因为模块image::color
是私有的。我错过了什么吗?我也试图通过手动转换每个像素,但这似乎是一种更糟糕的方式。
答案 0 :(得分:1)
您可以直接使用image::ConvertBuffer
提供的特征限制:
extern crate image;
use image::ConvertBuffer;
pub fn process_generic<P, C>(im: image::ImageBuffer<P, C>)
where
image::ImageBuffer<P, C>: image::ConvertBuffer<image::ImageBuffer<image::Rgb<u8>, Vec<u8>>>,
P: image::Pixel + 'static,
{
let _result = im.convert();
}
fn main() {}
虽然我建议为image::ImageBuffer<image::Rgb<u8>, Vec<u8>>
和/或image::ImageBuffer<P, C>
引入类型别名。