62 lines
2.2 KiB
C#
62 lines
2.2 KiB
C#
using Domain;
|
|
using Domain.Interfaces;
|
|
using Google.Protobuf;
|
|
using LayerClients;
|
|
using SkiaSharp;
|
|
|
|
namespace Make3.RenderServer.Layers;
|
|
|
|
public class TestLayer(LayerClients.TestLayer.TestLayerClient grpcClient) : ILayer
|
|
{
|
|
public uint Order { get; init; }
|
|
public OpticalSchema OpticalSchema { get; init; }
|
|
public SKBitmap? Mask { get; init; }
|
|
public required SKBitmap Image { get; init; }
|
|
public bool InvertMask { get; init; }
|
|
|
|
private readonly LayerClients.TestLayer.TestLayerClient _grpcClient = grpcClient;
|
|
|
|
public async Task Prerender()
|
|
{
|
|
using var imageData = Image.Encode(SKEncodedImageFormat.Png, 100);
|
|
using var maskData = Mask?.Encode(SKEncodedImageFormat.Png, 100);
|
|
var request = new PrerenderRequest
|
|
{
|
|
OpticalSchemaData = OpticalSchema.ToString(),
|
|
Image = ByteString.CopyFrom(imageData.Span),
|
|
};
|
|
if (maskData != null)
|
|
{
|
|
request.Mask = ByteString.CopyFrom(maskData.Span);
|
|
request.InvertMask = InvertMask;
|
|
}
|
|
|
|
var response = await _grpcClient.PrerenderAsync(request);
|
|
}
|
|
|
|
public async Task<SKBitmap> Render(uint x, uint y, uint frameWidth, uint frameHeight, SKBitmap? automask)
|
|
{
|
|
//здесь надо кусок изображения взять
|
|
using var imageData = Image.Encode(SKEncodedImageFormat.Png, 100);
|
|
using var maskData = Mask?.Encode(SKEncodedImageFormat.Png, 100);
|
|
using var automaskData = automask?.Encode(SKEncodedImageFormat.Png, 100);
|
|
var request = new RenderRequest
|
|
{
|
|
X = x,
|
|
Y = y,
|
|
FrameWidth = frameWidth,
|
|
FrameHeight = frameHeight,
|
|
Image = ByteString.CopyFrom(imageData.Span),
|
|
// Automask = ByteString.CopyFrom(imageData.Span),
|
|
};
|
|
if (maskData != null)
|
|
{
|
|
request.Mask = ByteString.CopyFrom(maskData.Span);
|
|
request.InvertMask = InvertMask;
|
|
}
|
|
request.Automask = automaskData == null ? null : ByteString.CopyFrom(automaskData.Span);
|
|
var response = await _grpcClient.RenderAsync(request);
|
|
var byteArray = response.RenderedImage.ToByteArray();
|
|
return SKBitmap.Decode(byteArray);
|
|
}
|
|
} |