アプリ置き場

アプリ置き場

http://www.moreread.net/

C#でAnimated WebPのディレイを取る

Webpの画像はWin10ならWIC経由で取得可能だったけど、各フレームのディレイの取得方法がわからなかったので自作。
下記のWebPのファイルフォーマットを参照した。
developers.google.com

List<int> delay = new List<int>();
byte[] buff = new byte[stream.Length];
stream.Read(buff, 0, buff.Length);

// WEBP
if (System.Text.Encoding.ASCII.GetString(buff, 0, 4).Equals("RIFF"))
{
    for (int i = 12; i < buff.Length - 8; i += 8)
    {
        string chname = System.Text.Encoding.ASCII.GetString(buff, i, 4);
        int chsize = BitConverter.ToInt32(buff, i + 4);

        if (chname.Equals("ANMF"))
        {
            int offset = i + 8 + 12;
            byte[] dbuff = { buff[offset], buff[offset + 1], buff[offset + 2], 0 };
            delay.Add(BitConverter.ToInt32(dbuff, 0));
        }
        i += chsize;
    }
}

return delay.ToArray();

これで自分用ツールのビューワをAnimatedWebPに対応。