From e917fd317afb08a575380c543da367fc52906e4d Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Sun, 26 Apr 2026 11:30:08 +0200 Subject: [PATCH] Fix issues with pxr and pixel type uint and float --- .../Exr/Compression/Decompressors/Pxr24Compression.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) 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++;