2
RGBピクセル形式を使用して画像データを扱うアプリケーションがあります。私はそれがすべてのエンコーディングのイメージを取ることを許可する必要があります。私の最初のアイデアは、処理前のRGBフォーマットに画像を変換することでした:Piston's image libを使用して画像の色の種類を変更するには?
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
がプライベートであるので、私はバインドを追加することはできませんを与えるコンパイル。何か不足していますか?私はまた、手動で各ピクセルを調べて変換しようとしていましたが、それはそれを行う悪い方法のようです。
ああ、ありがとう!私が通常使っているエイリアス "RgbImage"がありますが、明示的に述べると便利だと思いました。しかし、ImageBufferを別名にする方法がわかりません
私の関数に 'where'句が必要なので(私は'型定義に 'trait constraintsを適用し続けます') – CT075
質問に完全な例を含めて間違いなく正しいことです。 'image :: ImageBuffer
'のためにできることはあまりありません。実際には、「イメージ」を2回書くのを避けるために、それを完全にインポートしたいと思うかもしれません。 – Shepmaster