/// <summary> /// Create new properties from a byte array. /// </summary> /// <param name="data">The byte array containing the property</param> /// <param name="offset">The starting offset into the byte array</param> /// <param name="numProperties">The new properties</param> /// <returns></returns> public List <EscherProperty> CreateProperties(byte[] data, int offset, short numProperties) { List <EscherProperty> results = new List <EscherProperty>(); int pos = offset; // while ( bytesRemaining >= 6 ) for (int i = 0; i < numProperties; i++) { short propId; int propData; propId = LittleEndian.GetShort(data, pos); propData = LittleEndian.GetInt(data, pos + 2); short propNumber = (short)(propId & (short)0x3FFF); bool isComplex = (propId & unchecked ((short)0x8000)) != 0; bool isBlipId = (propId & (short)0x4000) != 0; byte propertyType = EscherProperties.GetPropertyType((short)propNumber); if (propertyType == EscherPropertyMetaData.TYPE_bool) { results.Add(new EscherBoolProperty(propId, propData)); } else if (propertyType == EscherPropertyMetaData.TYPE_RGB) { results.Add(new EscherRGBProperty(propId, propData)); } else if (propertyType == EscherPropertyMetaData.TYPE_SHAPEPATH) { results.Add(new EscherShapePathProperty(propId, propData)); } else { if (!isComplex) { results.Add(new EscherSimpleProperty(propId, propData)); } else { if (propertyType == EscherPropertyMetaData.TYPE_ARRAY) { results.Add(new EscherArrayProperty(propId, new byte[propData])); } else { results.Add(new EscherComplexProperty(propId, new byte[propData])); } } } pos += 6; // bytesRemaining -= 6 + complexBytes; } // Get complex data for (IEnumerator iterator = results.GetEnumerator(); iterator.MoveNext();) { EscherProperty p = (EscherProperty)iterator.Current; if (p is EscherComplexProperty) { if (p is EscherArrayProperty) { pos += ((EscherArrayProperty)p).SetArrayData(data, pos); } else { byte[] complexData = ((EscherComplexProperty)p).ComplexData; Array.Copy(data, pos, complexData, 0, complexData.Length); pos += complexData.Length; } } } return(results); }
/** * Add a property to this record. */ public void AddEscherProperty(EscherProperty prop) { properties.Add(prop); }