From ffd9ec32730580e266ffae365a10ac3e524dd6cf Mon Sep 17 00:00:00 2001 From: Ibrahim <93064150+IbrahimCSAE@users.noreply.github.com> Date: Mon, 20 Oct 2025 13:07:39 -0400 Subject: [PATCH] fix(rendering): Fix palette color LUT conversion causing black images (#5509) The palette color LUT was incorrectly handling 16 bit entries, and didn't work for both array buffers and typed arrays. --- .../fetchPaletteColorLookupTableData.js | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/platform/core/src/utils/metadataProvider/fetchPaletteColorLookupTableData.js b/platform/core/src/utils/metadataProvider/fetchPaletteColorLookupTableData.js index a3d5a7aea..8dd053cbd 100644 --- a/platform/core/src/utils/metadataProvider/fetchPaletteColorLookupTableData.js +++ b/platform/core/src/utils/metadataProvider/fetchPaletteColorLookupTableData.js @@ -30,18 +30,15 @@ function _getPaletteColor(paletteColorLookupTableData, lutDescriptor) { } const arrayBufferToPaletteColorLUT = arraybuffer => { + // Handle both ArrayBuffer and TypedArray inputs + const buffer = arraybuffer.buffer || arraybuffer; + const data = bits === 16 ? new Uint16Array(buffer) : new Uint8Array(buffer); const lut = []; - if (bits === 16) { - let j = 0; - for (let i = 0; i < numLutEntries; i++) { - lut[i] = (arraybuffer[j++] + arraybuffer[j++]) << 8; - } - } else { - for (let i = 0; i < numLutEntries; i++) { - lut[i] = arraybuffer[i]; - } + for (let i = 0; i < numLutEntries; i++) { + lut[i] = data[i]; } + return lut; }; @@ -51,10 +48,10 @@ function _getPaletteColor(paletteColorLookupTableData, lutDescriptor) { if (paletteColorLookupTableData.InlineBinary) { try { - const arraybuffer = Uint8Array.from(atob(paletteColorLookupTableData.InlineBinary), c => + const uint8Array = Uint8Array.from(atob(paletteColorLookupTableData.InlineBinary), c => c.charCodeAt(0) ); - return (paletteColorLookupTableData.palette = arrayBufferToPaletteColorLUT(arraybuffer)); + return (paletteColorLookupTableData.palette = arrayBufferToPaletteColorLUT(uint8Array)); } catch (e) { console.log("Couldn't decode", paletteColorLookupTableData.InlineBinary, e); return undefined;