Cleaned up code a little, fixed compression quirks

This commit is contained in:
G2-Games 2024-05-23 02:49:28 -05:00
parent 8aa150ee46
commit ea7f8fb6d2
2 changed files with 14 additions and 12 deletions

View file

@ -256,7 +256,7 @@ pub fn compress(
offset += count;
for d in &part_data {
output_buf.write(&d.to_le_bytes()).unwrap();
output_buf.write_all(&d.to_le_bytes()).unwrap();
}
output_info.chunks.push(ChunkInfo {
@ -269,6 +269,9 @@ pub fn compress(
if output_info.chunk_count == 0 {
panic!("No chunks compressed!")
} else if output_info.chunk_count != 1 {
output_info.chunks[0].size_raw -= 1;
output_info.chunks[output_info.chunk_count - 1].size_raw += 1;
}
output_info.total_size_compressed = output_buf.len() / 2;
@ -285,7 +288,7 @@ fn compress_lzw(data: &[u8], size: usize, last: Vec<u8>) -> (usize, Vec<u16>, Ve
let mut dictionary_count = (dictionary.len() + 1) as u16;
let mut element = Vec::new();
if last.len() != 0 {
if !last.is_empty() {
element = last
}
@ -294,7 +297,7 @@ fn compress_lzw(data: &[u8], size: usize, last: Vec<u8>) -> (usize, Vec<u16>, Ve
let mut entry = element.clone();
entry.push(*c);
if dictionary.get(&entry).is_some() {
if dictionary.contains_key(&entry) {
element = entry
} else {
compressed.push(*dictionary.get(&element).unwrap());
@ -311,15 +314,15 @@ fn compress_lzw(data: &[u8], size: usize, last: Vec<u8>) -> (usize, Vec<u16>, Ve
}
let last_element = element;
if compressed.len() == 0 {
if last_element.len() != 0 {
if compressed.is_empty() {
if !last_element.is_empty() {
for c in last_element {
compressed.push(*dictionary.get(&vec![c]).unwrap());
}
}
return (count, compressed, Vec::new())
} else if compressed.len() < size {
if last_element.len() != 0 {
if !last_element.is_empty() {
compressed.push(*dictionary.get(&last_element).unwrap());
}
return (count, compressed, Vec::new())
@ -365,8 +368,8 @@ pub fn compress2(data: &[u8], size: usize) -> (Vec<u8>, CompressionInfo) {
if output_info.chunk_count == 0 {
panic!("No chunks compressed!")
} else if output_info.chunk_count != 1 {
output_info.chunks[0].size_raw += 1;
output_info.chunks[output_info.chunk_count - 1].size_raw -= 1;
output_info.chunks[0].size_raw -= 1;
output_info.chunks[output_info.chunk_count - 1].size_raw += 1;
}
output_info.total_size_compressed = output_buf.len();

View file

@ -1,6 +1,5 @@
use byteorder::{ReadBytesExt, WriteBytesExt};
use image::RgbaImage;
use std::{fs, time};
use std::io::{Read, Seek, SeekFrom, Write};
use crate::common::{CommonHeader, CzError};
@ -45,10 +44,10 @@ fn line_diff(picture: &mut RgbaImage, data: &[u8]) {
let block_height = (f32::ceil(height as f32 / 3.0) as u16) as u32;
let mut curr_line;
let mut prev_line = vec![0u8; width as usize * 3];
let mut prev_line = Vec::with_capacity(width as usize * 3);
let mut curr_alpha;
let mut prev_alpha = vec![0u8; width as usize];
let mut prev_alpha = Vec::with_capacity(width as usize);
let pcount = (width * height * 3) as usize;
@ -87,7 +86,7 @@ fn diff_line(header: &CommonHeader, input: &[u8]) -> Vec<u8> {
let width = header.width() as u32;
let height = header.height() as u32;
let mut data = Vec::with_capacity(input.len());
let mut data = Vec::with_capacity(width as usize * 3);
let mut alpha_data = Vec::with_capacity(width as usize);
let block_height = (f32::ceil(height as f32 / 3.0) as u16) as usize;