diff --git a/src/Avalonia.Controls/Image.cs b/src/Avalonia.Controls/Image.cs index 8d249fe790..5fc7d8b6b6 100644 --- a/src/Avalonia.Controls/Image.cs +++ b/src/Avalonia.Controls/Image.cs @@ -69,10 +69,11 @@ namespace Avalonia.Controls { var source = Source; - if (source != null) + if (source != null && Bounds.Width > 0 && Bounds.Height > 0) { Rect viewPort = new Rect(Bounds.Size); Size sourceSize = source.Size; + Vector scale = Stretch.CalculateScaling(Bounds.Size, sourceSize, StretchDirection); Size scaledSize = sourceSize * scale; Rect destRect = viewPort diff --git a/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneBuilderTests.cs b/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneBuilderTests.cs index d59a94d597..b0f890b484 100644 --- a/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneBuilderTests.cs +++ b/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneBuilderTests.cs @@ -360,7 +360,7 @@ namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph var result = initial.CloneScene(); sceneBuilder.Update(result, border); - + var borderNode = (VisualNode)result.Root.Children[0]; Assert.Same(border, borderNode.Visual); @@ -880,16 +880,24 @@ namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph { using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface)) { - var bitmap = RefCountable.Create(Mock.Of()); + var bitmap = RefCountable.Create(Mock.Of( + x => x.PixelSize == new PixelSize(100, 100) && + x.Dpi == new Vector(96, 96))); + Image img; var tree = new TestRoot { Child = img = new Image { - Source = new Bitmap(bitmap) + Source = new Bitmap(bitmap), + Height = 100, + Width = 100 } }; + tree.Measure(Size.Infinity); + tree.Arrange(new Rect(new Size(100, 100))); + Assert.Equal(2, bitmap.RefCount); IRef operation; @@ -912,16 +920,24 @@ namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph { using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface)) { - var bitmap = RefCountable.Create(Mock.Of()); + var bitmap = RefCountable.Create(Mock.Of( + x => x.PixelSize == new PixelSize(100, 100) && + x.Dpi == new Vector(96, 96))); + Image img; var tree = new TestRoot { Child = img = new Image { - Source = new Bitmap(bitmap) + Source = new Bitmap(bitmap), + Width = 100, + Height = 100 } }; + tree.Measure(Size.Infinity); + tree.Arrange(new Rect(new Size(100, 100))); + var scene = new Scene(tree); var sceneBuilder = new SceneBuilder(); sceneBuilder.UpdateAll(scene);