public static IEnumerable <(int x, int y, uint value)> GetValues(this HeatMap heatMap, ulong tileId, uint resolution = 256) { var(xTile, yTile, scaledResolution) = heatMap.GetTilePosition(tileId); if (scaledResolution < resolution) { throw new NotSupportedException("Upscaling of heatmap not supported."); } if (scaledResolution > resolution) { var factor = scaledResolution / resolution; for (var x = 0; x < resolution; x++) { for (var y = 0; y < resolution; y++) { var xScaled = x * factor; var yScaled = y * factor; var count = 0U; for (var dx = 0; dx < factor; dx++) { for (var dy = 0; dy < factor; dy++) { count += heatMap[xTile + xScaled + dx, yTile + yScaled + dy]; } } if (count != 0) { yield return(x, y, count); } } } } for (var x = 0; x < resolution; x++) { for (var y = 0; y < resolution; y++) { var count = heatMap[xTile + x, yTile + y]; if (count != 0) { yield return(x, y, count); } } } }