use png::{BitDepth, ColorType, Encoder};
use std::io::Cursor;
use std::path::Path;
pub fn encode_png(
data: &[u8],
width: u32,
height: u32,
) -> Result<Vec<u8>, Box<dyn std::error::Error>> {
let mut cursor = Cursor::new(Vec::new());
{
let mut encoder = Encoder::new(&mut cursor, width, height);
encoder.set_color(ColorType::Rgba);
encoder.set_depth(BitDepth::Eight);
let mut writer = encoder.write_header()?;
writer.write_image_data(data)?;
writer.finish()?;
}
Ok(cursor.into_inner())
}
pub fn write_png<P: AsRef<Path>>(
path: P,
data: &[u8],
width: u32,
height: u32,
) -> Result<(), Box<dyn std::error::Error>> {
let encoded = encode_png(data, width, height)?;
std::fs::write(path, encoded)?;
Ok(())
}