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; }
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(); }