diff --git a/cozette.bin b/cozette.bin new file mode 100644 index 0000000..df64451 Binary files /dev/null and b/cozette.bin differ diff --git a/cozette.png b/cozette.png index 851f38e..fcdbb20 100644 Binary files a/cozette.png and b/cozette.png differ diff --git a/src/main.rs b/src/main.rs index 6668847..2f9927d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,10 @@ #![allow(clippy::println_empty_string)] -use std::{fs::File, io, path::PathBuf, u8}; +use std::{ + fs::File, + io::{self, Write}, + path::PathBuf, + u8, +}; extern crate png; @@ -26,26 +31,39 @@ fn to_bitmap(path: &str, max_chars: u16, max_rows: usize) -> Result, io: Ok(finalbuf) } -fn reorder_bitmap(bitmap: Vec) -> Vec { - unimplemented!() +fn reorder_bitmap(bitmap: &[u8]) -> Vec { + let mut reordered: Vec = Vec::new(); + for row in 0..MAX_ROWS { + for character in 0x00..MAX_CHARS { + let mut byte = 0u8; + for i in 0..8 { + // character number + row offset & bitmask = pixel + if bitmap[character as usize + (row * 0xFF)] & 0x80 >> i > 0 { + byte |= 0x80 >> i; + } + } + reordered.push(byte); + } + } + reordered } fn main() -> std::io::Result<()> { let compressed = to_bitmap("./cozette.png", MAX_CHARS, MAX_ROWS)?; - for row in 0..MAX_ROWS { - for character in 0x00..MAX_CHARS { - print!("{:#04x}, {} ", character, row); // character as usize * row); - print!("{:#04x}: ", compressed[character as usize + (row * 0xFF)]); - for i in 0..8 { - // character number * char width + pixel offset + row offset = pixel - if compressed[character as usize + (row * 0xFF)] & 0x80 >> i > 0 { - print!("█"); - } else { - print!(" "); - } - } - println!(""); - } - } + let reordered = reorder_bitmap(&compressed); + let mut outfile = File::create("./cozette.bin")?; + outfile.set_len(0xFFFF)?; + outfile.write_all(&reordered)?; + //for byte in reordered.iter() { + // for i in 0..8 { + // // character number + row offset & bitmask = pixel + // if byte & 0x80 >> i > 0 { + // print!("█"); + // } else { + // print!(" "); + // } + // } + // println!(""); + //} Ok(()) }