From 92d28aba40234a0ec6ab0c2270c947b5c8169672 Mon Sep 17 00:00:00 2001 From: Vicente Penades Date: Thu, 5 Jul 2018 13:41:28 +0200 Subject: [PATCH] changed In and Out composition functions to always produce "transparent black" --- .../PixelBlenders/PorterDuffFunctions.cs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.cs b/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.cs index 8b6fbcfb90..c84cd9a7b1 100644 --- a/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.cs +++ b/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.cs @@ -214,17 +214,24 @@ namespace SixLabors.ImageSharp.PixelFormats.PixelBlenders public static Vector4 In(Vector4 dst, Vector4 src, Vector4 blend) { - blend.W = dst.W * src.W; + float alpha = dst.W * src.W; - return blend; + Vector4 color = src * alpha; // premultiply + color /= MathF.Max(alpha, Constants.Epsilon); // unpremultiply + color.W = alpha; + + return color; } public static Vector4 Out(Vector4 dst, Vector4 src) { - // calculate final alpha - src.W = (1 - dst.W) * src.W; + float alpha = (1 - dst.W) * src.W; - return src; + Vector4 color = src * alpha; // premultiply + color /= MathF.Max(alpha, Constants.Epsilon); // unpremultiply + color.W = alpha; + + return color; } public static Vector4 Xor(Vector4 dst, Vector4 src)