plotpx 0.1.7

Pixel-focused plotting engine that renders magnitude grids, heatmaps, and spectra to RGBA buffers
Documentation
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(())
}