using SkiaSharp; namespace omp { class Drawer { public static void Draw(Configurator conf, double[,] pdops, double min, double max) { var bitmap = new SKBitmap(conf.xsize, conf.ysize); for (int i = 0; i < conf.xsize; ++i) { for (int j = 0; j < conf.ysize; ++j) { SKColor color; if (pdops[i, j] == Calculator.StationPDOP) { color = SKColors.White; } else { double t = (pdops[i, j] - min) / (max - min); color = Map2Color(t); } bitmap.SetPixel(i, j, color); } } using (var image = SKImage.FromBitmap(bitmap)) using (var data = image.Encode(SKEncodedImageFormat.Png, 100)) using (var stream = File.OpenWrite("out.png")) { data.SaveTo(stream); } } public static SKColor Map2Color(double t) { if (t < 0.25) { // Blue to cyan double localT = t / 0.25; return new SKColor(0, (byte)(255 * localT), 255); } else if (t < 0.5) { // Cyan to green double localT = (t - 0.25) / 0.25; return new SKColor(0, 255, (byte)(255 * (1 - localT))); } else if (t < 0.75) { // Green to yellow double localT = (t - 0.5) / 0.25; return new SKColor((byte)(255 * localT), 255, 0); } else { // Yellow to red double localT = (t - 0.75) / 0.25; return new SKColor(255, (byte)(255 * (1 - localT)), 0); } } } }