0

JavaScript Windows 8 アプリケーションがあり、たくさんのキャンバスをアニメーション GIF に変換する必要があります。これが私がこれまでに持っているものです:

次のように(javascriptで)1つのキャンバスをbase64でエンコードされたpngに変換できます。

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();
    }

ただし、これは 1 つのキャンバスを 1 つの gif として保存するだけです。gif にフレームを追加するにはどうすればよいですか? GifEncoder名前空間にクラスがありSystem.Media.Imagingますが、WinRT .Net フレームワークには含まれていないようです。どんな助けでも大歓迎です。

4

1 に答える 1