public PsdFile(string filename, LoadContext loadContext, ELoadFlag loadFlag = ELoadFlag.All) : this() { using (var stream = new FileStream(filename, FileMode.Open)) { Load(stream, loadContext, loadFlag); } }
public PsdFile(string filename, LoadContext loadContext) : this() { using (var stream = new FileStream(filename, FileMode.Open)) { Load(stream, loadContext); } }
public PsdFile(string filename, LoadContext loadContext) : this() { Name = Path.GetFileNameWithoutExtension(filename); //using (var stream = new FileStream(filename, FileMode.Open)) using (var stream = new MemoryStream(File.ReadAllBytes(filename))) { Load(stream, loadContext); } }
private void Load(Stream stream, LoadContext loadContext) { LoadContext = loadContext; var reader = new PsdBinaryReader(stream, loadContext.Encoding); LoadHeader(reader); LoadColorModeData(reader); LoadImageResources(reader); LoadLayerAndMaskInfo(reader); LoadImage(reader); DecompressImages(); }
private void Load(Stream stream, LoadContext loadContext, ELoadFlag loadFlag) { LoadContext = loadContext; var reader = new PsdBinaryReader(stream, loadContext.Encoding); if ((loadFlag & ELoadFlag.Header) == ELoadFlag.Header) { LoadHeader(reader); } if ((loadFlag & ELoadFlag.ColorMode) == ELoadFlag.ColorMode) { LoadColorModeData(reader); } if ((loadFlag & ELoadFlag.ImageData) == ELoadFlag.ImageData) { LoadImageResources(reader); LoadLayerAndMaskInfo(reader); LoadImage(reader); DecompressImages(); } }
public PsdFile(Stream stream, LoadContext loadContext, ELoadFlag loadFlag = ELoadFlag.All) : this() { Load(stream, loadContext, loadFlag); }
/////////////////////////////////////////////////////////////////////////// //private void SaveLayerAndMaskInfo(PsdBinaryWriter writer) //{ // Util.DebugMessage(writer.BaseStream, "Save, Begin, Layer and mask info"); // using (new PsdBlockLengthWriter(writer, IsLargeDocument)) // { // var startPosition = writer.BaseStream.Position; // SaveLayers(writer); // SaveGlobalLayerMask(writer); // foreach (var info in AdditionalInfo) // { // info.Save(writer, // globalLayerInfo: true, // isLargeDocument: IsLargeDocument); // } // writer.WritePadding(startPosition, 2); // } // Util.DebugMessage(writer.BaseStream, "Save, End, Layer and mask info"); //} /////////////////////////////////////////////////////////////////////////// /// <summary> /// Load Layers Info section, including image data. /// </summary> /// <param name="reader">PSD reader.</param> /// <param name="hasHeader">Whether the Layers Info section has a length header.</param> internal void LoadLayers(PsdBinaryReader reader, bool hasHeader) { Util.DebugMessage(reader.BaseStream, "Load, Begin, Layers Info section"); long sectionLength = 0; if (hasHeader) { sectionLength = IsLargeDocument ? reader.ReadInt64() : reader.ReadUInt32(); if (sectionLength <= 0) { // The callback may take action when there are 0 layers, so it must // be called even though the Layers Info section is empty. LoadContext.OnLoadLayersHeader(this); Util.DebugMessage(reader.BaseStream, "Load, End, Layers Info section"); return; } } var startPosition = reader.BaseStream.Position; var numLayers = reader.ReadInt16(); // If numLayers < 0, then number of layers is absolute value, // and the first alpha channel contains the transparency data for // the merged result. if (numLayers < 0) { AbsoluteAlpha = true; numLayers = Math.Abs(numLayers); } for (int i = 0; i < numLayers; i++) { var layer = new Layer(reader, this); Layers.Add(layer); } // Header is complete just before loading pixel data LoadContext.OnLoadLayersHeader(this); //----------------------------------------------------------------------- // Load image data for all channels. foreach (var layer in Layers) { Util.DebugMessage(reader.BaseStream, "Load, Begin, Layer image, layer.Name"); foreach (var channel in layer.Channels) { channel.LoadPixelData(reader); } Util.DebugMessage(reader.BaseStream, "Load, End, Layer image, layer.Name"); } // Length is set to 0 when called on higher bitdepth layers. if (sectionLength > 0) { // Layers Info section is documented to be even-padded, but Photoshop // actually pads to 4 bytes. var endPosition = startPosition + sectionLength; var positionOffset = reader.BaseStream.Position - endPosition; Debug.Assert(positionOffset > -4, "LoadLayers did not read the full length of the Layers Info section."); Debug.Assert(positionOffset <= 0, "LoadLayers read past the end of the Layers Info section."); if (reader.BaseStream.Position < endPosition) { reader.BaseStream.Position = endPosition; } } Util.DebugMessage(reader.BaseStream, "Load, End, Layers"); }
public PsdFile(Stream stream, LoadContext loadContext) : this() { Load(stream, loadContext); }