protected virtual void SetMode(ImageState state, AutoCropState data, AutoCropSettings settings) { if (settings.SetMode) { state.settings.Mode = settings.Mode; } }
protected virtual ICropAnalyzer GetCropAnalyzer(BitmapData data, AutoCropSettings settings) { if (settings.Method == AutoCropMethod.Edge) { return(new SobelAnalyzer(data, settings.Threshold, 0.945f)); } return(new BoundsAnalyzer(data, settings.Threshold, 0.945f)); }
private static bool ParseSettings(string autoCropParameter, string resizeModeParameter, out AutoCropSettings settings) { settings = null; if (string.IsNullOrWhiteSpace(autoCropParameter)) { return(false); } var data = autoCropParameter.Split(',', ';', '|'); var parsed = int.TryParse(data[0], out var padX); if (!parsed) { return(false); } settings = new AutoCropSettings { PadX = Clamp(padX, 0, 100) }; if (data.Length > 3 && int.TryParse(data[3], out var bucketThreshold)) { settings.BucketThreshold = Clamp(bucketThreshold, 0, 100) / 100.0f; } else { settings.BucketThreshold = 0.945f; } if (data.Length > 2 && int.TryParse(data[2], out var colorThreshold)) { settings.ColorThreshold = Clamp(colorThreshold, 0, 254); } else { settings.ColorThreshold = 35; } if (data.Length > 1 && int.TryParse(data[1], out var padY)) { settings.PadY = Clamp(padY, 0, 100); } else { settings.PadY = Clamp(padX, 0, 100); } if (Enum.TryParse(resizeModeParameter, true, out ResizeMode resizeMode)) { settings.PadMode = GetPadMode(resizeMode); } return(true); }
protected AutoCropSettings ParseSettings(ResizeSettings settings) { var settingsValue = settings["autoCrop"]; if (settingsValue == null) { return(null); } var modeValue = settings["autoCropMode"]; var methodValue = settings["autoCropMethod"]; var debugValue = settings["autoCropDebug"]; var result = new AutoCropSettings { Debug = debugValue != null }; var data = settingsValue.Split(',', ';', '|'); var parsed = int.TryParse(data[0], out var padX); if (!parsed) { return(result); } result.Parsed = true; result.PadX = Math.Max(padX, 0); if (data.Length > 2 && int.TryParse(data[2], out var threshold)) { result.Threshold = Math.Max(threshold, 0); } if (data.Length > 1 && int.TryParse(data[1], out var padY)) { result.PadY = Math.Max(padY, 0); } else { result.PadY = Math.Max(padX, 0); } if (Enum.TryParse(methodValue, true, out AutoCropMethod autoCropMethod)) { result.Method = autoCropMethod; } if (Enum.TryParse(modeValue, true, out FitMode fitMode)) { result.SetMode = true; result.Mode = fitMode; } return(result); }
public void CanAnalyzeCrop() { var settings = new AutoCropSettings(); var cropAnalysis = (ICropAnalysis)null; using var image = Image.Load("TestImages/test.png"); image.Mutate(ctx => ctx.AnalyzeCrop(settings, out cropAnalysis)); Assert.NotNull(cropAnalysis); Assert.Equal(Color.White, cropAnalysis.Background); Assert.True(cropAnalysis.Success); }
public void CanReuseAnalysis() { var settings = new AutoCropSettings(); var cropAnalysis = (ICropAnalysis)null; var weightAnalysis = (IWeightAnalysis)null; using var sourceImage = Image.Load("TestImages/test.png"); using var firstImage = sourceImage.Clone(ctx => ctx.AutoCrop(settings, out cropAnalysis, out weightAnalysis)); using var secondImage = sourceImage.Clone(ctx => ctx.AutoCropKnown(settings, cropAnalysis, weightAnalysis)); Assert.True(cropAnalysis.Success); Assert.NotNull(secondImage); Assert.Equal(secondImage.Size(), firstImage.Size()); }
public void CanAnalyzeWeights() { var settings = new AutoCropSettings { AnalyzeWeights = true }; var weightAnalysis = (IWeightAnalysis)null; using var image = Image.Load("TestImages/test.png"); image.Mutate(ctx => ctx.AutoCrop(settings, out _, out weightAnalysis)); Assert.NotNull(weightAnalysis); Assert.Equal(new PointF(-0.0002448041f, -0.0009081508f), weightAnalysis.Weight); }
public void CanPadOnLeftEdge() { var settings = new AutoCropSettings { PadX = 20, PadY = 20 }; using var image = Image.Load("TestImages/test_edge_left.png"); image.Mutate(ctx => ctx.AutoCrop(settings)); image.SaveAsPng("TestImages/test_edge_left_result.png"); Assert.Equal(377, image.Width); Assert.Equal(327, image.Height); }
public void CanCrop() { var settings = new AutoCropSettings { PadX = 5, PadY = 5, ColorThreshold = 35, BucketThreshold = 0.945f }; using var image = Image.Load("TestImages/test.png"); image.Mutate(ctx => ctx.AutoCrop(settings)); Assert.Equal(301, image.Width); Assert.Equal(251, image.Height); }
protected virtual void SetBackground(ImageState state, AutoCropState data, AutoCropSettings settings) { if (settings.Debug) { if (settings.Method == AutoCropMethod.Edge) { state.settings.BackgroundColor = Color.FromArgb(255, 0, 0, 0); } else { var backgroundColor = state.settings.BackgroundColor; state.settings.BackgroundColor = backgroundColor.ToColorBucket().ToColor(); } } if (state.settings.BackgroundColor.Equals(Color.Transparent)) { state.settings.BackgroundColor = data.BorderColor; } }
public void CanPad() { var cropSettings = new AutoCropSettings { PadX = 0, PadY = 0 }; var padSettings = new AutoCropSettings { PadX = 20, PadY = 20 }; using var image = Image.Load("TestImages/test.png"); image.Mutate(ctx => ctx.AutoCrop(cropSettings)); image.Mutate(ctx => ctx.AutoCrop(padSettings)); Assert.Equal(377, image.Width); Assert.Equal(327, image.Height); }