} // 'YGP' public override ImageMetaData ReadMetaData(Stream stream) { stream.Position = 4; using (var reader = new ArcView.Reader(stream)) { int mask_pos = reader.ReadUInt16(); // 04 byte type = reader.ReadByte(); // 06 if (type != 1 && type != 2) { return(null); } var info = new YgpMetaData { Type = type, BPP = 32 }; info.Flags = reader.ReadByte(); // 07 int header_size = reader.ReadInt32(); // 08 stream.Position = header_size; info.DataSize = reader.ReadInt32(); // XX+00 info.Width = reader.ReadUInt16(); // XX+04 info.Height = reader.ReadUInt16(); // XX+06 info.DataOffset = header_size + 8; if (0 != (info.Flags & 4)) { stream.Position = 0x14; info.OffsetX = reader.ReadInt16(); info.OffsetY = reader.ReadInt16(); } return(info); } }
public override ImageMetaData ReadMetaData(Stream stream) { stream.Seek(5, SeekOrigin.Current); int bpp = stream.ReadByte(); if (24 != bpp && 32 != bpp) { throw new NotSupportedException("Not supported CPB image format"); } using (var input = new ArcView.Reader(stream)) { int version = input.ReadInt16(); if (1 != version) { throw new NotSupportedException("Not supported CPB image version"); } var info = new CpbMetaData(); info.BPP = bpp; input.ReadUInt32(); info.Width = input.ReadUInt16(); info.Height = input.ReadUInt16(); info.Channel[0] = input.ReadUInt32(); // Alpha info.Channel[1] = input.ReadUInt32(); info.Channel[2] = input.ReadUInt32(); info.Channel[3] = input.ReadUInt32(); return(info); } }
public override ImageMetaData ReadMetaData(Stream stream) { stream.Seek(3, SeekOrigin.Current); using (var input = new ArcView.Reader(stream)) { int bpp = input.ReadByte(); int x = 0; int y = 0; int type = bpp; int header_size = 8; if (2 == type) { bpp = input.ReadByte(); header_size = 13; } else if (1 == type) { bpp = input.ReadByte(); x = input.ReadInt16(); y = input.ReadInt16(); header_size = 13; } else { type = 0; } if (8 != bpp && 24 != bpp && 32 != bpp) { return(null); } uint w = input.ReadUInt16(); uint h = input.ReadUInt16(); if (2 == type) { x = input.ReadInt16(); y = input.ReadInt16(); } return(new ElgMetaData { Width = w, Height = h, OffsetX = x, OffsetY = y, BPP = bpp, Type = type, HeaderSize = header_size, }); } }
public override ImageMetaData ReadMetaData(Stream stream) { using (var input = new ArcView.Reader (stream)) { input.ReadInt32(); var info = new DgcMetaData(); info.Flags = input.ReadUInt32(); info.Width = input.ReadUInt16(); info.Height = input.ReadUInt16(); if (info.Width > 0x7fff || info.Height > 0x7fff) return null; info.BPP = 0 == (info.Flags & Reader.FlagAlphaChannel) ? 24 : 32; return info; } }
static WaveFormat ReadFormat(Stream file) { var format = new WaveFormat(); using (var input = new ArcView.Reader(file)) { format.FormatTag = input.ReadUInt16(); format.Channels = input.ReadUInt16(); format.SamplesPerSecond = input.ReadUInt32(); format.AverageBytesPerSecond = input.ReadUInt32(); format.BlockAlign = input.ReadUInt16(); format.BitsPerSample = input.ReadUInt16(); } return(format); }
public override ImageMetaData ReadMetaData(Stream stream) { stream.Position = 4; using (var reader = new ArcView.Reader (stream)) { int mask_pos = reader.ReadUInt16(); // 04 byte type = reader.ReadByte(); // 06 if (type != 1 && type != 2) return null; var info = new YgpMetaData { Type = type, BPP = 32 }; info.Flags = reader.ReadByte(); // 07 int header_size = reader.ReadInt32(); // 08 stream.Position = header_size; info.DataSize = reader.ReadInt32(); // XX+00 info.Width = reader.ReadUInt16(); // XX+04 info.Height = reader.ReadUInt16(); // XX+06 info.DataOffset = header_size+8; if (0 != (info.Flags & 4)) { stream.Position = 0x14; info.OffsetX = reader.ReadInt16(); info.OffsetY = reader.ReadInt16(); } return info; } }
} // 'NGP ' public override ImageMetaData ReadMetaData(Stream stream) { stream.Position = 0x12; using (var reader = new ArcView.Reader(stream)) { int packed_size = reader.ReadInt32(); uint width = reader.ReadUInt32(); uint height = reader.ReadUInt32(); int bpp = reader.ReadUInt16() * 8; reader.BaseStream.Position = 0x100; int unpacked_size = reader.ReadInt32(); if (packed_size <= 0 || unpacked_size <= 0) { return(null); } return(new NgpMetaData { Width = width, Height = height, BPP = bpp, PackedSize = packed_size, UnpackedSize = unpacked_size, }); } }
} // 'DGC' public override ImageMetaData ReadMetaData(Stream stream) { using (var input = new ArcView.Reader(stream)) { input.ReadInt32(); var info = new DgcMetaData(); info.Flags = input.ReadUInt32(); info.Width = input.ReadUInt16(); info.Height = input.ReadUInt16(); if (info.Width > 0x7fff || info.Height > 0x7fff) { return(null); } info.BPP = 0 == (info.Flags & Reader.FlagAlphaChannel) ? 24 : 32; return(info); } }
} // 'GYU' public override ImageMetaData ReadMetaData(Stream stream) { using (var reader = new ArcView.Reader(stream)) { reader.ReadInt32(); return(new GyuMetaData { Flags = reader.ReadUInt16(), CompressionMode = reader.ReadUInt16(), Key = reader.ReadUInt32(), BPP = reader.ReadInt32(), Width = reader.ReadUInt32(), Height = reader.ReadUInt32(), DataSize = reader.ReadInt32(), AlphaSize = reader.ReadInt32(), PaletteSize = reader.ReadInt32(), }); } }
public override ImageMetaData ReadMetaData(Stream stream) { using (var reader = new ArcView.Reader (stream)) { reader.ReadInt32(); var info = new AkbMetaData(); info.Width = reader.ReadUInt16(); info.Height = reader.ReadUInt16(); int flags = reader.ReadInt32() & 0xFFFF; info.BPP = 0 == flags ? 32 : 24; info.Background = reader.ReadBytes (4); info.OffsetX = reader.ReadInt32(); info.OffsetY = reader.ReadInt32(); info.InnerWidth = reader.ReadInt32() - info.OffsetX; info.InnerHeight = reader.ReadInt32() - info.OffsetY; if (info.InnerWidth > info.Width || info.InnerHeight > info.Height) return null; return info; } }
public override ImageMetaData ReadMetaData(Stream stream) { stream.Position = 4; int bpp = stream.ReadByte(); bool has_palette = stream.ReadByte() != 0; using (var input = new ArcView.Reader(stream)) { var info = new Typ1MetaData { BPP = bpp, HasPalette = has_palette }; info.Width = input.ReadUInt16(); info.Height = input.ReadUInt16(); input.ReadInt32(); info.Channel[0] = input.ReadUInt32(); info.Channel[1] = input.ReadUInt32(); info.Channel[2] = input.ReadUInt32(); info.Channel[3] = input.ReadUInt32(); return(info); } }
} // 'AKB ' public override ImageMetaData ReadMetaData(Stream stream) { using (var reader = new ArcView.Reader(stream)) { reader.ReadInt32(); var info = new AkbMetaData(); info.Width = reader.ReadUInt16(); info.Height = reader.ReadUInt16(); int flags = reader.ReadInt32() & 0xFFFF; info.BPP = 0 == flags ? 32 : 24; info.Background = reader.ReadBytes(4); info.OffsetX = reader.ReadInt32(); info.OffsetY = reader.ReadInt32(); info.InnerWidth = reader.ReadInt32() - info.OffsetX; info.InnerHeight = reader.ReadInt32() - info.OffsetY; if (info.InnerWidth > info.Width || info.InnerHeight > info.Height) { return(null); } return(info); } }
} // 'RIFF' public override ImageMetaData ReadMetaData(Stream stream) { // 'RIFF' isn't included into signature to avoid auto-detection of the WAV files as IPH images. if (0x46464952 != FormatCatalog.ReadSignature(stream)) // 'RIFF' { return(null); } using (var reader = new ArcView.Reader(stream)) { if (0x38 != reader.ReadInt32()) { return(null); } var signature = reader.ReadInt32(); if (signature != 0x20485049 && signature != 0x00485049) // 'IPH' { return(null); } if (0x20746D66 != reader.ReadInt32()) // 'fmt ' { return(null); } reader.BaseStream.Position = 0x38; if (0x20706D62 != reader.ReadInt32()) // 'bmp ' { return(null); } var info = new IphMetaData(); info.PackedSize = reader.ReadInt32(); info.Width = reader.ReadUInt16(); info.Height = reader.ReadUInt16(); reader.BaseStream.Position = 0x50; info.BPP = reader.ReadUInt16(); info.IsCompressed = 0 != reader.ReadInt16(); // XXX int16@[0x54] is a transparency color or 0xFFFF if image is not transparent return(info); } }
public PcmInput(Stream file) : base(null) { file.Position = 4; using (var input = new ArcView.Reader(file)) { int src_size = input.ReadInt32(); if (src_size <= 0) { throw new InvalidFormatException(); } int mode = input.ReadInt32(); int extra = (mode >> 8) & 0xff; mode &= 0xff; var format = new WaveFormat(); format.FormatTag = input.ReadUInt16(); format.Channels = input.ReadUInt16(); format.SamplesPerSecond = input.ReadUInt32(); format.AverageBytesPerSecond = input.ReadUInt32(); format.BlockAlign = input.ReadUInt16(); format.BitsPerSample = input.ReadUInt16(); this.Format = format; this.PcmSize = src_size; if (0 == mode) { this.Source = new StreamRegion(file, file.Position, src_size); } else if (1 == mode || 3 == mode) { var decoder = new PcmDecoder(input, src_size, extra, (XpcmCompression)mode); this.Source = new MemoryStream(decoder.Unpack(), 0, src_size); file.Dispose(); } else { throw new NotSupportedException("Not supported Circus PCM audio compression"); } } }
} // 'PB3B' public override ImageMetaData ReadMetaData(Stream stream) { stream.Position = 4; using (var reader = new ArcView.Reader(stream)) { int input_size = reader.ReadInt32(); stream.Position = 0x18; int t2 = reader.ReadInt32(); int t1 = reader.ReadUInt16(); uint width = reader.ReadUInt16(); uint height = reader.ReadUInt16(); int bpp = reader.ReadUInt16(); return(new Pb3MetaData { Width = width, Height = height, BPP = bpp, Type = t1, SubType = t2, InputSize = input_size, }); } }
public override ImageMetaData ReadMetaData(Stream stream) { stream.Position = 4; using (var reader = new ArcView.Reader (stream)) { int input_size = reader.ReadInt32(); stream.Position = 0x18; int t2 = reader.ReadInt32(); int t1 = reader.ReadUInt16(); uint width = reader.ReadUInt16(); uint height = reader.ReadUInt16(); int bpp = reader.ReadUInt16(); return new Pb3MetaData { Width = width, Height = height, BPP = bpp, Type = t1, SubType = t2, InputSize = input_size, }; } }
public override ImageMetaData ReadMetaData(Stream stream) { int alpha_channel = stream.ReadByte(); int method = stream.ReadByte(); int align1 = stream.ReadByte(); int align2 = stream.ReadByte(); int bpp = stream.ReadByte(); if (alpha_channel < 0 || alpha_channel > 1 || method < 0 || method > 2 || align1 < 0 || align1 > 4 || align2 < 0 || align2 > 4 || bpp <= 0 || !(bpp <= 16 || 24 == bpp || 32 == bpp)) { return(null); } using (var reader = new ArcView.Reader(stream)) { int palette_size = reader.ReadInt32(); uint width = reader.ReadUInt16(); uint height = reader.ReadUInt16(); if (0 == palette_size || 0 == width || 0 == height || palette_size >= stream.Length) { return(null); } return(new GpMetaData { Width = width, Height = height, BPP = bpp, HasAlpha = alpha_channel != 0, Method = method, ElementSize = align1, PixelsPerElement = align2, PaletteSize = palette_size, }); } }
public override Stream OpenEntry(ArcFile arc, Entry entry) { var pent = entry as PackedEntry; Stream input = arc.File.CreateStream(entry.Offset, entry.Size); if (null != pent && pent.IsPacked) { Stream unpacked; using (input) { var data = new byte[pent.UnpackedSize]; UnpackEntry(input, data); unpacked = new MemoryStream(data); } input = unpacked; } if (input.Length > 4 && input.Length < 0x10000) { using (var reader = new ArcView.Reader(input)) { int unpacked_size = reader.ReadUInt16(); int packed_size = reader.ReadUInt16(); if (packed_size == input.Length - 4) { using (input) { var data = new byte[unpacked_size]; UnpackLz77(input, data); return(new MemoryStream(data)); } } input.Position = 0; } } return(input); }
public override ImageMetaData ReadMetaData(Stream stream) { using (var reader = new ArcView.Reader(stream)) { reader.ReadInt32(); var info = new EmMetaData(); info.LzssFrameSize = reader.ReadUInt16(); info.LzssInitPos = reader.ReadUInt16(); info.BPP = reader.ReadUInt16() & 0xFF; info.Width = reader.ReadUInt16(); info.Height = reader.ReadUInt16(); info.Colors = reader.ReadUInt16(); info.Stride = reader.ReadInt32(); info.OffsetX = reader.ReadInt32(); info.OffsetY = reader.ReadInt32(); info.DataOffset = 40; return(info); } }
byte[] Unpack(Stream stream) { using (var input = new ArcView.Reader(stream)) { uint unpacked_size = input.ReadUInt32(); int remaining = input.ReadInt32() - 9; var output = new byte[unpacked_size]; byte control_code = input.ReadByte(); int dst = 0; while (remaining > 0) { byte b = input.ReadByte(); --remaining; if (b != control_code) { output[dst++] = b; continue; } b = input.ReadByte(); --remaining; if (b == control_code) { output[dst++] = b; continue; } if (b > control_code) { --b; } int count = b >> 3; if (0 != (b & 4)) { count |= input.ReadByte() << 5; --remaining; } count += 4; int offset; switch (b & 3) { case 0: offset = input.ReadByte(); --remaining; break; case 1: offset = input.ReadUInt16(); remaining -= 2; break; case 2: offset = input.ReadUInt16(); offset |= input.ReadByte() << 16; remaining -= 3; break; default: throw new InvalidFormatException("DX decompression failed"); } ++offset; Binary.CopyOverlapped(output, dst - offset, dst, count); dst += count; } return(output); } }
public override ImageMetaData ReadMetaData(Stream stream) { stream.Seek (4, SeekOrigin.Current); int type = stream.ReadByte(); int bpp = stream.ReadByte(); if (24 != bpp && 32 != bpp) throw new NotSupportedException ("Not supported CPB image format"); using (var input = new ArcView.Reader (stream)) { int version = input.ReadInt16 (); if (1 != version && 0 != version) throw new NotSupportedException ("Not supported CPB image version"); var info = new CpbMetaData { Type = type, Version = version, BPP = bpp, }; if (1 == version) { input.ReadUInt32(); info.Width = input.ReadUInt16(); info.Height = input.ReadUInt16(); info.Channel[0] = input.ReadUInt32(); info.Channel[1] = input.ReadUInt32(); info.Channel[2] = input.ReadUInt32(); info.Channel[3] = input.ReadUInt32(); } else { info.Width = input.ReadUInt16(); info.Height = input.ReadUInt16(); input.ReadUInt32(); info.Channel[0] = input.ReadUInt32(); info.Channel[1] = input.ReadUInt32(); info.Channel[2] = input.ReadUInt32(); info.Channel[3] = input.ReadUInt32(); } info.DataOffset = (uint)stream.Position; return info; } }
public override ImageMetaData ReadMetaData(Stream stream) { stream.Seek (3, SeekOrigin.Current); using (var input = new ArcView.Reader (stream)) { int bpp = input.ReadByte(); int x = 0; int y = 0; int type = bpp; int header_size = 8; if (2 == type) { bpp = input.ReadByte(); header_size = 13; } else if (1 == type) { bpp = input.ReadByte(); x = input.ReadInt16(); y = input.ReadInt16(); header_size = 13; } else type = 0; if (8 != bpp && 24 != bpp && 32 != bpp) return null; uint w = input.ReadUInt16(); uint h = input.ReadUInt16(); if (2 == type) { x = input.ReadInt16(); y = input.ReadInt16(); } return new ElgMetaData { Width = w, Height = h, OffsetX = x, OffsetY = y, BPP = bpp, Type = type, HeaderSize = header_size, }; } }
private void UnpackV1() { using (var src = new ArcView.Reader(m_input)) { byte[] window = new byte[0x10000]; int flag = 0; int win_pos = 0; int dst = 0; while (dst < m_output.Length) { flag >>= 1; if (0 == (flag & 0x100)) { flag = src.ReadByte() | 0xff00; } if (0 != (flag & 1)) { byte dat = src.ReadByte(); window[win_pos++] = dat; win_pos &= 0xffff; m_output[dst++] = dat; } else { byte control = src.ReadByte(); int count, offset; if (control >= 0xc0) { offset = ((control & 3) << 8) | src.ReadByte(); count = 4 + ((control >> 2) & 0xf); } else if (0 != (control & 0x80)) { offset = control & 0x1f; count = 2 + ((control >> 5) & 3); if (0 == offset) { offset = src.ReadByte(); } } else if (0x7f == control) { count = 2 + src.ReadUInt16(); offset = src.ReadUInt16(); } else { offset = src.ReadUInt16(); count = control + 4; } offset = win_pos - offset; for (int k = 0; k < count && dst < m_output.Length; k++) { offset &= 0xffff; byte dat = window[offset++]; window[win_pos++] = dat; win_pos &= 0xffff; m_output[dst++] = dat; } } } } }
byte[] Unpack(Stream stream) { using (var input = new ArcView.Reader (stream)) { uint unpacked_size = input.ReadUInt32(); int remaining = input.ReadInt32() - 9; var output = new byte[unpacked_size]; byte control_code = input.ReadByte(); int dst = 0; while (remaining > 0) { byte b = input.ReadByte(); --remaining; if (b != control_code) { output[dst++] = b; continue; } b = input.ReadByte(); --remaining; if (b == control_code) { output[dst++] = b; continue; } if (b > control_code) --b; int count = b >> 3; if (0 != (b & 4)) { count |= input.ReadByte() << 5; --remaining; } count += 4; int offset; switch (b & 3) { case 0: offset = input.ReadByte(); --remaining; break; case 1: offset = input.ReadUInt16(); remaining -= 2; break; case 2: offset = input.ReadUInt16(); offset |= input.ReadByte() << 16; remaining -= 3; break; default: throw new InvalidFormatException ("DX decompression failed"); } ++offset; Binary.CopyOverlapped (output, dst - offset, dst, count); dst += count; } return output; } }
protected override IEnumerator <int> Unpack() { int unpacked_size, frame_size; using (var reader = new ArcView.Reader(BaseStream)) { unpacked_size = reader.ReadInt32(); frame_size = 2 << reader.ReadUInt16(); } var frame = new byte[frame_size]; int frame_pos = 0; int dst = 0; int bits = 2; while (dst < unpacked_size) { bits >>= 1; if (1 == bits) { bits = BaseStream.ReadByte(); if (-1 == bits) { yield break; } bits |= 0x100; } int c = BaseStream.ReadByte(); if (-1 == c) { yield break; } if (0 != (bits & 1)) { if (YieldByte((byte)c)) { yield return(YieldOffset); } frame[frame_pos++ % frame_size] = (byte)c; ++dst; } else { int p = c | BaseStream.ReadByte() << 8; int count = BaseStream.ReadByte(); if (-1 == count) { yield break; } count += 4; p = frame_pos - p; if (p < 0) { p += frame_size; } while (count-- > 0) { byte b = frame[p++ % frame_size]; if (YieldByte(b)) { yield return(YieldOffset); } frame[frame_pos++ % frame_size] = b; ++dst; } } } }
public override ImageMetaData ReadMetaData(Stream stream) { stream.Position = 0x12; using (var reader = new ArcView.Reader (stream)) { int packed_size = reader.ReadInt32(); uint width = reader.ReadUInt32(); uint height = reader.ReadUInt32(); int bpp = reader.ReadUInt16() * 8; reader.BaseStream.Position = 0x100; int unpacked_size = reader.ReadInt32(); if (packed_size <= 0 || unpacked_size <= 0) return null; return new NgpMetaData { Width = width, Height = height, BPP = bpp, PackedSize = packed_size, UnpackedSize = unpacked_size, }; } }
public override Stream OpenEntry(ArcFile arc, Entry entry) { var pent = entry as PackedEntry; Stream input = arc.File.CreateStream (entry.Offset, entry.Size); if (null != pent && pent.IsPacked) { Stream unpacked; using (input) { var data = new byte[pent.UnpackedSize]; UnpackEntry (input, data); unpacked = new MemoryStream (data); } input = unpacked; } if (input.Length > 4 && input.Length < 0x10000) { using (var reader = new ArcView.Reader (input)) { int unpacked_size = reader.ReadUInt16(); int packed_size = reader.ReadUInt16(); if (packed_size == input.Length-4) { using (input) { var data = new byte[unpacked_size]; UnpackLz77 (input, data); return new MemoryStream (data); } } input.Position = 0; } } return input; }