Browse Source

Add missing Blend Modes and expose BlendMode on Image Control (#17903)

* Add missing Bitmap Blend Modes supported by Skia

* Expose Blend Mode on Image Control

* Fix image render options "push" not being disposed
Fix image blendMode change not triggering a re-render

* Add Image Blend Tests

* Remove Modulate Blend mode

* Add Composition Blend Modes Tests

---------

Co-authored-by: Benedikt Stebner <Gillibald@users.noreply.github.com>
repro/18104-drag-drop-flyout-placement
Leo Bottaro 1 year ago
committed by GitHub
parent
commit
9441362dcc
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 63
      src/Avalonia.Base/Media/Imaging/BitmapBlendingMode.cs
  2. 22
      src/Avalonia.Controls/Image.cs
  3. 60
      src/Skia/Avalonia.Skia/SkiaSharpExtensions.cs
  4. 83
      tests/Avalonia.RenderTests/Controls/ImageBlendTests.cs
  5. 70
      tests/Avalonia.RenderTests/Controls/ImageCompositionTests.cs
  6. BIN
      tests/TestFiles/Direct2D1/Controls/Image/blend/Cat.jpg
  7. BIN
      tests/TestFiles/Direct2D1/Controls/Image/blend/ColourShading - by Stib.png
  8. BIN
      tests/TestFiles/Direct2D1/Controls/Image/blend/Image_Blend_Color.expected.png
  9. BIN
      tests/TestFiles/Direct2D1/Controls/Image/blend/Image_Blend_ColorBurn.expected.png
  10. BIN
      tests/TestFiles/Direct2D1/Controls/Image/blend/Image_Blend_ColorDodge.expected.png
  11. BIN
      tests/TestFiles/Direct2D1/Controls/Image/blend/Image_Blend_Darken.expected.png
  12. BIN
      tests/TestFiles/Direct2D1/Controls/Image/blend/Image_Blend_Difference.expected.png
  13. BIN
      tests/TestFiles/Direct2D1/Controls/Image/blend/Image_Blend_Exclusion.expected.png
  14. BIN
      tests/TestFiles/Direct2D1/Controls/Image/blend/Image_Blend_HardLight.expected.png
  15. BIN
      tests/TestFiles/Direct2D1/Controls/Image/blend/Image_Blend_Hue.expected.png
  16. BIN
      tests/TestFiles/Direct2D1/Controls/Image/blend/Image_Blend_Lighten.expected.png
  17. BIN
      tests/TestFiles/Direct2D1/Controls/Image/blend/Image_Blend_Luminosity.expected.png
  18. BIN
      tests/TestFiles/Direct2D1/Controls/Image/blend/Image_Blend_Multiply.expected.png
  19. BIN
      tests/TestFiles/Direct2D1/Controls/Image/blend/Image_Blend_Nothing.expected.png
  20. BIN
      tests/TestFiles/Direct2D1/Controls/Image/blend/Image_Blend_Overlay.expected.png
  21. BIN
      tests/TestFiles/Direct2D1/Controls/Image/blend/Image_Blend_Plus.expected.png
  22. BIN
      tests/TestFiles/Direct2D1/Controls/Image/blend/Image_Blend_Saturation.expected.png
  23. BIN
      tests/TestFiles/Direct2D1/Controls/Image/blend/Image_Blend_Screen.expected.png
  24. BIN
      tests/TestFiles/Direct2D1/Controls/Image/blend/Image_Blend_SoftLight.expected.png
  25. BIN
      tests/TestFiles/Direct2D1/Controls/Image/composition/A.png
  26. BIN
      tests/TestFiles/Direct2D1/Controls/Image/composition/B.png
  27. BIN
      tests/TestFiles/Direct2D1/Controls/Image/composition/Image_Blend_Destination.expected.png
  28. BIN
      tests/TestFiles/Direct2D1/Controls/Image/composition/Image_Blend_DestinationAtop.expected.png
  29. BIN
      tests/TestFiles/Direct2D1/Controls/Image/composition/Image_Blend_DestinationIn.expected.png
  30. BIN
      tests/TestFiles/Direct2D1/Controls/Image/composition/Image_Blend_DestinationOut.expected.png
  31. BIN
      tests/TestFiles/Direct2D1/Controls/Image/composition/Image_Blend_DestinationOver.expected.png
  32. BIN
      tests/TestFiles/Direct2D1/Controls/Image/composition/Image_Blend_Source.expected.png
  33. BIN
      tests/TestFiles/Direct2D1/Controls/Image/composition/Image_Blend_SourceAtop.expected.png
  34. BIN
      tests/TestFiles/Direct2D1/Controls/Image/composition/Image_Blend_SourceIn.expected.png
  35. BIN
      tests/TestFiles/Direct2D1/Controls/Image/composition/Image_Blend_SourceOut.expected.png
  36. BIN
      tests/TestFiles/Direct2D1/Controls/Image/composition/Image_Blend_SourceOver.expected.png
  37. BIN
      tests/TestFiles/Direct2D1/Controls/Image/composition/Image_Blend_Xor.expected.png
  38. BIN
      tests/TestFiles/Skia/Controls/Image/blend/Cat.jpg
  39. BIN
      tests/TestFiles/Skia/Controls/Image/blend/ColourShading - by Stib.png
  40. BIN
      tests/TestFiles/Skia/Controls/Image/blend/Image_Blend_Color.expected.png
  41. BIN
      tests/TestFiles/Skia/Controls/Image/blend/Image_Blend_ColorBurn.expected.png
  42. BIN
      tests/TestFiles/Skia/Controls/Image/blend/Image_Blend_ColorDodge.expected.png
  43. BIN
      tests/TestFiles/Skia/Controls/Image/blend/Image_Blend_Darken.expected.png
  44. BIN
      tests/TestFiles/Skia/Controls/Image/blend/Image_Blend_Difference.expected.png
  45. BIN
      tests/TestFiles/Skia/Controls/Image/blend/Image_Blend_Exclusion.expected.png
  46. BIN
      tests/TestFiles/Skia/Controls/Image/blend/Image_Blend_HardLight.expected.png
  47. BIN
      tests/TestFiles/Skia/Controls/Image/blend/Image_Blend_Hue.expected.png
  48. BIN
      tests/TestFiles/Skia/Controls/Image/blend/Image_Blend_Lighten.expected.png
  49. BIN
      tests/TestFiles/Skia/Controls/Image/blend/Image_Blend_Luminosity.expected.png
  50. BIN
      tests/TestFiles/Skia/Controls/Image/blend/Image_Blend_Multiply.expected.png
  51. BIN
      tests/TestFiles/Skia/Controls/Image/blend/Image_Blend_Nothing.expected.png
  52. BIN
      tests/TestFiles/Skia/Controls/Image/blend/Image_Blend_Overlay.expected.png
  53. BIN
      tests/TestFiles/Skia/Controls/Image/blend/Image_Blend_Plus.expected.png
  54. BIN
      tests/TestFiles/Skia/Controls/Image/blend/Image_Blend_Saturation.expected.png
  55. BIN
      tests/TestFiles/Skia/Controls/Image/blend/Image_Blend_Screen.expected.png
  56. BIN
      tests/TestFiles/Skia/Controls/Image/blend/Image_Blend_SoftLight.expected.png
  57. BIN
      tests/TestFiles/Skia/Controls/Image/composition/A.png
  58. BIN
      tests/TestFiles/Skia/Controls/Image/composition/B.png
  59. BIN
      tests/TestFiles/Skia/Controls/Image/composition/Image_Blend_Destination.expected.png
  60. BIN
      tests/TestFiles/Skia/Controls/Image/composition/Image_Blend_DestinationAtop.expected.png
  61. BIN
      tests/TestFiles/Skia/Controls/Image/composition/Image_Blend_DestinationIn.expected.png
  62. BIN
      tests/TestFiles/Skia/Controls/Image/composition/Image_Blend_DestinationOut.expected.png
  63. BIN
      tests/TestFiles/Skia/Controls/Image/composition/Image_Blend_DestinationOver.expected.png
  64. BIN
      tests/TestFiles/Skia/Controls/Image/composition/Image_Blend_Source.expected.png
  65. BIN
      tests/TestFiles/Skia/Controls/Image/composition/Image_Blend_SourceAtop.expected.png
  66. BIN
      tests/TestFiles/Skia/Controls/Image/composition/Image_Blend_SourceIn.expected.png
  67. BIN
      tests/TestFiles/Skia/Controls/Image/composition/Image_Blend_SourceOut.expected.png
  68. BIN
      tests/TestFiles/Skia/Controls/Image/composition/Image_Blend_SourceOver.expected.png
  69. BIN
      tests/TestFiles/Skia/Controls/Image/composition/Image_Blend_Xor.expected.png

63
src/Avalonia.Base/Media/Imaging/BitmapBlendingMode.cs

@ -1,5 +1,6 @@
namespace Avalonia.Media.Imaging
{
// TODO12 split the enum into two: composite mode and blend mode. (And rename Blending to Blend at the same time).
/// <summary>
/// Controls the way the bitmaps are drawn together.
/// </summary>
@ -54,6 +55,66 @@ namespace Avalonia.Media.Imaging
/// <summary>
/// Display the sum of the source image and destination image.
/// </summary>
Plus
Plus,
/// <summary>
/// Multiplies the complements of the backdrop and source color values, then complements the result.
/// </summary>
Screen,
/// <summary>
/// Multiplies or screens the colors, depending on the backdrop color value.
/// </summary>
Overlay,
/// <summary>
/// Selects the darker of the backdrop and source colors.
/// </summary>
Darken,
/// <summary>
/// Selects the lighter of the backdrop and source colors.
/// </summary>
Lighten,
/// <summary>
/// Darkens the backdrop color to reflect the source color.
/// </summary>
ColorDodge,
/// <summary>
/// Multiplies or screens the colors, depending on the source color value.
/// </summary>
ColorBurn,
/// <summary>
/// Darkens or lightens the colors, depending on the source color value.
/// </summary>
HardLight,
/// <summary>
/// Subtracts the darker of the two constituent colors from the lighter color.
/// </summary>
SoftLight,
/// <summary>
/// Produces an effect similar to that of the Difference mode but lower in contrast.
/// </summary>
Difference,
/// <summary>
/// The source color is multiplied by the destination color and replaces the destination
/// </summary>
Exclusion,
/// <summary>
/// Creates a color with the hue of the source color and the saturation and luminosity of the backdrop color.
/// </summary>
Multiply,
/// <summary>
/// Creates a color with the hue of the source color and the saturation and luminosity of the backdrop color.
/// </summary>
Hue,
/// <summary>
/// Creates a color with the saturation of the source color and the hue and luminosity of the backdrop color.
/// </summary>
Saturation,
/// <summary>
/// Creates a color with the hue and saturation of the source color and the luminosity of the backdrop color.
/// </summary>
Color,
/// <summary>
/// Creates a color with the luminosity of the source color and the hue and saturation of the backdrop color.
/// </summary>
Luminosity
}
}

