public static RgbArray ConvertToRgbArray(SortedDictionary <float, SortedDictionary <float, float> > xyzData, MagnitudeRgbConversionMode conversionMode) { EnsureRectangleSymmetry(xyzData); var xyzDataEnum = xyzData.GetEnumerator(); var firstRow = xyzData.First(); var height = xyzData.Count; var width = firstRow.Value.Count; var rgbArray = new Color[height][]; int count = 0; while (xyzDataEnum.MoveNext()) { var row = xyzDataEnum.Current; var y = count / width; rgbArray[height - y - 1] = new Color[width]; var rowEnum = row.Value.GetEnumerator(); while (rowEnum.MoveNext()) { var x = count % width; var pixel = rowEnum.Current; var scaledMagnitude = (int)CS152Helpers.ScaleValue(pixel.Value, -11000, 8500, 0, 255); rgbArray[height - y - 1][width - x - 1] = Bitmapper.GetColor(scaledMagnitude, conversionMode); count++; } } return(new RgbArray(rgbArray)); }
public static Color GetColor(int r, int g, int b, MagnitudeRgbConversionMode conversionMode) { switch (conversionMode) { case MagnitudeRgbConversionMode.monochromatic: var magnitude = (int)CS152Helpers.GetMagnitude(r, g, b); return(Color.FromArgb(magnitude, magnitude, magnitude)); case MagnitudeRgbConversionMode.scaledHue: throw new NotImplementedException("Future development"); case MagnitudeRgbConversionMode.realistic: default: return(Color.FromArgb(r, g, b)); } }