nimage 0.1.10

A simple imaging library
Documentation
use crate::{Image, PixelFormat};

pub fn from_png_data(data: &[u8]) -> Option<Image> {
    let rd = png::Decoder::new(data);
    let reader = rd.read_info();

    if let Err(_) = reader {
        return None;
    }

    let mut reader = reader.unwrap();
    let size = reader.output_buffer_size();

    let width = reader.info().width;
    let height = reader.info().height;

    let mut buf = vec![0; size];

    let frame_info = reader.next_frame(&mut buf).unwrap();

    let bytes = &buf[..frame_info.buffer_size()];

    let samples = frame_info.color_type.samples();

    let out = Image {
        width: width as usize,
        height: height as usize,
        pixel_format: match samples{
            4 => PixelFormat::RGBA,
            3 => PixelFormat::RGB,
            _ => todo!("Implement decoding for: {:?}", frame_info.color_type)
        },
        data: bytes.to_vec(),
    };

    Some(out)
}