Exemple #1
0
        protected override void ReadValue(PsdReader reader, Object userData, out IProperties value)
        {
            value = new Properties();

            Int16 version = reader.ReadInt16();
            Int32 count   = reader.ReadInt16();

            for (Int32 i = 0; i < count; i++)
            {
                String _8bim      = reader.ReadAscii(4);
                String effectType = reader.ReadAscii(4);
                Int32  size       = reader.ReadInt32();
                Int64  p          = reader.Position;

                switch (effectType)
                {
                case "dsdw":
                {
                    //ShadowInfo.Parse(reader);
                }
                break;

                case "sofi":
                {
                    //this.solidFillInfo = SolidFillInfo.Parse(reader);
                }
                break;
                }

                reader.Position = p + size;
            }
        }
        protected override void ReadData(PsdReader reader, object userData)
        {
            short version = reader.ReadInt16();
            int   count   = reader.ReadInt16();

            for (int i = 0; i < count; i++)
            {
                string _8bim      = reader.ReadAscii(4);
                string effectType = reader.ReadAscii(4);
                int    size       = reader.ReadInt32();
                long   p          = reader.Position;

                switch (effectType)
                {
                case "dsdw":
                {
                    //ShadowInfo.Parse(reader);
                }
                break;

                case "sofi":
                {
                    //this.solidFillInfo = SolidFillInfo.Parse(reader);
                }
                break;
                }

                reader.Position = p + size;
            }
        }
Exemple #3
0
        protected override void ReadValue(PsdReader reader, object userData, out IProperties value)
        {
            value = new Properties();

            short version = reader.ReadInt16();
            int count = reader.ReadInt16();

            for (int i = 0; i < count; i++)
            {
                string _8bim = reader.ReadAscii(4);
                string effectType = reader.ReadAscii(4);
                int size = reader.ReadInt32();
                long p = reader.Position;

                switch (effectType)
                {
                    case "dsdw":
                        {
                            //ShadowInfo.Parse(reader);
                        }
                        break;
                    case "sofi":
                        {
                            //this.solidFillInfo = SolidFillInfo.Parse(reader);
                        }
                        break;
                }

                reader.Position = p + size;
            }
        }
        protected override void ReadData(PsdReader reader, object userData)
        {
            Properties props = new Properties(6);

            props["HorizontalRes"]     = reader.ReadInt16();
            props["HorizontalResUnit"] = reader.ReadInt32();
            props["WidthUnit"]         = reader.ReadInt16();
            props["VerticalRes"]       = reader.ReadInt16();
            props["VerticalResUnit"]   = reader.ReadInt32();
            props["HeightUnit"]        = reader.ReadInt16();
        }
        protected override void ReadValue(PsdReader reader, object userData, out IProperties value)
        {
            Properties props = new Properties(6);

            props["HorizontalRes"] = reader.ReadInt16();
            props["HorizontalResUnit"] = reader.ReadInt32();
            props["WidthUnit"] = reader.ReadInt16();
            props["VerticalRes"] = reader.ReadInt16();
            props["VerticalResUnit"] = reader.ReadInt32();
            props["HeightUnit"] = reader.ReadInt16();

            value = props;
        }
Exemple #6
0
        protected override void ReadValue(PsdReader reader, Object userData, out IProperties value)
        {
            Properties props = new Properties(6);

            props["HorizontalRes"]     = reader.ReadInt16();
            props["HorizontalResUnit"] = reader.ReadInt32();
            props["WidthUnit"]         = reader.ReadInt16();
            props["VerticalRes"]       = reader.ReadInt16();
            props["VerticalResUnit"]   = reader.ReadInt32();
            props["HeightUnit"]        = reader.ReadInt16();

            value = props;
        }
Exemple #7
0
        protected override void ReadValue(PsdReader reader, object userData, out IProperties value)
        {
            Properties props = new Properties(7);

            reader.ValidateInt16(1, "Typetool Version");
            props["Transforms"]  = reader.ReadDoubles(6);
            props["TextVersion"] = reader.ReadInt16();
            props["Text"]        = new DescriptorStructure(reader);
            props["WarpVersion"] = reader.ReadInt16();
            props["Warp"]        = new DescriptorStructure(reader);
            props["Bounds"]      = reader.ReadDoubles(2);

            value = props;
        }
