use crate::bmp::utils::round_up_to_multiple_of_four;
use std::fs::File;
use std::io::{self, Write, Read, Seek, SeekFrom};
pub struct BmpPixelData {
pub data: Vec<u8>,
}
impl BmpPixelData {
pub fn new(width: u32, height: u32) -> Self {
let padding_length = round_up_to_multiple_of_four(width * 3) - (width * 3);
let mut data = Vec::new();
for _i in 0..height {
for _j in 0..width {
data.push(100);
data.push(50);
data.push(25);
}
for _j in 0..padding_length {
data.push(0);
}
}
BmpPixelData {
data
}
}
pub fn build_from_file(file: &mut File, data_offset: &[u8; 4]) -> io::Result<Self> {
let data_offset = u32::from_le_bytes(*data_offset) as u64;
file.seek(SeekFrom::Start(data_offset))?;
let mut pixel_data = BmpPixelData {
data: Vec::new(),
};
file.read_to_end(&mut pixel_data.data)?;
Ok(pixel_data)
}
pub fn write_to_file(&self, file: &mut File) -> io::Result<()> {
file.write(&self.data)?;
println!("Wrote BMP pixel data to file");
Ok(())
}
}
impl Clone for BmpPixelData {
fn clone(&self) -> Self {
BmpPixelData {
data: self.data.clone(),
}
}
}