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; }
} // '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); }
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); }
public IpqArchive(ArcView arc, ArchiveFormat impl, ICollection <Entry> dir, IpfMetaData info) : base(arc, impl, dir) { Info = info; }
} // '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); }