public FindHighTailLightness ( double valueAtLeast ) : int | ||
valueAtLeast | double | |
return | int |
public void CutBlackPoint(double cut, int blur_radius, double blur_dark_level, int lines, double tailValueAtLeast, ProgressReporter callback) { double max_light = CalcMaxLight(); HistogramCollector sc = new HistogramCollector(max_light, lines); sc.CollectData(this); double min_tail = sc.LineToScale(sc.FindLowTailLightness(tailValueAtLeast)); double max_tail = sc.LineToScale(sc.FindHighTailLightness(tailValueAtLeast)); for (int j = 0; j < mHeight; j++) { if (j % REPORT_EVERY_NTH_LINE == 0 && callback != null) { if (!callback((double)j / this.mHeight * 0.3)) return; } for (int i = 0; i < mWidth; i++) { double light = Math.Sqrt( r_chan[i, j] * r_chan[i, j] + g_chan[i, j] * g_chan[i, j] + b_chan[i, j] * b_chan[i, j]) / Math.Sqrt(3); Tone curtone = new Tone(r_chan[i, j], g_chan[i, j], b_chan[i, j]); double newlight = light - min_tail * cut; if (newlight < 0) newlight = 0; lock (this) { r_chan[i, j] = (float)(curtone.R * newlight); g_chan[i, j] = (float)(curtone.G * newlight); b_chan[i, j] = (float)(curtone.B * newlight); } } } }