palette::convert

Trait IntoColorMut

source
pub trait IntoColorMut<T>: FromColorMut<T>
where T: ?Sized + FromColorMut<Self>,
{ // Required method fn into_color_mut(&mut self) -> FromColorMutGuard<'_, T, Self>; }
Expand description

Temporarily convert colors in place. The Into counterpart to FromColorMut.

See FromColorMut for more details and examples.

use palette::{IntoColorMut, ShiftHueAssign, Srgb, Hsv};

let mut rgb = [
    Srgb::new(1.0, 0.0, 0.0),
    Srgb::new(0.0, 1.0, 0.0),
    Srgb::new(0.0, 0.0, 1.0),
];

{
    let hsv: &mut [Hsv] = &mut rgb.into_color_mut(); // The guard is coerced into a slice.

    // All of the colors in `rgb` have been converted to `Hsv`:
    assert_eq!(
        hsv,
        [
            Hsv::new(0.0, 1.0, 1.0),
            Hsv::new(120.0, 1.0, 1.0),
            Hsv::new(240.0, 1.0, 1.0),
        ]
    );

    hsv.shift_hue_assign(60.0);

} // The guard is dropped here and the colors are restored to `Srgb`.

// Notice how the colors in `rgb` have changed:
assert_eq!(
    rgb,
    [
        Srgb::new(1.0, 1.0, 0.0),
        Srgb::new(0.0, 1.0, 1.0),
        Srgb::new(1.0, 0.0, 1.0),
    ]
);

Required Methods§

source

fn into_color_mut(&mut self) -> FromColorMutGuard<'_, T, Self>

Temporarily convert to another color type in place.

This reuses the memory space, and the returned scope guard will restore the converted colors to their original type when it’s dropped.

Object Safety§

This trait is not object safe.

Implementors§

source§

impl<T, U> IntoColorMut<T> for U
where T: FromColorMut<U> + ?Sized, U: FromColorMut<T> + ?Sized,