diff options
author | Tiago Conceição <Tiago_caza@hotmail.com> | 2020-07-04 23:29:58 +0300 |
---|---|---|
committer | Tiago Conceição <Tiago_caza@hotmail.com> | 2020-07-04 23:29:58 +0300 |
commit | 2c514fe260b7939f372c745b5e600ee877b88e12 (patch) | |
tree | b0c7b92f8a3fbf30c3a983efb17c5ac0ebae0657 /UVtools.Core/FileFormats/ImageFile.cs | |
parent | 08fe746dac81d2311978427ebf44f06f10601186 (diff) |
v0.6.1.1v0.6.1.1
* (Add) Allow chitubox, phz, pws, pw0 files convert to cws
* (Add) Allow convert between cbddlp, ctb and photon
* (Add) Allow convert between pws and pw0
* (Improvement) Layers can now have modified heights and independent parameters (#9)
* (Improvement) UVtools now generate better gcode and detect the lack of Lift and same z position and optimize the commands
* (Fix) zcodex: Wasn't reporting layer decoding progress
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(); + } + + + } +} |