Пример #1
0
 public IpfReader(IBinaryStream input, IpfMetaData info)
 {
     m_input  = input;
     m_info   = info;
     m_output = new byte[m_info.Width * m_info.Height];
     Format   = m_info.HasPalette ? PixelFormats.Indexed8 : PixelFormats.Gray8;
 }
Пример #2
0
        }                                                        // 'RIFF'

        internal IpfMetaData ReadIpfHeader(IBinaryStream file)
        {
            // 'RIFF' isn't included into signature to avoid auto-detection of the WAV files as IPF images.
            if (0x46464952 != file.Signature) // 'RIFF'
            {
                return(null);
            }
            var header = file.ReadHeader(0x14);

            if (!header.AsciiEqual(0xC, "fmt "))
            {
                return(null);
            }
            int fmt_size = header.ToInt32(0x10);

            if (fmt_size < 0x24)
            {
                return(null);
            }
            header = file.ReadHeader(0x14 + fmt_size);
            var info = new IpfMetaData {
                BPP          = 8,
                HasPalette   = header.ToInt32(0x18) != 0,
                HasBitmap    = header.ToInt32(0x28) != 0,
                FormatString = header.GetCString(8, 8),
            };

            if (info.HasPalette)
            {
                if (0x206C6170 != file.ReadInt32()) // 'pal '
                {
                    return(null);
                }
                info.PalSize = file.ReadInt32();
                if (info.PalSize < 0x24)
                {
                    return(null);
                }
                info.PalOffset = file.Position;
                file.Position  = info.PalOffset + info.PalSize;
            }
            info.DataOffset = file.Position;
            return(info);
        }
Пример #3
0
        internal bool ReadBmpInfo(IBinaryStream file, IpfMetaData info)
        {
            if (0x20706D62 != file.ReadInt32()) // 'bmp '
            {
                return(false);
            }
            int bmp_size = file.ReadInt32();

            if (bmp_size <= 0x20)
            {
                return(false);
            }
            info.BmpOffset = file.Position + 0x18;
            info.Width     = file.ReadUInt16();
            info.Height    = file.ReadUInt16();
            file.ReadUInt32();
            info.OffsetX = file.ReadInt16();
            info.OffsetY = file.ReadInt16();
            file.Seek(6, SeekOrigin.Current);
            info.IsCompressed = 0 != (file.ReadByte() & 1);
            return(true);
        }
Пример #4
0
 public IpqArchive(ArcView arc, ArchiveFormat impl, ICollection <Entry> dir, IpfMetaData info)
     : base(arc, impl, dir)
 {
     Info = info;
 }
Пример #5
0
        }                                                        // 'RIFF'

        public override ImageMetaData ReadMetaData(IBinaryStream file)
        {
            // 'RIFF' isn't included into signature to avoid auto-detection of the WAV files as IPF images.
            if (0x46464952 != file.Signature) // 'RIFF'
            {
                return(null);
            }
            var header = file.ReadHeader(0x14);

            if (!header.AsciiEqual(8, "IPF fmt "))
            {
                return(null);
            }
            int fmt_size = header.ToInt32(0x10);

            if (fmt_size < 0x24)
            {
                return(null);
            }
            header = file.ReadHeader(0x14 + fmt_size);
            bool has_palette = header.ToInt32(0x18) != 0;
            bool has_bitmap  = header.ToInt32(0x28) != 0;

            if (!has_bitmap)
            {
                return(null);
            }
            var info = new IpfMetaData {
                BPP = 8, HasPalette = has_palette
            };

            if (has_palette)
            {
                if (0x206C6170 != file.ReadInt32()) // 'pal '
                {
                    return(null);
                }
                info.PalSize = file.ReadInt32();
                if (info.PalSize < 0x24)
                {
                    return(null);
                }
                info.PalOffset = file.Position;
                file.Position  = info.PalOffset + info.PalSize;
            }
            if (0x20706D62 != file.ReadInt32()) // 'bmp '
            {
                return(null);
            }
            int bmp_size = file.ReadInt32();

            if (bmp_size <= 0x20)
            {
                return(null);
            }
            info.BmpOffset = file.Position + 0x18;
            info.Width     = file.ReadUInt16();
            info.Height    = file.ReadUInt16();
            file.Seek(0xE, SeekOrigin.Current);
            info.IsCompressed = 0 != (file.ReadByte() & 1);
            return(info);
        }