diff --git a/src/Windows/Avalonia.Direct2D1/Media/Imaging/D2DRenderTargetBitmapImpl.cs b/src/Windows/Avalonia.Direct2D1/Media/Imaging/D2DRenderTargetBitmapImpl.cs index 72367ac50f..fbe7f840d7 100644 --- a/src/Windows/Avalonia.Direct2D1/Media/Imaging/D2DRenderTargetBitmapImpl.cs +++ b/src/Windows/Avalonia.Direct2D1/Media/Imaging/D2DRenderTargetBitmapImpl.cs @@ -1,8 +1,10 @@ // Copyright (c) The Avalonia Project. All rights reserved. // Licensed under the MIT license. See licence.md file in the project root for full license information. +using System.IO; using Avalonia.Platform; using Avalonia.Rendering; +using Avalonia.Utilities; using SharpDX; using SharpDX.Direct2D1; using D2DBitmap = SharpDX.Direct2D1.Bitmap; @@ -49,5 +51,22 @@ namespace Avalonia.Direct2D1.Media.Imaging { return new OptionalDispose(_renderTarget.Bitmap, false); } + + public override void Save(Stream stream) + { + using (var wic = new WicRenderTargetBitmapImpl(PixelSize, Dpi)) + { + using (var dc = wic.CreateDrawingContext(null)) + { + dc.DrawImage( + RefCountable.CreateUnownedNotClonable(this), + 1, + new Rect(PixelSize.ToSize(Dpi.X)), + new Rect(PixelSize.ToSize(Dpi.X))); + } + + wic.Save(stream); + } + } } } diff --git a/src/Windows/Avalonia.Direct2D1/Utils/DebugUtils.cs b/src/Windows/Avalonia.Direct2D1/Utils/DebugUtils.cs new file mode 100644 index 0000000000..9ce8f15cf4 --- /dev/null +++ b/src/Windows/Avalonia.Direct2D1/Utils/DebugUtils.cs @@ -0,0 +1,13 @@ +using Avalonia.Direct2D1.Media.Imaging; + +namespace Avalonia.Direct2D1.Utils +{ + internal static class DebugUtils + { + public static void Save(SharpDX.Direct2D1.BitmapRenderTarget bitmap, string filename) + { + var rtb = new D2DRenderTargetBitmapImpl(bitmap); + rtb.Save(filename); + } + } +}