Exemple #8
0
        protected override void ReadValue(PsdReader reader, object userData, out IProperties value)
        {
            Properties props = new Properties(7);

            reader.ValidateInt16(1, "Typetool Version");
            props["Transforms"] = reader.ReadDoubles(6);
            props["TextVersion"] = reader.ReadInt16();
            props["Text"] = new DescriptorStructure(reader);
            props["WarpVersion"] = reader.ReadInt16();
            props["Warp"] = new DescriptorStructure(reader);
            props["Bounds"] = reader.ReadDoubles(2);

            value = props;
        }
Exemple #9
0
        protected override void ReadValue(PsdReader reader, object userData, out FileHeaderSection value)
        {
            value = new FileHeaderSection();

            value.NumberOfChannels = reader.ReadInt16();
            value.Height           = reader.ReadInt32();
            value.Width            = reader.ReadInt32();
            value.Depth            = reader.ReadInt16();
            value.ColorMode        = reader.ReadColorMode();

            if (value.Depth != 8)
            {
                throw new NotSupportedException("only support 8 Bit Channel");
            }
        }
        protected override void ReadValue(PsdReader reader, object userData, out PsdLayer[] value)
        {
            PsdDocument document   = userData as PsdDocument;
            int         layerCount = Math.Abs((int)reader.ReadInt16());

            PsdLayer[] layers = new PsdLayer[layerCount];
            for (int i = 0; i < layerCount; i++)
            {
                layers[i] = new PsdLayer(reader, document);
            }

            foreach (var item in layers)
            {
                item.ReadChannels(reader);
            }

            layers = Initialize(null, layers);

            foreach (var item in layers.SelectMany(item => item.Descendants()).Reverse())
            {
                item.ComputeBounds();
            }

            value = layers;
        }
Exemple #11
0
        private static Channel[] ReadValue(PsdReader reader, PsdDocument document)
        {
            int channelCount = document.FileHeaderSection.NumberOfChannels;
            int width        = document.Width;
            int height       = document.Height;
            int depth        = document.FileHeaderSection.Depth;

            CompressionType compressionType = (CompressionType)reader.ReadInt16();

            ChannelType[] types    = new ChannelType[] { ChannelType.Red, ChannelType.Green, ChannelType.Blue, ChannelType.Alpha };
            Channel[]     channels = new Channel[channelCount];

            for (int i = 0; i < channels.Length; i++)
            {
                ChannelType type = i < types.Length ? types[i] : ChannelType.Mask;
                channels[i] = new Channel(type, width, height, 0);
                channels[i].ReadHeader(reader, compressionType);
            }

            for (int i = 0; i < channels.Length; i++)
            {
                channels[i].Read(reader, depth, compressionType);
            }

            if (channels.Length == 4)
            {
                for (int i = 0; i < channels[3].Data.Length; i++)
                {
                    float a = channels[3].Data[i] / 255.0f;

                    for (int j = 0; j < 3; j++)
                    {
                        float r  = channels[j].Data[i] / 255.0f;
                        float r1 = (((a + r) - 1f) * 1f) / a;
                        channels[j].Data[i] = (byte)(r1 * 255.0f);
                    }
                }
            }

            return(channels.OrderBy(item => item.Type).ToArray());
        }
        protected override void ReadValue(PsdReader reader, object userData, out IProperties value)
        {
            Properties props = new Properties();

            while(reader.Position < this.EndPosition)
            {
                reader.ValidateSignature();

                string resourceID = reader.ReadInt16().ToString();
                string name = reader.ReadPascalString(2);
                long length = reader.ReadInt32();
                length += (length % 2);

                ResourceReaderBase resourceReader = ReaderCollector.CreateReader(resourceID, reader, length);
                string resourceName = ReaderCollector.GetDisplayName(resourceID);

                props[resourceName] = resourceReader;
            }

            value = props;
        }
