#[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
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.gray_expand: GrayExpandHow to expand grayscale to RGB.
alpha_policy: AlphaPolicyHow to handle alpha removal.
depth_policy: DepthPolicyHow 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: boolWhether 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
impl ConvertOptions
Sourcepub const fn forbid_lossy() -> ConvertOptions
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.
Sourcepub const fn permissive() -> ConvertOptions
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)
Sourcepub const fn with_alpha_policy(self, policy: AlphaPolicy) -> ConvertOptions
pub const fn with_alpha_policy(self, policy: AlphaPolicy) -> ConvertOptions
Set the alpha removal policy.
Sourcepub const fn with_depth_policy(self, policy: DepthPolicy) -> ConvertOptions
pub const fn with_depth_policy(self, policy: DepthPolicy) -> ConvertOptions
Set the depth reduction policy.
Sourcepub const fn with_gray_expand(self, expand: GrayExpand) -> ConvertOptions
pub const fn with_gray_expand(self, expand: GrayExpand) -> ConvertOptions
Set the grayscale expansion method.
Sourcepub const fn with_clip_out_of_gamut(self, clip: bool) -> ConvertOptions
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.
Sourcepub const fn with_luma(self, luma: Option<LumaCoefficients>) -> ConvertOptions
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
impl Clone for ConvertOptions
Source§fn clone(&self) -> ConvertOptions
fn clone(&self) -> ConvertOptions
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for ConvertOptions
Source§impl Debug for ConvertOptions
impl Debug for ConvertOptions
impl Eq for ConvertOptions
Source§impl Hash for ConvertOptions
impl Hash for ConvertOptions
Source§impl PartialEq for ConvertOptions
impl PartialEq for ConvertOptions
Source§fn eq(&self, other: &ConvertOptions) -> bool
fn eq(&self, other: &ConvertOptions) -> bool
self and other values to be equal, and is used by ==.