Forge
csharp4405de34
1using Avalonia;
2using Avalonia.Controls;
3using Avalonia.Media;
4using Avalonia.Media.Imaging;
5
6namespace CascadeIDE.Tests.VisualVerification;
7
8/// <summary>
9/// Рендер Avalonia-контрола в PNG (software <see cref="RenderTargetBitmap"/>).
10/// Для headless-тестов (<see cref="Avalonia.Headless.XUnit.AvaloniaFact"/>) не требуется видимое окно, если выполнены Measure/Arrange.
11/// </summary>
12public static class ControlVisualCapture
13{
14 /// <summary>Снимает контрол в память PNG. Размер задаётся явно (DIP).</summary>
15 public static byte[] CaptureControlToPng(Control control, Size size, Vector dpi)
16 {
17 control.Width = size.Width;
18 control.Height = size.Height;
19 control.Measure(size);
20 control.Arrange(new Rect(size));
21
22 var pixelSize = new PixelSize(
23 Math.Max(1, (int)Math.Ceiling(size.Width)),
24 Math.Max(1, (int)Math.Ceiling(size.Height)));
25
26 using var rtb = new RenderTargetBitmap(pixelSize, dpi);
27 rtb.Render(control);
28
29 using var ms = new MemoryStream();
30 rtb.Save(ms);
31 return ms.ToArray();
32 }
33}
34
View only · write via MCP/CIDE