diff --git a/src/Oh.My.Stitcher/Program.cs b/src/Oh.My.Stitcher/Program.cs index ca98db0..86b929a 100644 --- a/src/Oh.My.Stitcher/Program.cs +++ b/src/Oh.My.Stitcher/Program.cs @@ -1,3 +1,4 @@ +using System.Buffers; using System.IO.Pipelines; using Microsoft.AspNetCore.Http.Json; using NetVips; @@ -34,7 +35,28 @@ app.MapPost("/api/image/generate", (Stitch request) => try { using Image image = Tile.Create(in request, tilesDirectory, images, logger); - image.WriteToStream(pipe.Writer.AsStream(), ".png"); + Pipe innerPipe = new(); + _ = Task.Run(async () => + { + while( true ) + { + ReadResult result = await innerPipe.Reader.ReadAsync(); + ReadOnlySequence buffer = result.Buffer; + if(!buffer.IsEmpty ) + { + foreach( ReadOnlyMemory segment in buffer ) + { + await pipe.Writer.WriteAsync(segment); + } + innerPipe.Reader.AdvanceTo(buffer.End); + if (result.IsCompleted) + { + break; + } + } + } + }); + image.WriteToStream(innerPipe.Writer.AsStream(), ".png"); } catch( Exception e ) {