Как я могу прочитать данные о задержке, левом и верхнем смещении для каждого кадра GIF? Я получил это далеко.
Загрузить GIF
var myGif = new GifBitmapDecoder(uri, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad);
Получить кадр
var frame = myGif.Frames[i];
С MSDN: запросы метаданных в формате собственного изображения чтение (ushort)Metadata.GetQuery("/grctlext/Delay")
, (ushort)Metadata.GetQuery("/imgdesc/Left")
, (ushort)Metadata.GetQuery("/imgdesc/Top")
Но две вещи не работают. Во-первых, свойство Metadata для gif и фрейма всегда равно нулю, даже если я пробую разные анимированные gif-файлы. Во-вторых, свойство метаданных фрейма, по-видимому, не имеет метода GetQuery.
Как мне выполнить эти запросы, что я пропустил?
Edit:
Вот пример кода, который дает мне нулевые метаданные. Используя свежую установку VS2010 Premium, на свежее приложение WPF. Файл изображения - тот, что в комментариях.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
var uri = new Uri(@"c:\b-414328-animated_gif_.gif");
var myGif = new GifBitmapDecoder(uri, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad);
var frame = myGif.Frames[0];
Title = "";
Title += "Global Metadata is null: " + (myGif.Metadata == null).ToString();
Title += "; Frame Metadata is null: " + (frame.Metadata == null).ToString();
// Crash due to null metadata
//var frameData = (BitmapMetadata)frame.Metadata;
//var rate = (ushort)frameData.GetQuery("/grctlext/Delay");
}
}
}