Exemple #13
0
        protected override void ReadValue(PsdReader reader, object userData, out IProperties value)
        {
            Properties props = new Properties();

            while (reader.Position < this.EndPosition)
            {
                reader.ValidateSignature();

                string resourceID = reader.ReadInt16().ToString();
                string name       = reader.ReadPascalString(2);
                long   length     = reader.ReadInt32();
                length += (length % 2);

                ResourceReaderBase resourceReader = ReaderCollector.CreateReader(resourceID, reader, length);
                string             resourceName   = ReaderCollector.GetDisplayName(resourceID);

                props[resourceName] = resourceReader;
            }

            value = props;
        }
Exemple #14
0
        protected override void ReadData(PsdReader reader, object userData)
        {
            var list = new List <IResourceBlock>();

            while (reader.Position < this.EndPosition)
            {
                reader.ValidateSignature();

                string resourceID = reader.ReadInt16().ToString();
                string name       = reader.ReadPascalString(2);
                long   length     = reader.ReadInt32();
                length += (length % 2);

                var    resourceReader = ReaderCollector.CreateReader(resourceID, reader, length);
                string resourceName   = ReaderCollector.GetDisplayName(resourceID);

                list.Add(resourceReader);
            }

            Resources = list.ToArray();
        }
Exemple #15
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();
        }
Exemple #16
0
        public void ReadHeader(PsdReader reader, CompressionType compressionType)
        {
            if (compressionType != CompressionType.RLE)
                return;

            this.rlePackLengths = new int[this.height];
            if (reader.Version == 1)
            {
                for (int i = 0; i < this.height; i++)
                {
                    this.rlePackLengths[i] = reader.ReadInt16();
                }
            }
            else
            {
                for (int i = 0; i < this.height; i++)
                {
                    this.rlePackLengths[i] = reader.ReadInt32();
                }
            }
        }
Exemple #17
0
        private Object ReadValue(PsdReader reader, Int32 level)
        {
            Char c = reader.ReadChar();

            if (c == ']')
            {
                return(null);
            }
            else if (c == '(')
            {
                // unicode string
                String text            = String.Empty;
                Int32  stringSignature = reader.ReadInt16() & 0xFFFF;
                //assert stringSignature == 0xFEFF;
                while (true)
                {
                    Char b1 = reader.ReadChar();
                    if (b1 == ')')
                    {
                        reader.Skip('\n');
                        return(text);
                    }
                    Char b2 = reader.ReadChar();
                    if (b2 == '\\')
                    {
                        b2 = reader.ReadChar();
                    }
                    if (b2 == 13)
                    {
                        text += '\n';
                    }
                    else
                    {
                        text += (Char)((b1 << 8) | b2);
                    }
                }
            }
            else if (c == '[')
            {
                ArrayList list = new ArrayList();
                // array
                c = reader.ReadChar();
                while (true)
                {
                    if (c == ' ')
                    {
                        Object val = this.ReadValue(reader, level);
                        if (val == null)
                        {
                            reader.Skip('\n');
                            return(list);
                        }
                        else
                        {
                            list.Add(val);
                        }
                    }
                    else if (c == 10)
                    {
                        Properties p = new Properties();
                        this.ReadProperties(reader, level, p);
                        reader.Skip('\n');
                        if (p.Count == 0)
                        {
                            return(list);
                        }
                        else
                        {
                            list.Add(p);
                        }
                    }
                    else
                    {
                        //assert false;
                    }
                }
            }
            else
            {
                String value = String.Empty;
                do
                {
                    value += c;
                    c      = reader.ReadChar();
                }while (c != 10 && c != ' ');

                {
                    Int32 f;
                    if (Int32.TryParse(value, out f) == true)
                    {
                        return(f);
                    }
                }
                {
                    Single f;
                    if (Single.TryParse(value, out f) == true)
                    {
                        return(f);
                    }
                }
                {
                    Boolean f;
                    if (Boolean.TryParse(value, out f) == true)
                    {
                        return(f);
                    }
                }

                return(value);
            }
        }
