Class UnitArrayStructure

UnitArrayStructure class

Defines the UnitArrayStructure class that holds Double values array and their measure unit. It is used in the PSD file resources, usually by ObjectArrayStructure.

public sealed class UnitArrayStructure : OSTypeStructure


UnitArrayStructure(ClassID, UnitTypes, double[])Initializes a new instance of the UnitArrayStructure class.


override Key { get; }Gets this unit array structure key.
KeyName { get; set; }Gets or sets the key name.
override Length { get; }Gets the OSTypeStructure length in bytes.
UnitType { get; set; }Gets or sets the measure unit type of the UnitArrayStructure values.
ValueCount { get; }Gets the value count.
Values { get; set; }Gets or sets the unit array structure values.


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.


const StructureKeyDefines the ‘UnFl’ UnitArrayStructure 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