private static void DeserializePixelData(Data data, SKPixmap pixmap)
        {
            var pixels = pixmap.GetPixelSpan <SKColor>();

            var height = pixmap.Height;
            var width  = pixmap.Width;
            var comp   = data.Components;
            var colors = data.Colors;

            var cosinesX = ArrayPool <double> .Shared.Rent(width *comp.X);

            var cosinesY = ArrayPool <double> .Shared.Rent(height *comp.Y);

            for (var y = 0; y < height; y++)
            {
                for (var x = 0; x < width; x++)
                {
                    var r = 0.0;
                    var g = 0.0;
                    var b = 0.0;

                    for (var j = 0; j < comp.Y; j++)
                    {
                        for (var i = 0; i < comp.X; i++)
                        {
                            var cosX = GetCos(cosinesX, i, comp.X, x, width);
                            var cosY = GetCos(cosinesY, j, comp.Y, y, height);

                            var basis = cosX * cosY;
                            var color = colors[j * comp.X + i];

                            r += color.R * basis;
                            g += color.G * basis;
                            b += color.B * basis;
                        }
                    }

                    pixels[y * width + x] = new SKColor(
                        (byte)LinearToSrgb(r),
                        (byte)LinearToSrgb(g),
                        (byte)LinearToSrgb(b));
                }
            }

            ArrayPool <double> .Shared.Return(cosinesX);

            ArrayPool <double> .Shared.Return(cosinesY);