22
src/Avalonia.Controls/Image.cs

@ -17,6 +17,12 @@ namespace Avalonia.Controls
/// </summary>
public static readonly StyledProperty<IImage?> SourceProperty =
AvaloniaProperty.Register<Image, IImage?>(nameof(Source));
/// <summary>
/// Defines the <see cref="BlendMode"/> property.
/// </summary>
public static readonly StyledProperty<BitmapBlendingMode> BlendModeProperty =
AvaloniaProperty.Register<Image, BitmapBlendingMode>(nameof(BlendMode));
/// <summary>
/// Defines the <see cref="Stretch"/> property.
@ -34,7 +40,7 @@ namespace Avalonia.Controls
static Image()
{
AffectsRender<Image>(SourceProperty, StretchProperty, StretchDirectionProperty);
AffectsRender<Image>(SourceProperty, StretchProperty, StretchDirectionProperty, BlendModeProperty);
AffectsMeasure<Image>(SourceProperty, StretchProperty, StretchDirectionProperty);
AutomationProperties.ControlTypeOverrideProperty.OverrideDefaultValue<Image>(AutomationControlType.Image);
}
@ -49,6 +55,15 @@ namespace Avalonia.Controls
set => SetValue(SourceProperty, value);
}
/// <summary>
/// Gets or sets the blend mode for the image.
/// </summary>
public BitmapBlendingMode BlendMode
{
get => GetValue(BlendModeProperty);
set => SetValue(BlendModeProperty, value);
}
/// <summary>
/// Gets or sets a value controlling how the image will be stretched.
/// </summary>
@ -91,7 +106,10 @@ namespace Avalonia.Controls
Rect sourceRect = new Rect(sourceSize)
.CenterRect(new Rect(destRect.Size / scale));
context.DrawImage(source, sourceRect, destRect);
using (context.PushRenderOptions(RenderOptions with { BitmapBlendingMode = BlendMode }))
{
context.DrawImage(source, sourceRect, destRect);
}
}
}

