From e794e2fb90313b7e4bb4f32abf73bd94041945eb Mon Sep 17 00:00:00 2001 From: Ouwen Huang Date: Tue, 21 Mar 2023 09:21:37 -0400 Subject: [PATCH] fix: negative checking 16 bit case (#518) --- src/imageLoader/createImage.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/imageLoader/createImage.js b/src/imageLoader/createImage.js index 179baae9..1d77d705 100644 --- a/src/imageLoader/createImage.js +++ b/src/imageLoader/createImage.js @@ -57,14 +57,21 @@ function convertToIntPixelData(floatPixelData) { function setPixelDataType(imageFrame, preScale) { const isScaled = preScale?.scaled; const scalingParmeters = preScale?.scalingParameters; - const rescaleSlope = scalingParmeters?.rescaleSlope; - const rescaleIntercept = scalingParmeters?.rescaleIntercept; - const isNegative = rescaleSlope < 0 || rescaleIntercept < 0; + let isNegative = false; + if (isScaled && scalingParmeters) { + const rescaleSlope = scalingParmeters?.rescaleSlope || 1; + const rescaleIntercept = scalingParmeters?.rescaleIntercep || 0; + const suvbw = scalingParmeters?.suvbw || 1; + isNegative = + suvbw * + (imageFrame.smallestPixelValue * rescaleSlope + rescaleIntercept) < + 0; + } if (imageFrame.bitsAllocated === 32) { imageFrame.pixelData = new Float32Array(imageFrame.pixelData); } else if (imageFrame.bitsAllocated === 16) { - if (imageFrame.pixelRepresentation === 0 && !(isScaled && isNegative)) { + if (imageFrame.pixelRepresentation === 0 && !isNegative) { imageFrame.pixelData = new Uint16Array(imageFrame.pixelData); } else { imageFrame.pixelData = new Int16Array(imageFrame.pixelData);