public LevelsDto GetLevelsValues() { LevelsDto dto = new LevelsDto(); float shadow = Helpers.ConvertRange(Shadow.Value, -400, 400, -1, 1); float highlight = Helpers.ConvertRange(Highlight.Value, -400, 400, -1, 1); float midtone; if (Midtone.Value >= 0) { midtone = Helpers.ConvertRange(Midtone.Value, 0, 100, 1, 3); } else { midtone = Helpers.ConvertRange(Midtone.Value, -100, 0, 0.1f, 1); } dto.MinimumLevel = Shadow.Value >= 0 ? Math.Abs(shadow) : 0; dto.Shadows = Shadow.Value <= 0 ? Math.Abs(shadow) : 0; dto.MaximumLevel = Highlight.Value < 0 ? 1 - Math.Abs(highlight) : 1; dto.Highlights = Highlight.Value > 0 ? 1 - Math.Abs(highlight) : 1; dto.Midtones = midtone; return dto; }
private static Bitmap ApplyLevels(Bitmap bmp, LevelsDto dto) { bmp.ColorAdjustment.Levels(dto.MinimumLevel, dto.MaximumLevel, dto.Shadows, dto.Midtones, dto.Highlights, HistogramMode.Sum); return bmp; }
private static Bitmap AdjustChannelLevels(Bitmap bmp, Channel channel, LevelsDto dto) { var ch = bmp.Channels[channel]; ch = ApplyLevels(ch, dto); bmp.Channels[channel] = ch; return bmp; }