stitch_something/StitchATon/DTO/Generate.cs

48 lines
1.2 KiB
C#
Raw Normal View History

2025-08-01 15:29:06 +07:00
using JetBrains.Annotations;
using OpenCvSharp;
namespace StitchATon.DTO;
public class GenerateInput
{
public required string CanvasRect { get; [UsedImplicitly] init; }
public required float[] CropOffset { get; [UsedImplicitly] init; }
public required float[] CropSize { get; [UsedImplicitly] init; }
public required float OutputScale { get; [UsedImplicitly] init; }
public Rect ParsedCanvasRect()
{
var corners = CanvasRect.Split( ":" );
var c1 = ParseCanvasCoord( corners[0] );
var c2 = ParseCanvasCoord( corners[1] );
return new Rect(
int.Min( c1.X, c2.X ),
int.Min( c1.Y, c2.Y ),
int.Abs( c1.X - c2.X ) + 1, // Inclusive bbox
int.Abs( c1.Y - c2.Y ) + 1 // Inclusive bbox
);
}
private Point ParseCanvasCoord(string labwareCoord)
{
int y = 0;
int x = 0;
foreach( var c in labwareCoord )
{
if( 'A' <= c && c <= 'Z' )
y = ( y * 26 ) + ( c - 'A' + 1);
else
x = ( x * 10 ) + ( c - '0' );
}
y--;
x--;
return new(x, y);
}
public Point2f ParsedCropOffset() => new( CropOffset[0], CropOffset[1] );
public Point2f ParsedCropSize() => new( CropSize[0], CropSize[1] );
}