Trait ImageDecoder
trait ImageDecoder
The trait that all decoders implement
Required Methods
fn dimensions(self: &Self) -> (u32, u32)Returns a tuple containing the width and height of the image
fn color_type(self: &Self) -> ColorTypeReturns the color type of the image data produced by this decoder
fn read_image(self: Self, buf: &mut [u8]) -> ImageResult<()> where Self: SizedReturns all the bytes in the image.
This function takes a slice of bytes and writes the pixel data of the image into it. Although not required, for certain color types callers may want to pass buffers which are aligned to 2 or 4 byte boundaries to the slice can be cast to a [u16] or [u32]. To accommodate such casts, the returned contents will always be in native endian.
Panics
This function panics if
buf.len() != self.total_bytes().Examples
use zerocopy::{AsBytes, FromBytes}; fn read_16bit_image(decoder: impl ImageDecoder) -> Vec<16> { let mut buf: Vec<u16> = vec![0; decoder.total_bytes()/2]; decoder.read_image(buf.as_bytes()); buf }fn read_image_boxed(self: Box<Self>, buf: &mut [u8]) -> ImageResult<()>Use
read_imageinstead; this method is an implementation detail needed so the trait can be object safe.Note to implementors: This method should be implemented by calling
read_imageon the boxed decoder...fn read_image_boxed(self: Box<Self>, buf: &mut [u8]) -> ImageResult<()> { (*self).read_image(buf) }
Provided Methods
fn original_color_type(self: &Self) -> ExtendedColorTypeReturns the color type of the image file before decoding
fn icc_profile(self: &mut Self) -> ImageResult<Option<Vec<u8>>>Returns the ICC color profile embedded in the image, or
Ok(None)if the image does not have one.For formats that don't support embedded profiles this function should always return
Ok(None).fn exif_metadata(self: &mut Self) -> ImageResult<Option<Vec<u8>>>Returns the raw Exif chunk, if it is present. A third-party crate such as
kamadak-exifis required to actually parse it.For formats that don't support embedded profiles this function should always return
Ok(None).fn orientation(self: &mut Self) -> ImageResult<Orientation>Returns the orientation of the image.
This is usually obtained from the Exif metadata, if present. Formats that don't support indicating orientation in their image metadata will return
Ok(Orientation::NoTransforms).fn total_bytes(self: &Self) -> u64Returns the total number of bytes in the decoded image.
This is the size of the buffer that must be passed to
read_imageorread_image_with_progress. The returned value may exceedusize::MAX, in which case it isn't actually possible to construct a buffer to decode all the image data into. If, however, the size does not fit in a u64 thenu64::MAXis returned.fn set_limits(self: &mut Self, limits: Limits) -> ImageResult<()>Set the decoder to have the specified limits. See
Limitsfor the different kinds of limits that is possible to set.Note to implementors: make sure you call
Limits::check_supportso that decoding fails if any unsupported strict limits are set. Also make sure you callLimits::check_dimensionsto check themax_image_widthandmax_image_heightlimits.
Implementors
impl<R: BufRead + Seek> ImageDecoder for BmpDecoder<R>impl<R: BufRead + Seek> ImageDecoder for GifDecoder<R>impl<R: Read> ImageDecoder for FarbfeldDecoder<R>impl<R: BufRead + Seek> ImageDecoder for IcoDecoder<R>impl<R: BufRead + Seek> ImageDecoder for TiffDecoder<R>impl<R: Read> ImageDecoder for HdrDecoder<R>impl<R: BufRead + Seek> ImageDecoder for PngDecoder<R>impl<R: Read> ImageDecoder for TgaDecoder<R>impl<R: Read> ImageDecoder for DdsDecoder<R>impl<T: ?Sized + ImageDecoder> ImageDecoder for Box<T>impl<R: Read> ImageDecoder for QoiDecoder<R>impl<R: Read> ImageDecoder for PnmDecoder<R>impl<R: BufRead + Seek> ImageDecoder for WebPDecoder<R>impl<R: BufRead + Seek> ImageDecoder for JpegDecoder<R>impl<R: BufRead + Seek> ImageDecoder for OpenExrDecoder<R>