25% speed improvement in filter mode 2 by using iter instead of for
This commit is contained in:
parent
c0fddfe4e6
commit
32c35596ea
3 changed files with 12 additions and 7 deletions
|
|
@ -1,5 +1,6 @@
|
|||
**Version 0.6.1 (unreleased)**
|
||||
- Minor compression improvement on interlaced images
|
||||
- Performance optimizations
|
||||
|
||||
**Version 0.6.0**
|
||||
- Fix issue where output directory would not be created if it did not exist
|
||||
|
|
|
|||
|
|
@ -21,6 +21,9 @@ name = "oxipng"
|
|||
path = "src/main.rs"
|
||||
doc = false
|
||||
|
||||
[profile.release]
|
||||
debug = true
|
||||
|
||||
[dependencies]
|
||||
bit-vec = "^0.4.2"
|
||||
byteorder = "^0.5.0"
|
||||
|
|
|
|||
15
src/png.rs
15
src/png.rs
|
|
@ -1081,13 +1081,14 @@ fn filter_line(filter: u8, bpp: usize, data: &[u8], last_line: &[u8]) -> Vec<u8>
|
|||
}
|
||||
}
|
||||
2 => {
|
||||
for (i, byte) in data.iter().enumerate() {
|
||||
if last_line.is_empty() {
|
||||
filtered.push(*byte);
|
||||
} else {
|
||||
filtered.push(byte.wrapping_sub(last_line[i]));
|
||||
};
|
||||
}
|
||||
if last_line.is_empty() {
|
||||
filtered.extend_from_slice(data);
|
||||
} else {
|
||||
filtered.extend_from_slice(&data.iter()
|
||||
.zip(last_line.iter())
|
||||
.map(|(cur, last)| cur.wrapping_sub(*last))
|
||||
.collect::<Vec<u8>>());
|
||||
};
|
||||
}
|
||||
3 => {
|
||||
for (i, byte) in data.iter().enumerate() {
|
||||
|
|
|
|||
Loading…
Reference in a new issue