Class AnimatedDataSectionResource

AnimatedDataSectionResource class

El recurso del complemento Sección de datos animados.

public class AnimatedDataSectionResource : ResourceBlock

Propiedades

NombreDescripción
AnimatedDataSection { get; }Obtiene o establece la estructura de la sección de datos animada.
override DataSize { get; }Obtiene el tamaño de los datos del recurso en bytes.
ID { get; set; }Obtiene o establece el identificador único del recurso.
KeyName { get; }El nombre de la clave del recurso.
override MinimalVersion { get; }Obtiene la versión PSD mínima requerida.
Name { get; set; }Obtiene o establece el nombre del recurso. Cadena Pascal, rellenada para que el tamaño sea uniforme (un nombre nulo consta de dos bytes de 0).
Signature { get; }Obtiene la firma del recurso. Debe ser siempre ‘8BIM’.
Size { get; }Obtiene el tamaño del bloque de recursos en bytes, incluidos sus datos.

Métodos

NombreDescripción
Save(StreamContainer)Guarda el bloque de recursos en el flujo especificado.
virtual ValidateValues()Valida los valores del recurso.

Ejemplos

El siguiente código muestra cómo configurar/actualizar el tiempo de retraso en el marco de la línea de tiempo de los datos animados.

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

            // Crea el registro de retardo de cuadro con un valor de 100 centisegundos que es igual a 1 segundo.
            var frameDelay = new IntegerStructure(new ClassID("FrDl"));
            frameDelay.Value = 100; // establece el tiempo en centisegundos.

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

            break;
        }
    }

    image.Save(outputPsd);
}

Ver también