Skip to main content

ConvertOptions

Struct ConvertOptions 

Source
#[non_exhaustive]
pub struct ConvertOptions { pub gray_expand: GrayExpand, pub alpha_policy: AlphaPolicy, pub depth_policy: DepthPolicy, pub luma: Option<LumaCoefficients>, pub clip_out_of_gamut: bool, }
Expand description

Explicit options for pixel format conversion. All lossy operations require a policy choice — no silent defaults.

Construct via struct literal for full control, or use the convenience constructors and with_* builders for common patterns:

use zenpixels::{ConvertOptions, AlphaPolicy, DepthPolicy};

// Forbid all lossy operations (safe default)
let strict = ConvertOptions::forbid_lossy();

// Allow common lossy operations with sensible defaults
let permissive = ConvertOptions::permissive();

// Customize from a preset
let custom = ConvertOptions::permissive()
    .with_alpha_policy(AlphaPolicy::CompositeOnto { r: 255, g: 255, b: 255 })
    .with_depth_policy(DepthPolicy::Truncate);

Fields (Non-exhaustive)§

This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.
§gray_expand: GrayExpand

How to expand grayscale to RGB.

§alpha_policy: AlphaPolicy

How to handle alpha removal.

§depth_policy: DepthPolicy

How to handle depth reduction.

§luma: Option<LumaCoefficients>

Luma coefficients for RGB→Gray conversion. None means RGB→Gray is forbidden (returns ConvertError::RgbToGray).

§clip_out_of_gamut: bool

Whether to clamp out-of-gamut values to [0, 1] during f32 transfer function conversions.

  • true (default): clamp sRGB/BT.709/PQ/HLG transfers to [0, 1]. Matches display expectations; safe for standard workflows.
  • false: use sign-preserving extended-range transfer functions. Preserves out-of-gamut (negative, > 1.0) values through the f32 pipeline for HDR and wide-gamut workflows where tone mapping or gamut mapping happens later in the pipeline.

Only affects f32 intermediate conversions. u8/u16 outputs always clip since those formats can’t represent out-of-gamut values.

Implementations§

Source§

impl ConvertOptions

Source

pub const fn forbid_lossy() -> ConvertOptions

Forbid all lossy operations.

  • Alpha removal: forbidden (returns error)
  • Depth reduction: forbidden (returns error)
  • RGB→Gray: forbidden (returns error)
  • Gray→RGB: broadcast (lossless)

Use this as a starting point when you want to ensure no data loss, then selectively relax with with_* methods.

Source

pub const fn permissive() -> ConvertOptions

Allow common lossy operations with sensible defaults.

  • Alpha removal: discard only if all pixels are opaque
  • Depth reduction: round to nearest
  • RGB→Gray: BT.709 luma coefficients
  • Gray→RGB: broadcast (lossless)
Source

pub const fn with_alpha_policy(self, policy: AlphaPolicy) -> ConvertOptions

Set the alpha removal policy.

Source

pub const fn with_depth_policy(self, policy: DepthPolicy) -> ConvertOptions

Set the depth reduction policy.

Source

pub const fn with_gray_expand(self, expand: GrayExpand) -> ConvertOptions

Set the grayscale expansion method.

Source

pub const fn with_clip_out_of_gamut(self, clip: bool) -> ConvertOptions

Set whether f32 transfer conversions clamp to [0, 1] (true, default) or preserve extended-range values via sign-preserving transfers (false). u8/u16 outputs always clip.

Source

pub const fn with_luma(self, luma: Option<LumaCoefficients>) -> ConvertOptions

Set the luma coefficients for RGB→Gray conversion.

Pass None to forbid RGB→Gray conversion.

Trait Implementations§

Source§

impl Clone for ConvertOptions

Source§

fn clone(&self) -> ConvertOptions

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 Copy for ConvertOptions

Source§

impl Debug for ConvertOptions

Source§

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

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

impl Eq for ConvertOptions

Source§

impl Hash for ConvertOptions

Source§

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

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 PartialEq for ConvertOptions

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

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

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for ConvertOptions

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

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.