pub struct Reader<R: BufRead + Seek> { /* private fields */ }
Expand description
PNG reader (mostly high-level interface)
Provides a high level that iterates over lines or whole images.
Implementations§
Source§impl<R: BufRead + Seek> Reader<R>
impl<R: BufRead + Seek> Reader<R>
Sourcepub fn next_frame_info(&mut self) -> Result<&FrameControl, DecodingError>
pub fn next_frame_info(&mut self) -> Result<&FrameControl, DecodingError>
Advances to the start of the next animation frame and
returns a reference to the FrameControl
info that describes it.
Skips and discards the image data of the previous frame if necessary.
Returns a [ParameterError
] when there are no more animation frames.
To avoid this the caller can check if Info::animation_control
exists
and consult [AnimationControl::num_frames
].
Sourcepub fn info(&self) -> &Info<'static>
pub fn info(&self) -> &Info<'static>
Get information on the image.
The structure will change as new frames of an animated image are decoded.
Sourcepub fn next_frame(
&mut self,
buf: &mut [u8],
) -> Result<OutputInfo, DecodingError>
pub fn next_frame( &mut self, buf: &mut [u8], ) -> Result<OutputInfo, DecodingError>
Decodes the next frame into buf
.
Note that this decodes raw subframes that need to be mixed according to blend-op and dispose-op by the caller.
The caller must always provide a buffer large enough to hold a complete frame (the APNG
specification restricts subframes to the dimensions given in the image header). The region
that has been written be checked afterwards by calling info
after a successful call and
inspecting the frame_control
data. This requirement may be lifted in a later version of
png
.
Output lines will be written in row-major, packed matrix with width and height of the read frame (or subframe), all samples are in big endian byte order where this matters.
Sourcepub fn next_row(&mut self) -> Result<Option<Row<'_>>, DecodingError>
pub fn next_row(&mut self) -> Result<Option<Row<'_>>, DecodingError>
Returns the next processed row of the image (discarding InterlaceInfo
).
See also [Reader.read_row
], which reads into a caller-provided buffer.
Sourcepub fn next_interlaced_row(
&mut self,
) -> Result<Option<InterlacedRow<'_>>, DecodingError>
pub fn next_interlaced_row( &mut self, ) -> Result<Option<InterlacedRow<'_>>, DecodingError>
Returns the next processed row of the image.
See also [Reader.read_row
], which reads into a caller-provided buffer.
Sourcepub fn read_row(
&mut self,
output_buffer: &mut [u8],
) -> Result<Option<InterlaceInfo>, DecodingError>
pub fn read_row( &mut self, output_buffer: &mut [u8], ) -> Result<Option<InterlaceInfo>, DecodingError>
Reads the next row of the image into the provided output_buffer
.
Ok(None)
will be returned if the current image frame has no more rows.
output_buffer
needs to be long enough to accommodate [Reader.output_line_size
] for
[Info.width
] (initial interlaced rows may need less than that).
See also [Reader.next_row
] and [Reader.next_interlaced_row
], which read into a
Reader
-owned buffer.
Sourcepub fn finish(&mut self) -> Result<(), DecodingError>
pub fn finish(&mut self) -> Result<(), DecodingError>
Read the rest of the image and chunks and finish up, including text chunks or others
This will discard the rest of the image if the image is not read already with Reader::next_frame
, Reader::next_row
or Reader::next_interlaced_row
Sourcepub fn output_color_type(&self) -> (ColorType, BitDepth)
pub fn output_color_type(&self) -> (ColorType, BitDepth)
Returns the color type and the number of bits per sample
of the data returned by Reader::next_row
and Reader::frames`.
Sourcepub fn output_buffer_size(&self) -> Option<usize>
pub fn output_buffer_size(&self) -> Option<usize>
Return the number of bytes required to hold a deinterlaced image frame that is decoded using the given input transformations.
Returns None
if the output buffer does not fit into the memory space of the machine,
otherwise returns the byte length in Some
. The length is smaller than isize::MAX
.
Sourcepub fn output_line_size(&self, width: u32) -> Option<usize>
pub fn output_line_size(&self, width: u32) -> Option<usize>
Returns the number of bytes required to hold a deinterlaced row.
Returns None
if the output buffer does not fit into the memory space of the machine,
otherwise returns the byte length in Some
. The length is smaller than isize::MAX
.