Skip to content

Commit 93c3164

Browse files
committed
image never works with bytes directly so just make it accept the already parsed data
1 parent 894140c commit 93c3164

File tree

4 files changed

+21
-20
lines changed

4 files changed

+21
-20
lines changed

src/image.rs

+14-17
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,12 @@
11
use factor::factor::factor;
22

3-
use crate::{parser, RawGrid};
3+
use crate::RawGrid;
44

5-
pub struct Image(RawGrid);
5+
pub struct Image(pub RawGrid);
66

77
impl Image {
88
const MAX_WIDTH: usize = 320;
99

10-
pub fn new(buffer: &[u8], width: usize, parser: parser::ParserType) -> Self {
11-
Self(parser.process_input(buffer, width))
12-
}
13-
1410
pub fn data(&self) -> RawGrid {
1511
self.0.clone()
1612
}
@@ -91,7 +87,9 @@ mod tests {
9187
#[test]
9288
fn basic_properties() {
9389
let data: u32 = 0b00011011000110110001101100011011;
94-
let mut image = Image::new(&data.to_be_bytes(), 4, ParserType::type_str("cga"));
90+
let parser = ParserType::type_str("cga");
91+
let parsed = parser.process_input(&data.to_be_bytes(), 4);
92+
let mut image = Image(parsed);
9593

9694
assert_eq!(image.pixel_count(), 16);
9795
assert_eq!(image.width(), 4);
@@ -100,11 +98,12 @@ mod tests {
10098
assert_eq!(image.width_factors(), [2, 4, 8]);
10199
assert_eq!(image.height_factors(), [2]);
102100
assert!(!image.is_tall());
103-
image = Image::new(
101+
102+
let parsed = parser.process_input(
104103
&0b0001101100011011000110110001101100011011000110110001101100011011_u64.to_be_bytes(),
105104
2,
106-
ParserType::type_str("cga"),
107105
);
106+
image = Image(parsed);
108107
assert!(image.is_tall());
109108
}
110109

@@ -129,20 +128,18 @@ mod tests {
129128
//rework these tests to actually be wider than max_width, or do something clever to overwrite it
130129
fn tiling() {
131130
let data: u32 = 0b00011011000110110001101100011011;
132-
let tiled = image::tile(
133-
Image::new(&data.to_be_bytes(), 2, ParserType::type_str("cga")).data(),
134-
2,
135-
);
131+
let parser = ParserType::type_str("cga");
132+
let parsed = parser.process_input(&data.to_be_bytes(), 2);
133+
134+
let tiled = image::tile(Image(parsed).data(), 2);
136135
assert_eq!(
137136
tiled,
138137
[vec![0, 1, 0, 1, 0, 1, 0, 1], vec![2, 3, 2, 3, 2, 3, 2, 3],]
139138
);
140139

141140
let data: u64 = 0b0001101100011011000110110001101100011011000110110001101100011011;
142-
let tiled = image::tile(
143-
Image::new(&data.to_be_bytes(), 2, ParserType::type_str("cga")).data(),
144-
2,
145-
);
141+
let parsed = parser.process_input(&data.to_be_bytes(), 2);
142+
let tiled = image::tile(Image(parsed).data(), 2);
146143
assert_eq!(
147144
tiled,
148145
vec![

src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#![doc = include_str!("../README.md")]
22

33
pub mod color;
4+
pub mod file_data;
45
pub mod image;
56
pub mod parser;
67

src/terminal/main.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use std::path::Path;
66
use clap::Parser;
77

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

21-
let reader = std::fs::read(Path::new(&args.image))?;
22+
let file_data = &std::fs::read(Path::new(&args.image))?;
2223
let parser = ParserType::type_str(&args.image_parser);
23-
let image = Image::new(&reader, args.width, parser);
24+
let image = Image(parser.process_input(&file_data, args.width));
2425

2526
let image_data = if args.tile_height.is_some() {
2627
image::tile(image.data(), args.tile_height.unwrap())

src/wasm/image.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@ impl ImageFile<'_> {
3939
if self.file_input.mime_type.contains("image") {
4040
self.file_input.data.clone()
4141
} else {
42-
let image = Image::new(&self.file_input.data, self.width, ParserType::CGA);
42+
let parser = ParserType::CGA;
43+
let parsed = parser.process_input(&self.file_input.data, self.width);
44+
let image = Image(parsed);
4345
let palette = palette_from_abbr("cga0");
4446
let mut bytes: Vec<u8> = Vec::new();
4547

0 commit comments

Comments
 (0)