mirror of
https://github.com/crskycode/GARbro.git
synced 2026-07-08 01:30:18 +08:00
IBinaryStream migration.
This commit is contained in:
@@ -56,12 +56,13 @@ namespace GameRes.Formats.Malie
|
||||
|
||||
static readonly Regex pair_re = new Regex (@"^(\d+),(\d+)");
|
||||
|
||||
public override ImageMetaData ReadMetaData (Stream stream)
|
||||
public override ImageMetaData ReadMetaData (IBinaryStream file)
|
||||
{
|
||||
var tex = VFS.FindFile (VFS.CombinePath (VFS.Top.CurrentDirectory, "tex"));
|
||||
var dir = VFS.GetDirectoryName (file.Name);
|
||||
var tex = VFS.FindFile (VFS.CombinePath (dir, "tex"));
|
||||
if (!(tex is SubDirEntry))
|
||||
return null;
|
||||
using (var reader = new StreamReader (stream, Encoding.UTF8, false, 2048, true))
|
||||
using (var reader = new StreamReader (file.AsStream, Encoding.UTF8, false, 2048, true))
|
||||
{
|
||||
reader.ReadLine(); // skip signature
|
||||
string line = reader.ReadLine();
|
||||
@@ -98,12 +99,12 @@ namespace GameRes.Formats.Malie
|
||||
if (null == line)
|
||||
return null;
|
||||
line = line.TrimEnd();
|
||||
foreach (var file in line.Split (','))
|
||||
foreach (var filename in line.Split (','))
|
||||
{
|
||||
if (!string.IsNullOrEmpty (file))
|
||||
if (!string.IsNullOrEmpty (filename))
|
||||
{
|
||||
var filename = VFS.CombinePath (tex.Name, file);
|
||||
tiles.Add (new DziTile { X = x, Y = y, FileName = filename });
|
||||
var fullname = VFS.CombinePath (tex.Name, filename);
|
||||
tiles.Add (new DziTile { X = x, Y = y, FileName = fullname });
|
||||
}
|
||||
x += 256;
|
||||
}
|
||||
@@ -121,7 +122,7 @@ namespace GameRes.Formats.Malie
|
||||
}
|
||||
}
|
||||
|
||||
public override ImageData Read (Stream stream, ImageMetaData info)
|
||||
public override ImageData Read (IBinaryStream stream, ImageMetaData info)
|
||||
{
|
||||
var meta = (DziMetaData)info;
|
||||
PixelFormat format = PixelFormats.Bgra32;
|
||||
@@ -135,9 +136,9 @@ namespace GameRes.Formats.Malie
|
||||
var image_entry = VFS.GetFiles (tile.FileName + ".*").FirstOrDefault();
|
||||
if (null == image_entry)
|
||||
throw new FileNotFoundException ("Tile not found", tile.FileName);
|
||||
using (var input = VFS.OpenStream (image_entry))
|
||||
using (var input = VFS.OpenBinaryStream (image_entry))
|
||||
{
|
||||
var image = Read (image_entry.Name, input);
|
||||
var image = Read (input);
|
||||
if (null == image)
|
||||
throw new FileFormatException ("Unknown DZI tile format");
|
||||
var converted = image.Bitmap;
|
||||
|
||||
@@ -41,25 +41,25 @@ namespace GameRes.Formats.Malie
|
||||
|
||||
static readonly byte[] PngHeader = { 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A };
|
||||
|
||||
public override ImageMetaData ReadMetaData (Stream stream)
|
||||
public override ImageMetaData ReadMetaData (IBinaryStream stream)
|
||||
{
|
||||
var header = new byte[8];
|
||||
if (8 != stream.Read (header, 0, 8))
|
||||
return null;
|
||||
var header = stream.ReadHeader (8).ToArray();
|
||||
if (!Binary.AsciiEqual (header, "MalieGF"))
|
||||
return null;
|
||||
Buffer.BlockCopy (PngHeader, 0, header, 0, 8);
|
||||
|
||||
using (var data = new StreamRegion (stream, 8, stream.Length - 8, true))
|
||||
using (var png = new PrefixStream (header, data))
|
||||
using (var data = new StreamRegion (stream.AsStream, 8, true))
|
||||
using (var pre = new PrefixStream (header, data))
|
||||
using (var png = new BinaryStream (pre, stream.Name))
|
||||
return base.ReadMetaData (png);
|
||||
}
|
||||
|
||||
public override ImageData Read (Stream stream, ImageMetaData info)
|
||||
public override ImageData Read (IBinaryStream stream, ImageMetaData info)
|
||||
{
|
||||
var header = PngHeader.Clone() as byte[];
|
||||
using (var data = new StreamRegion (stream, 8, stream.Length - 8, true))
|
||||
using (var png = new PrefixStream (header, data))
|
||||
using (var data = new StreamRegion (stream.AsStream, 8, true))
|
||||
using (var pre = new PrefixStream (header, data))
|
||||
using (var png = new BinaryStream (pre, stream.Name))
|
||||
return base.Read (png, info);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user