Class AnimatedDataSectionResource

AnimatedDataSectionResource class

The Animated Data Section Plug-In resource.

public class AnimatedDataSectionResource : ResourceBlock

Properties

NameDescription
AnimatedDataSection { get; }Gets or sets the animated data section structure.
override DataSize { get; }Gets the resource data size in bytes.
ID { get; set; }Gets or sets the unique identifier for the resource.
KeyName { get; }The resource key name.
override MinimalVersion { get; }Gets the minimal required PSD version.
Name { get; set; }Gets or sets the resource name. Pascal string, padded to make the size even (a null name consists of two bytes of 0).
Signature { get; }Gets the resource signature. Should be always ‘8BIM’.
Size { get; }Gets the resource block size in bytes including its data.

Methods

NameDescription
Save(StreamContainer)Saves the resource block to the specified stream.
virtual ValidateValues()Validates the resource values.

Examples

The following code demonstrates how to set/update delay time in the timeline frame of animated data.

[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];

            // Creates the frame delay record with value 100 centi-second that is equal to 1 second.
            var frameDelay = new IntegerStructure(new ClassID("FrDl"));
            frameDelay.Value = 100; // set time in centi-seconds.

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

            break;
        }
    }

    image.Save(outputPsd);
}

See Also