public override HeaderSection Read(PhotoshopFileReader reader, PhotoshopFile photoshopFile)
        {
            var buffer         = reader.ReadBytes(26);
            var bufferedReader = new PhotoshopFileReader(buffer);
            var signatureBytes = bufferedReader.ReadBytes(4);
            var signature      = Encoding.ASCII.GetString(signatureBytes);
            var version        = bufferedReader.ReadInt16();
            var reservedBytes  = bufferedReader.ReadBytes(6);
            var channelCount   = bufferedReader.ReadInt16();
            var height         = bufferedReader.ReadInt32();
            var width          = bufferedReader.ReadInt32();
            var depth          = bufferedReader.ReadInt16();
            var colorMode      = (ColorMode)bufferedReader.ReadInt16();

            return(new HeaderSection(
                       signature,
                       version,
                       reservedBytes,
                       channelCount,
                       height,
                       width,
                       depth,
                       colorMode
                       ));
        }
Exemplo n.º 2
0
        public override ColorModeDataSection Read(PhotoshopFileReader reader, PhotoshopFile photoshopFile)
        {
            var length = reader.ReadInt32();
            var data   = reader.ReadBytes(length);

            return(new ColorModeDataSection(length, data));
        }
        public override ImageResourcesSection Read(PhotoshopFileReader reader, PhotoshopFile photoshopFile)
        {
            var length = reader.ReadInt32();
            var data   = reader.ReadBytes(length);

            return(new ImageResourcesSection(length, data));
        }
        public override LayerMaskInformationSection Read(PhotoshopFileReader reader, PhotoshopFile photoshopFile)
        {
            var length = reader.ReadInt32();
            var data   = reader.ReadBytes(length);

            return(new PsdLayerMaskInformationSection(length, data));
        }
Exemplo n.º 5
0
        public override LayerMaskInformationSection Read(PhotoshopFileReader reader, PhotoshopFile photoshopFile)
        {
            var length = reader.ReadInt64();
            // TODO: Don't just convert to int pls
            var data = reader.ReadBytes((int)length);

            return(new PsbLayerMaskInformationSection(length, data));
        }
        public override ImageDataSection Read(PhotoshopFileReader reader, PhotoshopFile photoshopFile)
        {
            var channelCount      = photoshopFile.ChannelCount;
            var width             = photoshopFile.Width;
            var height            = photoshopFile.Height;
            var depth             = photoshopFile.Depth;
            var compressionMethod = reader.ReadInt16();
            var dataLength        = 0;
            var pitch             = DepthToPitch(depth, width);

            byte[] data;
            if (compressionMethod == 0)
            {
                for (var i = 0; i < channelCount; i++)
                {
                    dataLength += pitch * height;
                }

                data = reader.ReadBytes(dataLength);
            }
            else if (compressionMethod == 1)
            {
                var dataBuffer     = new List <byte>();
                var channelLengths = new List <int[]>();
                for (var i = 0; i < channelCount; i++)
                {
                    var lengths = new int[height];
                    for (var j = 0; j < height; j++)
                    {
                        lengths[j] = photoshopFile.Version == 1
                            ? reader.ReadInt16()
                            : reader.ReadInt32();
                    }

                    channelLengths.Add(lengths);
                }

                for (int i = 0; i < channelCount; i++)
                {
                    var lengths = channelLengths[i];
                    for (var j = 0; j < lengths.Length; j++)
                    {
                        var rleData          = reader.ReadBytes(lengths[j]);
                        var decompressedData = new byte[width];
                        DecompressRleData(rleData, decompressedData);
                        dataBuffer.AddRange(decompressedData);
                    }
                }

                data = dataBuffer.ToArray();
            }
            else
            {
                throw new NotImplementedException();
            }

            return(new ImageDataSection(compressionMethod, data));
        }
Exemplo n.º 7
0
 public abstract T Read([NotNull] PhotoshopFileReader reader, [NotNull] PhotoshopFile photoshopFile);