omp/Drawer.cs
2025-04-04 12:38:48 +03:00

67 lines
1.9 KiB
C#

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);
}
}
}
}