67 lines
1.9 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
} |