diff --git a/src/Avalonia.Visuals/Rendering/Utilities/TileBrushCalculator.cs b/src/Avalonia.Visuals/Rendering/Utilities/TileBrushCalculator.cs
index 97af33c3e2..52a8fb5ab7 100644
--- a/src/Avalonia.Visuals/Rendering/Utilities/TileBrushCalculator.cs
+++ b/src/Avalonia.Visuals/Rendering/Utilities/TileBrushCalculator.cs
@@ -9,7 +9,6 @@ namespace Avalonia.Rendering.Utilities
{
private readonly Size _imageSize;
private readonly Rect _drawRect;
- private readonly Vector _dpi;
public bool IsValid { get; }
@@ -19,7 +18,7 @@ namespace Avalonia.Rendering.Utilities
/// The brush to be rendered.
/// The size of the content of the tile brush.
/// The size of the control to which the brush is being rendered.
- public TileBrushCalculator(ITileBrush brush, Size contentSize, Size targetSize, Vector dpi)
+ public TileBrushCalculator(ITileBrush brush, Size contentSize, Size targetSize)
: this(
brush.TileMode,
brush.Stretch,
@@ -28,8 +27,7 @@ namespace Avalonia.Rendering.Utilities
brush.SourceRect,
brush.DestinationRect,
contentSize,
- targetSize,
- dpi)
+ targetSize)
{
}
@@ -52,14 +50,12 @@ namespace Avalonia.Rendering.Utilities
RelativeRect sourceRect,
RelativeRect destinationRect,
Size contentSize,
- Size targetSize,
- Vector dpi)
+ Size targetSize)
{
_imageSize = contentSize;
- _dpi = dpi;
- SourceRect = sourceRect.ToPixels(_imageSize) * (_dpi / 96);
- DestinationRect = destinationRect.ToPixels(targetSize) * (dpi / 96);
+ SourceRect = sourceRect.ToPixels(_imageSize);
+ DestinationRect = destinationRect.ToPixels(targetSize);
var scale = stretch.CalculateScaling(DestinationRect.Size, SourceRect.Size);
var translate = CalculateTranslate(alignmentX, alignmentY, SourceRect, DestinationRect, scale);
diff --git a/src/Windows/Avalonia.Direct2D1/Media/ImageBrushImpl.cs b/src/Windows/Avalonia.Direct2D1/Media/ImageBrushImpl.cs
index 6c2a88af17..2ca2a77fb8 100644
--- a/src/Windows/Avalonia.Direct2D1/Media/ImageBrushImpl.cs
+++ b/src/Windows/Avalonia.Direct2D1/Media/ImageBrushImpl.cs
@@ -20,8 +20,9 @@ namespace Avalonia.Direct2D1.Media
BitmapImpl bitmap,
Size targetSize)
{
- var calc = new TileBrushCalculator(brush, bitmap.PixelSize.ToSize(96), targetSize, new Vector(target.DotsPerInch.Width, target.DotsPerInch.Height));
-
+ var dpi = new Vector(target.DotsPerInch.Width, target.DotsPerInch.Height);
+ var calc = new TileBrushCalculator(brush, bitmap.PixelSize.ToSize(dpi), targetSize);
+
if (!calc.NeedsIntermediate)
{
_bitmap = bitmap.GetDirect2DBitmap(target);
diff --git a/tests/TestFiles/Direct2D1/Media/VisualBrush/VisualBrush_Checkerboard_144_Dpi.expected.png b/tests/TestFiles/Direct2D1/Media/VisualBrush/VisualBrush_Checkerboard_144_Dpi.expected.png
new file mode 100644
index 0000000000..7e674b849a
Binary files /dev/null and b/tests/TestFiles/Direct2D1/Media/VisualBrush/VisualBrush_Checkerboard_144_Dpi.expected.png differ
diff --git a/tests/TestFiles/Direct2D1/Media/VisualBrush/VisualBrush_Checkerboard_192_Dpi.expected.png b/tests/TestFiles/Direct2D1/Media/VisualBrush/VisualBrush_Checkerboard_192_Dpi.expected.png
new file mode 100644
index 0000000000..f80ac7f90d
Binary files /dev/null and b/tests/TestFiles/Direct2D1/Media/VisualBrush/VisualBrush_Checkerboard_192_Dpi.expected.png differ
diff --git a/tests/TestFiles/Skia/Media/VisualBrush/VisualBrush_Checkerboard_144_Dpi.expected.png b/tests/TestFiles/Skia/Media/VisualBrush/VisualBrush_Checkerboard_144_Dpi.expected.png
new file mode 100644
index 0000000000..7e674b849a
Binary files /dev/null and b/tests/TestFiles/Skia/Media/VisualBrush/VisualBrush_Checkerboard_144_Dpi.expected.png differ
diff --git a/tests/TestFiles/Skia/Media/VisualBrush/VisualBrush_Checkerboard_192_Dpi.expected.png b/tests/TestFiles/Skia/Media/VisualBrush/VisualBrush_Checkerboard_192_Dpi.expected.png
new file mode 100644
index 0000000000..f80ac7f90d
Binary files /dev/null and b/tests/TestFiles/Skia/Media/VisualBrush/VisualBrush_Checkerboard_192_Dpi.expected.png differ