Skip to content

Commit f5388f7

Browse files
committed
fix: targetbuffer check and scaling fix
1 parent f6998be commit f5388f7

File tree

3 files changed

+39
-24
lines changed

3 files changed

+39
-24
lines changed

src/imageLoader/createImage.js

+2-13
Original file line numberDiff line numberDiff line change
@@ -55,18 +55,7 @@ function convertToIntPixelData(floatPixelData) {
5555
* @param imageFrame
5656
*/
5757
function setPixelDataType(imageFrame, preScale) {
58-
const isScaled = preScale?.scaled;
59-
const scalingParmeters = preScale?.scalingParameters;
60-
let isNegative = false;
61-
if (isScaled && scalingParmeters) {
62-
const rescaleSlope = scalingParmeters?.rescaleSlope || 1;
63-
const rescaleIntercept = scalingParmeters?.rescaleIntercep || 0;
64-
const suvbw = scalingParmeters?.suvbw || 1;
65-
isNegative =
66-
suvbw *
67-
(imageFrame.smallestPixelValue * rescaleSlope + rescaleIntercept) <
68-
0;
69-
}
58+
const isNegative = preScale?.isNegative;
7059

7160
if (imageFrame.bitsAllocated === 32) {
7261
imageFrame.pixelData = new Float32Array(imageFrame.pixelData);
@@ -174,7 +163,7 @@ function createImage(imageId, pixelData, transferSyntax, options = {}) {
174163
// We can't have done it within the thread incase it was a SharedArrayBuffer.
175164
let alreadyTyped = false;
176165

177-
if (options.targetBuffer) {
166+
if (options.targetBuffer && options.targetBuffer.type) {
178167
let offset, length;
179168
// If we have a target buffer, write to that instead. This helps reduce memory duplication.
180169

src/shared/decodeImageFrame.js

+8-7
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ function postProcessDecodedPixels(imageFrame, options, start, decodeConfig) {
181181

182182
imageFrame.pixelDataLength = imageFrame.pixelData.length;
183183

184-
if (options.targetBuffer) {
184+
if (options.targetBuffer && options.targetBuffer.type) {
185185
let offset, length;
186186
// If we have a target buffer, write to that instead. This helps reduce memory duplication.
187187

@@ -256,18 +256,19 @@ function postProcessDecodedPixels(imageFrame, options, start, decodeConfig) {
256256
typeof rescaleSlope === 'number' &&
257257
typeof rescaleIntercept === 'number'
258258
) {
259-
if (scaleArray(pixelDataArray, scalingParameters)) {
260-
imageFrame.preScale = {
261-
...options.preScale,
262-
scaled: true,
263-
};
264-
}
259+
scaleArray(
260+
imageFrame,
261+
options.preScale,
262+
pixelDataArray,
263+
scalingParameters
264+
);
265265
}
266266
}
267267

268268
// Handle cases where the targetBuffer is not backed by a SharedArrayBuffer
269269
if (
270270
options.targetBuffer &&
271+
options.targetBuffer.type &&
271272
(!options.targetBuffer.arrayBuffer ||
272273
options.targetBuffer.arrayBuffer instanceof ArrayBuffer)
273274
) {

src/shared/scaling/scaleArray.js

+29-4
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,45 @@
1-
export default function scaleArray(array, scalingParameters) {
1+
export default function scaleArray(
2+
imageFrame,
3+
preScaleOptions,
4+
array,
5+
scalingParameters
6+
) {
27
const arrayLength = array.length;
3-
const { rescaleSlope, rescaleIntercept, suvbw } = scalingParameters;
8+
const rescaleSlope = scalingParameters?.rescaleSlope || 1;
9+
const rescaleIntercept = scalingParameters?.rescaleIntercept || 0;
10+
const suvbw = scalingParameters?.suvbw || 1;
11+
12+
let isNegative = false;
413

514
if (scalingParameters.modality === 'PT') {
615
if (typeof suvbw !== 'number') {
716
return;
817
}
918

1019
for (let i = 0; i < arrayLength; i++) {
11-
array[i] = suvbw * (array[i] * rescaleSlope + rescaleIntercept);
20+
const value = suvbw * (array[i] * rescaleSlope + rescaleIntercept);
21+
22+
array[i] = value;
23+
if (value < 0 && !isNegative) {
24+
isNegative = true;
25+
}
1226
}
1327
} else {
1428
for (let i = 0; i < arrayLength; i++) {
15-
array[i] = array[i] * rescaleSlope + rescaleIntercept;
29+
const value = array[i] * rescaleSlope + rescaleIntercept;
30+
31+
array[i] = value;
32+
if (value < 0 && !isNegative) {
33+
isNegative = true;
34+
}
1635
}
1736
}
1837

38+
imageFrame.preScale = {
39+
...preScaleOptions,
40+
scaled: true,
41+
isNegative,
42+
};
43+
1944
return true;
2045
}

0 commit comments

Comments
 (0)