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 u8 to 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 u16 to store values and use the whole range i.e 0-65535

Data 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) -> u16

Get 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) -> BitType

Return 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 of BitType::SixTeen

Returns

An enum whose variants represent the minimum size for an unsigned integer which can store the image pixels without overflow

Example

use zune_core::bit_depth::{BitDepth, BitType};
assert_eq!(BitDepth::Eight.bit_type(),BitType::U8);

assert_eq!(BitDepth::Sixteen.bit_type(),BitType::U16);

See also size_of

const fn size_of(self) -> usize

Get 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 u8 to store the pixels, and a size_of u8 is 1

For images greater than 8 bits and less than 16 bits(2 bytes), we can use a u16 to store the pixels, a size_of u16 is 2.

use zune_core::bit_depth::BitDepth;
let depth = BitDepth::Sixteen;
// greater 12 bits is greater than 8 and less than 16
assert_eq!(depth.size_of(),2);
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) -> T

Returns the argument unchanged.

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

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

impl<T, U> Into<U> for BitDepth 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 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>