Пример #1
0
 public void Write(BinaryPSDWriter writer)
 {
     writer.Write("8BIM");
     writer.Write(this.Tag);
     writer.StartLengthBlock(typeof(uint));
     this.SubWrite(writer);
     writer.EndLengthBlock();
     if (!(this is EffectBase))
     {
         writer.PadToNextMultiple(2);
     }
 }
Пример #2
0
        //public string GetIdAsFOURCC()
        //{
        //    return "" + (char)((this.ID >> 24) & 0xff) + (char)((this.ID >> 16) & 0xff) + (char)((this.ID >> 8) & 0xff) + (char)(this.ID & 0xff);
        //}

        public void Write(BinaryPSDWriter writer)
        {
            writer.Write("8BIM");
            writer.Write(this.ID);
            writer.WritePascalString(this.Name);
            writer.StartLengthBlock(typeof(uint));
            this.SubWrite(writer);
            writer.EndLengthBlock();
            writer.PadToNextMultiple(2);
            //if (writer.GetCurrentBlockLength() % 2 == 1)
            //    writer.Write((byte)0);
        }
Пример #3
0
        public override void Write(BinaryPSDWriter writer)
        {
            writer.StartLengthBlock(typeof(uint));
            if (this.Rectangle != null)
            {
                writer.WritePSDRectangle(this.Rectangle); //new Rectangle(this.Rectangle).Write(writer);
                writer.Write(this._color);
                writer.Write(this._flags);

                if (this._otherRectangle != null)
                {
                    writer.Write(this._flags2);
                    writer.Write(this._maskBg);
                    writer.WritePSDRectangle(this._otherRectangle); //new Rectangle(this._otherRectangle).Write(writer);
                }
                else
                {
                    writer.Write((short)0); //padding
                }
            }
            writer.EndLengthBlock();
        }
Пример #4
0
        public override void Write(BinaryPSDWriter writer)
        {
            writer.StartLengthBlock(typeof(uint));
            if (this.Rectangle != null)
            {
                writer.WritePSDRectangle(this.Rectangle); //new Rectangle(this.Rectangle).Write(writer);
                writer.Write(this._color);
                writer.Write(this._flags);

                if (this._otherRectangle != null)
                {
                    writer.Write(this._flags2);
                    writer.Write(this._maskBg);
                    writer.WritePSDRectangle(this._otherRectangle); //new Rectangle(this._otherRectangle).Write(writer);
                }
                else
                    writer.Write((short)0); //padding
            }
            writer.EndLengthBlock();
        }
Пример #5
0
        public void Write(BinaryPSDWriter writer)
        {
            writer.WritePSDRectangle(this._rect); // new Rectangle(this._rect).Write(writer);

            writer.Write((ushort)this._channels.Count);
            foreach (Channel channel in this._channels.Values)
            {
                channel.Write(writer);
            }

            writer.Write("8BIM");

            BlendKeys     bk    = (BlendKeys)Enum.Parse(typeof(BlendKeys), this.BlendKey);
            _blendKeysPsd bkPsd = (_blendKeysPsd)(int)bk;

            writer.Write(bkPsd.ToString());

            writer.Write(this.Opacity);
            writer.Write(this.Clipping);
            writer.Write(this.Flags);
            writer.Write((byte)0); //padding
            writer.StartLengthBlock(typeof(uint));

            if (this._mask != null || (this._blendRanges != null && this._blendRanges.Count > 0) || !string.IsNullOrEmpty(this.Name))
            {
                if (this._mask != null)
                {
                    this._mask.Write(writer);
                }
                else
                {
                    writer.Write((uint)0); //TODO: should be a static of Mask..?
                }
                //blending ranges
                writer.Write((uint)this._blendRanges.Count * 4);
                foreach (System.Drawing.Color clr in this._blendRanges)
                {
                    writer.Write((uint)clr.ToArgb());
                }


                //why is there padding here? Seems unnecessary.
                long namePosition = writer.BaseStream.Position;

                writer.WritePascalString(this.Name);

                int paddingBytes = (int)((writer.BaseStream.Position - namePosition) % 4);
                for (int i = 0; i < paddingBytes; i++)
                {
                    writer.Write((byte)0);
                }


                foreach (LayerResource res in this._resources.Values)
                {
                    res.Write(writer);
                }
            }

            writer.EndLengthBlock();
        }
Пример #6
0
        public void Save(string filename)
        {
            if (File.Exists(filename))
                File.Delete(filename);

            FileStream stream = new FileStream(filename,
                FileMode.OpenOrCreate, FileAccess.Write);

            BinaryPSDWriter writer = new BinaryPSDWriter(stream);

            writer.Write("8BPS");
            this._header.Write(writer);

            writer.Write((uint)0); //No palette
            //TODO: palette

            //if (this._imageResources == null)
            //    this._imageResources = new Dictionary<ImageResource.ResourceIDs, ImageResource>();
            writer.StartLengthBlock(typeof(uint));
            foreach (ImageResource imgRes in this._imageResources)
                imgRes.Write(writer);
            writer.EndLengthBlock();

            //   Layers
            writer.StartLengthBlock(typeof(uint), 4);

            // LayerInfo:
            writer.StartLengthBlock(typeof(uint));
            writer.Write((ushort)this.Layers.Count);
            foreach (Layer layer in this.Layers)
                layer.Write(writer);
            //Layer pixel data
            foreach (Layer layer in this.Layers)
                layer.WritePixels(writer);

            writer.EndLengthBlock();

            writer.EndLengthBlock();

            writer.PadToNextMultiple(4);

            //Global Mask
            writer.StartLengthBlock(typeof(uint));
            if (this._tempGlobalLayerMask != null)
                writer.Write(this._tempGlobalLayerMask);
            writer.EndLengthBlock();

            //Global image (merged)
            //TODO: !
            if (this._globalImage != null)
                this._globalImage.Save(writer);
        }
