Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion src/ImageSharp/PixelFormats/PixelAlphaCompositionMode.cs
Original file line number Diff line number Diff line change
Expand Up @@ -66,5 +66,10 @@ public enum PixelAlphaCompositionMode
/// <summary>
/// Clear where they overlap.
/// </summary>
Xor
Xor,

/// <summary>
/// Adds the source and destination, clamping the result to the supported color and alpha range.
/// </summary>
Plus,
}

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ var composers = new []
"DestOut",
"Clear",
"Xor",
"Plus",
};

var blenders = new []
Expand All @@ -42,6 +43,15 @@ var blenders = new []
"Lighten",
"Overlay",
"HardLight",
"ColorDodge",
"ColorBurn",
"SoftLight",
"Difference",
"Exclusion",
"Hue",
"Saturation",
"Color",
"Luminosity",
};
#>
/// <summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,15 @@ public static PixelBlender<TPixel> GetPixelBlender(PixelColorBlendingMode colorM
PixelColorBlendingMode.Lighten => LightenSrc,
PixelColorBlendingMode.Overlay => OverlaySrc,
PixelColorBlendingMode.HardLight => HardLightSrc,
PixelColorBlendingMode.ColorDodge => ColorDodgeSrc,
PixelColorBlendingMode.ColorBurn => ColorBurnSrc,
PixelColorBlendingMode.SoftLight => SoftLightSrc,
PixelColorBlendingMode.Difference => DifferenceSrc,
PixelColorBlendingMode.Exclusion => ExclusionSrc,
PixelColorBlendingMode.Hue => HueSrc,
PixelColorBlendingMode.Saturation => SaturationSrc,
PixelColorBlendingMode.Color => ColorSrc,
PixelColorBlendingMode.Luminosity => LuminositySrc,
_ => NormalSrc,
},
PixelAlphaCompositionMode.SrcAtop => colorMode switch
Expand All @@ -41,6 +50,15 @@ public static PixelBlender<TPixel> GetPixelBlender(PixelColorBlendingMode colorM
PixelColorBlendingMode.Lighten => LightenSrcAtop,
PixelColorBlendingMode.Overlay => OverlaySrcAtop,
PixelColorBlendingMode.HardLight => HardLightSrcAtop,
PixelColorBlendingMode.ColorDodge => ColorDodgeSrcAtop,
PixelColorBlendingMode.ColorBurn => ColorBurnSrcAtop,
PixelColorBlendingMode.SoftLight => SoftLightSrcAtop,
PixelColorBlendingMode.Difference => DifferenceSrcAtop,
PixelColorBlendingMode.Exclusion => ExclusionSrcAtop,
PixelColorBlendingMode.Hue => HueSrcAtop,
PixelColorBlendingMode.Saturation => SaturationSrcAtop,
PixelColorBlendingMode.Color => ColorSrcAtop,
PixelColorBlendingMode.Luminosity => LuminositySrcAtop,
_ => NormalSrcAtop,
},
PixelAlphaCompositionMode.SrcIn => colorMode switch
Expand All @@ -53,6 +71,15 @@ public static PixelBlender<TPixel> GetPixelBlender(PixelColorBlendingMode colorM
PixelColorBlendingMode.Lighten => LightenSrcIn,
PixelColorBlendingMode.Overlay => OverlaySrcIn,
PixelColorBlendingMode.HardLight => HardLightSrcIn,
PixelColorBlendingMode.ColorDodge => ColorDodgeSrcIn,
PixelColorBlendingMode.ColorBurn => ColorBurnSrcIn,
PixelColorBlendingMode.SoftLight => SoftLightSrcIn,
PixelColorBlendingMode.Difference => DifferenceSrcIn,
PixelColorBlendingMode.Exclusion => ExclusionSrcIn,
PixelColorBlendingMode.Hue => HueSrcIn,
PixelColorBlendingMode.Saturation => SaturationSrcIn,
PixelColorBlendingMode.Color => ColorSrcIn,
PixelColorBlendingMode.Luminosity => LuminositySrcIn,
_ => NormalSrcIn,
},
PixelAlphaCompositionMode.SrcOut => colorMode switch
Expand All @@ -65,6 +92,15 @@ public static PixelBlender<TPixel> GetPixelBlender(PixelColorBlendingMode colorM
PixelColorBlendingMode.Lighten => LightenSrcOut,
PixelColorBlendingMode.Overlay => OverlaySrcOut,
PixelColorBlendingMode.HardLight => HardLightSrcOut,
PixelColorBlendingMode.ColorDodge => ColorDodgeSrcOut,
PixelColorBlendingMode.ColorBurn => ColorBurnSrcOut,
PixelColorBlendingMode.SoftLight => SoftLightSrcOut,
PixelColorBlendingMode.Difference => DifferenceSrcOut,
PixelColorBlendingMode.Exclusion => ExclusionSrcOut,
PixelColorBlendingMode.Hue => HueSrcOut,
PixelColorBlendingMode.Saturation => SaturationSrcOut,
PixelColorBlendingMode.Color => ColorSrcOut,
PixelColorBlendingMode.Luminosity => LuminositySrcOut,
_ => NormalSrcOut,
},
PixelAlphaCompositionMode.Dest => colorMode switch
Expand All @@ -77,6 +113,15 @@ public static PixelBlender<TPixel> GetPixelBlender(PixelColorBlendingMode colorM
PixelColorBlendingMode.Lighten => LightenDest,
PixelColorBlendingMode.Overlay => OverlayDest,
PixelColorBlendingMode.HardLight => HardLightDest,
PixelColorBlendingMode.ColorDodge => ColorDodgeDest,
PixelColorBlendingMode.ColorBurn => ColorBurnDest,
PixelColorBlendingMode.SoftLight => SoftLightDest,
PixelColorBlendingMode.Difference => DifferenceDest,
PixelColorBlendingMode.Exclusion => ExclusionDest,
PixelColorBlendingMode.Hue => HueDest,
PixelColorBlendingMode.Saturation => SaturationDest,
PixelColorBlendingMode.Color => ColorDest,
PixelColorBlendingMode.Luminosity => LuminosityDest,
_ => NormalDest,
},
PixelAlphaCompositionMode.DestAtop => colorMode switch
Expand All @@ -89,6 +134,15 @@ public static PixelBlender<TPixel> GetPixelBlender(PixelColorBlendingMode colorM
PixelColorBlendingMode.Lighten => LightenDestAtop,
PixelColorBlendingMode.Overlay => OverlayDestAtop,
PixelColorBlendingMode.HardLight => HardLightDestAtop,
PixelColorBlendingMode.ColorDodge => ColorDodgeDestAtop,
PixelColorBlendingMode.ColorBurn => ColorBurnDestAtop,
PixelColorBlendingMode.SoftLight => SoftLightDestAtop,
PixelColorBlendingMode.Difference => DifferenceDestAtop,
PixelColorBlendingMode.Exclusion => ExclusionDestAtop,
PixelColorBlendingMode.Hue => HueDestAtop,
PixelColorBlendingMode.Saturation => SaturationDestAtop,
PixelColorBlendingMode.Color => ColorDestAtop,
PixelColorBlendingMode.Luminosity => LuminosityDestAtop,
_ => NormalDestAtop,
},
PixelAlphaCompositionMode.DestOver => colorMode switch
Expand All @@ -101,6 +155,15 @@ public static PixelBlender<TPixel> GetPixelBlender(PixelColorBlendingMode colorM
PixelColorBlendingMode.Lighten => LightenDestOver,
PixelColorBlendingMode.Overlay => OverlayDestOver,
PixelColorBlendingMode.HardLight => HardLightDestOver,
PixelColorBlendingMode.ColorDodge => ColorDodgeDestOver,
PixelColorBlendingMode.ColorBurn => ColorBurnDestOver,
PixelColorBlendingMode.SoftLight => SoftLightDestOver,
PixelColorBlendingMode.Difference => DifferenceDestOver,
PixelColorBlendingMode.Exclusion => ExclusionDestOver,
PixelColorBlendingMode.Hue => HueDestOver,
PixelColorBlendingMode.Saturation => SaturationDestOver,
PixelColorBlendingMode.Color => ColorDestOver,
PixelColorBlendingMode.Luminosity => LuminosityDestOver,
_ => NormalDestOver,
},
PixelAlphaCompositionMode.DestIn => colorMode switch
Expand All @@ -113,6 +176,15 @@ public static PixelBlender<TPixel> GetPixelBlender(PixelColorBlendingMode colorM
PixelColorBlendingMode.Lighten => LightenDestIn,
PixelColorBlendingMode.Overlay => OverlayDestIn,
PixelColorBlendingMode.HardLight => HardLightDestIn,
PixelColorBlendingMode.ColorDodge => ColorDodgeDestIn,
PixelColorBlendingMode.ColorBurn => ColorBurnDestIn,
PixelColorBlendingMode.SoftLight => SoftLightDestIn,
PixelColorBlendingMode.Difference => DifferenceDestIn,
PixelColorBlendingMode.Exclusion => ExclusionDestIn,
PixelColorBlendingMode.Hue => HueDestIn,
PixelColorBlendingMode.Saturation => SaturationDestIn,
PixelColorBlendingMode.Color => ColorDestIn,
PixelColorBlendingMode.Luminosity => LuminosityDestIn,
_ => NormalDestIn,
},
PixelAlphaCompositionMode.DestOut => colorMode switch
Expand All @@ -125,6 +197,15 @@ public static PixelBlender<TPixel> GetPixelBlender(PixelColorBlendingMode colorM
PixelColorBlendingMode.Lighten => LightenDestOut,
PixelColorBlendingMode.Overlay => OverlayDestOut,
PixelColorBlendingMode.HardLight => HardLightDestOut,
PixelColorBlendingMode.ColorDodge => ColorDodgeDestOut,
PixelColorBlendingMode.ColorBurn => ColorBurnDestOut,
PixelColorBlendingMode.SoftLight => SoftLightDestOut,
PixelColorBlendingMode.Difference => DifferenceDestOut,
PixelColorBlendingMode.Exclusion => ExclusionDestOut,
PixelColorBlendingMode.Hue => HueDestOut,
PixelColorBlendingMode.Saturation => SaturationDestOut,
PixelColorBlendingMode.Color => ColorDestOut,
PixelColorBlendingMode.Luminosity => LuminosityDestOut,
_ => NormalDestOut,
},
PixelAlphaCompositionMode.Clear => colorMode switch
Expand All @@ -137,6 +218,15 @@ public static PixelBlender<TPixel> GetPixelBlender(PixelColorBlendingMode colorM
PixelColorBlendingMode.Lighten => LightenClear,
PixelColorBlendingMode.Overlay => OverlayClear,
PixelColorBlendingMode.HardLight => HardLightClear,
PixelColorBlendingMode.ColorDodge => ColorDodgeClear,
PixelColorBlendingMode.ColorBurn => ColorBurnClear,
PixelColorBlendingMode.SoftLight => SoftLightClear,
PixelColorBlendingMode.Difference => DifferenceClear,
PixelColorBlendingMode.Exclusion => ExclusionClear,
PixelColorBlendingMode.Hue => HueClear,
PixelColorBlendingMode.Saturation => SaturationClear,
PixelColorBlendingMode.Color => ColorClear,
PixelColorBlendingMode.Luminosity => LuminosityClear,
_ => NormalClear,
},
PixelAlphaCompositionMode.Xor => colorMode switch
Expand All @@ -149,8 +239,38 @@ public static PixelBlender<TPixel> GetPixelBlender(PixelColorBlendingMode colorM
PixelColorBlendingMode.Lighten => LightenXor,
PixelColorBlendingMode.Overlay => OverlayXor,
PixelColorBlendingMode.HardLight => HardLightXor,
PixelColorBlendingMode.ColorDodge => ColorDodgeXor,
PixelColorBlendingMode.ColorBurn => ColorBurnXor,
PixelColorBlendingMode.SoftLight => SoftLightXor,
PixelColorBlendingMode.Difference => DifferenceXor,
PixelColorBlendingMode.Exclusion => ExclusionXor,
PixelColorBlendingMode.Hue => HueXor,
PixelColorBlendingMode.Saturation => SaturationXor,
PixelColorBlendingMode.Color => ColorXor,
PixelColorBlendingMode.Luminosity => LuminosityXor,
_ => NormalXor,
},
PixelAlphaCompositionMode.Plus => colorMode switch
{
PixelColorBlendingMode.Multiply => MultiplyPlus,
PixelColorBlendingMode.Add => AddPlus,
PixelColorBlendingMode.Subtract => SubtractPlus,
PixelColorBlendingMode.Screen => ScreenPlus,
PixelColorBlendingMode.Darken => DarkenPlus,
PixelColorBlendingMode.Lighten => LightenPlus,
PixelColorBlendingMode.Overlay => OverlayPlus,
PixelColorBlendingMode.HardLight => HardLightPlus,
PixelColorBlendingMode.ColorDodge => ColorDodgePlus,
PixelColorBlendingMode.ColorBurn => ColorBurnPlus,
PixelColorBlendingMode.SoftLight => SoftLightPlus,
PixelColorBlendingMode.Difference => DifferencePlus,
PixelColorBlendingMode.Exclusion => ExclusionPlus,
PixelColorBlendingMode.Hue => HuePlus,
PixelColorBlendingMode.Saturation => SaturationPlus,
PixelColorBlendingMode.Color => ColorPlus,
PixelColorBlendingMode.Luminosity => LuminosityPlus,
_ => NormalPlus,
},
_ => colorMode switch
{
PixelColorBlendingMode.Multiply => MultiplySrcOver,
Expand All @@ -161,6 +281,15 @@ public static PixelBlender<TPixel> GetPixelBlender(PixelColorBlendingMode colorM
PixelColorBlendingMode.Lighten => LightenSrcOver,
PixelColorBlendingMode.Overlay => OverlaySrcOver,
PixelColorBlendingMode.HardLight => HardLightSrcOver,
PixelColorBlendingMode.ColorDodge => ColorDodgeSrcOver,
PixelColorBlendingMode.ColorBurn => ColorBurnSrcOver,
PixelColorBlendingMode.SoftLight => SoftLightSrcOver,
PixelColorBlendingMode.Difference => DifferenceSrcOver,
PixelColorBlendingMode.Exclusion => ExclusionSrcOver,
PixelColorBlendingMode.Hue => HueSrcOver,
PixelColorBlendingMode.Saturation => SaturationSrcOver,
PixelColorBlendingMode.Color => ColorSrcOver,
PixelColorBlendingMode.Luminosity => LuminositySrcOver,
_ => NormalSrcOver,
},
};
Expand Down
Loading