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