Skip to content

Commit

Permalink
image never works with bytes directly so just make it accept the alre…
Browse files Browse the repository at this point in the history
…ady parsed data
  • Loading branch information
knzai committed Aug 3, 2024
1 parent 894140c commit 93c3164
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 20 deletions.
31 changes: 14 additions & 17 deletions src/image.rs
Original file line number Diff line number Diff line change
@@ -1,16 +1,12 @@
use factor::factor::factor;

use crate::{parser, RawGrid};
use crate::RawGrid;

pub struct Image(RawGrid);
pub struct Image(pub RawGrid);

impl Image {
const MAX_WIDTH: usize = 320;

pub fn new(buffer: &[u8], width: usize, parser: parser::ParserType) -> Self {
Self(parser.process_input(buffer, width))
}

pub fn data(&self) -> RawGrid {
self.0.clone()
}
Expand Down Expand Up @@ -91,7 +87,9 @@ mod tests {
#[test]
fn basic_properties() {
let data: u32 = 0b00011011000110110001101100011011;
let mut image = Image::new(&data.to_be_bytes(), 4, ParserType::type_str("cga"));
let parser = ParserType::type_str("cga");
let parsed = parser.process_input(&data.to_be_bytes(), 4);
let mut image = Image(parsed);

assert_eq!(image.pixel_count(), 16);
assert_eq!(image.width(), 4);
Expand All @@ -100,11 +98,12 @@ mod tests {
assert_eq!(image.width_factors(), [2, 4, 8]);
assert_eq!(image.height_factors(), [2]);
assert!(!image.is_tall());
image = Image::new(

let parsed = parser.process_input(
&0b0001101100011011000110110001101100011011000110110001101100011011_u64.to_be_bytes(),
2,
ParserType::type_str("cga"),
);
image = Image(parsed);
assert!(image.is_tall());
}

Expand All @@ -129,20 +128,18 @@ mod tests {
//rework these tests to actually be wider than max_width, or do something clever to overwrite it
fn tiling() {
let data: u32 = 0b00011011000110110001101100011011;
let tiled = image::tile(
Image::new(&data.to_be_bytes(), 2, ParserType::type_str("cga")).data(),
2,
);
let parser = ParserType::type_str("cga");
let parsed = parser.process_input(&data.to_be_bytes(), 2);

let tiled = image::tile(Image(parsed).data(), 2);
assert_eq!(
tiled,
[vec![0, 1, 0, 1, 0, 1, 0, 1], vec![2, 3, 2, 3, 2, 3, 2, 3],]
);

let data: u64 = 0b0001101100011011000110110001101100011011000110110001101100011011;
let tiled = image::tile(
Image::new(&data.to_be_bytes(), 2, ParserType::type_str("cga")).data(),
2,
);
let parsed = parser.process_input(&data.to_be_bytes(), 2);
let tiled = image::tile(Image(parsed).data(), 2);
assert_eq!(
tiled,
vec![
Expand Down
1 change: 1 addition & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#![doc = include_str!("../README.md")]

pub mod color;
pub mod file_data;
pub mod image;
pub mod parser;

Expand Down
5 changes: 3 additions & 2 deletions src/terminal/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ use std::path::Path;
use clap::Parser;

use cega::color::palette::palette_from_abbr;
//use cega::file_data::Raw;
use cega::image::{self, Image};
use cega::parser::ParserType;
#[cfg(feature = "png")]
Expand All @@ -18,9 +19,9 @@ use cega::ImageType;
pub fn main() -> Result<(), Box<dyn std::error::Error>> {
let args = args::Args::parse();

let reader = std::fs::read(Path::new(&args.image))?;
let file_data = &std::fs::read(Path::new(&args.image))?;
let parser = ParserType::type_str(&args.image_parser);
let image = Image::new(&reader, args.width, parser);
let image = Image(parser.process_input(&file_data, args.width));

let image_data = if args.tile_height.is_some() {
image::tile(image.data(), args.tile_height.unwrap())
Expand Down
4 changes: 3 additions & 1 deletion src/wasm/image.rs
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,9 @@ impl ImageFile<'_> {
if self.file_input.mime_type.contains("image") {
self.file_input.data.clone()
} else {
let image = Image::new(&self.file_input.data, self.width, ParserType::CGA);
let parser = ParserType::CGA;
let parsed = parser.process_input(&self.file_input.data, self.width);
let image = Image(parsed);
let palette = palette_from_abbr("cga0");
let mut bytes: Vec<u8> = Vec::new();

Expand Down

0 comments on commit 93c3164

Please sign in to comment.