project Wiki
https://github.com/js29a/micro_png/wiki
at glance
use micro_png::*;
fn main() {
let image = read_png("tmp/test.png").expect("can't load test.png");
println!("{} x {}", image.width(), image.height());
let data = image.data();
(0 .. image.height()).for_each(|y| {
(0 .. image.width()).for_each(|x| {
let _pixel = data[y][x]; });
});
write_apng("tmp/back.png",
ImageData::RGBA16(vec![data]),
None , None, false ).expect("can't save back.png");
let data: Vec<Vec<RGBA>> = vec![
vec![(255, 0, 0, 255), (0, 0, 0, 255)], vec![(0, 0, 0, 255), (255, 0, 0, 255)], ];
write_apng("tmp/2x2.png",
ImageData::RGBA(vec![data]), None , None, false ).expect("can't save back.png");
let data_1: Vec<Vec<RGBA>> = vec![
vec![(255, 0, 0, 255), (0, 0, 0, 255)], vec![(0, 0, 0, 255), (255, 0, 0, 255)], ];
let builder = APNGBuilder::new("tmp/foo.png", ImageData::RGBA(vec![data_1]))
.set_adam_7(true);
build_apng(builder).unwrap();
let data_2 = vec![
vec![ vec![(255, 0, 0, 255), (0, 0, 0, 255)], vec![(0, 0, 0, 255), (255, 0, 0, 255)], ],
vec![ vec![(0, 0, 0, 255), (255, 0, 0, 255)], vec![(255, 0, 0, 255), (0, 0, 0, 255)], ],
vec![ vec![(0, 0, 0, 255), (255, 0, 0, 255)], vec![(255, 255, 0, 255), (0, 255, 0, 255)], ],
];
build_apng(
APNGBuilder::new("tmp/bar.png", ImageData::RGBA(data_2))
.set_def_dur((100, 1000)) .set_dur(1, (500, 1000)) ).unwrap();
}
supported formats
enum variant |
|
ImageData::RGB |
8-bit RGB without alpha |
ImageData::RGBA |
8-bit RGB with alpha |
ImageData::RGB16 |
16-bit RGB without alpha |
ImageData::RGBA16 |
16-bit RGB with alpha |
ImageData::NDX |
n-bit indexed palette without alpha |
ImageData::NDXA |
n-bit indexed palette with alpha |
ImageData::GRAY |
k-bit grayscale without alpha |
ImageData::GRAYA |
i-bit grayscale with alpha |
- n: 1, 2, 4, 8,
- k: 1, 2, 4, 8, 16,
- i: 8, 16,
todo