factor out ega loader
This commit is contained in:
@@ -1,30 +1,14 @@
|
||||
extern crate vrtue;
|
||||
use vrtue::ega;
|
||||
use vrtue::ega::{Compression, Tiling};
|
||||
|
||||
extern crate image;
|
||||
extern crate itertools;
|
||||
|
||||
use std::env;
|
||||
use std::io::Read;
|
||||
use std::path::Path;
|
||||
|
||||
static EGA_PALETTE: [[u8; 4]; 16] = [[0x00, 0x00, 0x00, 0x00],
|
||||
[0x00, 0x00, 0xAA, 0x00],
|
||||
[0x00, 0xAA, 0x00, 0x00],
|
||||
[0x00, 0xAA, 0xAA, 0x00],
|
||||
[0xAA, 0x00, 0x00, 0x00],
|
||||
[0xAA, 0x00, 0xAA, 0x00],
|
||||
[0xAA, 0x55, 0x00, 0x00],
|
||||
[0xAA, 0xAA, 0xAA, 0x00],
|
||||
[0x55, 0x55, 0x55, 0x00],
|
||||
[0x55, 0x55, 0xFF, 0x00],
|
||||
[0x55, 0xFF, 0x55, 0x00],
|
||||
[0x55, 0xFF, 0xFF, 0x00],
|
||||
[0xFF, 0x55, 0x55, 0x00],
|
||||
[0xFF, 0x55, 0xFF, 0x00],
|
||||
[0xFF, 0xFF, 0x55, 0x00],
|
||||
[0xFF, 0xFF, 0xFF, 0x00]];
|
||||
|
||||
|
||||
|
||||
pub fn main() {
|
||||
fn main() {
|
||||
let args: Vec<String> = env::args().collect();
|
||||
let filename;
|
||||
if args.len() > 1 {
|
||||
@@ -33,24 +17,16 @@ pub fn main() {
|
||||
filename = "data/SHAPES.EGA";
|
||||
}
|
||||
|
||||
let mut file = std::fs::File::open(Path::new(filename)).unwrap();
|
||||
let mut tile_buf = [0u8; 128];
|
||||
let mut file = std::fs::File::open(Path::new(filename))
|
||||
.expect(&format!("failed opening EGA file: {}", filename));
|
||||
let mut ega_vec = Vec::<u8>::new();
|
||||
|
||||
let mut i = 0;
|
||||
while file.read_exact(&mut tile_buf).is_ok() {
|
||||
let tilepixels = tile_buf.iter()
|
||||
.flat_map(|tile_byte| {
|
||||
EGA_PALETTE[(tile_byte >> 4u8 & 0xF) as usize]
|
||||
.into_iter()
|
||||
.chain(EGA_PALETTE[(tile_byte & 0xF) as usize]
|
||||
.into_iter())
|
||||
})
|
||||
.map(|x| *x)
|
||||
.collect::<Vec<u8>>();
|
||||
file.read_to_end(&mut ega_vec).expect("Read EGA file");
|
||||
let ega_page = ega::decode(&ega_vec, Compression::UNCOMPRESSED, Tiling::TILED(16));
|
||||
for (i, tilepixels) in ega_page.iter().enumerate() {
|
||||
let out_name = format!("out/{}.png", i);
|
||||
let out_file = std::fs::File::create(Path::new(&out_name)).expect("open out file");
|
||||
let enc = image::png::PNGEncoder::new(out_file);
|
||||
enc.encode(&tilepixels, 16, 16, image::ColorType::RGBA(8)).expect("write png");
|
||||
i += 1;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user