#[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 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more