png_codec 0.1.1

A minimal pure Rust PNG encoder
Documentation
use crate::{consts, encode::Error as EncoderError, encoder::Enc, zlib};

/// Image Data Chunk Data (IDAT)
#[derive(Debug)]
pub(crate) struct ImageData {
    /// Part of a compressed ZLIB stream
    pub(crate) data: Vec<u8>,
}

impl ImageData {
    pub(crate) fn write(&self, enc: &mut Enc) -> Result<(), EncoderError> {
        // FIXME: Should already be compressed.
        let mut zlib = Vec::new();
        zlib::compress(&mut zlib, self.data.as_slice(), enc.level());

        //
        enc.prepare(zlib.len(), consts::IMAGE_DATA);
        enc.raw(&zlib);
        enc.write_crc();
        Ok(())
    }

    /// Construct from raw uncompressed image data.
    pub(crate) fn with_data(data: Vec<u8>) -> ImageData {
        ImageData { data }
    }
}