如何使用 rust-image 按程序生成图像?
How do I procedurally generate images using rust-image?
我想学习 Rust,并认为以程序方式生成图像会很有趣。我不知道从哪里开始... piston/rust-image?但即便如此,我应该从哪里开始呢?
开始的地方是 docs and the repository。
从文档的着陆页上看不是很明显,但 image
中的核心类型是 ImageBuffer
。
new
function allows one to construct an ImageBuffer
representing an image with the given/width, storing pixels of a given type (e.g. RGB, or that with transparency). One can use methods like pixels_mut
、get_pixel_mut
和put_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();
}
看起来像:
repo 作为起点特别有用,因为它包含示例,特别是它有 an example of programmatically generating an image。当使用一个新的库时,我会打开文档,如果感到困惑,我会专门打开 repo 来查找示例。
由于@huon answer 已有 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();
}
我想学习 Rust,并认为以程序方式生成图像会很有趣。我不知道从哪里开始... piston/rust-image?但即便如此,我应该从哪里开始呢?
开始的地方是 docs and the repository。
从文档的着陆页上看不是很明显,但 image
中的核心类型是 ImageBuffer
。
new
function allows one to construct an ImageBuffer
representing an image with the given/width, storing pixels of a given type (e.g. RGB, or that with transparency). One can use methods like pixels_mut
、get_pixel_mut
和put_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();
}
看起来像:
repo 作为起点特别有用,因为它包含示例,特别是它有 an example of programmatically generating an image。当使用一个新的库时,我会打开文档,如果感到困惑,我会专门打开 repo 来查找示例。
由于@huon answer 已有 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();
}