Rust image :: SubImage, для типа не найден метод с именем `put_pixel`? - PullRequest
0 голосов
/ 12 июля 2020

Следующий код

car go .toml

[dependencies]
image = "0.23.6"

src / main.rs

extern crate image;
use image::*;
    
fn main() {
    let mut img: RgbImage = ImageBuffer::new(512, 512);

    let a = SubImage::new(img, 0, 0, 1, 1);
    a.put_pixel(Rgb::from_channels(0, 0, 0, 0));
}

Выдает ошибку:

error[E0599]: no method named `put_pixel` found for type `image::SubImage<image::ImageBuffer<image::Rgb<u8>, std::vec::Vec<u8>>>` in the current scope
 --> src/main.rs:8:7
  |
8 |     a.put_pixel(Rgb::from_channels(0, 0, 0, 0));
  |       ^^^^^^^^^ method not found in `image::SubImage<image::ImageBuffer<image::Rgb<u8>, std::vec::Vec<u8>>>`
  |
  = note: the method `put_pixel` exists but the following trait bounds were not satisfied:
          `image::SubImage<image::ImageBuffer<image::Rgb<u8>, std::vec::Vec<u8>>> : image::GenericImage`

Почему? SubImage явно реализует GenericImage. Что мне делать, чтобы использовать SubImage::put_pixel()?

1 Ответ

0 голосов
/ 12 июля 2020

SubImage явно реализует GenericImage. Что мне делать, чтобы использовать put_pixel()?

impl для GenericImageView - это то, к чему вы можете получить доступ из-за переданной неизменяемой ссылки.

К impl для GenericImage можно получить доступ, передав изменяемую ссылку следующими способами:

let mut sub_image = SubImage::new(&mut img, 0, 0, 1, 1);
let mut sub_image = SubImage::new(img.inner_mut(), 0, 0, 1, 1);

Идиоматически sub_image()* Можно использовать метод *, учитывая, что img изменяемый:

let mut sub_image = img.sub_image(0, 0, 1, 1);
...