|
|
|
@ -26,7 +26,7 @@ namespace SixLabors.ImageSharp.PixelFormats.PixelBlenders |
|
|
|
/// Source over backdrop
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="backdrop">Backdrop color</param>
|
|
|
|
/// <param name="source">Source color</param>
|
|
|
|
/// <param name="source">Source color</param>
|
|
|
|
/// <returns>Output color</returns>
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
|
|
|
public static Vector4 Normal(Vector4 backdrop, Vector4 source) |
|
|
|
@ -38,7 +38,7 @@ namespace SixLabors.ImageSharp.PixelFormats.PixelBlenders |
|
|
|
/// Source multiplied by backdrop
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="backdrop">Backdrop color</param>
|
|
|
|
/// <param name="source">Source color</param>
|
|
|
|
/// <param name="source">Source color</param>
|
|
|
|
/// <returns>Output color</returns>
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
|
|
|
public static Vector4 Multiply(Vector4 backdrop, Vector4 source) |
|
|
|
@ -50,7 +50,7 @@ namespace SixLabors.ImageSharp.PixelFormats.PixelBlenders |
|
|
|
/// Source added to backdrop
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="backdrop">Backdrop color</param>
|
|
|
|
/// <param name="source">Source color</param>
|
|
|
|
/// <param name="source">Source color</param>
|
|
|
|
/// <returns>Output color</returns>
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
|
|
|
public static Vector4 Add(Vector4 backdrop, Vector4 source) |
|
|
|
@ -62,7 +62,7 @@ namespace SixLabors.ImageSharp.PixelFormats.PixelBlenders |
|
|
|
/// Source subtracted from backdrop
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="backdrop">Backdrop color</param>
|
|
|
|
/// <param name="source">Source color</param>
|
|
|
|
/// <param name="source">Source color</param>
|
|
|
|
/// <returns>Output color</returns>
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
|
|
|
public static Vector4 Subtract(Vector4 backdrop, Vector4 source) |
|
|
|
@ -74,7 +74,7 @@ namespace SixLabors.ImageSharp.PixelFormats.PixelBlenders |
|
|
|
/// Complement of source multiplied by the complement of backdrop
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="backdrop">Backdrop color</param>
|
|
|
|
/// <param name="source">Source color</param>
|
|
|
|
/// <param name="source">Source color</param>
|
|
|
|
/// <returns>Output color</returns>
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
|
|
|
public static Vector4 Screen(Vector4 backdrop, Vector4 source) |
|
|
|
@ -86,7 +86,7 @@ namespace SixLabors.ImageSharp.PixelFormats.PixelBlenders |
|
|
|
/// Per element, chooses the smallest value of source and backdrop
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="backdrop">Backdrop color</param>
|
|
|
|
/// <param name="source">Source color</param>
|
|
|
|
/// <param name="source">Source color</param>
|
|
|
|
/// <returns>Output color</returns>
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
|
|
|
public static Vector4 Darken(Vector4 backdrop, Vector4 source) |
|
|
|
@ -98,7 +98,7 @@ namespace SixLabors.ImageSharp.PixelFormats.PixelBlenders |
|
|
|
/// Per element, chooses the largest value of source and backdrop
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="backdrop">Backdrop color</param>
|
|
|
|
/// <param name="source">Source color</param>
|
|
|
|
/// <param name="source">Source color</param>
|
|
|
|
/// <returns>Output color</returns>
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
|
|
|
public static Vector4 Lighten(Vector4 backdrop, Vector4 source) |
|
|
|
@ -110,7 +110,7 @@ namespace SixLabors.ImageSharp.PixelFormats.PixelBlenders |
|
|
|
/// Overlays source over backdrop
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="backdrop">Backdrop color</param>
|
|
|
|
/// <param name="source">Source color</param>
|
|
|
|
/// <param name="source">Source color</param>
|
|
|
|
/// <returns>Output color</returns>
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
|
|
|
public static Vector4 Overlay(Vector4 backdrop, Vector4 source) |
|
|
|
@ -126,7 +126,7 @@ namespace SixLabors.ImageSharp.PixelFormats.PixelBlenders |
|
|
|
/// Hard light effect
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="backdrop">Backdrop color</param>
|
|
|
|
/// <param name="source">Source color</param>
|
|
|
|
/// <param name="source">Source color</param>
|
|
|
|
/// <returns>Output color</returns>
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
|
|
|
public static Vector4 HardLight(Vector4 backdrop, Vector4 source) |
|
|
|
@ -190,7 +190,7 @@ namespace SixLabors.ImageSharp.PixelFormats.PixelBlenders |
|
|
|
float alpha = dstW + srcW + blendW; |
|
|
|
|
|
|
|
// calculate final color
|
|
|
|
Vector4 color = dst * dstW + src * srcW + blend * blendW; |
|
|
|
Vector4 color = (dst * dstW) + (src * srcW) + (blend * blendW); |
|
|
|
|
|
|
|
// unpremultiply
|
|
|
|
color /= MathF.Max(alpha, Constants.Epsilon); |
|
|
|
@ -209,7 +209,7 @@ namespace SixLabors.ImageSharp.PixelFormats.PixelBlenders |
|
|
|
float alpha = dstW + blendW; |
|
|
|
|
|
|
|
// calculate final color
|
|
|
|
Vector4 color = dst * dstW + blend * blendW; |
|
|
|
Vector4 color = (dst * dstW) + (blend * blendW); |
|
|
|
|
|
|
|
// unpremultiply
|
|
|
|
color /= MathF.Max(alpha, Constants.Epsilon); |
|
|
|
@ -238,8 +238,8 @@ namespace SixLabors.ImageSharp.PixelFormats.PixelBlenders |
|
|
|
float srcW = 1 - dst.W; |
|
|
|
float dstW = 1 - src.W; |
|
|
|
|
|
|
|
float alpha = src.W * srcW + dst.W * dstW; |
|
|
|
Vector4 color = src.W * src * srcW + dst.W * dst * dstW; |
|
|
|
float alpha = (src.W * srcW) + (dst.W * dstW); |
|
|
|
Vector4 color = (src.W * src * srcW) + (dst.W * dst * dstW); |
|
|
|
|
|
|
|
// unpremultiply
|
|
|
|
color /= MathF.Max(alpha, Constants.Epsilon); |
|
|
|
@ -255,9 +255,5 @@ namespace SixLabors.ImageSharp.PixelFormats.PixelBlenders |
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |