Beispiel #1
0
        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);
                }
            }
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
                }
            }
        }