diff options
Diffstat (limited to 'UVtools.Core/FileFormats/ImageFile.cs')
-rw-r--r-- | UVtools.Core/FileFormats/ImageFile.cs | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/UVtools.Core/FileFormats/ImageFile.cs b/UVtools.Core/FileFormats/ImageFile.cs new file mode 100644 index 0000000..5e2761e --- /dev/null +++ b/UVtools.Core/FileFormats/ImageFile.cs @@ -0,0 +1,87 @@ +using System; +using System.IO; +using Emgu.CV; +using Emgu.CV.CvEnum; +using UVtools.Core.Operations; +using Size = System.Drawing.Size; + +namespace UVtools.Core.FileFormats +{ + public class ImageFile : FileFormat + { + public override FileFormatType FileType { get; } = FileFormatType.Binary; + + public override FileExtension[] FileExtensions { get; } = + { + new FileExtension("jpg", "JPG"), + new FileExtension("jpeg", "JPEG"), + new FileExtension("png", "PNG"), + new FileExtension("bmp", "BMP"), + new FileExtension("gif", "GIF"), + new FileExtension("tga", "TGA"), + }; + + public override Type[] ConvertToFormats { get; } = null; + public override PrintParameterModifier[] PrintParameterModifiers { get; } = null; + public override byte ThumbnailsCount { get; } = 4; + public override Size[] ThumbnailsOriginalSize { get; } = null; + public override uint ResolutionX => (uint)ImageMat.Width; + public override uint ResolutionY => (uint)ImageMat.Height; + public override byte AntiAliasing { get; } = 1; + public override float LayerHeight { get; } = 0; + public override ushort InitialLayerCount { get; } = 1; + public override float InitialExposureTime { get; } = 0; + public override float LayerExposureTime { get; } = 0; + public override float LiftHeight { get; } = 0; + public override float RetractSpeed { get; } = 0; + public override float LiftSpeed { get; } = 0; + public override float PrintTime { get; } = 0; + public override float UsedMaterial { get; } = 0; + public override float MaterialCost { get; } = 0; + public override string MaterialName { get; } = null; + public override string MachineName { get; } = null; + public override object[] Configs { get; } = null; + + private Mat ImageMat { get; set; } + + public override bool SetValueFromPrintParameterModifier(PrintParameterModifier modifier, string value) + { + throw new NotImplementedException(); + } + + public override void Decode(string fileFullPath, OperationProgress progress = null) + { + base.Decode(fileFullPath, progress); + + ImageMat = CvInvoke.Imread(fileFullPath, ImreadModes.AnyColor); + const byte startDivisor = 2; + for (int i = 0; i < ThumbnailsCount; i++) + { + Thumbnails[i] = new Mat(); + var divisor = (i + 1) * startDivisor; + CvInvoke.Resize(ImageMat, Thumbnails[i], + new Size(ImageMat.Width / divisor, ImageMat.Height / divisor)); + } + + if (ImageMat.NumberOfChannels > 1) + { + CvInvoke.CvtColor(ImageMat, ImageMat, ColorConversion.Bgr2Gray); + } + + LayerManager = new LayerManager(1); + this[0] = new Layer(0, ImageMat, Path.GetFileName(fileFullPath)); + } + + public override void SaveAs(string filePath = null, OperationProgress progress = null) + { + this[0].LayerMat.Save(filePath ?? FileFullPath); + } + + public override bool Convert(Type to, string fileFullPath, OperationProgress progress = null) + { + throw new NotImplementedException(); + } + + + } +} |