121 lines
4.6 KiB
C#
121 lines
4.6 KiB
C#
using Domain;
|
|
using Domain.Interfaces;
|
|
using Domain.Project;
|
|
using ImageMagick;
|
|
using Make3.CommonTypes.Interfaces;
|
|
using Make3.CommonTypes.Interfaces.Matrices;
|
|
using Make3.RenderServer.Layers;
|
|
|
|
namespace Make3.RenderServer;
|
|
|
|
public class TestProjectBackgroundService : BackgroundService
|
|
{
|
|
private readonly IServiceProvider _serviceProvider;
|
|
private readonly LayerClients.TestLayer.TestLayerClient _testLaterGrpcClient;
|
|
|
|
public TestProjectBackgroundService(IServiceProvider serviceProvider, LayerClients.TestLayer.TestLayerClient testLaterGrpcClient)
|
|
{
|
|
_serviceProvider = serviceProvider;
|
|
_testLaterGrpcClient = testLaterGrpcClient;
|
|
}
|
|
|
|
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
|
{
|
|
var dir = @"C:\DOTProjects\ImagesForNewM3";
|
|
var image1 = new MagickImage(Path.Combine(dir, "CrystalTest1_2083x2083_16bit.png"));//"Sphere16b-0.png"));
|
|
var image2 = new MagickImage(Path.Combine(dir, "Crystal_Mask_2083x2083.png"));
|
|
var image3 = new MagickImage(Path.Combine(dir, "AMask.png"));
|
|
|
|
using var scope = _serviceProvider.CreateScope();
|
|
var matrixAbstractFactory = scope.ServiceProvider.GetRequiredService<IMatrixAbstractFactory>();
|
|
|
|
var project = new Project
|
|
{
|
|
Id = Guid.NewGuid(),
|
|
HardwareSettings = new HardwareSettings
|
|
{
|
|
Ppu = 76.8d,
|
|
UnitSize = 12,
|
|
IlluminationLevels = new IlluminationLevels(14, 110, 222),
|
|
MatrixResolution = new Resolution(1920, 1080),
|
|
FrameResolution = new Resolution(1536, 1024),
|
|
FrameSize = new Size(240, 160, SizeUnit.um),
|
|
},
|
|
Height = Convert.ToUInt32(image1.Width),
|
|
Width = Convert.ToUInt32(image1.Height),
|
|
};
|
|
|
|
project.Layers =
|
|
[
|
|
new TestLayer(_testLaterGrpcClient, matrixAbstractFactory)
|
|
{
|
|
Order = 0,
|
|
Image = image1,
|
|
Mask = ConvertImageToMask(matrixAbstractFactory, image2),
|
|
HologramWidth = 25.0,
|
|
HologramHeight = 25.0,
|
|
HardwareSettings = project.HardwareSettings,
|
|
OpticalSchema = OpticalSchema.Sp11,
|
|
InvertMask = false,
|
|
DifractionAngle = 33.0,
|
|
PosterizeResult = false,
|
|
InvertProfile = false,
|
|
InvertHorizontalAngle = false,
|
|
DirectAngle = 90.0,
|
|
AngleOfView = 180.0,
|
|
ObjectAngle = 80.0,//90.0 + 10,//35,
|
|
HorizontalRoughness = 0.0,
|
|
VerticalRoughness = 0.0,
|
|
},
|
|
new TestLayer(_testLaterGrpcClient, matrixAbstractFactory)
|
|
{
|
|
Order = 1,
|
|
Image = image2,
|
|
Mask = ConvertImageToMask(matrixAbstractFactory, image3),
|
|
InvertMask = false,
|
|
OpticalSchema = OpticalSchema.Sp11,
|
|
},
|
|
];
|
|
var renderManager = scope.ServiceProvider.GetRequiredService<IRenderManager>();
|
|
var renderId = await renderManager.StartRender(project);
|
|
}
|
|
|
|
private IBinaryMask ConvertImageToMask(IMatrixAbstractFactory matrixAbstractFactory, MagickImage image)
|
|
{
|
|
var binaryMaskFactory = (IBinaryMaskFactory)matrixAbstractFactory.GetFactory<bool>();
|
|
var result = binaryMaskFactory.Create((int)image.Width, (int)image.Height, 0);
|
|
using var pixels = image.GetPixels();
|
|
// for (uint y = 0; y < image.Height; y++)
|
|
// {
|
|
// for (uint x = 0; x < image.Width; x++)
|
|
// {
|
|
// var pixel = image.GetPixels().GetPixel((int)x, (int)y);
|
|
// var red = pixel.ToColor()?.R ?? 0;
|
|
// // var blue = pixel.ToColor()?.B ?? 0;
|
|
// // var green = pixel.ToColor()?.G ?? 0;
|
|
// var intensity = red;// + blue + green;
|
|
// if (intensity == 0)
|
|
// {
|
|
// result.MakeOpaque(x, y);
|
|
// }
|
|
// }
|
|
// } /// 13 sec - 3 Ch 10sec - 1 ch
|
|
|
|
for (int y = 0; y < image.Height; y++)
|
|
{
|
|
for (int x = 0; x < image.Width; x++)
|
|
{
|
|
var intensity = pixels.GetPixel(x, y).ToColor().R;
|
|
//+ pixels.GetPixel(x, y).ToColor().G + pixels.GetPixel(x, y).ToColor().B;
|
|
|
|
if (intensity == 0)
|
|
{
|
|
result.MakeOpaque(x, y);
|
|
}
|
|
}
|
|
} /// 13sec - 3ch, 5 sec - 1 ch
|
|
|
|
var p = result.GetBlackCellsPercentage();
|
|
return result;
|
|
}
|
|
} |