mirror of
https://github.com/crskycode/GARbro.git
synced 2026-07-08 01:30:18 +08:00
(RctFormat): image data reading separated to ReadPixelsData method.
This commit is contained in:
@@ -120,30 +120,15 @@ namespace GameRes.Formats.Majiro
|
|||||||
var meta = info as RctMetaData;
|
var meta = info as RctMetaData;
|
||||||
if (null == meta)
|
if (null == meta)
|
||||||
throw new ArgumentException ("RctFormat.Read should be supplied with RctMetaData", "info");
|
throw new ArgumentException ("RctFormat.Read should be supplied with RctMetaData", "info");
|
||||||
|
|
||||||
byte[] base_image = null;
|
byte[] base_image = null;
|
||||||
if (meta.FileName != null && meta.AddSize > 0 && OverlayFrames)
|
if (meta.FileName != null && meta.AddSize > 0 && OverlayFrames)
|
||||||
base_image = ReadBaseImage (file, meta);
|
base_image = ReadBaseImage (file, meta);
|
||||||
|
|
||||||
file.Position = meta.DataOffset + meta.AddSize;
|
var pixels = ReadPixelsData (file, meta);
|
||||||
if (meta.IsEncrypted)
|
if (base_image != null)
|
||||||
file = OpenEncryptedStream (file, meta.DataSize);
|
pixels = CombineImage (base_image, pixels);
|
||||||
try
|
return ImageData.Create (meta, PixelFormats.Bgr24, null, pixels, (int)meta.Width*3);
|
||||||
{
|
|
||||||
using (var reader = new Reader (file, meta))
|
|
||||||
{
|
|
||||||
reader.Unpack();
|
|
||||||
var pixels = reader.Data;
|
|
||||||
if (base_image != null)
|
|
||||||
pixels = CombineImage (base_image, pixels);
|
|
||||||
return ImageData.Create (meta, PixelFormats.Bgr24, null, pixels, (int)meta.Width*3);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
if (meta.IsEncrypted)
|
|
||||||
Key = null; // probably incorrect encryption scheme caused exception, reset key
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
byte[] CombineImage (byte[] base_image, byte[] overlay)
|
byte[] CombineImage (byte[] base_image, byte[] overlay)
|
||||||
@@ -160,6 +145,27 @@ namespace GameRes.Formats.Majiro
|
|||||||
return overlay;
|
return overlay;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
byte[] ReadPixelsData (Stream file, RctMetaData meta)
|
||||||
|
{
|
||||||
|
file.Position = meta.DataOffset + meta.AddSize;
|
||||||
|
if (meta.IsEncrypted)
|
||||||
|
file = OpenEncryptedStream (file, meta.DataSize);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using (var reader = new Reader (file, meta))
|
||||||
|
{
|
||||||
|
reader.Unpack();
|
||||||
|
return reader.Data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
if (meta.IsEncrypted)
|
||||||
|
Key = null; // probably incorrect encryption scheme caused exception, reset key
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
byte[] ReadBaseImage (Stream file, RctMetaData meta)
|
byte[] ReadBaseImage (Stream file, RctMetaData meta)
|
||||||
{
|
{
|
||||||
file.Position = meta.DataOffset;
|
file.Position = meta.DataOffset;
|
||||||
@@ -180,15 +186,7 @@ namespace GameRes.Formats.Majiro
|
|||||||
&& meta.Width == base_info.Width && meta.Height == base_info.Height)
|
&& meta.Width == base_info.Width && meta.Height == base_info.Height)
|
||||||
{
|
{
|
||||||
base_info.FileName = name;
|
base_info.FileName = name;
|
||||||
base_file.Position = base_info.DataOffset;
|
return ReadPixelsData (base_file, base_info);
|
||||||
Stream input = base_file;
|
|
||||||
if (base_info.IsEncrypted)
|
|
||||||
input = OpenEncryptedStream (base_file, base_info.DataSize);
|
|
||||||
using (var reader = new Reader (input, base_info))
|
|
||||||
{
|
|
||||||
reader.Unpack();
|
|
||||||
return reader.Data;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user