Summary description for ImageResource.
 /// <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);
 }
Example #2
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;
        }
Example #3
0
 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();
 }
Example #4
0
        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();
        }
Example #5
0
        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();
        }
Example #6
0
        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();
        }
Example #7
0
        ///////////////////////////////////////////////////////////////////////////

        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;
        }
Example #8
0
        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);
                }
            }
        }
Example #9
0
        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);
                }
            }
        }
Example #10
0
        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);
            }
              }
        }
Example #11
0
        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);
                }
            }
        }
Example #12
0
        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);
        }
Example #13
0
 // This method implements the test condition for
 // finding the ResolutionInfo.
 private static bool IsResolutionInfo(ImageResource res)
 {
     return(res.ID == (int)ResourceIDs.ResolutionInfo);
 }
Example #14
0
        ///////////////////////////////////////////////////////////////////////////

        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;
        }
Example #15
0
 // This method implements the test condition for 
 // finding the ResolutionInfo.
 private static bool IsResolutionInfo(ImageResource res)
 {
     return res.ID == (int) ResourceIDs.ResolutionInfo;
 }
Example #16
0
        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);
        }
Example #17
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;
        }