Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/sn4k3/UVtools.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'UVtools.Core/FileFormats/ImageFile.cs')
-rw-r--r--UVtools.Core/FileFormats/ImageFile.cs87
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();
+ }
+
+
+ }
+}