Exemple #18
0
        private object ReadValue(PsdReader reader, int level)
        {
            char c = reader.ReadChar();

            if (c == ']')
            {
                return(null);
            }
            else if (c == '(')
            {
                // unicode string
                string text            = string.Empty;
                int    stringSignature = reader.ReadInt16() & 0xFFFF;
                //assert stringSignature == 0xFEFF;
                while (true)
                {
                    char b1 = reader.ReadChar();
                    if (b1 == ')')
                    {
                        reader.Skip('\n');
                        return(text);
                    }
                    char b2 = reader.ReadChar();
                    if (b2 == '\\')
                    {
                        b2 = reader.ReadChar();
                    }
                    if (b2 == 13)
                    {
                        text += '\n';
                    }
                    else
                    {
                        text += (char)((b1 << 8) | b2);
                    }
                }
            }
            else if (c == '[')
            {
                ArrayList list = new ArrayList();
                // array
                c = reader.ReadChar();
                while (true)
                {
                    if (c == ' ')
                    {
                        object val = this.ReadValue(reader, level);
                        if (val == null)
                        {
                            reader.Skip('\n');
                            return(list);
                        }
                        else
                        {
                            list.Add(val);
                        }
                    }
                    else if (c == 10)
                    {
                        Properties p = new Properties();
                        this.ReadProperties(reader, level, p);
                        reader.Skip('\n');
                        if (p.Count == 0)
                        {
                            return(list);
                        }
                        else
                        {
                            list.Add(p);
                        }
                    }
                    else
                    {
                        //assert false;
                    }
                }
            }
            else
            {
                string value = string.Empty;
                do
                {
                    value += c;
                    c      = reader.ReadChar();
                }while (c != 10 && c != ' ');

                {
                    int f;
                    if (int.TryParse(value, out f) == true)
                    {
                        return(f);
                    }
                }
                {
                    float f;
                    if (float.TryParse(value, out f) == true)
                    {
                        return(f);
                    }
                }
                {
                    bool f;
                    if (bool.TryParse(value, out f) == true)
                    {
                        return(f);
                    }
                }

                return(value);
            }
        }
        private object ReadValue(PsdReader reader, int level)
        {
            char c = reader.ReadChar();
            if (c == ']')
            {
                return null;
            }
            else if (c == '(')
            {
                // unicode string
                string text = string.Empty;
                int stringSignature = reader.ReadInt16() & 0xFFFF;
                //assert stringSignature == 0xFEFF;
                while (true)
                {
                    char b1 = reader.ReadChar();
                    if (b1 == ')')
                    {
                        reader.Skip('\n');
                        return text;
                    }
                    char b2 = reader.ReadChar();
                    if (b2 == '\\')
                    {
                        b2 = reader.ReadChar();
                    }
                    if (b2 == 13)
                    {
                        text += '\n';
                    }
                    else
                    {
                        text += (char)((b1 << 8) | b2);
                    }
                }
            }
            else if (c == '[')
            {
                ArrayList list = new ArrayList();
                // array
                c = reader.ReadChar();
                while (true)
                {
                    if (c == ' ')
                    {
                        object val = this.ReadValue(reader, level);
                        if (val == null)
                        {
                            reader.Skip('\n');
                            return list;
                        }
                        else
                        {
                            list.Add(val);
                        }
                    }
                    else if (c == 10)
                    {
                        Properties p = new Properties();
                        this.ReadProperties(reader, level, p);
                        reader.Skip('\n');
                        if (p.Count == 0)
                        {
                            return list;
                        }
                        else
                        {
                            list.Add(p);
                        }
                    }
                    else
                    {
                        //assert false;
                    }
                }
            }
            else
            {
                string value = string.Empty;
                do
                {
                    value += c;
                    c = reader.ReadChar();
                }
                while (c != 10 && c != ' ');

                {
                    int f;
                    if (int.TryParse(value, out f) == true)
                        return f;
                }
                {
                    float f;
                    if (float.TryParse(value, out f) == true)
                        return f;
                }
                {
                    bool f;
                    if (bool.TryParse(value, out f) == true)
                        return f;
                }

                return value;
            }
        }