public override ImageData Read(IBinaryStream file, ImageMetaData info) { var meta = (AbcMetaData)info; using (var reader = new AbcDecoder(file.AsStream, meta.UnpackedSize)) { var data = reader.Unpack(); using (var input = new BinMemoryStream(data)) return(meta.SourceFormat.Read(input, meta.SourceInfo)); } }
public override ImageMetaData ReadMetaData(IBinaryStream file) { int unpacked_size = file.ReadInt32(); if (unpacked_size < MinUnpackedSize || unpacked_size > MaxUnpackedSize) { return(null); } uint signature = file.ReadUInt32(); if ((signature & 0xFFFF) != 0x1321 && signature != 0x620A1122) { return(null); } using (var reader = new AbcDecoder(file.AsStream, Math.Min(0x6C, unpacked_size))) { var data = reader.Unpack(); ImageFormat format; if (data.AsciiEqual(0, "BM")) { format = Bmp; } else if (data.AsciiEqual(0, "DDS ")) { format = s_DdsFormat.Value; } else { return(null); } using (var input = new BinMemoryStream(data)) { var info = format.ReadMetaData(input); if (null == info) { return(null); } return(new AbcMetaData { Width = info.Width, Height = info.Height, BPP = info.BPP, UnpackedSize = unpacked_size, SourceFormat = format, SourceInfo = info, }); } } }