Keep track of number of pixels in each scanline
This commit is contained in:
parent
86fccf082a
commit
f109752ec1
1 changed files with 11 additions and 4 deletions
|
|
@ -25,7 +25,7 @@ impl<'a> Iterator for ScanLines<'a> {
|
||||||
type Item = ScanLine<'a>;
|
type Item = ScanLine<'a>;
|
||||||
#[inline]
|
#[inline]
|
||||||
fn next(&mut self) -> Option<Self::Item> {
|
fn next(&mut self) -> Option<Self::Item> {
|
||||||
self.iter.next().map(|(len, pass)| {
|
self.iter.next().map(|(len, pass, num_pixels)| {
|
||||||
let (data, rest) = self.raw_data.split_at(len);
|
let (data, rest) = self.raw_data.split_at(len);
|
||||||
self.raw_data = rest;
|
self.raw_data = rest;
|
||||||
let (&filter, data) = if self.has_filter {
|
let (&filter, data) = if self.has_filter {
|
||||||
|
|
@ -33,7 +33,12 @@ impl<'a> Iterator for ScanLines<'a> {
|
||||||
} else {
|
} else {
|
||||||
(&0, data)
|
(&0, data)
|
||||||
};
|
};
|
||||||
ScanLine { filter, data, pass }
|
ScanLine {
|
||||||
|
filter,
|
||||||
|
data,
|
||||||
|
pass,
|
||||||
|
num_pixels,
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -68,7 +73,7 @@ impl ScanLineRanges {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Iterator for ScanLineRanges {
|
impl Iterator for ScanLineRanges {
|
||||||
type Item = (usize, Option<u8>);
|
type Item = (usize, Option<u8>, usize);
|
||||||
fn next(&mut self) -> Option<Self::Item> {
|
fn next(&mut self) -> Option<Self::Item> {
|
||||||
if self.left == 0 {
|
if self.left == 0 {
|
||||||
return None;
|
return None;
|
||||||
|
|
@ -149,7 +154,7 @@ impl Iterator for ScanLineRanges {
|
||||||
len += 1;
|
len += 1;
|
||||||
}
|
}
|
||||||
self.left = self.left.checked_sub(len)?;
|
self.left = self.left.checked_sub(len)?;
|
||||||
Some((len, current_pass))
|
Some((len, current_pass, pixels_per_line as usize))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -162,4 +167,6 @@ pub struct ScanLine<'a> {
|
||||||
pub data: &'a [u8],
|
pub data: &'a [u8],
|
||||||
/// The current pass if the image is interlaced
|
/// The current pass if the image is interlaced
|
||||||
pub pass: Option<u8>,
|
pub pass: Option<u8>,
|
||||||
|
/// The number of pixels in the current scan line
|
||||||
|
pub num_pixels: usize,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue