WinRT创建动画GIF

时间:2012-09-23 22:47:29

标签: c# image-processing windows-runtime

我正在努力在WinRT应用中创建一些动画GIF。我有gif转换在结果图像中使用多个帧,但我无法弄清楚如何设置帧延迟和重复行为。

GoToNextFrameAsync接受选项,这些选项感觉就像是指定类似的东西的正确位置,但我不知道要传递什么,也无法找到有关该主题的任何文档。

    public async static void AnimateImages(IEnumerable<StorageFile> files)
    {
        var outFile = await KnownFolders.PicturesLibrary.CreateFileAsync("test.gif", CreationCollisionOption.ReplaceExisting);
        var outStream = await outFile.OpenAsync(FileAccessMode.ReadWrite);

        var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.GifEncoderId, outStream);


        for (int i = 0; i < files.Count(); i++)
        {
            using (var str = await files.ElementAt(i).OpenAsync(FileAccessMode.Read))
            {
                var decoder = await BitmapDecoder.CreateAsync(str);
                var pixels = await decoder.GetPixelDataAsync();

                encoder.SetPixelData(decoder.BitmapPixelFormat, BitmapAlphaMode.Ignore,
                    decoder.OrientedPixelWidth, decoder.OrientedPixelHeight,
                    decoder.DpiX, decoder.DpiY,
                    pixels.DetachPixelData());

                if(i < files.Count() -1 )
                    await encoder.GoToNextFrameAsync();
            }
        }

        await encoder.FlushAsync();
        outStream.Dispose();
    }

1 个答案:

答案 0 :(得分:0)

我也一直遇到这个问题。似乎虽然读取属性是正常的,但是在帧上设置任何类型的属性都会导致异常。据here我所知,BitmapEncoders与Windows Imaging Components有关,而且Native WIC Codecs on MSDN状态的页面也没有GIF选项。这看起来确实很奇怪。