ObjectArrayStructure class

Defines the ObjectArrayStructure class that usually holds UnitArrayStructure array. It is used in the PSD file resources, such as PlLd Resource and SoLd Resource.

public sealed class ObjectArrayStructure : OSTypeStructure


Name Description
ObjectArrayStructure(string, string, OSTypeStructure[]) Initializes a new instance of the ObjectArrayStructure class.
ObjectArrayStructure(int, ClassID, ClassID, string, OSTypeStructure[]) Initializes a new instance of the ObjectArrayStructure class.


Name Description
ClassID { get; set; } Gets or sets the object array class ID.
ClassName { get; set; } Gets or sets the object array class name.
override Key { get; } Gets the object array structure key.
KeyName { get; set; } Gets or sets the key name.
override Length { get; } Gets the OSTypeStructure length in bytes.
StructureCount { get; } Gets the object array substructure count.
Structures { get; set; } Gets or sets the substructures in the object array structure.


Name Description
virtual GetHeaderLength() Gets the header length.
Save(StreamContainer) Saves the structure to the specified stream container.
SaveWithoutKeyName(StreamContainer) Saves the structure to the specified stream container.


Name Description
const StructureKey Identifies the ‘ObAr’ structure key.


The following code demonstrates the support of the ObAr and UnFl signatures.


void AssertAreEqual(object actual, object expected)
    if (!object.Equals(actual, expected))
        throw new FormatException(string.Format("Actual value {0} are not equal to expected {1}.", actual, expected));

var sourceFilePath = "LayeredSmartObjects8bit2.psd";
using (PsdImage image = (PsdImage)Image.Load(sourceFilePath))
    UnitArrayStructure verticalStructure = null;
    foreach (Layer imageLayer in image.Layers)
        foreach (var imageResource in imageLayer.Resources)
            var resource = imageResource as PlLdResource;
            if (resource != null && resource.IsCustom)
                foreach (OSTypeStructure structure in resource.Items)
                    if (structure.KeyName.ClassName == "customEnvelopeWarp")
                        AssertAreEqual(typeof(DescriptorStructure), structure.GetType());
                        var custom = (DescriptorStructure)structure;
                        AssertAreEqual(custom.Structures.Length, 1);
                        var mesh = custom.Structures[0];
                        AssertAreEqual(typeof(ObjectArrayStructure), mesh.GetType());
                        var meshObjectArray = (ObjectArrayStructure)mesh;
                        AssertAreEqual(meshObjectArray.Structures.Length, 2);
                        var vertical = meshObjectArray.Structures[1];
                        AssertAreEqual(typeof(UnitArrayStructure), vertical.GetType());
                        verticalStructure = (UnitArrayStructure)vertical;
                        AssertAreEqual(verticalStructure.UnitType, UnitTypes.Pixels);
                        AssertAreEqual(verticalStructure.ValueCount, 16);


    AssertAreEqual(true, verticalStructure != null);

See Also