60
src/Skia/Avalonia.Skia/SkiaSharpExtensions.cs

@ -29,36 +29,38 @@ namespace Avalonia.Skia
public static SKBlendMode ToSKBlendMode(this BitmapBlendingMode blendingMode)
{
switch (blendingMode)
return blendingMode switch
{
case BitmapBlendingMode.Unspecified:
case BitmapBlendingMode.SourceOver:
return SKBlendMode.SrcOver;
case BitmapBlendingMode.Source:
return SKBlendMode.Src;
case BitmapBlendingMode.SourceIn:
return SKBlendMode.SrcIn;
case BitmapBlendingMode.SourceOut:
return SKBlendMode.SrcOut;
case BitmapBlendingMode.SourceAtop:
return SKBlendMode.SrcATop;
case BitmapBlendingMode.Destination:
return SKBlendMode.Dst;
case BitmapBlendingMode.DestinationIn:
return SKBlendMode.DstIn;
case BitmapBlendingMode.DestinationOut:
return SKBlendMode.DstOut;
case BitmapBlendingMode.DestinationOver:
return SKBlendMode.DstOver;
case BitmapBlendingMode.DestinationAtop:
return SKBlendMode.DstATop;
case BitmapBlendingMode.Xor:
return SKBlendMode.Xor;
case BitmapBlendingMode.Plus:
return SKBlendMode.Plus;
default:
throw new ArgumentOutOfRangeException(nameof(blendingMode), blendingMode, null);
}
BitmapBlendingMode.Unspecified => SKBlendMode.SrcOver,
BitmapBlendingMode.SourceOver => SKBlendMode.SrcOver,
BitmapBlendingMode.Source => SKBlendMode.Src,
BitmapBlendingMode.SourceIn => SKBlendMode.SrcIn,
BitmapBlendingMode.SourceOut => SKBlendMode.SrcOut,
BitmapBlendingMode.SourceAtop => SKBlendMode.SrcATop,
BitmapBlendingMode.Destination => SKBlendMode.Dst,
BitmapBlendingMode.DestinationIn => SKBlendMode.DstIn,
BitmapBlendingMode.DestinationOut => SKBlendMode.DstOut,
BitmapBlendingMode.DestinationOver => SKBlendMode.DstOver,
BitmapBlendingMode.DestinationAtop => SKBlendMode.DstATop,
BitmapBlendingMode.Xor => SKBlendMode.Xor,
BitmapBlendingMode.Plus => SKBlendMode.Plus,
BitmapBlendingMode.Screen => SKBlendMode.Screen,
BitmapBlendingMode.Overlay => SKBlendMode.Overlay,
BitmapBlendingMode.Darken => SKBlendMode.Darken,
BitmapBlendingMode.Lighten => SKBlendMode.Lighten,
BitmapBlendingMode.ColorDodge => SKBlendMode.ColorDodge,
BitmapBlendingMode.ColorBurn => SKBlendMode.ColorBurn,
BitmapBlendingMode.HardLight => SKBlendMode.HardLight,
BitmapBlendingMode.SoftLight => SKBlendMode.SoftLight,
BitmapBlendingMode.Difference => SKBlendMode.Difference,
BitmapBlendingMode.Exclusion => SKBlendMode.Exclusion,
BitmapBlendingMode.Multiply => SKBlendMode.Multiply,
BitmapBlendingMode.Hue => SKBlendMode.Hue,
BitmapBlendingMode.Saturation => SKBlendMode.Saturation,
BitmapBlendingMode.Color => SKBlendMode.Color,
BitmapBlendingMode.Luminosity => SKBlendMode.Luminosity,
_ => throw new ArgumentOutOfRangeException(nameof(blendingMode), blendingMode, null)
};
}
public static SKPoint ToSKPoint(this Point p)

