Как я могу прочитать данные задержки, левого и верхнего смещений для каждого кадра 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, так и фрейма всегда равно null, даже если я пытаюсь использовать различные анимированные 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");
}
}
}