33 lines
970 B
Rust
33 lines
970 B
Rust
extern crate vrtue;
|
|
use vrtue::ega;
|
|
use vrtue::ega::{Compression, Tiling};
|
|
|
|
extern crate image;
|
|
|
|
use std::env;
|
|
use std::io::Read;
|
|
use std::path::Path;
|
|
|
|
fn main() {
|
|
let args: Vec<String> = env::args().collect();
|
|
let filename;
|
|
if args.len() > 1 {
|
|
filename = &args[1] as &str;
|
|
} else {
|
|
filename = "data/SHAPES.EGA";
|
|
}
|
|
|
|
let mut file = std::fs::File::open(Path::new(filename))
|
|
.expect(&format!("failed opening EGA file: {}", filename));
|
|
let mut ega_vec = Vec::<u8>::new();
|
|
|
|
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");
|
|
}
|
|
}
|