Struct Transformations

pub struct Transformations(/* private field */);

Output transformations

Many flags from libpng are not yet supported. A PR discussing/adding them would be nice.

/// Discard the alpha channel
const STRIP_ALPHA         = 0x0002; // read only
/// Expand 1; 2 and 4-bit samples to bytes
const PACKING             = 0x0004; // read and write
/// Change order of packed pixels to LSB first
const PACKSWAP            = 0x0008; // read and write
/// Invert monochrome images
const INVERT_MONO         = 0x0020; // read and write
/// Normalize pixels to the sBIT depth
const SHIFT               = 0x0040; // read and write
/// Flip RGB to BGR; RGBA to BGRA
const BGR                 = 0x0080; // read and write
/// Flip RGBA to ARGB or GA to AG
const SWAP_ALPHA          = 0x0100; // read and write
/// Byte-swap 16-bit samples
const SWAP_ENDIAN         = 0x0200; // read and write
/// Change alpha from opacity to transparency
const INVERT_ALPHA        = 0x0400; // read and write
const STRIP_FILLER        = 0x0800; // write only
const STRIP_FILLER_BEFORE = 0x0800; // write only
const STRIP_FILLER_AFTER  = 0x1000; // write only
const GRAY_TO_RGB         = 0x2000; // read only
const EXPAND_16           = 0x4000; // read only
/// Similar to STRIP_16 but in libpng considering gamma?
/// Not entirely sure the documentation says it is more
/// accurate but doesn't say precisely how.
const SCALE_16            = 0x8000; // read only

Implementations

impl Transformations

fn normalize_to_color8() -> Transformations

Transform every input to 8bit grayscale or color.

This sets EXPAND and STRIP_16 which is similar to the default transformation used by this library prior to 0.17.

impl Transformations

const IDENTITY: Self = _;

No transformation

const STRIP_16: Self = _;

Strip 16-bit samples to 8 bits

const EXPAND: Self = _;

Expand paletted images to RGB; expand grayscale images of less than 8-bit depth to 8-bit depth; and expand tRNS chunks to alpha channels.

const ALPHA: Self = _;

Expand paletted images to include an alpha channel. Implies EXPAND.

impl Transformations

const fn iter(&self) -> Iter<Transformations>

Yield a set of contained flags values.

Each yielded flags value will correspond to a defined named flag. Any unknown bits will be yielded together as a final flags value.

const fn iter_names(&self) -> IterNames<Transformations>

Yield a set of contained named flags values.

This method is like iter, except only yields bits in contained named flags. Any unknown bits, or bits not corresponding to a contained flag will not be yielded.

impl Transformations

const fn empty() -> Self

Get a flags value with all bits unset.

const fn all() -> Self

Get a flags value with all known bits set.

const fn bits(&self) -> u32

Get the underlying bits value.

The returned value is exactly the bits set in this flags value.

const fn from_bits(bits: u32) -> Option<Self>

Convert from a bits value.

This method will return None if any unknown bits are set.

const fn from_bits_truncate(bits: u32) -> Self

Convert from a bits value, unsetting any unknown bits.

const fn from_bits_retain(bits: u32) -> Self

Convert from a bits value exactly.

fn from_name(name: &str) -> Option<Self>

Get a flags value with the bits of a flag with the given name set.

This method will return None if name is empty or doesn't correspond to any named flag.

const fn is_empty(&self) -> bool

Whether all bits in self are unset.

const fn is_all(&self) -> bool

Whether all known bits in this flags value are set.

const fn intersects(&self, other: Self) -> bool

Whether any set bits in other are also set in self.

const fn contains(&self, other: Self) -> bool

Whether all set bits in other are also set in self.

fn insert(&mut self, other: Self)

The bitwise or (|) of the bits in self and other.

fn remove(&mut self, other: Self)

The intersection of self with the complement of other (&!).

This method is not equivalent to self & !other when other has unknown bits set. remove won't truncate other, but the ! operator will.

fn toggle(&mut self, other: Self)

The bitwise exclusive-or (^) of the bits in self and other.

fn set(&mut self, other: Self, value: bool)

Call insert when value is true or remove when value is false.

const fn intersection(self, other: Self) -> Self

The bitwise and (&) of the bits in self and other.

const fn union(self, other: Self) -> Self

