(MG2): could contain JPEG images.

This commit is contained in:
morkt 2018-06-06 00:47:14 +04:00
parent 8c06c4356d
commit 1edd79c74d

View File

@ -36,6 +36,7 @@ namespace GameRes.Formats.Valkyria
public int ImageLength; public int ImageLength;
public int AlphaLength; public int AlphaLength;
public IMg2Scheme Scheme; public IMg2Scheme Scheme;
public ImageFormat Format;
} }
internal interface IMg2Scheme internal interface IMg2Scheme
@ -62,9 +63,16 @@ namespace GameRes.Formats.Valkyria
foreach (var scheme in KnownSchemes) foreach (var scheme in KnownSchemes)
{ {
using (var input = scheme.CreateStream (file.AsStream, 0x10, length)) using (var input = scheme.CreateStream (file.AsStream, 0x10, length))
using (var png = new BinaryStream (input, file.Name)) using (var img = new BinaryStream (input, file.Name))
{ {
var info = Png.ReadMetaData (png); ImageFormat format;
if (Png.Signature == img.Signature)
format = Png;
else if (0xE0FFD8FF == img.Signature)
format = Jpeg;
else
continue;
var info = format.ReadMetaData (img);
if (null == info) if (null == info)
continue; continue;
return new Mg2MetaData return new Mg2MetaData
@ -77,6 +85,7 @@ namespace GameRes.Formats.Valkyria
ImageLength = length, ImageLength = length,
AlphaLength = header.ToInt32 (12), AlphaLength = header.ToInt32 (12),
Scheme = scheme, Scheme = scheme,
Format = format,
}; };
} }
} }
@ -94,9 +103,10 @@ namespace GameRes.Formats.Valkyria
{ {
BitmapSource frame; BitmapSource frame;
using (var input = meta.Scheme.CreateStream (file, 0x10, meta.ImageLength)) using (var input = meta.Scheme.CreateStream (file, 0x10, meta.ImageLength))
using (var img = new BinaryStream (input, meta.FileName))
{ {
var decoder = new PngBitmapDecoder (input, BitmapCreateOptions.None, BitmapCacheOption.OnLoad); var image = meta.Format.Read (img, meta);
frame = decoder.Frames[0]; frame = image.Bitmap;
if (0 == meta.AlphaLength) if (0 == meta.AlphaLength)
return frame; return frame;
} }