From 15df0fec1e368599487e1faeaf8ecebd87980781 Mon Sep 17 00:00:00 2001 From: cc Date: Wed, 20 Aug 2025 22:14:13 -0700 Subject: Initial commit --- src/large_label_format.rs | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/large_label_format.rs (limited to 'src/large_label_format.rs') diff --git a/src/large_label_format.rs b/src/large_label_format.rs new file mode 100644 index 0000000..5aef6b3 --- /dev/null +++ b/src/large_label_format.rs @@ -0,0 +1,45 @@ +use crate::{LabelFormat,flood}; + +pub struct LargeLabelFormat { + pub buffer: Vec, + pub width: usize, + pub height: usize, +} + +impl std::fmt::Debug for LargeLabelFormat { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("LargeLabelFormat") + .field("width", &self.width) + .field("height", &self.height) + .finish() + } +} + +impl LargeLabelFormat { + pub fn compress(&self) -> LabelFormat { + let mut label: u16 = 1; + let mut output_buffer: Vec = vec![0u16; self.buffer.len()]; + for y in 0..self.height { + for x in 0..self.width { + let index = x + y*self.width; + if self.buffer[index] == 0 { + continue; + } + if output_buffer[index] == 0 { + let color = self.buffer[index]; + flood(&self, &mut output_buffer, x, y, color, label); + label += 1; + } + } + } + return LabelFormat { + buffer: output_buffer, + width: self.width, + height: self.height, + }; + } + + pub fn dump(&self, filename: &str) -> Result<(), std::io::Error> { + crate::binfile::dump_u32_vec(filename, self.buffer.clone()) + } +} -- cgit v1.2.1