如何在WinRT中将一组画布转换为动画GIF?
我有一个JavaScript Windows 8应用程序,我需要将一堆画布转换为动画GIF。 这是我迄今为止的:
我可以将一个画布转换为base64编码的png,如下所示(在javascript中):
var base64png = myCanvas.toDataURL()
然后,我可以将此编码图像转换为一个字节数组(在ac#类库中):
private byte[] GetBytesFromBase64(string base64)
{
string data = base64.Split(',')[1]; // get everything after comma
return Convert.FromBase64String(data);
}
然后我可以使用这些字节创建一个gif,并将其保存在磁盘上(再次,在c#类库中):
public async void ConvertToGif(string image)
{
// Note: The following line includes methods not shown in the question, but they work
IRandomAccessStream stream = await ConvertToRandomAccessStream(
ConvertToMemoryStream(
GetBytesFromBase64(image)));
var decoder = await BitmapDecoder.CreateAsync(stream);
var pixels = await decoder.GetPixelDataAsync();
var file = await KnownFolders.PicturesLibrary.CreateFileAsync("test.gif", CreationCollisionOption.ReplaceExisting);
var outStream = await file.OpenAsync(FileAccessMode.ReadWrite);
var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.GifEncoderId, outStream);
encoder.SetPixelData(
decoder.BitmapPixelFormat,
BitmapAlphaMode.Ignore,
decoder.PixelWidth,
decoder.PixelHeight,
decoder.DpiX,
decoder.DpiY,
ReplaceTransparentWithWhite(pixels));
await encoder.FlushAsync();
outStream.Dispose();
}
但是,这只能将一个画布保存为一个gif。 我如何添加框架的gif? System.Media.Imaging
命名空间中有一个GifEncoder
类,但它似乎不包含在WinRT .Net框架中。 任何帮助,将不胜感激。
我建议你自己构建它,因为你已经有了将Canvas转换为单个GIF文件的代码。 基本上,动画GIF只是一个容器GIF文件中的一系列GIF文件。 虽然规范有点罗嗦,但您应该从.NET 1.1中找到这个示例非常有用。
虽然标准文件格式不直接允许动画,但通过“扩展”动画是允许的。 这个维基百科页面上详细记录了详细信息。
你需要做的核心是为文件写出一个自定义的头文件块,然后为每个动画的GIF帧写出单独的数据流。
链接地址: http://www.djcxy.com/p/84141.html上一篇: How do I convert a collection of canvases into an animated gif in WinRT?