Skip to main content

Samples

Enum Samples 

Source
#[non_exhaustive]
pub enum Samples { Packed(Packed), Whole(Pixels), }
Expand description

An image’s samples, in whichever state the decode ladder left them.

The two states are genuinely different things, not one thing with a flag. Samples::Packed is what every path that does not run a codec of its own produces: the filter chain’s bytes, still at the dictionary’s /BitsPerComponent, which the row pipeline widens as it walks (Unpacked). Samples::Whole is what a codec produced — DCT, JPEG 2000 and JBIG2 all hand back eight-bit samples — together with the two arms that cannot be lazy at all: a stencil’s bits, and the palettes an indexed or tint image resolves once.

Nothing widens a packed image until someone asks for whole-image Pixels, which is Samples::to_pixels and nowhere else.

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

Packed(Packed)

Still packed, walked by Unpacked.

§

Whole(Pixels)

Already one byte per component, or a shape that has no packed form.

Implementations§

Source§

impl Samples

Source

pub fn components(&self) -> usize

How many components each pixel carries.

Source

pub fn byte_size(&self) -> usize

Bytes held, for the render cache’s budget.

Honest about what is actually held: a packed image is its packed bytes and its decode table, which is what the cache is keeping alive, and is smaller than the widened form it never builds.

Source

pub const fn is_stencil(&self) -> bool

Whether these samples are a stencil mask’s bits.

A stencil never has a packed form — its bits are its representation — so this is a question about the Whole arm alone.

Source

pub fn palette(&self) -> Option<&[Rgb]>

The resolved palette, when these samples are indices into one.

Only Pixels::Indexed has one; every other representation carries its colours in the samples themselves.

Source

pub fn to_pixels(&self) -> Pixels

The whole image as Pixels, widening a packed one if it has to.

The one place the full-size buffer the row pipeline exists to avoid is built. Three callers want it and no more: the CLI’s image export, the facade’s edit path, and a test that names the representation.

Trait Implementations§

Source§

impl Clone for Samples

Source§

fn clone(&self) -> Samples

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Samples

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for Samples

Source§

fn eq(&self, other: &Samples) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for Samples

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, S> SimdFrom<T, S> for T
where S: Simd,

Source§

fn simd_from(_simd: S, value: T) -> T

Source§

impl<F, T, S> SimdInto<T, S> for F
where T: SimdFrom<F, S>, S: Simd,

Source§

fn simd_into(self, simd: S) -> T

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.