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
use { bitvec::{ prelude::{Lsb0, Msb0}, vec::BitVec, view::AsBits, }, zipng::*, }; fn main() -> Result<(), panic> { let text = "Hello, world!"; // let bytes = text_png(text); // eprintln!( // "Rendered {} characters of text in {} bytes of PNG.", // text.chars().count(), // bytes.len() // ); // std::fs::write("target/out.png", bytes)?; /* let mut data = Vec::new(); let font = Mini5pt; let width = font.width(); let bits = font.width() * font.height(); for (character, bitmap) in font.glyphs() { // if *character != 'A' { // continue; // } let mut v: Vec<_> = bitmap .to_le_bytes() .as_bits::<Lsb0>() .iter() .take(bits + 1) .map(|bit| if *bit { 0xFFu8 } else { 0x00 }) .collect(); v.reverse(); let invisible = v.remove(0) != 0; if invisible { v.fill(0); } data.extend(v); data.extend(vec![0; width]); data.extend(vec![0; width]); } let mut buffer = Vec::new(); let ZipngOptions { png: PngOptions { bit_depth, color_mode, color_palette, // width, .. }, .. } = ZipngOptions::default_for_data(&data); let color_palette = color_palette.as_deref(); let bit_depth = EightBit; let color_mode = Indexed; let color_palette = Some(PALLETTE_8_BIT_DATA.as_slice()); // let bit_depth = EightBit; // let color_mode = RedGreenBlue; // let color_palette = None::<&[u8]>; // let bit_depth = OneBit; // let color_mode = Indexed; // let color_palette = [0xFF_u8, 0xFF, 0xEE, 0x11, 0x11, 0x33]; // let color_palette = Some(&color_palette[..]); let bits_per_pixel = bit_depth.bits_per_sample() * color_mode.samples_per_pixel(); let pixels = data.len() * 8 / bits_per_pixel; let height = (pixels / width).max(1); write_png( &mut buffer, &data, width as u32, height as u32, bit_depth, color_mode, color_palette, ); std::fs::write("target/test.png", buffer)?; */ Ok(()) }