use fax::{VecWriter, decoder, decoder::pels, BitWriter, Bits, Color};
use std::io::Write;
use std::fs::{self, File};
fn main() {
let mut args = std::env::args().skip(1);
let input: String = args.next().unwrap();
let width: u16 = args.next().unwrap().parse().unwrap();
let output = args.next().unwrap();
let data = fs::read(&input).unwrap();
let mut writer = VecWriter::new();
let mut height = 0;
decoder::decode_g4(data.iter().cloned(), width, None, |transitions| {
for c in pels(transitions, width) {
let bit = match c {
Color::Black => Bits { data: 1, len: 1 },
Color::White => Bits { data: 0, len: 1 }
};
writer.write(bit);
}
writer.pad();
height += 1;
});
let data = writer.finish();
assert_eq!(data.len(), height as usize * ((width as usize + 7) / 8));
let header = format!("P4\n{} {}\n", width, height);
let mut out = File::create(&output).unwrap();
out.write_all(header.as_bytes()).unwrap();
out.write_all(&data).unwrap();
}