public static async Task <string> GenerateImageFractalFan( [ActivityTrigger] FractalInput input, [SignalR(HubName = "carlintveld")] IAsyncCollector <SignalRMessage> signalRMessages, ILogger log) { if (signalRMessages != null) { await signalRMessages.AddAsync(new SignalRMessage { Target = "FanoutEvent", Arguments = new object[] { "started", input.imageIndex, $"{input.instance}/{input.name}" } }); await signalRMessages.FlushAsync(); } SKData data = CreateFractalImageData(input); await CreateBlob($"{input.instance}/{input.name}.png", data); if (signalRMessages != null) { await signalRMessages.AddAsync(new SignalRMessage { Target = "FanoutEvent", Arguments = new object[] { "finished", input.imageIndex, $"{input.instance}/{input.name}" } }); await signalRMessages.FlushAsync(); } return($"Finished - {input.name}"); }
public static string GetSequenceNumber([ActivityTrigger] FractalInput input, ILogger log) { string connectionString = System.Environment.GetEnvironmentVariable("AzureStorageConnectionString", EnvironmentVariableTarget.Process); CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString); var client = storageAccount.CreateCloudTableClient(); var table = client.GetTableReference("Sequence"); table.CreateIfNotExistsAsync(); // var t = new TableEntity() var op = TableOperation.Insert(null); return("1"); }
private static SKData CreateFractalImageData(FractalInput input) { FractalInit initdata = InitData(0, 0, input.zoom); // Create a surface. var info = new SKImageInfo(initdata.width, initdata.height, SKImageInfo.PlatformColorType, SKAlphaType.Unpremul); //using (var surface = SKSurface.Create(info)) { var mandelbrot = new FractalMandelbrot(initdata); var bytes = mandelbrot.compute(); // the the canvas and properties //var canvas = surface.Canvas; //for (int y = 0; y < initdata.height; y++) //{ // for (int x = 0; x < initdata.width; x++) // { // int index = 4 * (x + y * initdata.width); // canvas.DrawPoint(new SKPoint(x, y), new SKColor(bytes[index + 2], bytes[index + 1], bytes[index])); // } //} // Optimization taken from https://github.com/mono/SkiaSharp/issues/416 // create an empty bitmap var bitmap = new SKBitmap(); // pin the managed array so that the GC doesn't move it var gcHandle = GCHandle.Alloc(bytes, GCHandleType.Pinned); // install the pixels with the color type of the pixel data bitmap.InstallPixels(info, gcHandle.AddrOfPinnedObject(), info.RowBytes, delegate { gcHandle.Free(); }, null); //using (var image = surface.Snapshot()) using (var image = SKImage.FromBitmap(bitmap)) { SKData data = image.Encode(SKEncodedImageFormat.Png, 100); return(data); } } }