public override void ApplyFilter(int[] pixels, int width, int height, Vector[,] field) { double minBrightness = Double.PositiveInfinity; double maxBrightness = Double.NegativeInfinity; for (int i = 0; i < pixels.Length; i++) { int x = i % width; int y = i / width; int argb = pixels[i]; var color = HsbColor.FromArgb(argb); var brightness = color.Brightness; if (brightness < minBrightness) { minBrightness = brightness; } if (brightness > maxBrightness) { maxBrightness = brightness; } } for (int i = 0; i < pixels.Length; i++) { int argb = pixels[i]; var color = HsbColor.FromArgb(argb); var brightness = color.Brightness; double ratio = (brightness - minBrightness) / (maxBrightness - minBrightness); color.Brightness = ratio; pixels[i] = color.ToArgb(); } }
public override int[] ApplyFilter(int[] pixels, int width, int height, Vector[,] field) { double maxLength = Double.NegativeInfinity; double minLength = Double.PositiveInfinity; // determine min and max length // this works faster than parallel enumerable version. for (int ix = 0; ix < width; ix++) { for (int iy = 0; iy < height; iy++) { var length = field[ix, iy].Length; if (length > maxLength) { maxLength = length; } if (length < minLength) { minLength = length; } } } int[] resultPixels = new int[width * height]; pixels.CopyTo(resultPixels, 0); // attempt to avoid exception on line // 'HsbColor color = HsbColor.FromArgb(pixels[i]);' if (pixels.Length == 0) { return(pixels); } Parallel.For(0, width * height, i => { HsbColor color = HsbColor.FromArgb(pixels[i]); int ix = i % width; int iy = i / width; var length = field[ix, height - 1 - iy].Length; var ratio = (length - minLength) / (maxLength - minLength); if (ratio.IsNaN()) { ratio = 0; } var paletteColor = Palette.GetColor(ratio).ToHsbColor(); color.Hue = paletteColor.Hue; color.Saturation = paletteColor.Saturation; resultPixels[i] = color.ToArgb(); }); return(resultPixels); }
public override void ApplyFilter(int[] pixels, int width, int height, Vector[,] field) { double maxLength = Double.NegativeInfinity; double minLength = Double.PositiveInfinity; for (int ix = 0; ix < width; ix++) { for (int iy = 0; iy < height; iy++) { var length = field[ix, iy].Length; if (length > maxLength) { maxLength = length; } if (length < minLength) { minLength = length; } } } for (int i = 0; i < width * height; i++) { HsbColor color = HsbColor.FromArgb(pixels[i]); int ix = i % width; int iy = i / width; var length = field[ix, iy].Length; var ratio = (length - minLength) / (maxLength - minLength); if (ratio.IsNaN()) { ratio = 0; } var paletteColor = Palette.GetColor(ratio).ToHsbColor(); color.Hue = paletteColor.Hue; color.Saturation = paletteColor.Saturation; pixels[i] = color.ToArgb(); } }
public override int[] ApplyFilter(int[] pixels, int width, int height, Vector[,] field) { double minBrightness = Double.PositiveInfinity; double maxBrightness = Double.NegativeInfinity; for (int i = 0; i < pixels.Length; i++) { int argb = pixels[i]; var color = HsbColor.FromArgb(argb); var brightness = color.Brightness; if (brightness < minBrightness) { minBrightness = brightness; } if (brightness > maxBrightness) { maxBrightness = brightness; } } if (minBrightness == 0 || maxBrightness == 1) { return(pixels); } Parallel.For(0, pixels.Length, i => { int argb = pixels[i]; var color = HsbColor.FromArgb(argb); var brightness = color.Brightness; double ratio = (brightness - minBrightness) / (maxBrightness - minBrightness); color.Brightness = ratio; pixels[i] = color.ToArgb(); }); return(pixels); }