83
tests/Avalonia.RenderTests/Controls/ImageBlendTests.cs

@ -0,0 +1,83 @@
using System.IO;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
using Avalonia.Controls;
using Avalonia.Media;
using Avalonia.Media.Imaging;
using Xunit;
#if AVALONIA_SKIA
namespace Avalonia.Skia.RenderTests
#else
namespace Avalonia.Direct2D1.RenderTests.Controls
#endif
{
public class ImageBlendTests : TestBase
{
private readonly Bitmap _bitmapBase;
private readonly Bitmap _bitmapOver;
public ImageBlendTests()
: base(@"Controls\Image\blend")
{
_bitmapBase = new Bitmap(Path.Combine(OutputPath, "Cat.jpg"));
_bitmapOver = new Bitmap(Path.Combine(OutputPath, "ColourShading - by Stib.png"));
}
[Fact]
public async Task Image_Blend_Nothing() => await TestBlendMode(BitmapBlendingMode.Unspecified);
[Fact]
public async Task Image_Blend_Plus() => await TestBlendMode(BitmapBlendingMode.Plus);
[Fact]
public async Task Image_Blend_Screen() => await TestBlendMode(BitmapBlendingMode.Screen);
[Fact]
public async Task Image_Blend_Overlay() => await TestBlendMode(BitmapBlendingMode.Overlay);
[Fact]
public async Task Image_Blend_Darken() => await TestBlendMode(BitmapBlendingMode.Darken);
[Fact]
public async Task Image_Blend_Lighten() => await TestBlendMode(BitmapBlendingMode.Lighten);
[Fact]
public async Task Image_Blend_ColorDodge() => await TestBlendMode(BitmapBlendingMode.ColorDodge);
[Fact]
public async Task Image_Blend_ColorBurn() => await TestBlendMode(BitmapBlendingMode.ColorBurn);
[Fact]
public async Task Image_Blend_HardLight() => await TestBlendMode(BitmapBlendingMode.HardLight);
[Fact]
public async Task Image_Blend_SoftLight() => await TestBlendMode(BitmapBlendingMode.SoftLight);
[Fact]
public async Task Image_Blend_Difference() => await TestBlendMode(BitmapBlendingMode.Difference);
[Fact]
public async Task Image_Blend_Exclusion() => await TestBlendMode(BitmapBlendingMode.Exclusion);
[Fact]
public async Task Image_Blend_Multiply() => await TestBlendMode(BitmapBlendingMode.Multiply);
[Fact]
public async Task Image_Blend_Hue() => await TestBlendMode(BitmapBlendingMode.Hue);
[Fact]
public async Task Image_Blend_Saturation() => await TestBlendMode(BitmapBlendingMode.Saturation);
[Fact]
public async Task Image_Blend_Color() => await TestBlendMode(BitmapBlendingMode.Color);
[Fact]
public async Task Image_Blend_Luminosity() => await TestBlendMode(BitmapBlendingMode.Luminosity);
private async Task TestBlendMode(BitmapBlendingMode blendMode, [CallerMemberName] string testName = "")
{
var panel = new Panel();
panel.Children.Add(new Image() { Source = _bitmapBase });
panel.Children.Add(new Image() { Source = _bitmapOver, BlendMode = blendMode });
var target = new Decorator
{
Width = 512,
Height = 512,
Child = new Border
{
Background = Brushes.Red,
Child = panel
}
};
await RenderToFile(target,testName);
CompareImages(testName);
}
}
}

