Class AnimatedDataSectionResource

AnimatedDataSectionResource class

Die Plug-In-Ressource für animierte Datenabschnitte.

public class AnimatedDataSectionResource : ResourceBlock

Eigenschaften

NameBeschreibung
AnimatedDataSection { get; }Ruft die animierte Datenabschnittsstruktur ab oder legt sie fest.
override DataSize { get; }Ruft die Ressourcendatengröße in Byte ab.
ID { get; set; }Ruft die eindeutige Kennung für die Ressource ab oder legt sie fest.
KeyName { get; }Der Ressourcenschlüsselname.
override MinimalVersion { get; }Ruft die minimal erforderliche PSD-Version ab.
Name { get; set; }Ruft den Ressourcennamen ab oder legt ihn fest. Pascal-String, aufgefüllt, um die Größe gleichmäßig zu machen (ein Nullname besteht aus zwei Bytes von 0).
Signature { get; }Ruft die Ressourcensignatur ab. Sollte immer ‘8BIM’ sein.
Size { get; }Ruft die Ressourcenblockgröße in Byte ab, einschließlich seiner Daten.

Methoden

NameBeschreibung
Save(StreamContainer)Speichert den Ressourcenblock im angegebenen Stream.
virtual ValidateValues()Validiert die Ressourcenwerte.

Beispiele

Der folgende Code zeigt, wie die Verzögerungszeit im Zeitachsenrahmen von animierten Daten festgelegt/aktualisiert wird.

[C#]

string sourceFile = "3_animated.psd";
string outputPsd = "output_3_animated.psd";

T FindStructure<T>(IEnumerable<OSTypeStructure> structures, string keyName) where T : OSTypeStructure
{
    foreach (var structure in structures)
    {
        if (structure.KeyName.ClassName == keyName)
        {
            return structure as T;
        }
    }

    return null;
}

OSTypeStructure[] AddOrReplaceStructure(IEnumerable<OSTypeStructure> structures, OSTypeStructure newStructure)
{
    List<OSTypeStructure> listOfStructures = new List<OSTypeStructure>(structures);

    for (int i = 0; i < listOfStructures.Count; i++)
    {
        OSTypeStructure structure = listOfStructures[i];
        if (structure.KeyName.ClassName == newStructure.KeyName.ClassName)
        {
            listOfStructures.RemoveAt(i);
            break;
        }
    }

    listOfStructures.Add(newStructure);

    return listOfStructures.ToArray();
}

using (PsdImage image = (PsdImage)Image.Load(sourceFile))
{
    foreach (var imageResource in image.ImageResources)
    {
        if (imageResource is AnimatedDataSectionResource)
        {
            var animatedData =
                (AnimatedDataSectionStructure) (imageResource as AnimatedDataSectionResource).AnimatedDataSection;
            var framesList = FindStructure<ListStructure>(animatedData.Items, "FrIn");

            var frame1 = (DescriptorStructure)framesList.Types[1];

            // Erstellt den Frame-Delay-Record mit dem Wert 100 Zenti-Sekunde, was 1 Sekunde entspricht.
            var frameDelay = new IntegerStructure(new ClassID("FrDl"));
            frameDelay.Value = 100; // Zeit in Centisekunden einstellen.

            frame1.Structures = AddOrReplaceStructure(frame1.Structures, frameDelay);

            break;
        }
    }

    image.Save(outputPsd);
}

Siehe auch