public WadImageStream(WadEntry entry, Stream stream) { _entry = entry; using (var br = new BinaryReader(stream)) { PrepareData(br); } }
public WadImageStream(WadEntry entry, WadPackage package) { _entry = entry; using (var br = new BinaryReader(package.OpenFile(package.PackageFile))) { br.BaseStream.Position = entry.Offset; PrepareData(br); } }
private void SetEntryData(WadEntry e, BinaryReader br) { uint width, height, paletteSize; long textureDataOffset, paletteDataOffset; switch (e.Type) { case WadEntryType.Image: width = br.ReadUInt32(); height = br.ReadUInt32(); textureDataOffset = br.BaseStream.Position; br.BaseStream.Position += width * height; // Skip texture data paletteSize = br.ReadUInt16(); paletteDataOffset = br.BaseStream.Position; break; case WadEntryType.Texture: br.BaseStream.Position += 16; // Skip name width = br.ReadUInt32(); height = br.ReadUInt32(); textureDataOffset = br.BaseStream.Position + 16; var num = (int)(width * height); var skipMapData = (num / 4) + (num / 16) + (num / 64); br.BaseStream.Position += 16 + num + skipMapData; // Skip mipmap offsets, texture data, mipmap texture data paletteSize = br.ReadUInt16(); paletteDataOffset = br.BaseStream.Position; break; /* * case WadEntryType.Font: * width = br.ReadUInt32(); * height = br.ReadUInt32(); * textureDataOffset = br.BaseStream.Position + 8 + (256 * 4); * br.BaseStream.Position += 8 + (256 * 4) + (width * height); // Skip font data, texture data * paletteSize = br.ReadUInt16(); * paletteDataOffset = br.BaseStream.Position; * break;*/ default: throw new ArgumentOutOfRangeException(); } e.Width = width; e.Height = height; e.PaletteSize = paletteSize; e.TextureDataOffset = textureDataOffset; e.PaletteDataOffset = paletteDataOffset; }