70
tests/Avalonia.RenderTests/Controls/ImageCompositionTests.cs

@ -0,0 +1,70 @@
using System.IO;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
using Avalonia.Controls;
using Avalonia.Media;
using Avalonia.Media.Imaging;
using Xunit;
#if AVALONIA_SKIA
namespace Avalonia.Skia.RenderTests
#else
namespace Avalonia.Direct2D1.RenderTests.Controls
#endif
{
public class ImageCompositionTests : TestBase
{
private readonly Bitmap _bitmapA;
private readonly Bitmap _bitmapB;
public ImageCompositionTests()
: base(@"Controls\Image\composition")
{
_bitmapA = new Bitmap(Path.Combine(OutputPath, "A.png"));
_bitmapB = new Bitmap(Path.Combine(OutputPath, "B.png"));
}
[Fact]
public async Task Image_Blend_SourceOver() => await TestCompositeMode(BitmapBlendingMode.SourceOver);
[Fact]
public async Task Image_Blend_Source() => await TestCompositeMode(BitmapBlendingMode.Source);
[Fact]
public async Task Image_Blend_SourceIn() => await TestCompositeMode(BitmapBlendingMode.SourceIn);
[Fact]
public async Task Image_Blend_SourceOut() => await TestCompositeMode(BitmapBlendingMode.SourceOut);
[Fact]
public async Task Image_Blend_SourceAtop() => await TestCompositeMode(BitmapBlendingMode.SourceAtop);
[Fact]
public async Task Image_Blend_Destination() => await TestCompositeMode(BitmapBlendingMode.Destination);
[Fact]
public async Task Image_Blend_DestinationIn() => await TestCompositeMode(BitmapBlendingMode.DestinationIn);
[Fact]
public async Task Image_Blend_DestinationOut() => await TestCompositeMode(BitmapBlendingMode.DestinationOut);
[Fact]
public async Task Image_Blend_DestinationOver() => await TestCompositeMode(BitmapBlendingMode.DestinationOver);
[Fact]
public async Task Image_Blend_DestinationAtop() => await TestCompositeMode(BitmapBlendingMode.DestinationAtop);
[Fact]
public async Task Image_Blend_Xor() => await TestCompositeMode(BitmapBlendingMode.Xor);
private async Task TestCompositeMode(BitmapBlendingMode blendMode, [CallerMemberName] string testName = "")
{
var panel = new Panel();
panel.Children.Add(new Image() { Source = _bitmapA });
panel.Children.Add(new Image() { Source = _bitmapB, BlendMode = blendMode });
var target = new Decorator
{
Width = 512,
Height = 512,
Child = new Border
{
Background = Brushes.Transparent,
Child = panel
}
};
await RenderToFile(target,testName);
CompareImages(testName);
}
}
}

