Browse Source

Return WriteableBitmap from the GetLastRenderedFrame API

pull/11193/head
Max Katz 4 years ago
parent
commit
04ff14f0cd
  1. 4
      src/Headless/Avalonia.Headless/HeadlessWindowExtensions.cs
  2. 4
      src/Headless/Avalonia.Headless/HeadlessWindowImpl.cs
  3. 2
      src/Headless/Avalonia.Headless/IHeadlessWindow.cs

4
src/Headless/Avalonia.Headless/HeadlessWindowExtensions.cs

@ -17,7 +17,7 @@ public static class HeadlessWindowExtensions
/// Triggers a renderer timer tick and captures last rendered frame. /// Triggers a renderer timer tick and captures last rendered frame.
/// </summary> /// </summary>
/// <returns>Bitmap with last rendered frame. Null, if nothing was rendered.</returns> /// <returns>Bitmap with last rendered frame. Null, if nothing was rendered.</returns>
public static Bitmap? CaptureRenderedFrame(this TopLevel topLevel) public static WriteableBitmap? CaptureRenderedFrame(this TopLevel topLevel)
{ {
Dispatcher.UIThread.RunJobs(); Dispatcher.UIThread.RunJobs();
AvaloniaHeadlessPlatform.ForceRenderTimerTick(); AvaloniaHeadlessPlatform.ForceRenderTimerTick();
@ -29,7 +29,7 @@ public static class HeadlessWindowExtensions
/// Note, in order to trigger rendering timer, call <see cref="AvaloniaHeadlessPlatform.ForceRenderTimerTick"/> method. /// Note, in order to trigger rendering timer, call <see cref="AvaloniaHeadlessPlatform.ForceRenderTimerTick"/> method.
/// </summary> /// </summary>
/// <returns>Bitmap with last rendered frame. Null, if nothing was rendered.</returns> /// <returns>Bitmap with last rendered frame. Null, if nothing was rendered.</returns>
public static Bitmap? GetLastRenderedFrame(this TopLevel topLevel) public static WriteableBitmap? GetLastRenderedFrame(this TopLevel topLevel)
{ {
if (AvaloniaLocator.Current.GetService<IPlatformRenderInterface>() is HeadlessPlatformRenderInterface) if (AvaloniaLocator.Current.GetService<IPlatformRenderInterface>() is HeadlessPlatformRenderInterface)
{ {

4
src/Headless/Avalonia.Headless/HeadlessWindowImpl.cs

@ -214,7 +214,7 @@ namespace Avalonia.Headless
}); });
} }
public Bitmap? GetLastRenderedFrame() public WriteableBitmap? GetLastRenderedFrame()
{ {
lock (_sync) lock (_sync)
{ {
@ -224,7 +224,7 @@ namespace Avalonia.Headless
} }
using var lockedFramebuffer = _lastRenderedFrame.Lock(); using var lockedFramebuffer = _lastRenderedFrame.Lock();
return new Bitmap(lockedFramebuffer.Format, AlphaFormat.Opaque, lockedFramebuffer.Address, return new WriteableBitmap(lockedFramebuffer.Format, AlphaFormat.Opaque, lockedFramebuffer.Address,
lockedFramebuffer.Size, lockedFramebuffer.Dpi, lockedFramebuffer.RowBytes); lockedFramebuffer.Size, lockedFramebuffer.Dpi, lockedFramebuffer.RowBytes);
} }
} }

2
src/Headless/Avalonia.Headless/IHeadlessWindow.cs

@ -8,7 +8,7 @@ namespace Avalonia.Headless
{ {
internal interface IHeadlessWindow internal interface IHeadlessWindow
{ {
Bitmap? GetLastRenderedFrame(); WriteableBitmap? GetLastRenderedFrame();
void KeyPress(Key key, RawInputModifiers modifiers); void KeyPress(Key key, RawInputModifiers modifiers);
void KeyRelease(Key key, RawInputModifiers modifiers); void KeyRelease(Key key, RawInputModifiers modifiers);
void MouseDown(Point point, MouseButton button, RawInputModifiers modifiers = RawInputModifiers.None); void MouseDown(Point point, MouseButton button, RawInputModifiers modifiers = RawInputModifiers.None);

Loading…
Cancel
Save