Enum turbojpeg::Subsamp

source ·
#[non_exhaustive]
#[repr(i32)]
pub enum Subsamp { None = 0, Sub2x1 = 1, Sub2x2 = 2, Gray = 3, Sub1x2 = 4, Sub4x1 = 5, Sub1x4 = 6, }
Expand description

Chrominance subsampling options.

When pixels are converted from RGB to YCbCr or from CMYK to YCCK as part of the JPEG compression process, some of the Cb and Cr (chrominance) components can be discarded or averaged together to produce a smaller image with little perceptible loss of image clarity (the human eye is more sensitive to small changes in brightness than to small changes in color). This is called “chrominance subsampling”.

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.
§

None = 0

No chrominance subsampling (4:4:4);

The JPEG or YUV image will contain one chrominance component for every pixel in the source image.

§

Sub2x1 = 1

2x1 chrominance subsampling (4:2:2).

The JPEG or YUV image will contain one chrominance component for every 2x1 block of pixels in the source image.

§

Sub2x2 = 2

2x2 chrominance subsampling (4:2:0).

The JPEG or YUV image will contain one chrominance component for every 2x2 block of pixels in the source image.

§

Gray = 3

Grayscale.

The JPEG or YUV image will contain no chrominance components.

§

Sub1x2 = 4

1x2 chrominance subsampling (4:4:0).

The JPEG or YUV image will contain one chrominance component for every 1x2 block of pixels in the source image.

§Note

4:4:0 subsampling is not fully accelerated in libjpeg-turbo.

§

Sub4x1 = 5

4x1 chrominance subsampling (4:1:1).

The JPEG or YUV image will contain one chrominance component for every 4x1 block of pixels in the source image. JPEG images compressed with 4:1:1 subsampling will be almost exactly the same size as those compressed with 4:2:0 subsampling, and in the aggregate, both subsampling methods produce approximately the same perceptual quality. However, 4:1:1 is better able to reproduce sharp horizontal features.

§Note

4:1:1 subsampling is not fully accelerated in libjpeg-turbo.

§

Sub1x4 = 6

1x4 chrominance subsampling (4:4:1).

The JPEG or YUV image will contain one chrominance component for every 1x4 block of pixels in the source image. JPEG images compressed with 4:4:1 subsampling will be almost exactly the same size as those compressed with 4:2:0 subsampling, and in the aggregate, both subsampling methods produce approximately the same perceptual quality. However, 4:4:1 is better able to reproduce sharp vertical features.

§Note

4:4:1 subsampling is not fully accelerated in libjpeg-turbo.

Implementations§

source§

impl Subsamp

source

pub fn mcu_width(self) -> usize

Get the width of the MCU block for this level of chrominance subsampling.

This is equal to 8 * self.width().

§Example
assert_eq!(turbojpeg::Subsamp::Sub2x1.mcu_width(), 16);
source

pub fn mcu_height(self) -> usize

Get the height of the MCU block for this level of chrominance subsampling.

This is equal to 8 * self.height().

§Example
assert_eq!(turbojpeg::Subsamp::Sub2x1.mcu_height(), 8);
source

pub fn mcu_size(self) -> (usize, usize)

Get the size of the MCU block for this level of chrominance subsampling as (width, height).

§Example
assert_eq!(turbojpeg::Subsamp::Sub2x1.mcu_size(), (16, 8));
source

pub fn width(self) -> usize

Get the horizontal subsampling factor.

§Example
assert_eq!(turbojpeg::Subsamp::Sub2x1.width(), 2);
source

pub fn height(self) -> usize

Get the vertical subsampling factor.

§Example
assert_eq!(turbojpeg::Subsamp::Sub2x1.height(), 1);
source

pub fn size(self) -> (usize, usize)

Get the horizontal and vertical subsampling factors.

§Example
assert_eq!(turbojpeg::Subsamp::Sub2x1.size(), (2, 1));

Trait Implementations§

source§

impl Clone for Subsamp

source§

fn clone(&self) -> Subsamp

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for Subsamp

source§

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

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

impl Hash for Subsamp

source§

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

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for Subsamp

source§

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

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for Subsamp

source§

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

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

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

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Subsamp

source§

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

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

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

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

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

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

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

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

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

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more
source§

impl Copy for Subsamp

source§

impl Eq for Subsamp

source§

impl StructuralPartialEq for Subsamp

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> 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> ToOwned for T
where T: Clone,

§

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>,

§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

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

§

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.