bhtmp/
lib.rs

1use image::{ImageBuffer, Rgb, RgbImage};
2
3pub struct DataRecord {
4    pub raw: Vec<u8>,
5}
6
7pub struct Bhtmp {
8    pub headers: Vec<u8>,
9    pub records: Vec<DataRecord>,
10}
11
12impl Bhtmp {
13    pub fn new(bytes: Vec<u8>) -> Self {
14        // Get the header
15        let headers = bytes.get(0..16).unwrap();
16        // Get everything after the header.
17        let data = bytes.get(16..).unwrap();
18        
19        // Read segments of 8 bytes into records.
20        let mut records: Vec<DataRecord> = vec![];
21        for i in data.chunks(8) {
22            records.push(DataRecord {
23                raw: i.iter().map(|v| *v).collect(),
24            })
25        }
26
27        Self {
28            headers: headers.iter().map(|v| *v).collect(),
29            records: records,
30        }
31    }
32
33    pub fn to_image(self: &Self, bitidx: usize) -> RgbImage {
34        let mut image: RgbImage = ImageBuffer::new(100, 100);
35        
36        for (i, rec) in self.records.iter().enumerate() {
37            image.put_pixel(
38                (i % 100) as u32,
39                (i / 100) as u32,
40                Rgb([rec.raw[bitidx], rec.raw[bitidx], rec.raw[bitidx]]),
41            )
42        }
43
44        return image;
45    }
46}