Skip to content

Commit 668809e

Browse files
committed
⚰️ Added a simple raw image format.
1 parent c02f095 commit 668809e

File tree

2 files changed

+56
-0
lines changed

2 files changed

+56
-0
lines changed

src/image.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ mod constraints;
1919
pub mod cv;
2020
mod mask_operations;
2121
mod orientation;
22+
pub mod raw;
2223
pub mod transformation;
2324
mod zlib;
2425

src/image/raw.rs

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
use file_stream::{read::FileStreamReader, write::FileStreamWriter};
2+
3+
use crate::Size;
4+
5+
use super::Image;
6+
7+
impl Image {
8+
/// Creates an image from raw data.
9+
pub fn from_raw_data(data: Vec<u8>) -> anyhow::Result<Image> {
10+
let mut file_stream = FileStreamReader::from_data(data)?;
11+
// Skipping the format for now.
12+
file_stream.skip_bytes(1)?;
13+
let width = file_stream.read_be()?;
14+
let height = file_stream.read_be()?;
15+
let size = Size { width, height };
16+
let bytes_per_row = file_stream.read_be()?;
17+
18+
let data = file_stream.read_remaining_data()?;
19+
let image = Image {
20+
data,
21+
size,
22+
bytes_per_row,
23+
};
24+
Ok(image)
25+
}
26+
27+
/// Returns the image data in a simple raw format.
28+
pub fn raw_data(&self) -> anyhow::Result<Vec<u8>> {
29+
let mut file_stream = FileStreamWriter::new();
30+
// Write a placeholder for the image format.
31+
file_stream.write_be(&0u8)?;
32+
file_stream.write_be(&self.size.width)?;
33+
file_stream.write_be(&self.size.height)?;
34+
file_stream.write_be(&self.bytes_per_row)?;
35+
file_stream.write_bytes(&self.data)?;
36+
37+
Ok(file_stream.data().to_vec())
38+
}
39+
}
40+
41+
#[cfg(test)]
42+
mod tests {
43+
use crate::Image;
44+
45+
#[test]
46+
fn raw_data() {
47+
let image = Image::open("tests/images/mountain.png").unwrap();
48+
49+
let encoded = image.raw_data().unwrap();
50+
51+
let decoded = Image::from_raw_data(encoded).unwrap();
52+
53+
assert!(image.appears_equal_to(&decoded));
54+
}
55+
}

0 commit comments

Comments
 (0)