private async Task SendGifAsync(string path, List <Grid <Color> > rawFrames, int delay = 100, int?loop = null)
{
try
{
var gifStream = new MemoryStream();
using (var encoder = new GifEncoder(gifStream))
{
List <Bitmap> frames = rawFrames.Select(f => ImageHelper.CreateRgbBitmap(f.Values)).ToList();
encoder.FrameLength = TimeSpan.FromMilliseconds(delay);
foreach (Bitmap frame in frames)
{
using (frame)
encoder.EncodeFrame(frame);
}
}
gifStream.Position = 0;
Image gifResult = Image.FromStream(gifStream);
gifResult.Save(path, ImageFormat.Gif);
await gifStream.DisposeAsync();
await Context.Channel.SendFileAsync(path);
}
catch (Exception ex)
{
await Context.Channel.CatchAsync(ex);
}
finally
{
//File.Delete(path);
}
}