public static async Task GenerateMosaicFromTilesAsync( Stream sourceImage, CloudBlobContainer tileContainer, string tileDirectory, Stream outputStream, int tilePixels, TraceWriter log) { using (var tileProvider = new QuadrantMatchingTileProvider()) { MosaicBuilder.TileHeight = int.Parse(Environment.GetEnvironmentVariable("MosaicTileWidth")); MosaicBuilder.TileWidth = int.Parse(Environment.GetEnvironmentVariable("MosaicTileHeight")); // override default tile width and height if specified if (tilePixels != 0) { MosaicBuilder.TileWidth = MosaicBuilder.TileHeight = tilePixels; } MosaicBuilder.DitheringRadius = -1; MosaicBuilder.ScaleMultiplier = 1; List <byte[]> tileImages = await GetTileImagesAsync(tileContainer, tileDirectory, log); tileProvider.SetSourceStream(sourceImage); tileProvider.ProcessInputImageColors(MosaicBuilder.TileWidth, MosaicBuilder.TileHeight); tileProvider.ProcessTileColors(tileImages); log.Info("Generating mosaic..."); var start = DateTime.Now; GenerateMosaic(tileProvider, sourceImage, tileImages, outputStream); log.Info($"Time to generate mosaic: {(DateTime.Now - start).TotalMilliseconds}"); } }
public static void GenerateMosaicFromTiles( Stream sourceImage, CloudBlobContainer tileContainer, string tileDirectory, Stream outputStream) { using (var tileProvider = new QuadrantMatchingTileProvider()) { MosaicBuilder.TileHeight = int.Parse(Environment.GetEnvironmentVariable("MosaicTileWidth")); MosaicBuilder.TileWidth = int.Parse(Environment.GetEnvironmentVariable("MosaicTileHeight")); MosaicBuilder.DitheringRadius = -1; MosaicBuilder.ScaleMultiplier = 1; var directory = tileContainer.GetDirectoryReference(tileDirectory); var blobs = directory.ListBlobs(true); var tileImages = new List <byte[]>(); foreach (var b in blobs) { if (b.GetType() == typeof(CloudBlockBlob)) { var blob = (CloudBlockBlob)b; blob.FetchAttributes(); var bytes = new byte[blob.Properties.Length]; blob.DownloadToByteArray(bytes, 0); tileImages.Add(bytes); } } tileProvider.SetSourceStream(sourceImage); tileProvider.ProcessInputImageColors(MosaicBuilder.TileWidth, MosaicBuilder.TileHeight); tileProvider.ProcessTileColors(tileImages); GenerateMosaic(tileProvider, sourceImage, tileImages, outputStream); } }