1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use image::io::Reader;
use image::{ColorType, DynamicImage, ImageFormat};
use std::error::Error;

pub fn save_image(filename: &str, cx: usize, cy: usize, pixel_data: &Vec<u8>) {
    image::save_buffer_with_format(
        filename,
        &pixel_data,
        cx as u32,
        cy as u32,
        ColorType::Rgba8,
        ImageFormat::Png,
    )
    .unwrap();
}

pub fn load_image(filename: &str) -> Result<(usize, usize, Vec<u8>), Box<dyn Error>> {
    let rgba_image = Reader::open(filename)?.decode()?.to_rgba8();
    Ok((
        rgba_image.width() as usize,
        rgba_image.height() as usize,
        DynamicImage::ImageRgba8(rgba_image).into_bytes(),
    ))
}