Rust image::SubImage,没有为类型找到名为“put_pixel”的方法?

Rust image::SubImage, no method named `put_pixel` found for type?

以下代码

cargo.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()?

SubImage clearly implements GenericImage. What should I do to use put_pixel()?

GenericImageViewimpl 是您可以访问的内容,因为传递的是不可变引用。

可以通过以下方式传递可变引用来访问 GenericImageimpl

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);