Make sure passes clear last line

This commit is contained in:
Kornel 2021-06-15 13:04:38 +01:00 committed by Josh Holmer
parent dac408627b
commit 3e996a0f82

View file

@ -285,14 +285,12 @@ impl PngImage {
let mut unfiltered = Vec::with_capacity(self.data.len()); let mut unfiltered = Vec::with_capacity(self.data.len());
let bpp = ((self.ihdr.bit_depth.as_u8() * self.channels_per_pixel() + 7) / 8) as usize; let bpp = ((self.ihdr.bit_depth.as_u8() * self.channels_per_pixel() + 7) / 8) as usize;
let mut last_line: Vec<u8> = Vec::new(); let mut last_line: Vec<u8> = Vec::new();
let mut last_pass = 1; let mut last_pass = None;
let mut unfiltered_buf = Vec::new(); let mut unfiltered_buf = Vec::new();
for line in self.scan_lines() { for line in self.scan_lines() {
if let Some(pass) = line.pass { if last_pass != line.pass {
if pass != last_pass { last_line.clear();
last_line.clear(); last_pass = line.pass;
last_pass = pass;
}
} }
last_line.resize(line.data.len(), 0); last_line.resize(line.data.len(), 0);
unfilter_line( unfilter_line(
@ -325,6 +323,9 @@ impl PngImage {
let mut f_buf = Vec::new(); let mut f_buf = Vec::new();
for line in self.scan_lines() { for line in self.scan_lines() {
f_buf.clear(); f_buf.clear();
if last_pass != line.pass {
last_line = &[];
}
match filter { match filter {
0 | 1 | 2 | 3 | 4 => { 0 | 1 | 2 | 3 | 4 => {
let filter = if last_pass == line.pass || filter <= 1 { let filter = if last_pass == line.pass || filter <= 1 {