(ED8): palette reading.

This commit is contained in:
morkt 2018-07-06 15:02:04 +04:00
parent e384ec2ef7
commit f7e5bf4202

View File

@ -43,7 +43,7 @@ namespace GameRes.Formats.AdPack
internal class Ed8MetaData : ImageMetaData internal class Ed8MetaData : ImageMetaData
{ {
public uint PaletteSize; public int PaletteSize;
public uint CompSize; public uint CompSize;
} }
@ -277,7 +277,7 @@ namespace GameRes.Formats.AdPack
return null; return null;
uint width = header.ToUInt16 (0x0e); uint width = header.ToUInt16 (0x0e);
uint height = header.ToUInt16 (0x10); uint height = header.ToUInt16 (0x10);
uint palette_size = header.ToUInt32 (0x12); int palette_size = header.ToInt32 (0x12);
uint comp_size = header.ToUInt32 (0x16); uint comp_size = header.ToUInt32 (0x16);
if (palette_size > 0x100) if (palette_size > 0x100)
return null; return null;
@ -295,7 +295,6 @@ namespace GameRes.Formats.AdPack
public override ImageData Read (IBinaryStream stream, ImageMetaData info) public override ImageData Read (IBinaryStream stream, ImageMetaData info)
{ {
var meta = (Ed8MetaData)info; var meta = (Ed8MetaData)info;
stream.Position = 0x1a;
var reader = new Reader (stream.AsStream, meta); var reader = new Reader (stream.AsStream, meta);
reader.Unpack(); reader.Unpack();
var palette = new BitmapPalette (reader.Palette); var palette = new BitmapPalette (reader.Palette);
@ -322,21 +321,14 @@ namespace GameRes.Formats.AdPack
public Reader (Stream file, Ed8MetaData info) public Reader (Stream file, Ed8MetaData info)
{ {
m_width = (int)info.Width; m_width = (int)info.Width;
int palette_size = (int)info.PaletteSize*3;
var palette_data = new byte[Math.Max (0x300, palette_size)];
if (palette_size != file.Read (palette_data, 0, palette_size))
throw new InvalidFormatException();
m_palette = new Color[0x100];
for (int i = 0; i < m_palette.Length; ++i)
{
m_palette[i] = Color.FromRgb (palette_data[i*3+2], palette_data[i*3+1], palette_data[i*3]);
}
m_input = file; m_input = file;
m_data = new byte[info.Width * info.Height]; m_data = new byte[info.Width * info.Height];
} }
public void Unpack () public void Unpack ()
{ {
m_input.Position = 0x1A;
m_palette = ReadColorMap (m_input, 0x100, PaletteFormat.Bgr);
int data_pos = 0; int data_pos = 0;
while (data_pos < m_data.Length) while (data_pos < m_data.Length)
{ {