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 )); }
public override ImageResourcesSection Read(PhotoshopFileReader reader, PhotoshopFile photoshopFile) { var length = reader.ReadInt32(); var data = reader.ReadBytes(length); return(new ImageResourcesSection(length, data)); }
public override ColorModeDataSection Read(PhotoshopFileReader reader, PhotoshopFile photoshopFile) { var length = reader.ReadInt32(); var data = reader.ReadBytes(length); return(new ColorModeDataSection(length, data)); }
public override LayerMaskInformationSection Read(PhotoshopFileReader reader, PhotoshopFile photoshopFile) { var length = reader.ReadInt32(); var data = reader.ReadBytes(length); return(new PsdLayerMaskInformationSection(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)); }