NodePipeline/NodePipeline.Application/Nodes/FileImageSourceNode.cs
2026-01-02 20:55:25 +03:00

49 lines
1.5 KiB
C#

using System.ComponentModel.DataAnnotations;
using NodePipeline.Abstractions.Attributes;
using NodePipeline.Abstractions.Attributes.Validation.Node;
using NodePipeline.Abstractions.Attributes.Validation.NodeField;
using NodePipeline.Abstractions.Interfaces.Nodes;
using NodePipeline.Abstractions.Models;
namespace NodePipeline.Application.Nodes;
[HasNodeValidator(typeof(FileImageSourceNodeValidator))]
public class FileImageSourceNode : INode
{
[NodeField(FieldDirection.Parameter)]
[Required]
[HasMinLength(1)]
public NodeField<string> FileName { get; set; } = null!; //FileName
[NodeField(FieldDirection.Parameter)]
[Required]
[HasLengthBetween(1, 10)]
public NodeField<string> Extension { get; set; } = null!;
[NodeField(FieldDirection.Parameter)]
[Required]
[HasMinLength(1)]
public NodeField<string> Directory { get; set; } = null!;
[NodeField(FieldDirection.Output)]
// public NodeField<ImageBuffer?> Output { get; set; } = null!;
public NodeField<ImageBuffer?> Output { get; set; } = null!;
[NodeField(FieldDirection.Output)] public NodeField<bool> ImageLoaded { get; set; } = null!;
public void Execute()
{
var path = Path.Combine(Directory.Value, FileName.Value + "." + Extension.Value.TrimStart('.'));
try
{
var image = ImageLoader.Load(path);
Output.Value = image;
ImageLoaded.Value = true;
}
catch
{
Output.Value = null;
ImageLoaded.Value = false;
}
}
}