mirror of
https://github.com/crskycode/GARbro.git
synced 2026-07-08 01:30:18 +08:00
Merge pull request #148 from kyororay/master
修正: Cyberworksにおけるtype d差分画像、及び非圧縮type b画像のデコードエラー
This commit is contained in:
@@ -460,7 +460,7 @@ namespace GameRes.Formats.Cyberworks
|
|||||||
};
|
};
|
||||||
if (!entry.CheckPlacement (file.MaxOffset))
|
if (!entry.CheckPlacement (file.MaxOffset))
|
||||||
return null;
|
return null;
|
||||||
entry.IsPacked = entry.UnpackedSize != entry.Size;
|
entry.IsPacked = entry.UnpackedSize != entry.Size && entry.UnpackedSize != 0;
|
||||||
dir.Add (entry);
|
dir.Add (entry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -637,7 +637,7 @@ namespace GameRes.Formats.Cyberworks
|
|||||||
var entry = new PackedEntry { Name = id.ToString ("D6") };
|
var entry = new PackedEntry { Name = id.ToString ("D6") };
|
||||||
entry.UnpackedSize = m_index.ReadUInt32();
|
entry.UnpackedSize = m_index.ReadUInt32();
|
||||||
entry.Size = m_index.ReadUInt32();
|
entry.Size = m_index.ReadUInt32();
|
||||||
entry.IsPacked = entry.UnpackedSize != entry.Size;
|
entry.IsPacked = entry.UnpackedSize != entry.Size && entry.UnpackedSize != 0;
|
||||||
entry.Offset = m_index.ReadUInt32();
|
entry.Offset = m_index.ReadUInt32();
|
||||||
return entry;
|
return entry;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -147,12 +147,18 @@ namespace GameRes.Formats.Cyberworks
|
|||||||
var size_buf = new byte[4];
|
var size_buf = new byte[4];
|
||||||
input.Read (size_buf, 0 , 4);
|
input.Read (size_buf, 0 , 4);
|
||||||
int png_size = BigEndian.ToInt32 (size_buf, 0);
|
int png_size = BigEndian.ToInt32 (size_buf, 0);
|
||||||
BitmapSource frame;
|
|
||||||
// work-around for possible extra padding before PNG data
|
List<byte> mem_list;
|
||||||
using (var membuf = new MemoryStream (png_size+4))
|
using (var membuf = new MemoryStream())
|
||||||
|
{
|
||||||
|
input.CopyTo(membuf);
|
||||||
|
mem_list = membuf.ToArray().ToList();
|
||||||
|
mem_list.RemoveRange(0, mem_list.Count - png_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
BitmapSource frame;
|
||||||
|
using (var membuf = new MemoryStream(mem_list.ToArray()))
|
||||||
{
|
{
|
||||||
input.CopyTo (membuf);
|
|
||||||
membuf.Seek (-png_size, SeekOrigin.End);
|
|
||||||
var decoder = new PngBitmapDecoder (membuf, BitmapCreateOptions.None,
|
var decoder = new PngBitmapDecoder (membuf, BitmapCreateOptions.None,
|
||||||
BitmapCacheOption.OnLoad);
|
BitmapCacheOption.OnLoad);
|
||||||
frame = decoder.Frames[0];
|
frame = decoder.Frames[0];
|
||||||
|
|||||||
Reference in New Issue
Block a user