如何使用锈图像在程序上生成图像?

Rik*_*Rik 5 procedural image rust

我想学习Rust,并认为程序生成图像会很有趣.我不知道从哪里开始...... 活塞/锈图像?但即便如此,我应该从哪里开始?

huo*_*uon 6

开始的地方是文档存储库.

从文档的登录页面看不是很明显,但核心类型imageImageBuffer.

new函数允许构造ImageBuffer表示具有给定/宽度的图像,存储给定类型的像素(例如RGB具有透明度的像素).可以使用类似的方法pixels_mut,get_pixel_mutput_pixel(后者是下面pixels_mut的文档中)来修改图像.例如

extern crate image;

use image::{ImageBuffer, Rgb};

const WIDTH: u32 = 10;
const HEIGHT: u32 = 10;

fn main() {
    // a default (black) image containing Rgb values
    let mut image = ImageBuffer::<Rgb<u8>>::new(WIDTH, HEIGHT);

    // set a central pixel to white
    image.get_pixel_mut(5, 5).data = [255, 255, 255];

    // write it out to a file
    image.save("output.png").unwrap();
}
Run Code Online (Sandbox Code Playgroud)

看起来像: 产量

repo作为起点特别有用,因为它包含示例,特别是它有一个以编程方式生成图像的示例.使用新库时,我会打开文档,如果感到困惑,我会专门寻找示例.

  • 这段代码不会被编译,因为现在`Imagebuffer`需要两个参数:像素类型和容器来存储它.你应该改为,例如,`let mut image = ImageBuffer :: <Rgb <u8>,Vec <u8 >>> :: new(WIDTH,HEIGHT);` (4认同)
  • 我使用`image 0.15.0`得到`.save()`的“预期2个参数”。我无法使该功能正常工作。也试过`image.save("out.png", image::PNG)` 和`image.save(&amp;Path::new("out.png), image::PNG)` :( (2认同)

Eka*_*Eka 6

由于 @huon 答案已有 6 年历史,我在重现结果时遇到错误,所以我写了这个,

use image::{ImageBuffer, RgbImage};

const WIDTH:u32 = 10;
const HEIGHT:u32 = 10;

fn main() {
    let mut image: RgbImage = ImageBuffer::new(WIDTH, HEIGHT);
    *image.get_pixel_mut(5, 5) = image::Rgb([255,255,255]);
    image.save("output.png").unwrap();
}
Run Code Online (Sandbox Code Playgroud)