private void ParseBitmap(ByteStream stream, CreateArgs createArgs)
{
if ((stream.ReadString(3) != "BM ") || (stream.ReadByte() != 0x1e)){
throw new InvalidDataException("Not a BM file.");
}
Header header = ReadHeader(stream, EHeaderType.FileHeader);
DebugCheck.Assert(stream.Position == 32);
if ((header.W == 1) && (header.H != 1)) {
// multiple bitmaps in this file.
_fps = stream.ReadByte();
stream.Skip(1);
long baseOfs = stream.Position;
int[] offsets = new int[header.IY];
for (int i = 0; i < offsets.Length; ++i) {
offsets[i] = stream.ReadLittleInt32();
}
for (int i = 0; i < offsets.Length; ++i) {
stream.SeekSet(offsets[i] + baseOfs);
Header subHeader = ReadHeader(stream, EHeaderType.SubHeader);
Frame frame = ReadColumns(stream, subHeader, null, createArgs);
_frames.Add(frame);
}
} else {
int[] columnOffsets = null;
if (header.Compressed != 0) {
// read column offsets.
stream.SeekSet(header.DataSize);
columnOffsets = new int[header.W];
for (int i = 0; i < columnOffsets.Length; ++i) {
columnOffsets[i] = stream.ReadLittleInt32() + 32;
}
}
Frame frame = ReadColumns(stream, header, columnOffsets, createArgs);
_frames.Add(frame);
}
}