Пример #7
0
        public void Save(string filename)
        {
            if (File.Exists(filename))
            {
                File.Delete(filename);
            }

            FileStream stream = new FileStream(filename,
                                               FileMode.OpenOrCreate, FileAccess.Write);

            BinaryPSDWriter writer = new BinaryPSDWriter(stream);

            writer.Write("8BPS");
            this._header.Write(writer);

            writer.Write((uint)0); //No palette
            //TODO: palette

            //if (this._imageResources == null)
            //    this._imageResources = new Dictionary<ImageResource.ResourceIDs, ImageResource>();
            writer.StartLengthBlock(typeof(uint));
            foreach (ImageResource imgRes in this._imageResources)
            {
                imgRes.Write(writer);
            }
            writer.EndLengthBlock();


            //   Layers
            writer.StartLengthBlock(typeof(uint), 4);

            // LayerInfo:
            writer.StartLengthBlock(typeof(uint));
            writer.Write((ushort)this.Layers.Count);
            foreach (Layer layer in this.Layers)
            {
                layer.Write(writer);
            }
            //Layer pixel data
            foreach (Layer layer in this.Layers)
            {
                layer.WritePixels(writer);
            }

            writer.EndLengthBlock();

            writer.EndLengthBlock();

            writer.PadToNextMultiple(4);

            //Global Mask
            writer.StartLengthBlock(typeof(uint));
            if (this._tempGlobalLayerMask != null)
            {
                writer.Write(this._tempGlobalLayerMask);
            }
            writer.EndLengthBlock();

            //Global image (merged)
            //TODO: !
            if (this._globalImage != null)
            {
                this._globalImage.Save(writer);
            }
        }
Пример #8
0
 public void Write(BinaryPSDWriter writer)
 {
     writer.Write("8BIM");
     writer.Write(this.Tag);
     writer.StartLengthBlock(typeof(uint));
     this.SubWrite(writer);
     writer.EndLengthBlock();
     if (!(this is EffectBase))
         writer.PadToNextMultiple(2);
 }
Пример #9
0
        public void Write(BinaryPSDWriter writer)
        {
            writer.WritePSDRectangle(this._rect); // new Rectangle(this._rect).Write(writer);

            writer.Write((ushort)this._channels.Count);
            foreach (Channel channel in this._channels.Values)
            {
                channel.Write(writer);
            }

            writer.Write("8BIM");

            BlendKeys bk = (BlendKeys)Enum.Parse(typeof(BlendKeys), this.BlendKey);
            _blendKeysPsd bkPsd = (_blendKeysPsd)(int)bk;
            writer.Write(bkPsd.ToString());

            writer.Write(this.Opacity);
            writer.Write(this.Clipping);
            writer.Write(this.Flags);
            writer.Write((byte)0); //padding
            writer.StartLengthBlock(typeof(uint));

            if (this._mask != null || (this._blendRanges != null && this._blendRanges.Count > 0) || !string.IsNullOrEmpty(this.Name))
            {
                if (this._mask != null)
                    this._mask.Write(writer);
                else
                    writer.Write((uint)0); //TODO: should be a static of Mask..?

                //blending ranges
                writer.Write((uint)this._blendRanges.Count * 4);
                foreach (System.Drawing.Color clr in this._blendRanges)
                    writer.Write((uint)clr.ToArgb());

                //why is there padding here? Seems unnecessary.
                long namePosition = writer.BaseStream.Position;

                writer.WritePascalString(this.Name);

                int paddingBytes = (int)((writer.BaseStream.Position - namePosition) % 4);
                for (int i = 0; i < paddingBytes; i++)
                    writer.Write((byte)0);

                foreach (LayerResource res in this._resources.Values)
                {
                    res.Write(writer);
                }
            }

            writer.EndLengthBlock();
        }
Пример #10
0
 //public string GetIdAsFOURCC()
 //{
 //    return "" + (char)((this.ID >> 24) & 0xff) + (char)((this.ID >> 16) & 0xff) + (char)((this.ID >> 8) & 0xff) + (char)(this.ID & 0xff);
 //}
 public void Write(BinaryPSDWriter writer)
 {
     writer.Write("8BIM");
     writer.Write(this.ID);
     writer.WritePascalString(this.Name);
     writer.StartLengthBlock(typeof(uint));
     this.SubWrite(writer);
     writer.EndLengthBlock();
     writer.PadToNextMultiple(2);
     //if (writer.GetCurrentBlockLength() % 2 == 1)
     //    writer.Write((byte)0);
 }