Browse Source

Merge pull request #6014 from AvaloniaUI/feature/imagedrawing

Implemented ImageDrawing.
release/0.10.6
Dan Walmsley 5 years ago
parent
commit
9123a54185
  1. 53
      src/Avalonia.Visuals/Media/ImageDrawing.cs
  2. 84
      tests/Avalonia.RenderTests/Media/ImageDrawingTests.cs
  3. BIN
      tests/TestFiles/Direct2D1/Media/ImageDrawing/ImageDrawing_BottomRight.expected.png
  4. BIN
      tests/TestFiles/Direct2D1/Media/ImageDrawing/ImageDrawing_Fill.expected.png
  5. BIN
      tests/TestFiles/Direct2D1/Media/ImageDrawing/github_icon.png
  6. BIN
      tests/TestFiles/Skia/Media/ImageDrawing/ImageDrawing_BottomRight.expected.png
  7. BIN
      tests/TestFiles/Skia/Media/ImageDrawing/ImageDrawing_Fill.expected.png
  8. BIN
      tests/TestFiles/Skia/Media/ImageDrawing/github_icon.png

53
src/Avalonia.Visuals/Media/ImageDrawing.cs

@ -0,0 +1,53 @@
#nullable enable
namespace Avalonia.Media
{
/// <summary>
/// Draws an image within a region defined by a <see cref="Rect"/>.
/// </summary>
public class ImageDrawing : Drawing
{
/// <summary>
/// Defines the <see cref="ImageSource"/> property.
/// </summary>
public static readonly StyledProperty<IImage?> ImageSourceProperty =
AvaloniaProperty.Register<ImageDrawing, IImage?>(nameof(ImageSource));
/// <summary>
/// Defines the <see cref="Rect"/> property.
/// </summary>
public static readonly StyledProperty<Rect> RectProperty =
AvaloniaProperty.Register<ImageDrawing, Rect>(nameof(Rect));
/// <summary>
/// Gets or sets the source of the image.
/// </summary>
public IImage? ImageSource
{
get => GetValue(ImageSourceProperty);
set => SetValue(ImageSourceProperty, value);
}
/// <summary>
/// Gets or sets region in which the image is drawn.
/// </summary>
public Rect Rect
{
get => GetValue(RectProperty);
set => SetValue(RectProperty, value);
}
public override void Draw(DrawingContext context)
{
var imageSource = ImageSource;
var rect = Rect;
if (imageSource is object && !rect.IsEmpty)
{
context.DrawImage(imageSource, rect);
}
}
public override Rect GetBounds() => Rect;
}
}

84
tests/Avalonia.RenderTests/Media/ImageDrawingTests.cs

@ -0,0 +1,84 @@
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.Media
#endif
{
public class ImageDrawingTests : TestBase
{
public ImageDrawingTests()
: base(@"Media\ImageDrawing")
{
}
private string BitmapPath
{
get { return System.IO.Path.Combine(OutputPath, "github_icon.png"); }
}
[Fact]
public async Task ImageDrawing_Fill()
{
Decorator target = new Decorator
{
Width = 200,
Height = 200,
Child = new Image
{
Source = new DrawingImage
{
Drawing = new ImageDrawing
{
ImageSource = new Bitmap(BitmapPath),
Rect = new Rect(0, 0, 200, 200),
}
}
}
};
await RenderToFile(target);
CompareImages();
}
[Fact]
public async Task ImageDrawing_BottomRight()
{
Decorator target = new Decorator
{
Width = 200,
Height = 200,
Child = new Image
{
Source = new DrawingImage
{
Drawing = new DrawingGroup
{
Children =
{
new GeometryDrawing
{
Geometry = StreamGeometry.Parse("m0,0 l200,200"),
Brush = Brushes.Black,
},
new ImageDrawing
{
ImageSource = new Bitmap(BitmapPath),
Rect = new Rect(100, 100, 100, 100),
}
}
}
}
}
};
await RenderToFile(target);
CompareImages();
}
}
}

BIN
tests/TestFiles/Direct2D1/Media/ImageDrawing/ImageDrawing_BottomRight.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
tests/TestFiles/Direct2D1/Media/ImageDrawing/ImageDrawing_Fill.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
tests/TestFiles/Direct2D1/Media/ImageDrawing/github_icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
tests/TestFiles/Skia/Media/ImageDrawing/ImageDrawing_BottomRight.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
tests/TestFiles/Skia/Media/ImageDrawing/ImageDrawing_Fill.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

BIN
tests/TestFiles/Skia/Media/ImageDrawing/github_icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Loading…
Cancel
Save