diff --git a/src/ImageSharp/Formats/Exr/Compression/Decompressors/Pxr24Compression.cs b/src/ImageSharp/Formats/Exr/Compression/Decompressors/Pxr24Compression.cs index d2fdcfcd16..e15ac4e845 100644 --- a/src/ImageSharp/Formats/Exr/Compression/Decompressors/Pxr24Compression.cs +++ b/src/ImageSharp/Formats/Exr/Compression/Decompressors/Pxr24Compression.cs @@ -47,7 +47,9 @@ internal class Pxr24Compression : ExrBaseDecompressor public override void Decompress(BufferedReadStream stream, uint compressedBytes, Span buffer) { Span uncompressed = this.tmpBuffer.GetSpan(); - Span outputBuffer = MemoryMarshal.Cast(buffer); + Span outputBufferHalf = MemoryMarshal.Cast(buffer); + Span outputBufferFloat = MemoryMarshal.Cast(buffer); + Span outputBufferUint = MemoryMarshal.Cast(buffer); long pos = stream.Position; using ZlibInflateStream inflateStream = new( @@ -106,7 +108,7 @@ internal class Pxr24Compression : ExrBaseDecompressor uint diff = (t0 << 24) | (t1 << 16) | (t2 << 8) | t3; pixel += diff; - outputBuffer[outputOffset] = (ushort)pixel; + outputBufferUint[outputOffset] = pixel; offsetT0++; offsetT1++; @@ -133,7 +135,7 @@ internal class Pxr24Compression : ExrBaseDecompressor uint diff = (t0 << 8) | t1; pixel += diff; - outputBuffer[outputOffset] = (ushort)pixel; + outputBufferHalf[outputOffset] = (ushort)pixel; offsetT0++; offsetT1++; @@ -161,7 +163,7 @@ internal class Pxr24Compression : ExrBaseDecompressor uint diff = (t0 << 24) | (t1 << 16) | (t2 << 8); pixel += diff; - outputBuffer[outputOffset] = (ushort)pixel; + outputBufferFloat[outputOffset] = pixel; offsetT0++; offsetT1++;