public void Save(BinaryReverseWriter reverseWriter) { Debug.WriteLine("Layer Save started at " + reverseWriter.BaseStream.Position.ToString(CultureInfo.InvariantCulture)); reverseWriter.Write(Rect.Top); reverseWriter.Write(Rect.Left); reverseWriter.Write(Rect.Bottom); reverseWriter.Write(Rect.Right); reverseWriter.Write((Int16)Channels.Count); foreach (Channel ch in Channels) { ch.Save(reverseWriter); } const String signature = "8BIM"; reverseWriter.Write(signature.ToCharArray()); reverseWriter.Write(_blendModeKeyStr.ToCharArray()); reverseWriter.Write(Opacity); reverseWriter.Write((Byte)(Clipping ? 1 : 0)); reverseWriter.Write((Byte)_flags.Data); reverseWriter.Write((Byte)0); using (new LengthWriter(reverseWriter)) { MaskData.Save(reverseWriter); BlendingRangesData.Save(reverseWriter); Int64 namePosition = reverseWriter.BaseStream.Position; reverseWriter.WritePascalString(Name); Int32 paddingBytes = (int)((reverseWriter.BaseStream.Position - namePosition) % 4); Debug.Print("Layer {0} write padding bytes after name", paddingBytes); for (Int32 i = 0; i < paddingBytes; i++) { reverseWriter.Write((Byte)0); } foreach (AdjusmentLayerInfo info in AdjustmentInfo) { info.Save(reverseWriter); } } }
public void Save(PsdBinaryWriter writer) { Util.DebugMessage(writer.BaseStream, "Save, Begin, Layer"); writer.Write(Rect); //----------------------------------------------------------------------- writer.Write((Int16)Channels.Count); foreach (var ch in Channels) { ch.Save(writer); } //----------------------------------------------------------------------- writer.WriteAsciiChars("8BIM"); writer.WriteAsciiChars(BlendModeKey); writer.Write(Opacity); writer.Write(Clipping); writer.Write((Byte)_flags.Data); writer.Write((Byte)0); //----------------------------------------------------------------------- using (new PsdBlockLengthWriter(writer)) { Masks.Save(writer); BlendingRangesData.Save(writer); var namePosition = writer.BaseStream.Position; // Legacy layer name is limited to 31 bytes. Unicode layer name // can be much longer. writer.WritePascalString(Name, 4, 31); foreach (LayerInfo info in AdditionalInfo) { info.Save(writer, globalLayerInfo: false, isLargeDocument: PsdFile.IsLargeDocument); } } Util.DebugMessage(writer.BaseStream, "Save, End, Layer, {0}", Name); }
public void Save(PsdBinaryWriter writer) { Debug.WriteLine("Layer Save started at " + writer.BaseStream.Position.ToString(CultureInfo.InvariantCulture)); writer.Write(Rect); //----------------------------------------------------------------------- writer.Write((short)Channels.Count); foreach (var ch in Channels) { ch.Save(writer); } //----------------------------------------------------------------------- writer.WriteAsciiChars("8BIM"); writer.WriteAsciiChars(BlendModeKey); writer.Write(Opacity); writer.Write(Clipping); writer.Write((byte)flags.Data); //----------------------------------------------------------------------- writer.Write((byte)0); //----------------------------------------------------------------------- using (new PsdBlockLengthWriter(writer)) { Masks.Save(writer); BlendingRangesData.Save(writer); var namePosition = writer.BaseStream.Position; // Legacy layer name is limited to 31 bytes. Unicode layer name // can be much longer. writer.WritePascalString(Name, 4, 31); foreach (LayerInfo info in AdditionalInfo) { info.Save(writer); } } }