diff --git a/src/Avalonia.Visuals/Media/PixelRect.cs b/src/Avalonia.Visuals/Media/PixelRect.cs
index c062112ace..32a728475f 100644
--- a/src/Avalonia.Visuals/Media/PixelRect.cs
+++ b/src/Avalonia.Visuals/Media/PixelRect.cs
@@ -377,7 +377,7 @@ namespace Avalonia
/// The device-independent rect.
public static PixelRect FromRect(Rect rect, double scale) => new PixelRect(
PixelPoint.FromPoint(rect.Position, scale),
- PixelSize.FromSize(rect.Size, scale));
+ FromPointCeiling(rect.BottomRight, new Vector(scale, scale)));
///
/// Converts a to device pixels using the specified scaling factor.
@@ -387,7 +387,7 @@ namespace Avalonia
/// The device-independent point.
public static PixelRect FromRect(Rect rect, Vector scale) => new PixelRect(
PixelPoint.FromPoint(rect.Position, scale),
- PixelSize.FromSize(rect.Size, scale));
+ FromPointCeiling(rect.BottomRight, scale));
///
/// Converts a to device pixels using the specified dots per inch (DPI).
@@ -397,7 +397,7 @@ namespace Avalonia
/// The device-independent point.
public static PixelRect FromRectWithDpi(Rect rect, double dpi) => new PixelRect(
PixelPoint.FromPointWithDpi(rect.Position, dpi),
- PixelSize.FromSizeWithDpi(rect.Size, dpi));
+ FromPointCeiling(rect.BottomRight, new Vector(dpi / 96, dpi / 96)));
///
/// Converts a to device pixels using the specified dots per inch (DPI).
@@ -407,7 +407,7 @@ namespace Avalonia
/// The device-independent point.
public static PixelRect FromRectWithDpi(Rect rect, Vector dpi) => new PixelRect(
PixelPoint.FromPointWithDpi(rect.Position, dpi),
- PixelSize.FromSizeWithDpi(rect.Size, dpi));
+ FromPointCeiling(rect.BottomRight, dpi / 96));
///
/// Returns the string representation of the rectangle.
@@ -441,5 +441,12 @@ namespace Avalonia
);
}
}
+
+ private static PixelPoint FromPointCeiling(Point point, Vector scale)
+ {
+ return new PixelPoint(
+ (int)Math.Ceiling(point.X * scale.X),
+ (int)Math.Ceiling(point.Y * scale.Y));
+ }
}
}