use crate::jpeg::obj::JpegObj;
use crate::jpeg::writer::JpegWriter;
#[derive(Debug, Clone)]
pub struct SofHeader {
pub jpeg_obj: JpegObj,
}
impl SofHeader {
pub fn new(jpeg_obj: JpegObj) -> Self {
SofHeader { jpeg_obj }
}
pub fn write(&self, writer: &mut dyn JpegWriter) {
let mut sof: Vec<u8> = vec![0xFF, 0xC0, 0x00, 17];
sof.push(self.jpeg_obj.precision);
sof.push((self.jpeg_obj.image_height >> 8) as u8);
sof.push(self.jpeg_obj.image_height as u8);
sof.push((self.jpeg_obj.image_width >> 8) as u8);
sof.push(self.jpeg_obj.image_width as u8);
sof.push(self.jpeg_obj.number_of_components);
for i in 0..self.jpeg_obj.number_of_components as usize {
sof.push(self.jpeg_obj.comp_id[i]);
sof.push((self.jpeg_obj.hsamp_factor[i] << 4) + self.jpeg_obj.vsamp_factor[i]);
sof.push(self.jpeg_obj.qtable_number[i]);
}
writer.write_array(&sof);
}
}