Wie kann ich die Verzögerung, links und oben Offset-Daten für jeden Rahmen eines Gif lesen? Ich bin soweit gekommen.Lesen der Metadaten-Eigenschaft von GifBitmapDecoder ... warum ist es null?
laden Gif
var myGif = new GifBitmapDecoder(uri, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad);
Erhalten Sie einen Rahmen
var frame = myGif.Frames[i];
Von MSDN: Native Image Format Metadata Queries
(ushort)Metadata.GetQuery("/grctlext/Delay")
lesen,(ushort)Metadata.GetQuery("/imgdesc/Left")
,(ushort)Metadata.GetQuery("/imgdesc/Top")
Aber zwei Dinge funktionieren nicht. Erstens ist die Metadaten-Eigenschaft sowohl des Gif als auch des Rahmens immer Null, selbst wenn ich verschiedene animierte Gif-Dateien versuche. Zweitens scheint die Metadata-Eigenschaft des Frames keine GetQuery-Methode zu haben.
Wie führe ich diese Abfragen, was habe ich vermisst?
Edit:
Hier ist Beispielcode, der mich null Metadaten gibt. Verwenden einer Neuinstallation von VS2010 Premium auf einer neuen WPF-Anwendung. Die Bilddatei ist diejenige in den Kommentaren.
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");
}
}
}
Aus den Ergebnissen für "animiertes Bild" auf Google, http://en.loadtr.com/animated_gif_-414328.htm. Das Laden dieser und der Metadaten ist bei myGif und allen Frames null. – David