[−][src]Struct palette::blend::PreAlpha
Premultiplied alpha wrapper.
Premultiplied colors are commonly used in composition algorithms to simplify the calculations. It may also be preferred when interpolating between colors, which is one of the reasons why it's offered as a separate type. The other reason is to make it easier to avoid unnecessary computations in composition chains.
use palette::{Blend, LinSrgb, LinSrgba}; use palette::blend::PreAlpha; let a = PreAlpha::from(LinSrgba::new(0.4, 0.5, 0.5, 0.3)); let b = PreAlpha::from(LinSrgba::new(0.3, 0.8, 0.4, 0.4)); let c = PreAlpha::from(LinSrgba::new(0.7, 0.1, 0.8, 0.8)); let res = LinSrgb::from_premultiplied(a.screen(b).overlay(c));
Note that converting to and from premultiplied alpha will cause the alpha component to be clamped to [0.0, 1.0].
Fields
color: C
The premultiplied color components (original.color * original.alpha
).
alpha: T
The transparency component. 0.0 is fully transparent and 1.0 is fully opaque.
Trait Implementations
impl<C, T> Blend for PreAlpha<C, T> where
C: Blend<Color = C> + ComponentWise<Scalar = T>,
T: Float,
[src]
C: Blend<Color = C> + ComponentWise<Scalar = T>,
T: Float,
type Color = C
The core color type. Typically Self
for color types without alpha.
fn into_premultiplied(self) -> PreAlpha<C, T>
[src]
fn from_premultiplied(color: PreAlpha<C, T>) -> PreAlpha<C, T>
[src]
fn blend<F>(self, destination: Self, blend_function: F) -> Self where
F: BlendFunction<Self::Color>,
[src]
F: BlendFunction<Self::Color>,
fn over(self, other: Self) -> Self
[src]
fn inside(self, other: Self) -> Self
[src]
fn outside(self, other: Self) -> Self
[src]
fn atop(self, other: Self) -> Self
[src]
fn xor(self, other: Self) -> Self
[src]
fn plus(self, other: Self) -> Self
[src]
fn multiply(self, other: Self) -> Self
[src]
fn screen(self, other: Self) -> Self
[src]
fn overlay(self, other: Self) -> Self
[src]
fn darken(self, other: Self) -> Self
[src]
fn lighten(self, other: Self) -> Self
[src]
fn dodge(self, other: Self) -> Self
[src]
fn burn(self, other: Self) -> Self
[src]
fn hard_light(self, other: Self) -> Self
[src]
fn soft_light(self, other: Self) -> Self
[src]
fn difference(self, other: Self) -> Self
[src]
fn exclusion(self, other: Self) -> Self
[src]
impl<T: Float, C: Pixel<T>> Pixel<T> for PreAlpha<C, T>
[src]
const CHANNELS: usize
[src]
fn as_raw<P: RawPixel<T> + ?Sized>(&self) -> &P
[src]
fn as_raw_mut<P: RawPixel<T> + ?Sized>(&mut self) -> &mut P
[src]
fn into_raw<P: RawPixelSized<T>>(self) -> P
[src]
fn from_raw<P: RawPixel<T> + ?Sized>(pixel: &P) -> &Self
[src]
fn from_raw_mut<P: RawPixel<T> + ?Sized>(pixel: &mut P) -> &mut Self
[src]
fn from_raw_slice(slice: &[T]) -> &[Self]
[src]
fn from_raw_slice_mut(slice: &mut [T]) -> &mut [Self]
[src]
fn into_raw_slice(slice: &[Self]) -> &[T]
[src]
fn into_raw_slice_mut(slice: &mut [Self]) -> &mut [T]
[src]
impl<C: Mix> Mix for PreAlpha<C, C::Scalar>
[src]
type Scalar = C::Scalar
The type of the mixing factor.
fn mix(
&self,
other: &PreAlpha<C, C::Scalar>,
factor: C::Scalar
) -> PreAlpha<C, C::Scalar>
[src]
&self,
other: &PreAlpha<C, C::Scalar>,
factor: C::Scalar
) -> PreAlpha<C, C::Scalar>
impl<C: ComponentWise<Scalar = T>, T: Float> ComponentWise for PreAlpha<C, T>
[src]
type Scalar = T
The scalar type for color components.
fn component_wise<F: FnMut(T, T) -> T>(
&self,
other: &PreAlpha<C, T>,
f: F
) -> PreAlpha<C, T>
[src]
&self,
other: &PreAlpha<C, T>,
f: F
) -> PreAlpha<C, T>
fn component_wise_self<F: FnMut(T) -> T>(&self, f: F) -> PreAlpha<C, T>
[src]
impl<C, T, P: ?Sized> AsRef<P> for PreAlpha<C, T> where
C: Pixel<T>,
T: Float,
P: RawPixel<T>,
[src]
C: Pixel<T>,
T: Float,
P: RawPixel<T>,
impl<C, T, P: ?Sized> AsMut<P> for PreAlpha<C, T> where
C: Pixel<T>,
T: Float,
P: RawPixel<T>,
[src]
C: Pixel<T>,
T: Float,
P: RawPixel<T>,
impl<C, T> From<Alpha<C, T>> for PreAlpha<C, T> where
C: ComponentWise<Scalar = T>,
T: Float,
[src]
C: ComponentWise<Scalar = T>,
T: Float,
impl<C, T> From<PreAlpha<C, T>> for Alpha<C, T> where
C: ComponentWise<Scalar = T>,
T: Float,
[src]
C: ComponentWise<Scalar = T>,
T: Float,
impl<C: Clone, T: Clone + Float> Clone for PreAlpha<C, T>
[src]
impl<C: Copy, T: Copy + Float> Copy for PreAlpha<C, T>
[src]
impl<C: Default, T: Float> Default for PreAlpha<C, T>
[src]
impl<C: PartialEq, T: PartialEq + Float> PartialEq<PreAlpha<C, T>> for PreAlpha<C, T>
[src]
impl<C: Debug, T: Debug + Float> Debug for PreAlpha<C, T>
[src]
impl<C: Div, T: Float> Div<PreAlpha<C, T>> for PreAlpha<C, T>
[src]
type Output = PreAlpha<C::Output, T>
The resulting type after applying the /
operator.
fn div(self, other: PreAlpha<C, T>) -> Self::Output
[src]
impl<T: Float, C: Div<T>> Div<T> for PreAlpha<C, T>
[src]
type Output = PreAlpha<C::Output, T>
The resulting type after applying the /
operator.
fn div(self, c: T) -> Self::Output
[src]
impl<C: Sub, T: Float> Sub<PreAlpha<C, T>> for PreAlpha<C, T>
[src]
type Output = PreAlpha<C::Output, T>
The resulting type after applying the -
operator.
fn sub(self, other: PreAlpha<C, T>) -> Self::Output
[src]
impl<T: Float, C: Sub<T>> Sub<T> for PreAlpha<C, T>
[src]
type Output = PreAlpha<C::Output, T>
The resulting type after applying the -
operator.
fn sub(self, c: T) -> Self::Output
[src]
impl<C: Add, T: Float> Add<PreAlpha<C, T>> for PreAlpha<C, T>
[src]
type Output = PreAlpha<C::Output, T>
The resulting type after applying the +
operator.
fn add(self, other: PreAlpha<C, T>) -> Self::Output
[src]
impl<T: Float, C: Add<T>> Add<T> for PreAlpha<C, T>
[src]
type Output = PreAlpha<C::Output, T>
The resulting type after applying the +
operator.
fn add(self, c: T) -> Self::Output
[src]
impl<C: Mul, T: Float> Mul<PreAlpha<C, T>> for PreAlpha<C, T>
[src]
type Output = PreAlpha<C::Output, T>
The resulting type after applying the *
operator.
fn mul(self, other: PreAlpha<C, T>) -> Self::Output
[src]
impl<T: Float, C: Mul<T>> Mul<T> for PreAlpha<C, T>
[src]
type Output = PreAlpha<C::Output, T>
The resulting type after applying the *
operator.
fn mul(self, c: T) -> Self::Output
[src]
impl<C: AddAssign, T: Float + AddAssign> AddAssign<PreAlpha<C, T>> for PreAlpha<C, T>
[src]
fn add_assign(&mut self, other: PreAlpha<C, T>)
[src]
impl<T: Float + AddAssign, C: AddAssign<T>> AddAssign<T> for PreAlpha<C, T>
[src]
fn add_assign(&mut self, c: T)
[src]
impl<C: SubAssign, T: Float + SubAssign> SubAssign<PreAlpha<C, T>> for PreAlpha<C, T>
[src]
fn sub_assign(&mut self, other: PreAlpha<C, T>)
[src]
impl<T: Float + SubAssign, C: SubAssign<T>> SubAssign<T> for PreAlpha<C, T>
[src]
fn sub_assign(&mut self, c: T)
[src]
impl<C: MulAssign, T: Float + MulAssign> MulAssign<PreAlpha<C, T>> for PreAlpha<C, T>
[src]
fn mul_assign(&mut self, other: PreAlpha<C, T>)
[src]
impl<T: Float + MulAssign, C: MulAssign<T>> MulAssign<T> for PreAlpha<C, T>
[src]
fn mul_assign(&mut self, c: T)
[src]
impl<C: DivAssign, T: Float + DivAssign> DivAssign<PreAlpha<C, T>> for PreAlpha<C, T>
[src]
fn div_assign(&mut self, other: PreAlpha<C, T>)
[src]
impl<T: Float + DivAssign, C: DivAssign<T>> DivAssign<T> for PreAlpha<C, T>
[src]
fn div_assign(&mut self, c: T)
[src]
impl<C, T: Float> Deref for PreAlpha<C, T>
[src]
impl<C, T: Float> DerefMut for PreAlpha<C, T>
[src]
impl<C, T: Float> StructuralPartialEq for PreAlpha<C, T>
[src]
impl<C, T> AbsDiffEq<PreAlpha<C, T>> for PreAlpha<C, T> where
C: AbsDiffEq<Epsilon = T::Epsilon>,
T: AbsDiffEq + Float,
T::Epsilon: Copy,
[src]
C: AbsDiffEq<Epsilon = T::Epsilon>,
T: AbsDiffEq + Float,
T::Epsilon: Copy,
type Epsilon = T::Epsilon
Used for specifying relative comparisons.
fn default_epsilon() -> Self::Epsilon
[src]
fn abs_diff_eq(&self, other: &PreAlpha<C, T>, epsilon: Self::Epsilon) -> bool
[src]
fn abs_diff_ne(&self, other: &Rhs, epsilon: Self::Epsilon) -> bool
[src]
impl<C, T> RelativeEq<PreAlpha<C, T>> for PreAlpha<C, T> where
C: RelativeEq<Epsilon = T::Epsilon>,
T: RelativeEq + Float,
T::Epsilon: Copy,
[src]
C: RelativeEq<Epsilon = T::Epsilon>,
T: RelativeEq + Float,
T::Epsilon: Copy,
fn default_max_relative() -> Self::Epsilon
[src]
fn relative_eq(
&self,
other: &PreAlpha<C, T>,
epsilon: Self::Epsilon,
max_relative: Self::Epsilon
) -> bool
[src]
&self,
other: &PreAlpha<C, T>,
epsilon: Self::Epsilon,
max_relative: Self::Epsilon
) -> bool
fn relative_ne(
&self,
other: &Rhs,
epsilon: Self::Epsilon,
max_relative: Self::Epsilon
) -> bool
[src]
&self,
other: &Rhs,
epsilon: Self::Epsilon,
max_relative: Self::Epsilon
) -> bool
impl<C, T> UlpsEq<PreAlpha<C, T>> for PreAlpha<C, T> where
C: UlpsEq<Epsilon = T::Epsilon>,
T: UlpsEq + Float,
T::Epsilon: Copy,
[src]
C: UlpsEq<Epsilon = T::Epsilon>,
T: UlpsEq + Float,
T::Epsilon: Copy,
Auto Trait Implementations
impl<C, T> Send for PreAlpha<C, T> where
C: Send,
T: Send,
C: Send,
T: Send,
impl<C, T> Sync for PreAlpha<C, T> where
C: Sync,
T: Sync,
C: Sync,
T: Sync,
impl<C, T> Unpin for PreAlpha<C, T> where
C: Unpin,
T: Unpin,
C: Unpin,
T: Unpin,
impl<C, T> UnwindSafe for PreAlpha<C, T> where
C: UnwindSafe,
T: UnwindSafe,
C: UnwindSafe,
T: UnwindSafe,
impl<C, T> RefUnwindSafe for PreAlpha<C, T> where
C: RefUnwindSafe,
T: RefUnwindSafe,
C: RefUnwindSafe,
T: RefUnwindSafe,
Blanket Implementations
impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for S where
D: AdaptFrom<S, Swp, Dwp, T>,
Dwp: WhitePoint,
Swp: WhitePoint,
T: Component + Float,
[src]
D: AdaptFrom<S, Swp, Dwp, T>,
Dwp: WhitePoint,
Swp: WhitePoint,
T: Component + Float,
fn adapt_into_using<M>(Self, M) -> D where
M: TransformMatrix<Swp, Dwp, T>,
[src]
M: TransformMatrix<Swp, Dwp, T>,
fn adapt_into(self) -> D
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> From<T> for T
[src]
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
fn to_owned(&self) -> T
[src]
fn clone_into(&self, target: &mut T)
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,