1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
//! # Example
//!
//! ## Want to modify an image ?
//! ```
//! use devpng::prelude::PNG;
//!
//! fn main() -> Result<(), String> {
//!     // Load.
//!     let mut buf = std::fs::read("img.png")
//!         .expect("Couldn't read the file.");
//!     let mut png = PNG::load(&mut buf)?;
//!
//!     // Access image.
//!     let img = png.image();
//!
//!     // Modify image.
//!     for x in img.iter_mut() {
//!         *x = !*x;
//!     }
//!
//!     // Store.
//!     png.store("img.png")?;
//!     Ok(())
//! }
//! ```
//!
//! ## Want to create an image ?
//! ```
//! use devpng::prelude::{ColourType, Image, PNG, Point};
//! 
//! fn main() -> Result<(), String> {
//!     let mut data = vec![255; 800 * 200];
//!     let img = Image::new(&mut data[..])
//!         .set_ncol(800) // 200
//!         .set_nrow(200)
//!         .set_depth(8)
//!         .set_colour(ColourType::RGBA);
//!     let mut buf = Vec::new();
//! 
//!     let mut png = PNG::from_image(&mut buf, &img);
//!     let mut img = png.image();
//! 
//!     for i in 0..50 {
//!         let center = Point { x: 100, y: 100 };
//!         let radius = 80 - i as i32;
//!         let colour = &[0, (255 - i * 5) as u8, (255 - i * 5) as u8, 255];
//!         img.plot_circle(center, radius, colour);
//!     }
//!
//!     // Store.
//!     png.store("img.png")?;
//!     Ok(())
//! }
//! ```
//!
//! ## Want low level access ?
//! ```
//! use devpng::prelude::DataStreamMut;
//!
//! fn main() -> Result<(), String> {
//!     // Load.
//!     let mut buf = std::fs::read("img.png")
//!         .expect("Couldn't read the file.");
//!     let mut datastream = DataStreamMut::from(&mut buf)?;
//!
//!     // Access image.
//!     let mut cache = datastream.idat()?;
//!     let img = cache.image();
//!    
//!     // Modify image.
//!     for x in img.iter_mut() {
//!         *x = !*x;
//!     }
//!
//!     // Store.
//!     let png = datastream.rebuild(&mut Some(&mut cache));
//!     std::fs::write("img.png", png)
//!         .expect("Couldn't write the file.");
//!     Ok(())
//! }
//! ```

// Private.
mod chunk;
mod crc;

// Public.
pub mod cache;
pub mod colour;
pub mod datastream;
pub mod image;
pub mod png;

pub mod prelude {
    // Private.
    pub(crate) use crate::chunk::chunk::{Chunk, ChunkMut};
    // Public.
    pub use crate::cache::FiltCache;
    pub use crate::colour::ColourType;
    pub use crate::datastream::DataStreamMut;
    pub use crate::image::{Image, Point};
    pub use crate::png::PNG;
}