internal static void Output() { var outputDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\SectionalCropper\output\"; DirectoryController.CreateIfMissing(outputDirectory); foreach (var frame in Frame.Frames) { var bmpInput = new Bitmap(frame.ImageSource); bmpInput = bmpInput.Clone(new Rectangle(Convert.ToInt32(frame.Rectangle.Left), Convert.ToInt32(frame.Rectangle.Top), Convert.ToInt32(frame.Rectangle.Width), Convert.ToInt32(frame.Rectangle.Height)), PixelFormat.Undefined); var brush = new SolidBrush(Color.Fuchsia); var scale = Math.Min(Convert.ToDouble(OutputParameters.Width) / Convert.ToDouble(bmpInput.Width), Convert.ToDouble(OutputParameters.Height) / Convert.ToDouble(bmpInput.Height)); var bmpOutput = new Bitmap(OutputParameters.Width, OutputParameters.Height); var graph = Graphics.FromImage(bmpOutput); graph.InterpolationMode = InterpolationMode.High; graph.CompositingQuality = CompositingQuality.HighQuality; graph.SmoothingMode = SmoothingMode.AntiAlias; var scaleWidth = (int)(bmpInput.Width * scale); var scaleHeight = (int)(bmpInput.Height * scale); graph.FillRectangle(brush, new RectangleF(0, 0, OutputParameters.Width, OutputParameters.Height)); graph.DrawImage(bmpInput, (OutputParameters.Width - scaleWidth) / 2, (OutputParameters.Height - scaleHeight) / 2, scaleWidth, scaleHeight); bmpOutput.Save(outputDirectory + $"{frame.Index}.png", ImageFormat.Png); bmpInput.Dispose(); bmpOutput.Dispose(); } }
internal static void Load() { var inputDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\SectionalCropper\input\"; DirectoryController.CreateIfMissing(inputDirectory); Frame.Frames?.Clear(); var files = System.IO.Directory.GetFiles(inputDirectory); foreach (var file in files) { Frame.Add(file); } Frame.CurrentIndex = 0; }
internal static void Save() { var directory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\SectionalCropper\"; DirectoryController.CreateIfMissing(directory); var lst = new List <string>(); foreach (var frame in Frame.Frames.Where(x => x.IsKey)) { lst.Add(string.Join(",", frame.Index.ToString(), frame.Rectangle.X.ToString(), frame.Rectangle.Y.ToString(), frame.Rectangle.Width.ToString(), frame.Rectangle.Height.ToString())); } using (var sw = new StreamWriter(directory + "parameters.csv")) { sw.Write(string.Join("\n", lst)); sw.Close(); } }
internal static void Load() { var directory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\SectionalCropper\"; DirectoryController.CreateIfMissing(directory); using (var sr = new StreamReader(directory + "parameters.csv")) { while (sr.Peek() != -1) { var data = sr.ReadLine().Split(','); var frame = Frame.Frames[Convert.ToInt32(data[0])]; frame.IsKey = true; frame.SetRectangle(Frame.RectangleVariables.Left, Convert.ToDouble(data[1])); frame.SetRectangle(Frame.RectangleVariables.Top, Convert.ToDouble(data[2])); frame.SetRectangle(Frame.RectangleVariables.Width, Convert.ToDouble(data[3])); frame.SetRectangle(Frame.RectangleVariables.Height, Convert.ToDouble(data[4])); } sr.Close(); } }