Browse Source

Use SKBitmap-backed bitmap for RenderTargetBitmap

pull/11235/head
Nikita Tsukanov 3 years ago
parent
commit
e3dd353da3
  1. 11
      src/Skia/Avalonia.Skia/PlatformRenderInterface.cs
  2. 31
      src/Skia/Avalonia.Skia/RenderTargetBitmapImpl.cs
  3. 2
      src/Skia/Avalonia.Skia/WriteableBitmapImpl.cs

11
src/Skia/Avalonia.Skia/PlatformRenderInterface.cs

@ -191,16 +191,7 @@ namespace Avalonia.Skia
throw new ArgumentException("Height can't be less than 1", nameof(size)); throw new ArgumentException("Height can't be less than 1", nameof(size));
} }
var createInfo = new SurfaceRenderTarget.CreateInfo return new RenderTargetBitmapImpl(size, dpi);
{
Width = size.Width,
Height = size.Height,
Dpi = dpi,
DisableTextLcdRendering = false,
DisableManualFbo = true,
};
return new SurfaceRenderTarget(createInfo);
} }
/// <inheritdoc /> /// <inheritdoc />

31
src/Skia/Avalonia.Skia/RenderTargetBitmapImpl.cs

@ -0,0 +1,31 @@
using System.IO;
using Avalonia.Controls.Platform.Surfaces;
using Avalonia.Media.Imaging;
using Avalonia.Platform;
using SkiaSharp;
namespace Avalonia.Skia;
internal class RenderTargetBitmapImpl : WriteableBitmapImpl,
IRenderTargetBitmapImpl,
IFramebufferPlatformSurface
{
private readonly FramebufferRenderTarget _renderTarget;
public RenderTargetBitmapImpl(PixelSize size, Vector dpi) : base(size, dpi,
SKImageInfo.PlatformColorType == SKColorType.Rgba8888 ? PixelFormats.Rgba8888 : PixelFormat.Bgra8888,
AlphaFormat.Premul)
{
_renderTarget = new FramebufferRenderTarget(this);
}
public IDrawingContextImpl CreateDrawingContext() => _renderTarget.CreateDrawingContext();
public bool IsCorrupted => false;
public override void Dispose()
{
_renderTarget.Dispose();
base.Dispose();
}
}

2
src/Skia/Avalonia.Skia/WriteableBitmapImpl.cs

@ -131,7 +131,7 @@ namespace Avalonia.Skia
} }
/// <inheritdoc /> /// <inheritdoc />
public void Dispose() public virtual void Dispose()
{ {
_bitmap.Dispose(); _bitmap.Dispose();
} }

Loading…
Cancel
Save