pub struct AutoContrast { /* private fields */ }Expand description
Automatically determines display range by scanning the image.
Must be constructed via AutoContrast::new(), AutoContrast::scan(),
or AutoContrast::scan_with().
This strategy applies sRGB gamma encoding after range mapping:
values at min map to black, values at max map to white.
§Supported pixel types
AutoContrast implements DisplayStrategy for single-channel types:
Mono8, Mono16, Mono32, Mono64, Mono<10>, Mono<12>, Mono<14>,
f32, f64, u8, u16.
For multi-channel types (RGB, etc.), what “auto contrast” means is
ambiguous. Use LinearToDisplay or a custom strategy instead.
§Examples
use fovea::pixel::{Mono16, Srgba8};
use fovea_display::{DisplayStrategy, AutoContrast};
let ac = AutoContrast::new(0.0, 65535.0);
assert_eq!(ac.to_display(&Mono16::new(0)), Srgba8::new(0, 0, 0, 255));
assert_eq!(ac.to_display(&Mono16::new(65535)), Srgba8::new(255, 255, 255, 255));Implementations§
Source§impl AutoContrast
impl AutoContrast
Sourcepub fn new(min: f64, max: f64) -> Self
pub fn new(min: f64, max: f64) -> Self
Create an AutoContrast with an explicit min/max range.
Values at min map to black, values at max map to white.
If min == max, all pixels map to mid-gray.
Sourcepub fn scan<V>(image: &V) -> Self
pub fn scan<V>(image: &V) -> Self
Scan an image to determine the display range.
Iterates all pixels, converting each to f64 via Into<f64>,
and finds the minimum and maximum values.
§Type bounds
Requires V::Pixel: Into<f64>. For pixel types that don’t
implement Into<f64> (e.g. Mono<BITS>), use
AutoContrast::scan_with() instead.
§Panics
Returns a degenerate (mid-gray) range for empty images.
§Examples
use fovea::image::{Image, ImageView};
use fovea::pixel::{MonoF32, Srgba8};
use fovea_display::{DisplayStrategy, AutoContrast};
// pixel role for floats is `MonoF32`, not `f32`.
let img = Image::<MonoF32>::fill(4, 4, MonoF32::new(0.5));
let ac = AutoContrast::scan(&img);
// Constant image → degenerate range → mid-gray
assert_eq!(ac.to_display(&MonoF32::new(0.5)), Srgba8::new(128, 128, 128, 255));Sourcepub fn scan_with<V, F>(image: &V, to_scalar: F) -> Self
pub fn scan_with<V, F>(image: &V, to_scalar: F) -> Self
Scan an image to determine the display range using a custom scalar extraction function.
This is the general-purpose constructor that works with any pixel
type, including Mono<BITS> and other types without Into<f64>.
§Examples
use fovea::image::{Image, ImageView, ImageViewMut};
use fovea::pixel::{Mono16, Srgba8};
use fovea_display::{DisplayStrategy, AutoContrast};
let mut img = Image::<Mono16>::fill(4, 4, Mono16::new(100));
*img.get_mut(0, 0).unwrap() = Mono16::new(50);
*img.get_mut(3, 3).unwrap() = Mono16::new(200);
let ac = AutoContrast::scan_with(&img, |p| p.value() as f64);
assert_eq!(ac.to_display(&Mono16::new(50)), Srgba8::new(0, 0, 0, 255));
assert_eq!(ac.to_display(&Mono16::new(200)), Srgba8::new(255, 255, 255, 255));Trait Implementations§
Source§impl Clone for AutoContrast
impl Clone for AutoContrast
Source§fn clone(&self) -> AutoContrast
fn clone(&self) -> AutoContrast
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 AutoContrast
Source§impl DisplayStrategy<Mono8> for AutoContrast
impl DisplayStrategy<Mono8> for AutoContrast
Source§impl DisplayStrategy<Mono16> for AutoContrast
impl DisplayStrategy<Mono16> for AutoContrast
Source§impl DisplayStrategy<Mono32> for AutoContrast
impl DisplayStrategy<Mono32> for AutoContrast
Source§impl DisplayStrategy<Mono64> for AutoContrast
impl DisplayStrategy<Mono64> for AutoContrast
Source§impl<const BITS: usize> DisplayStrategy<Mono<BITS>> for AutoContrast
impl<const BITS: usize> DisplayStrategy<Mono<BITS>> for AutoContrast
Source§impl DisplayStrategy<MonoF32> for AutoContrast
impl DisplayStrategy<MonoF32> for AutoContrast
Source§impl DisplayStrategy<MonoF64> for AutoContrast
impl DisplayStrategy<MonoF64> for AutoContrast
Source§impl DisplayStrategy<f32> for AutoContrast
impl DisplayStrategy<f32> for AutoContrast
Source§impl DisplayStrategy<f64> for AutoContrast
impl DisplayStrategy<f64> for AutoContrast
Source§impl DisplayStrategy<u8> for AutoContrast
impl DisplayStrategy<u8> for AutoContrast
Source§impl DisplayStrategy<u16> for AutoContrast
impl DisplayStrategy<u16> for AutoContrast
Auto Trait Implementations§
impl Freeze for AutoContrast
impl RefUnwindSafe for AutoContrast
impl Send for AutoContrast
impl Sync for AutoContrast
impl Unpin for AutoContrast
impl UnsafeUnpin for AutoContrast
impl UnwindSafe for AutoContrast
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> ConvertPixelExt for T
impl<T> ConvertPixelExt for T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.