Exemplo n.º 1
0
        protected override void ReadValue(PsdReader reader, object userData, out LayerRecords value)
        {
            LayerRecords records = new LayerRecords();

            records.Top    = reader.ReadInt32();
            records.Left   = reader.ReadInt32();
            records.Bottom = reader.ReadInt32();
            records.Right  = reader.ReadInt32();
            records.ValidateSize();

            int channelCount = reader.ReadUInt16();

            records.ChannelCount = channelCount;

            for (int i = 0; i < channelCount; i++)
            {
                records.Channels[i].Type   = reader.ReadChannelType();
                records.Channels[i].Size   = reader.ReadLength();
                records.Channels[i].Width  = records.Width;
                records.Channels[i].Height = records.Height;
            }

            reader.ValidateSignature();

            records.BlendMode = reader.ReadBlendMode();
            records.Opacity   = reader.ReadByte();
            records.Clipping  = reader.ReadBoolean();
            records.Flags     = reader.ReadLayerFlags();
            records.Filter    = reader.ReadByte();

            value = records;
        }
Exemplo n.º 2
0
        protected override void ReadData(PsdReader reader, object userData)
        {
            var version = reader.ReadInt32();
            var flags = reader.ReadUInt32();

            var bezierDescriptors = new List<BezierDescriptor>();

            while (reader.Position + 26 <= EndPosition)
            {
                var descriptor = reader.ReadUInt16();

                switch (descriptor)
                {
                    case 0:
                    {
                        var subpath = new BezierSubpathRecord();
                        bezierDescriptors.Add(subpath);

                        subpath.Descriptor = descriptor;
                        subpath.IsClosed = true;
                        subpath.NumPoints = reader.ReadInt16();
                        reader.ReadBytes(22);
                        break;
                    }

                    case 3:
                    {
                        var subpath = new BezierSubpathRecord();
                        bezierDescriptors.Add(subpath);

                        subpath.Descriptor = descriptor;
                        subpath.NumPoints = reader.ReadInt16();
                        reader.ReadBytes(22);
                        break;
                    }

                    case 1:
                    case 2:
                    case 4:
                    case 5:
                    {
                        var knot = new BezierKnot();
                        bezierDescriptors.Add(knot);

                        knot.Descriptor = descriptor;
                        knot.Point1Y = ReadBezierPoint(reader);
                        knot.Point1X = ReadBezierPoint(reader);
                        knot.Point2Y = ReadBezierPoint(reader);
                        knot.Point2X = ReadBezierPoint(reader);
                        knot.Point3Y = ReadBezierPoint(reader);
                        knot.Point3X = ReadBezierPoint(reader);
                        break;
                    }

                    case 6:
                    {
                        var record = new BezierPathFillRuleRecord();
                        bezierDescriptors.Add(record);

                        record.Descriptor = descriptor;
                        reader.ReadBytes(24);
                        break;
                    }

                    case 7:
                    {
                        var record = new BezierClipboardRecord();
                        bezierDescriptors.Add(record);

                        record.Descriptor = descriptor;
                        reader.ReadBytes(24);
                        break;
                    }

                    case 8:
                    {
                        var record = new BezierInitialFillRuleRecord();
                        bezierDescriptors.Add(record);

                        record.Descriptor = descriptor;
                        record.FillStartMode = reader.ReadInt16();
                        reader.ReadBytes(22);
                        break;
                    }

                    default:
                        reader.ReadBytes(24);
                        break;
                }
            }

            Beziers = bezierDescriptors.ToArray();
        }