Enum BitDepth
#[non_exhaustive]
pub enum BitDepth
The image bit depth.
The library successfully supports depths up to
16 bits, as the underlying storage is usually a u16.
This allows us to comfortably support a wide variety of images e.g 10 bit av1, 16 bit png and ppm.
Variants
-
Eight U8 bit depth.
Images with such bit depth use
u8to store pixels and use the whole range from 0-255.It is currently the smallest supported bit depth by the library.
For images with bit depths lower than this, they will be scaled to this bit depth
-
Sixteen U16 bit depth
Images with such bit depths use
u16to store values and use the whole range i.e 0-65535Data is stored and processed in native endian.
-
Float32 Floating point 32 bit data, range is 0.0 to 1.0
Uses f32 to store data
-
Unknown Bit depth information is unknown
Implementations
impl BitDepth
const fn max_value(self) -> u16Get the max value supported by the bit depth
During conversion from one bit depth to another
larger values should be clamped to this bit depth
const fn bit_type(self) -> BitTypeReturn the minimum number of bits that can be used to represent each pixel in the image
All bit depths below 8 return a bit type of
BitType::U8. and all those above 8 and below 16 return a bit type ofBitType::SixTeenReturns
An enum whose variants represent the minimum size for an unsigned integer which can store the image pixels without overflow
Example
use ; assert_eq!; assert_eq!;See also size_of
const fn size_of(self) -> usizeGet the number of bytes needed to store a specific bit depth
Example
For images less than or equal to 8 bits(1 byte), we can use a
u8to store the pixels, and a size_ofu8is 1For images greater than 8 bits and less than 16 bits(2 bytes), we can use a
u16to store the pixels, a size_ofu16is 2.use BitDepth; let depth = Sixteen; // greater 12 bits is greater than 8 and less than 16 assert_eq!;const fn bit_size(&self) -> usize
Trait Implementations
impl Clone for BitDepth
fn clone(&self) -> BitDepth
impl Copy for BitDepth
impl Debug for BitDepth
fn fmt(&self, f: &mut Formatter<'_>) -> Result
impl Default for BitDepth
fn default() -> BitDepth
impl Eq for BitDepth
impl PartialEq for BitDepth
fn eq(&self, other: &BitDepth) -> bool
impl StructuralPartialEq for BitDepth
Auto Trait Implementations
impl Freeze for BitDepth
impl RefUnwindSafe for BitDepth
impl Send for BitDepth
impl Sync for BitDepth
impl Unpin for BitDepth
impl UnsafeUnpin for BitDepth
impl UnwindSafe for BitDepth
Blanket Implementations
impl<T> Any for BitDepth
where
T: 'static + ?Sized,
fn type_id(&self) -> TypeId
impl<T> Borrow<T> for BitDepth
where
T: ?Sized,
fn borrow(&self) -> &T
impl<T> BorrowMut<T> for BitDepth
where
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
impl<T> CloneToUninit for BitDepth
where
T: Clone,
unsafe fn clone_to_uninit(&self, dest: *mut u8)
impl<T> From<T> for BitDepth
fn from(t: T) -> TReturns the argument unchanged.
impl<T> ToOwned for BitDepth
where
T: Clone,
type Owned = T;fn to_owned(&self) -> Tfn clone_into(&self, target: &mut T)
impl<T, U> Into<U> for BitDepth
where
U: From<T>,
fn into(self) -> UCalls
U::from(self).That is, this conversion is whatever the implementation of
[From]<T> for Uchooses to do.
impl<T, U> TryFrom<U> for BitDepth
where
U: Into<T>,
type Error = never;fn try_from(value: U) -> Result<T, never>
impl<T, U> TryInto<U> for BitDepth
where
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error;fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>