/// <summary> /// Initializes a new instance of the <see cref="ImageResource"/> class using another reference. /// </summary> /// <param name="imgRes">The reference to copy.</param> protected ImageResource(ImageResource imgRes) { ID = imgRes.ID; Name = imgRes.Name; Data = new byte[imgRes.Data.Length]; imgRes.Data.CopyTo(Data, 0); }
private void LoadImageResources(BinaryReverseReader reader) { _imageResources.Clear(); uint num = reader.ReadUInt32(); if (num <= 0U) { return; } long position = reader.BaseStream.Position; while (reader.BaseStream.Position - position < num) { ImageResource imgRes = new ImageResource(reader); switch ((ResourceIDs)imgRes.ID) { case ResourceIDs.XMLInfo: _metaData = XDocument.Load(XmlReader.Create(new MemoryStream(imgRes.Data))); IEnumerable <XElement> source = _metaData.Descendants(XName.Get("Category", "http://ns.adobe.com/photoshop/1.0/")); if (source.Any()) { _category = source.First().Value; } break; case ResourceIDs.ResolutionInfo: imgRes = new ResolutionInfo(imgRes); break; case ResourceIDs.AlphaChannelNames: imgRes = new AlphaChannels(imgRes); break; case ResourceIDs.PsCCOrignPathInfo: imgRes = new AlphaChannels(imgRes); break; case ResourceIDs.PsCCPathSelectionState: imgRes = new AlphaChannels(imgRes); break; case ResourceIDs.TransparencyIndex: Debug.Log("have transparent "); break; } _imageResources.Add(imgRes); } reader.BaseStream.Position = position + num; }
public AlphaChannels(ImageResource imgRes) : base(imgRes) { BinaryReverseReader reader = imgRes.DataReader; // the names are pascal strings without padding!!! while ((reader.BaseStream.Length - reader.BaseStream.Position) > 0) { var stringLength = reader.ReadByte(); var s = new string(reader.ReadChars(stringLength)); if (s.Length > 0) m_channelNames.Add(s); } reader.Close(); }
public ResolutionInfo(ImageResource imgRes) : base(imgRes) { var reader = imgRes.DataReader; m_hRes = reader.ReadInt16(); m_hResUnit = (ResUnit)reader.ReadInt32(); m_widthUnit = (Unit)reader.ReadInt16(); m_vRes = reader.ReadInt16(); m_vResUnit = (ResUnit)reader.ReadInt32(); m_heightUnit = (Unit)reader.ReadInt16(); reader.Close(); }
public ResolutionInfo(ImageResource imgRes) : base(imgRes) { BinaryReverseReader reader = imgRes.DataReader; this.m_hRes = reader.ReadInt16(); this.m_hResUnit = (ResUnit)reader.ReadInt32(); this.m_widthUnit = (Unit)reader.ReadInt16(); this.m_vRes = reader.ReadInt16(); this.m_vResUnit = (ResUnit)reader.ReadInt32(); this.m_heightUnit = (Unit)reader.ReadInt16(); reader.Close(); }
public AlphaChannels(ImageResource imgRes) : base(imgRes) { BinaryReverseReader reader = imgRes.DataReader; // the names are pascal strings without padding!!! while ((reader.BaseStream.Length - reader.BaseStream.Position) > 0) { byte stringLength = reader.ReadByte(); string s = new string(reader.ReadChars(stringLength)); if (s.Length > 0) { m_channelNames.Add(s); } } reader.Close(); }
/////////////////////////////////////////////////////////////////////////// private void LoadImageResources(BinaryReverseReader reader) { Debug.WriteLine("LoadImageResources started at " + reader.BaseStream.Position.ToString()); m_imageResources.Clear(); uint imgResLength = reader.ReadUInt32(); if (imgResLength <= 0) { return; } long startPosition = reader.BaseStream.Position; while ((reader.BaseStream.Position - startPosition) < imgResLength) { ImageResource imgRes = new ImageResource(reader); ResourceIDs resID = (ResourceIDs)imgRes.ID; switch (resID) { case ResourceIDs.ResolutionInfo: imgRes = new ResolutionInfo(imgRes); break; case ResourceIDs.Thumbnail1: case ResourceIDs.Thumbnail2: imgRes = new Thumbnail(imgRes); break; case ResourceIDs.AlphaChannelNames: imgRes = new AlphaChannels(imgRes); break; } m_imageResources.Add(imgRes); } //----------------------------------------------------------------------- // make sure we are not on a wrong offset, so set the stream position // manually reader.BaseStream.Position = startPosition + imgResLength; }
public Thumbnail(ImageResource imgRes) : base(imgRes) { using (var reader = DataReader) { var format = reader.ReadInt32(); var width = reader.ReadInt32(); var height = reader.ReadInt32(); #if true reader.ReadBytes(16); #else var widthBytes = reader.ReadInt32(); var size = reader.ReadInt32(); var compressedSize = reader.ReadInt32(); var bitPerPixel = reader.ReadInt16(); var planes = reader.ReadInt16(); #endif if (format == 1) { var imgData = reader.ReadBytes((int)(reader.BaseStream.Length - reader.BaseStream.Position)); using (var strm = new MemoryStream(imgData)) { Image = (Bitmap)(Bitmap.FromStream(strm).Clone()); } if (ID == 1033) { //// BGR //for(int y=0;y<m_thumbnailImage.Height;y++) // for (int x = 0; x < m_thumbnailImage.Width; x++) // { // Color c=m_thumbnailImage.GetPixel(x,y); // Color c2=Color.FromArgb(c.B, c.G, c.R); // m_thumbnailImage.SetPixel(x, y, c); // } } } else { Image = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format24bppRgb); } } }
public Thumbnail(ImageResource imgRes) : base(imgRes) { using (var reader = DataReader) { var format = reader.ReadInt32(); var width = reader.ReadInt32(); var height = reader.ReadInt32(); #if true reader.ReadBytes(16); #else var widthBytes = reader.ReadInt32(); var size = reader.ReadInt32(); var compressedSize = reader.ReadInt32(); var bitPerPixel = reader.ReadInt16(); var planes = reader.ReadInt16(); #endif if (format == 1) { var imgData = reader.ReadBytes((int) (reader.BaseStream.Length - reader.BaseStream.Position)); using (var strm = new MemoryStream(imgData)) { Image = (Bitmap)(Bitmap.FromStream(strm).Clone()); } if (ID == 1033) { //// BGR //for(int y=0;y<m_thumbnailImage.Height;y++) // for (int x = 0; x < m_thumbnailImage.Width; x++) // { // Color c=m_thumbnailImage.GetPixel(x,y); // Color c2=Color.FromArgb(c.B, c.G, c.R); // m_thumbnailImage.SetPixel(x, y, c); // } } } else { Image = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format24bppRgb); } } }
public Thumbnail(ImageResource imgRes) : base(imgRes) { using (BinaryReverseReader reader = DataReader) { int format = reader.ReadInt32(); int width = reader.ReadInt32(); int height = reader.ReadInt32(); int widthBytes = reader.ReadInt32(); int size = reader.ReadInt32(); int compressedSize = reader.ReadInt32(); short bitPerPixel = reader.ReadInt16(); short planes = reader.ReadInt16(); if (format == 1) { byte[] imgData = reader.ReadBytes((int)(reader.BaseStream.Length - reader.BaseStream.Position)); using (MemoryStream strm = new MemoryStream(imgData)) { m_thumbnailImage = (Bitmap)(Bitmap.FromStream(strm).Clone()); } if (this.ID == 1033) { //// BGR //for(int y=0;y<m_thumbnailImage.Height;y++) // for (int x = 0; x < m_thumbnailImage.Width; x++) // { // Color c=m_thumbnailImage.GetPixel(x,y); // Color c2=Color.FromArgb(c.B, c.G, c.R); // m_thumbnailImage.SetPixel(x, y, c); // } } } else { m_thumbnailImage = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format24bppRgb); } } }
public Thumbnail(ImageResource imgRes) : base(imgRes) { using (BinaryReverseReader reader = DataReader) { int format = reader.ReadInt32(); int width = reader.ReadInt32(); int height = reader.ReadInt32(); int widthBytes = reader.ReadInt32(); int size = reader.ReadInt32(); int compressedSize = reader.ReadInt32(); short bitPerPixel = reader.ReadInt16(); short planes = reader.ReadInt16(); if (format == 1) { byte[] imgData = reader.ReadBytes((int)(reader.BaseStream.Length - reader.BaseStream.Position)); using (MemoryStream strm = new MemoryStream(imgData)) { m_thumbnailImage = (Bitmap)(Bitmap.FromStream(strm).Clone()); } if (this.ID == 1033) { //// BGR //for(int y=0;y<m_thumbnailImage.Height;y++) // for (int x = 0; x < m_thumbnailImage.Width; x++) // { // Color c=m_thumbnailImage.GetPixel(x,y); // Color c2=Color.FromArgb(c.B, c.G, c.R); // m_thumbnailImage.SetPixel(x, y, c); // } } } else { m_thumbnailImage = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format24bppRgb); } } }
public static ImageResource CreateImageResource(PsdBinaryReader reader) { Util.DebugMessage(reader.BaseStream, "Load, Begin, ImageResource"); var signature = reader.ReadAsciiChars(4); var resourceIdInt = reader.ReadUInt16(); var name = reader.ReadPascalString(2); var dataLength = (int)reader.ReadUInt32(); var dataPaddedLength = Util.RoundUp(dataLength, 2); var endPosition = reader.BaseStream.Position + dataPaddedLength; ImageResource resource = null; var resourceId = (ResourceID)resourceIdInt; switch (resourceId) { case ResourceID.ResolutionInfo: resource = new ResolutionInfo(reader, name); break; case ResourceID.ThumbnailRgb: case ResourceID.ThumbnailBgr: resource = new Thumbnail(reader, resourceId, name, dataLength); break; case ResourceID.AlphaChannelNames: resource = new AlphaChannelNames(reader, name, dataLength); break; case ResourceID.UnicodeAlphaNames: resource = new UnicodeAlphaNames(reader, name, dataLength); break; case ResourceID.VersionInfo: resource = new VersionInfo(reader, name); break; default: resource = new RawImageResource(reader, signature, resourceId, name, dataLength); break; } Util.DebugMessage(reader.BaseStream, "Load, End, ImageResource, {0}", resourceId); // Reposition the reader if we do not consume the full resource block. // This takes care of the even-padding, and also preserves forward- // compatibility in case a resource block is later extended with // additional properties. if (reader.BaseStream.Position < endPosition) { reader.BaseStream.Position = endPosition; } // However, overruns are definitely an error. if (reader.BaseStream.Position > endPosition) { throw new PsdInvalidException("Corruption detected in resource."); } return(resource); }
// This method implements the test condition for // finding the ResolutionInfo. private static bool IsResolutionInfo(ImageResource res) { return(res.ID == (int)ResourceIDs.ResolutionInfo); }
/////////////////////////////////////////////////////////////////////////// private void LoadImageResources(BinaryReverseReader reader) { Debug.WriteLine("LoadImageResources started at " + reader.BaseStream.Position); m_imageResources.Clear(); uint imgResLength = reader.ReadUInt32(); if (imgResLength <= 0) return; long startPosition = reader.BaseStream.Position; while ((reader.BaseStream.Position - startPosition) < imgResLength) { var imgRes = new ImageResource(reader); var resID = (ResourceIDs)imgRes.ID; switch (resID) { case ResourceIDs.ResolutionInfo: imgRes = new ResolutionInfo(imgRes); break; case ResourceIDs.Thumbnail1: case ResourceIDs.Thumbnail2: imgRes = new Thumbnail(imgRes); break; case ResourceIDs.AlphaChannelNames: imgRes = new AlphaChannels(imgRes); break; } m_imageResources.Add(imgRes); } //----------------------------------------------------------------------- // make shure we are not on a wrong offset, so set the stream position // manually reader.BaseStream.Position = startPosition + imgResLength; }
// This method implements the test condition for // finding the ResolutionInfo. private static bool IsResolutionInfo(ImageResource res) { return res.ID == (int) ResourceIDs.ResolutionInfo; }
public ImageResource(ImageResource imgRes) { m_id = imgRes.m_id; m_name = imgRes.m_name; m_data = new byte[imgRes.m_data.Length]; imgRes.m_data.CopyTo(m_data, 0); }
/// <summary> /// Reads the image resources from the reader. /// </summary> /// <param name="reader">The reader to use to read the image resources.</param> private void LoadImageResources(BinaryReverseReader reader) { ImageResources.Clear(); uint num = reader.ReadUInt32(); if (num <= 0U) { return; } long position = reader.BaseStream.Position; while (reader.BaseStream.Position - position < num) { ImageResource imgRes = new ImageResource(reader); switch ((ResourceIDs)imgRes.ID) { case ResourceIDs.XMLInfo: MetaData = XDocument.Load(XmlReader.Create(new MemoryStream(imgRes.Data))); IEnumerable<XElement> source = MetaData.Descendants(XName.Get("Category", "http://ns.adobe.com/photoshop/1.0/")); if (source.Any()) { Category = source.First().Value; } break; case ResourceIDs.ResolutionInfo: imgRes = new ResolutionInfo(imgRes); break; case ResourceIDs.AlphaChannelNames: imgRes = new AlphaChannels(imgRes); break; } ImageResources.Add(imgRes); } reader.BaseStream.Position = position + num; }