diff --git a/SoulstormReplayReader.Core/Enums/PixelType.cs b/SoulstormReplayReader.Core/Enums/PixelType.cs new file mode 100644 index 0000000..276b177 --- /dev/null +++ b/SoulstormReplayReader.Core/Enums/PixelType.cs @@ -0,0 +1,7 @@ +namespace SoulstormReplayReader.Core.Enums; + +public enum PixelType : byte +{ + Argb8888, + Bgra8888 +} \ No newline at end of file diff --git a/SoulstormReplayReader.Core/SsReplayReader.cs b/SoulstormReplayReader.Core/SsReplayReader.cs index 5ee93d0..8ac8637 100644 --- a/SoulstormReplayReader.Core/SsReplayReader.cs +++ b/SoulstormReplayReader.Core/SsReplayReader.cs @@ -44,6 +44,8 @@ public sealed class SsReplayReader(Stream stream) : IDisposable /// public bool CheckForBugs { get; set; } + public PixelType ImagePixelType { get; set; } = PixelType.Bgra8888; + public ReplayDescriptor Descriptor { get; } = new(); public ReplayModel Replay { get; set; } public int CurrentTick { get; set; } @@ -357,12 +359,15 @@ public sealed class SsReplayReader(Stream stream) : IDisposable for (var y = height - 1; y >= 0; y--) { var line = playerImage.GetLine(y); - _binaryReader.ReadBytes(MemoryMarshal.AsBytes(line)); - var uintLine = MemoryMarshal.Cast(line); - for (var x = 0; x < uintLine.Length; x++) - uintLine[x] = BinaryPrimitives.ReverseEndianness(uintLine[x]); + if (ImagePixelType == PixelType.Argb8888) + { + var uintLine = MemoryMarshal.Cast(line); + + for (var x = 0; x < uintLine.Length; x++) + uintLine[x] = BinaryPrimitives.ReverseEndianness(uintLine[x]); + } } } }