The bitwise or (|) of the bits in self and other.

const fn difference(self, other: Self) -> Self

The intersection of self with the complement of other (&!).

This method is not equivalent to self & !other when other has unknown bits set. difference won't truncate other, but the ! operator will.

const fn symmetric_difference(self, other: Self) -> Self

The bitwise exclusive-or (^) of the bits in self and other.

const fn complement(self) -> Self

The bitwise negation (!) of the bits in self, truncating the result.

Trait Implementations

impl Binary for Transformations

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

impl BitAnd for Transformations

type Output = Transformations;
fn bitand(self, other: Self) -> Self

The bitwise and (&) of the bits in self and other.

impl BitAndAssign for Transformations

fn bitand_assign(&mut self, other: Self)

The bitwise and (&) of the bits in self and other.

impl BitOr for Transformations

type Output = Transformations;
fn bitor(self, other: Transformations) -> Self

The bitwise or (|) of the bits in self and other.

impl BitOrAssign for Transformations

fn bitor_assign(&mut self, other: Self)

The bitwise or (|) of the bits in self and other.

impl BitXor for Transformations

type Output = Transformations;
fn bitxor(self, other: Self) -> Self

The bitwise exclusive-or (^) of the bits in self and other.

impl BitXorAssign for Transformations

fn bitxor_assign(&mut self, other: Self)

The bitwise exclusive-or (^) of the bits in self and other.

impl Clone for Transformations

fn clone(&self) -> Self

impl Copy for Transformations

impl Debug for Transformations

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

impl Default for Transformations

fn default() -> Transformations

impl Eq for Transformations

impl Extend<Transformations> for Transformations

fn extend<T: IntoIterator<Item = Self>>(&mut self, iterator: T)

The bitwise or (|) of the bits in each flags value.

impl Flags for Transformations

const FLAGS: &'static [Flag<Transformations>] = _;
type Bits = u32;
fn bits(&self) -> u32
fn from_bits_retain(bits: u32) -> Transformations
fn all_named() -> Transformations

impl FromIterator<Transformations> for Transformations

fn from_iter<T: IntoIterator<Item = Self>>(iterator: T) -> Self

The bitwise or (|) of the bits in each flags value.

impl Hash for Transformations

fn hash<__H: Hasher>(&self, state: &mut __H)

impl IntoIterator for Transformations

type Item = Transformations;
type IntoIter = Iter<Transformations>;
fn into_iter(self) -> Self::IntoIter

impl LowerHex for Transformations

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

impl Not for Transformations

type Output = Transformations;
fn not(self) -> Self

The bitwise negation (!) of the bits in self, truncating the result.

impl Octal for Transformations

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

impl Ord for Transformations

fn cmp(&self, other: &Self) -> Ordering

impl PartialEq for Transformations

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

impl PartialOrd for Transformations

fn partial_cmp(&self, other: &Self) -> Option<Ordering>

impl PublicFlags for Transformations

type Primitive = u32;
type Internal = InternalBitFlags;

impl StructuralPartialEq for Transformations

impl Sub for Transformations

type Output = Transformations;
fn sub(self, other: Self) -> Self

The intersection of self with the complement of other (&!).

This method is not equivalent to self & !other when other has unknown bits set. difference won't truncate other, but the ! operator will.

impl SubAssign for Transformations

fn sub_assign(&mut self, other: Self)

The intersection of self with the complement of other (&!).

This method is not equivalent to self & !other when other has unknown bits set. difference won't truncate other, but the ! operator will.

impl UpperHex for Transformations

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

Auto Trait Implementations

impl Freeze for Transformations

impl RefUnwindSafe for Transformations

impl Send for Transformations

impl Sync for Transformations

impl Unpin for Transformations

impl UnsafeUnpin for Transformations

impl UnwindSafe for Transformations

Blanket Implementations

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

fn type_id(&self) -> TypeId

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

fn borrow(&self) -> &T

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

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

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

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

impl<T> From<T> for Transformations

fn from(t: T) -> T

Returns the argument unchanged.

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

type Owned = T;
fn to_owned(&self) -> T
fn clone_into(&self, target: &mut T)

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

fn into(self) -> U

Calls U::from(self).

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

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

type Error = never;
fn try_from(value: U) -> Result<T, never>

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

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