use std::{env, fs::File, io::Write, path::Path}; use bitvec::{order::Msb0, vec::BitVec}; use image::{GenericImageView, ImageReader}; // Example custom build script. fn main() { println!("cargo::rerun-if-changed=build.rs"); handle_image("duck"); } fn handle_image(name: &str) { println!("cargo::rerun-if-changed=src/assets/{name}.png"); let img = ImageReader::open(format!("src/assets/{name}.png")) .unwrap() .decode() .unwrap(); assert_eq!(img.width(), 96); assert_eq!(img.height(), 38); let mut out: BitVec<u8, Msb0> = BitVec::new(); for y in 0..img.height() { for x in 0..img.width() { let p = img.get_pixel(x, y); let on = match (p.0[0], p.0[1], p.0[2]) { (0, 0, 0) => true, (255, 255, 255) => false, (r, g, b) => panic!("Invalid pixel at ({x}, {y}): ({r}, {g}, {b})"), }; out.push(on); } } let out_dir = env::var("OUT_DIR").unwrap(); let mut f = File::create(Path::new(&out_dir).join(format!("{name}.bin"))).unwrap(); f.write_all(&out.as_raw_slice()).unwrap(); }