BIN
tests/TestFiles/Direct2D1/Controls/Image/blend/Cat.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 240 KiB

BIN
tests/TestFiles/Direct2D1/Controls/Image/blend/ColourShading - by Stib.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

BIN
tests/TestFiles/Direct2D1/Controls/Image/blend/Image_Blend_Color.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

BIN
tests/TestFiles/Direct2D1/Controls/Image/blend/Image_Blend_ColorBurn.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

BIN
tests/TestFiles/Direct2D1/Controls/Image/blend/Image_Blend_ColorDodge.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

BIN
tests/TestFiles/Direct2D1/Controls/Image/blend/Image_Blend_Darken.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

BIN
tests/TestFiles/Direct2D1/Controls/Image/blend/Image_Blend_Difference.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

BIN
tests/TestFiles/Direct2D1/Controls/Image/blend/Image_Blend_Exclusion.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

BIN
tests/TestFiles/Direct2D1/Controls/Image/blend/Image_Blend_HardLight.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

BIN
tests/TestFiles/Direct2D1/Controls/Image/blend/Image_Blend_Hue.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

BIN
tests/TestFiles/Direct2D1/Controls/Image/blend/Image_Blend_Lighten.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

BIN
tests/TestFiles/Direct2D1/Controls/Image/blend/Image_Blend_Luminosity.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

BIN
tests/TestFiles/Direct2D1/Controls/Image/blend/Image_Blend_Multiply.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

BIN
tests/TestFiles/Direct2D1/Controls/Image/blend/Image_Blend_Nothing.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

BIN
tests/TestFiles/Direct2D1/Controls/Image/blend/Image_Blend_Overlay.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

BIN
tests/TestFiles/Direct2D1/Controls/Image/blend/Image_Blend_Plus.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

BIN
tests/TestFiles/Direct2D1/Controls/Image/blend/Image_Blend_Saturation.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

BIN
tests/TestFiles/Direct2D1/Controls/Image/blend/Image_Blend_Screen.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

BIN
tests/TestFiles/Direct2D1/Controls/Image/blend/Image_Blend_SoftLight.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

BIN
tests/TestFiles/Direct2D1/Controls/Image/composition/A.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
tests/TestFiles/Direct2D1/Controls/Image/composition/B.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

BIN
tests/TestFiles/Direct2D1/Controls/Image/composition/Image_Blend_Destination.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
tests/TestFiles/Direct2D1/Controls/Image/composition/Image_Blend_DestinationAtop.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
tests/TestFiles/Direct2D1/Controls/Image/composition/Image_Blend_DestinationIn.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
tests/TestFiles/Direct2D1/Controls/Image/composition/Image_Blend_DestinationOut.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
tests/TestFiles/Direct2D1/Controls/Image/composition/Image_Blend_DestinationOver.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
tests/TestFiles/Direct2D1/Controls/Image/composition/Image_Blend_Source.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
tests/TestFiles/Direct2D1/Controls/Image/composition/Image_Blend_SourceAtop.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
tests/TestFiles/Direct2D1/Controls/Image/composition/Image_Blend_SourceIn.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
tests/TestFiles/Direct2D1/Controls/Image/composition/Image_Blend_SourceOut.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
tests/TestFiles/Direct2D1/Controls/Image/composition/Image_Blend_SourceOver.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
tests/TestFiles/Direct2D1/Controls/Image/composition/Image_Blend_Xor.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
tests/TestFiles/Skia/Controls/Image/blend/Cat.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 240 KiB

BIN
tests/TestFiles/Skia/Controls/Image/blend/ColourShading - by Stib.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

BIN
tests/TestFiles/Skia/Controls/Image/blend/Image_Blend_Color.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 353 KiB

BIN
tests/TestFiles/Skia/Controls/Image/blend/Image_Blend_ColorBurn.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 KiB

BIN
tests/TestFiles/Skia/Controls/Image/blend/Image_Blend_ColorDodge.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 319 KiB

BIN
tests/TestFiles/Skia/Controls/Image/blend/Image_Blend_Darken.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 327 KiB

BIN
tests/TestFiles/Skia/Controls/Image/blend/Image_Blend_Difference.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 424 KiB

BIN
tests/TestFiles/Skia/Controls/Image/blend/Image_Blend_Exclusion.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 397 KiB

BIN
tests/TestFiles/Skia/Controls/Image/blend/Image_Blend_HardLight.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 301 KiB

BIN
tests/TestFiles/Skia/Controls/Image/blend/Image_Blend_Hue.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 382 KiB

BIN
tests/TestFiles/Skia/Controls/Image/blend/Image_Blend_Lighten.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 288 KiB

BIN
tests/TestFiles/Skia/Controls/Image/blend/Image_Blend_Luminosity.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 296 KiB

BIN
tests/TestFiles/Skia/Controls/Image/blend/Image_Blend_Multiply.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 341 KiB

BIN
tests/TestFiles/Skia/Controls/Image/blend/Image_Blend_Nothing.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

BIN
tests/TestFiles/Skia/Controls/Image/blend/Image_Blend_Overlay.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 387 KiB

BIN
tests/TestFiles/Skia/Controls/Image/blend/Image_Blend_Plus.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 299 KiB

BIN
tests/TestFiles/Skia/Controls/Image/blend/Image_Blend_Saturation.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 440 KiB

BIN
tests/TestFiles/Skia/Controls/Image/blend/Image_Blend_Screen.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 338 KiB

BIN
tests/TestFiles/Skia/Controls/Image/blend/Image_Blend_SoftLight.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 405 KiB

BIN
tests/TestFiles/Skia/Controls/Image/composition/A.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
tests/TestFiles/Skia/Controls/Image/composition/B.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

BIN
tests/TestFiles/Skia/Controls/Image/composition/Image_Blend_Destination.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
tests/TestFiles/Skia/Controls/Image/composition/Image_Blend_DestinationAtop.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
tests/TestFiles/Skia/Controls/Image/composition/Image_Blend_DestinationIn.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
tests/TestFiles/Skia/Controls/Image/composition/Image_Blend_DestinationOut.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

BIN
tests/TestFiles/Skia/Controls/Image/composition/Image_Blend_DestinationOver.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
tests/TestFiles/Skia/Controls/Image/composition/Image_Blend_Source.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

BIN
tests/TestFiles/Skia/Controls/Image/composition/Image_Blend_SourceAtop.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
tests/TestFiles/Skia/Controls/Image/composition/Image_Blend_SourceIn.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
tests/TestFiles/Skia/Controls/Image/composition/Image_Blend_SourceOut.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
tests/TestFiles/Skia/Controls/Image/composition/Image_Blend_SourceOver.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
tests/TestFiles/Skia/Controls/Image/composition/Image_Blend_Xor.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Loading…
Cancel
Save