@cornerstonejs/nifti-volume-loader 1.74.8 → 1.75.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,3 @@
1
1
  import NiftiImageVolume from '../NiftiImageVolume';
2
2
  export declare const urlsMap: Map<any, any>;
3
- export declare const getTypedNiftiArray: (datatypeCode: any, niftiImageBuffer: any) => Float32Array | Int16Array | Uint8Array;
4
3
  export default function fetchAndAllocateNiftiVolume(volumeId: string): Promise<NiftiImageVolume>;
@@ -1,14 +1,11 @@
1
1
  import * as NiftiReader from 'nifti-reader-js';
2
- import { cache, utilities, Enums, eventTarget, triggerEvent, getShouldUseSharedArrayBuffer, } from '@cornerstonejs/core';
3
- import { vec3 } from 'gl-matrix';
4
- import makeVolumeMetadata from './makeVolumeMetadata';
2
+ import { eventTarget, triggerEvent } from '@cornerstonejs/core';
5
3
  import NiftiImageVolume from '../NiftiImageVolume';
6
- import * as NIFTICONSTANTS from './niftiConstants';
7
- import { invertDataPerFrame, rasToLps } from './convert';
8
- import modalityScaleNifti from './modalityScaleNifti';
4
+ import { rasToLps } from './convert';
9
5
  import Events from '../enums/Events';
10
6
  import { NIFTI_LOADER_SCHEME } from '../constants';
11
- const { createUint8SharedArray, createFloat32SharedArray } = utilities;
7
+ import makeVolumeMetadata from './makeVolumeMetadata';
8
+ import modalityScaleNifti from './modalityScaleNifti';
12
9
  export const urlsMap = new Map();
13
10
  function fetchArrayBuffer(url, onProgress, signal, onload) {
14
11
  return new Promise((resolve, reject) => {
@@ -45,18 +42,6 @@ function fetchArrayBuffer(url, onProgress, signal, onload) {
45
42
  xhr.send();
46
43
  });
47
44
  }
48
- export const getTypedNiftiArray = (datatypeCode, niftiImageBuffer) => {
49
- switch (datatypeCode) {
50
- case NIFTICONSTANTS.NIFTI_TYPE_UINT8:
51
- return new Uint8Array(niftiImageBuffer);
52
- case NIFTICONSTANTS.NIFTI_TYPE_FLOAT32:
53
- return new Float32Array(niftiImageBuffer);
54
- case NIFTICONSTANTS.NIFTI_TYPE_INT16:
55
- return new Int16Array(niftiImageBuffer);
56
- default:
57
- throw new Error(`datatypeCode ${datatypeCode} is not yet supported`);
58
- }
59
- };
60
45
  export default async function fetchAndAllocateNiftiVolume(volumeId) {
61
46
  const niftiURL = volumeId.substring(NIFTI_LOADER_SCHEME.length + 1);
62
47
  const progress = (loaded, total) => {
@@ -85,69 +70,10 @@ export default async function fetchAndAllocateNiftiVolume(volumeId) {
85
70
  niftiHeader = NiftiReader.readHeader(niftiBuffer);
86
71
  niftiImage = NiftiReader.readImage(niftiHeader, niftiBuffer);
87
72
  }
88
- const typedNiftiArray = getTypedNiftiArray(niftiHeader.datatypeCode, niftiImage);
73
+ const { scalarData, pixelRepresentation } = modalityScaleNifti(niftiHeader, niftiImage);
89
74
  const { orientation, origin, spacing } = rasToLps(niftiHeader);
90
- invertDataPerFrame(niftiHeader.dims.slice(1, 4), typedNiftiArray);
91
- modalityScaleNifti(typedNiftiArray, niftiHeader);
92
- const volumeMetadata = makeVolumeMetadata(niftiHeader, orientation, typedNiftiArray);
93
- const scanAxisNormal = vec3.create();
94
- vec3.set(scanAxisNormal, orientation[6], orientation[7], orientation[8]);
95
- const { BitsAllocated, PixelRepresentation, PhotometricInterpretation, ImageOrientationPatient, Columns, Rows, } = volumeMetadata;
96
- const rowCosineVec = vec3.fromValues(ImageOrientationPatient[0], ImageOrientationPatient[1], ImageOrientationPatient[2]);
97
- const colCosineVec = vec3.fromValues(ImageOrientationPatient[3], ImageOrientationPatient[4], ImageOrientationPatient[5]);
98
- const { dims } = niftiHeader;
99
- const numFrames = dims[3];
100
- const dimensions = [Columns, Rows, numFrames];
101
- const direction = new Float32Array([
102
- rowCosineVec[0],
103
- rowCosineVec[1],
104
- rowCosineVec[2],
105
- colCosineVec[0],
106
- colCosineVec[1],
107
- colCosineVec[2],
108
- scanAxisNormal[0],
109
- scanAxisNormal[1],
110
- scanAxisNormal[2],
111
- ]);
112
- const signed = PixelRepresentation === 1;
113
- let bytesPerVoxel = 1;
114
- if (BitsAllocated === 16 || BitsAllocated === 32) {
115
- bytesPerVoxel = 4;
116
- }
117
- const sizeInBytesPerComponent = bytesPerVoxel * dimensions[0] * dimensions[1] * dimensions[2];
118
- let numComponents = 1;
119
- if (PhotometricInterpretation === 'RGB') {
120
- numComponents = 3;
121
- }
122
- const sizeInBytes = sizeInBytesPerComponent * numComponents;
123
- const isCacheable = cache.isCacheable(sizeInBytes);
124
- if (!isCacheable) {
125
- throw new Error(Enums.Events.CACHE_SIZE_EXCEEDED);
126
- }
127
- cache.decacheIfNecessaryUntilBytesAvailable(sizeInBytes);
128
- let scalarData;
129
- const useSharedArrayBuffer = getShouldUseSharedArrayBuffer();
130
- const buffer_size = dimensions[0] * dimensions[1] * dimensions[2];
131
- switch (BitsAllocated) {
132
- case 8:
133
- if (signed) {
134
- throw new Error('8 Bit signed images are not yet supported by this plugin.');
135
- }
136
- else {
137
- scalarData = useSharedArrayBuffer
138
- ? createUint8SharedArray(buffer_size)
139
- : new Uint8Array(buffer_size);
140
- }
141
- break;
142
- case 16:
143
- case 32:
144
- scalarData = useSharedArrayBuffer
145
- ? createFloat32SharedArray(buffer_size)
146
- : new Float32Array(buffer_size);
147
- break;
148
- }
149
- scalarData.set(typedNiftiArray);
150
- const niftiImageVolume = new NiftiImageVolume({
75
+ const { volumeMetadata, dimensions, direction } = makeVolumeMetadata(niftiHeader, orientation, scalarData, pixelRepresentation);
76
+ return new NiftiImageVolume({
151
77
  volumeId,
152
78
  metadata: volumeMetadata,
153
79
  dimensions,
@@ -155,7 +81,7 @@ export default async function fetchAndAllocateNiftiVolume(volumeId) {
155
81
  origin,
156
82
  direction,
157
83
  scalarData,
158
- sizeInBytes,
84
+ sizeInBytes: scalarData.byteLength,
159
85
  imageIds: [],
160
86
  }, {
161
87
  loadStatus: {
@@ -165,6 +91,5 @@ export default async function fetchAndAllocateNiftiVolume(volumeId) {
165
91
  },
166
92
  controller,
167
93
  });
168
- return niftiImageVolume;
169
94
  }
170
95
  //# sourceMappingURL=fetchAndAllocateNiftiVolume.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetchAndAllocateNiftiVolume.js","sourceRoot":"","sources":["../../../src/helpers/fetchAndAllocateNiftiVolume.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetchAndAllocateNiftiVolume.js","sourceRoot":"","sources":["../../../src/helpers/fetchAndAllocateNiftiVolume.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,6 @@
1
1
  import { Types } from '@cornerstonejs/core';
2
- export default function makeVolumeMetadata(niftiHeader: any, orientation: any, scalarData: any): Types.Metadata;
2
+ export default function makeVolumeMetadata(niftiHeader: any, orientation: any, scalarData: any, pixelRepresentation: any): {
3
+ volumeMetadata: Types.Metadata;
4
+ dimensions: Types.Point3;
5
+ direction: Types.Mat3;
6
+ };
@@ -1,17 +1,12 @@
1
+ import { utilities } from '@cornerstonejs/core';
1
2
  import { vec3 } from 'gl-matrix';
2
- export default function makeVolumeMetadata(niftiHeader, orientation, scalarData) {
3
+ const { windowLevel } = utilities;
4
+ export default function makeVolumeMetadata(niftiHeader, orientation, scalarData, pixelRepresentation) {
3
5
  const { numBitsPerVoxel, littleEndian, pixDims, dims } = niftiHeader;
4
- const rowCosines = vec3.create();
5
- const columnCosines = vec3.create();
6
- vec3.set(rowCosines, orientation[0], orientation[1], orientation[2]);
7
- vec3.set(columnCosines, orientation[3], orientation[4], orientation[5]);
8
6
  let min = Infinity;
9
7
  let max = -Infinity;
10
- const xDim = dims[1];
11
- const yDim = dims[2];
12
- const zDim = dims[3];
13
- const frameLength = xDim * yDim;
14
- const middleFrameIndex = Math.floor(zDim / 2);
8
+ const frameLength = dims[1] * dims[2];
9
+ const middleFrameIndex = Math.floor(dims[3] / 2);
15
10
  const offset = frameLength * middleFrameIndex;
16
11
  for (let voxelIndex = offset; voxelIndex < offset + frameLength; voxelIndex++) {
17
12
  const voxelValue = scalarData[voxelIndex];
@@ -22,30 +17,49 @@ export default function makeVolumeMetadata(niftiHeader, orientation, scalarData)
22
17
  min = voxelValue;
23
18
  }
24
19
  }
25
- const windowCenter = (max + min) / 2;
26
- const windowWidth = max - min;
20
+ const { windowWidth, windowCenter } = windowLevel.toWindowLevel(min, max);
21
+ const rowCosines = vec3.create();
22
+ const columnCosines = vec3.create();
23
+ const scanAxisNormal = vec3.create();
24
+ vec3.set(rowCosines, orientation[0], orientation[1], orientation[2]);
25
+ vec3.set(columnCosines, orientation[3], orientation[4], orientation[5]);
26
+ vec3.set(scanAxisNormal, orientation[6], orientation[7], orientation[8]);
27
27
  return {
28
- BitsAllocated: numBitsPerVoxel,
29
- BitsStored: numBitsPerVoxel,
30
- SamplesPerPixel: 1,
31
- HighBit: littleEndian ? numBitsPerVoxel - 1 : 1,
32
- PhotometricInterpretation: 'MONOCHROME2',
33
- PixelRepresentation: 1,
34
- ImageOrientationPatient: [
28
+ volumeMetadata: {
29
+ BitsAllocated: numBitsPerVoxel,
30
+ BitsStored: numBitsPerVoxel,
31
+ SamplesPerPixel: 1,
32
+ HighBit: littleEndian ? numBitsPerVoxel - 1 : 1,
33
+ PhotometricInterpretation: 'MONOCHROME2',
34
+ PixelRepresentation: pixelRepresentation,
35
+ ImageOrientationPatient: [
36
+ rowCosines[0],
37
+ rowCosines[1],
38
+ rowCosines[2],
39
+ columnCosines[0],
40
+ columnCosines[1],
41
+ columnCosines[2],
42
+ ],
43
+ PixelSpacing: [pixDims[1], pixDims[2]],
44
+ Columns: dims[1],
45
+ Rows: dims[2],
46
+ voiLut: [{ windowCenter, windowWidth }],
47
+ FrameOfReferenceUID: '1.2.3',
48
+ Modality: 'MR',
49
+ VOILUTFunction: 'LINEAR',
50
+ },
51
+ dimensions: [dims[1], dims[2], dims[3]],
52
+ direction: new Float32Array([
35
53
  rowCosines[0],
36
54
  rowCosines[1],
37
55
  rowCosines[2],
38
56
  columnCosines[0],
39
57
  columnCosines[1],
40
58
  columnCosines[2],
41
- ],
42
- PixelSpacing: [pixDims[1], pixDims[2]],
43
- Columns: xDim,
44
- Rows: yDim,
45
- voiLut: [{ windowCenter, windowWidth }],
46
- FrameOfReferenceUID: '1.2.3',
47
- Modality: 'MR',
48
- VOILUTFunction: 'LINEAR',
59
+ scanAxisNormal[0],
60
+ scanAxisNormal[1],
61
+ scanAxisNormal[2],
62
+ ]),
49
63
  };
50
64
  }
51
65
  //# sourceMappingURL=makeVolumeMetadata.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"makeVolumeMetadata.js","sourceRoot":"","sources":["../../../src/helpers/makeVolumeMetadata.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,CAAC,OAAO,UAAU,kBAAkB,CACxC,WAAW,EACX,WAAW,EACX,UAAU;IAEV,MAAM,EAAE,eAAe,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC;IAErE,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IACjC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAEpC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAExE,IAAI,GAAG,GAAG,QAAQ,CAAC;IACnB,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;IAEpB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACrB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACrB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAErB,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC;IAEhC,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;IAE9C,MAAM,MAAM,GAAG,WAAW,GAAG,gBAAgB,CAAC;IAE9C,KACE,IAAI,UAAU,GAAG,MAAM,EACvB,UAAU,GAAG,MAAM,GAAG,WAAW,EACjC,UAAU,EAAE,EACZ;QACA,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;QAE1C,IAAI,UAAU,GAAG,GAAG,EAAE;YACpB,GAAG,GAAG,UAAU,CAAC;SAClB;QACD,IAAI,UAAU,GAAG,GAAG,EAAE;YACpB,GAAG,GAAG,UAAU,CAAC;SAClB;KACF;IAED,MAAM,YAAY,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,WAAW,GAAG,GAAG,GAAG,GAAG,CAAC;IAE9B,OAAO;QACL,aAAa,EAAE,eAAe;QAC9B,UAAU,EAAE,eAAe;QAC3B,eAAe,EAAE,CAAC;QAClB,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,yBAAyB,EAAE,aAAa;QACxC,mBAAmB,EAAE,CAAC;QACtB,uBAAuB,EAAE;YACvB,UAAU,CAAC,CAAC,CAAC;YACb,UAAU,CAAC,CAAC,CAAC;YACb,UAAU,CAAC,CAAC,CAAC;YACb,aAAa,CAAC,CAAC,CAAC;YAChB,aAAa,CAAC,CAAC,CAAC;YAChB,aAAa,CAAC,CAAC,CAAC;SACjB;QACD,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QACtC,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,IAAI;QAEV,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;QAGvC,mBAAmB,EAAE,OAAO;QAC5B,QAAQ,EAAE,IAAI;QACd,cAAc,EAAE,QAAQ;KACzB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"makeVolumeMetadata.js","sourceRoot":"","sources":["../../../src/helpers/makeVolumeMetadata.ts"],"names":[],"mappings":"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"}
@@ -1 +1,5 @@
1
- export default function modalityScaleNifti(array: Float32Array | Int16Array | Uint8Array, niftiHeader: any): void;
1
+ import { Types } from '@cornerstonejs/core';
2
+ export default function modalityScaleNifti(niftiHeader: any, niftiImageBuffer: any): {
3
+ scalarData: Types.PixelDataTypedArray;
4
+ pixelRepresentation: number;
5
+ };
@@ -1,11 +1,148 @@
1
- export default function modalityScaleNifti(array, niftiHeader) {
2
- const arrayLength = array.length;
3
- const { scl_slope, scl_inter } = niftiHeader;
1
+ import { cache, Enums, getShouldUseSharedArrayBuffer, utilities, } from '@cornerstonejs/core';
2
+ import * as NIFTICONSTANTS from './niftiConstants';
3
+ const { createFloat32SharedArray, createInt16SharedArray, createUint8SharedArray, createUint16SharedArray, } = utilities;
4
+ export default function modalityScaleNifti(niftiHeader, niftiImageBuffer) {
5
+ const { datatypeCode, scl_slope, scl_inter } = niftiHeader;
6
+ let slope = scl_slope;
7
+ let inter = scl_inter;
4
8
  if (!scl_slope || scl_slope === 0 || Number.isNaN(scl_slope)) {
5
- return;
9
+ slope = 1;
6
10
  }
7
- for (let i = 0; i < arrayLength; i++) {
8
- array[i] = array[i] * scl_slope + scl_inter;
11
+ if (!scl_inter || Number.isNaN(scl_inter)) {
12
+ inter = 0;
9
13
  }
14
+ const hasNegativeRescale = inter < 0 || slope < 0;
15
+ const hasFloatRescale = inter % 1 !== 0 || slope % 1 !== 0;
16
+ let niiBuffer;
17
+ let scalarData;
18
+ let pixelRepresentation = 1;
19
+ switch (datatypeCode) {
20
+ case NIFTICONSTANTS.NIFTI_TYPE_UINT8:
21
+ niiBuffer = new Uint8Array(niftiImageBuffer);
22
+ if (hasFloatRescale) {
23
+ scalarData = allocateScalarData('Float32Array', niiBuffer);
24
+ }
25
+ else if (hasNegativeRescale) {
26
+ scalarData = allocateScalarData('Int16Array', niiBuffer);
27
+ }
28
+ else {
29
+ pixelRepresentation = 0;
30
+ scalarData = allocateScalarData('Uint8Array', niiBuffer);
31
+ }
32
+ break;
33
+ case NIFTICONSTANTS.NIFTI_TYPE_INT16:
34
+ niiBuffer = new Int16Array(niftiImageBuffer);
35
+ if (hasFloatRescale) {
36
+ scalarData = allocateScalarData('Float32Array', niiBuffer);
37
+ }
38
+ else {
39
+ scalarData = allocateScalarData('Int16Array', niiBuffer);
40
+ }
41
+ break;
42
+ case NIFTICONSTANTS.NIFTI_TYPE_INT32:
43
+ niiBuffer = new Int32Array(niftiImageBuffer);
44
+ scalarData = allocateScalarData('Float32Array', niiBuffer);
45
+ break;
46
+ case NIFTICONSTANTS.NIFTI_TYPE_FLOAT32: {
47
+ niiBuffer = new Float32Array(niftiImageBuffer);
48
+ scalarData = allocateScalarData('Float32Array', niiBuffer);
49
+ break;
50
+ }
51
+ case NIFTICONSTANTS.NIFTI_TYPE_INT8:
52
+ niiBuffer = new Int8Array(niftiImageBuffer);
53
+ if (hasFloatRescale) {
54
+ scalarData = allocateScalarData('Float32Array', niiBuffer);
55
+ }
56
+ else {
57
+ scalarData = allocateScalarData('Int8Array', niiBuffer);
58
+ }
59
+ break;
60
+ case NIFTICONSTANTS.NIFTI_TYPE_UINT16:
61
+ niiBuffer = new Uint16Array(niftiImageBuffer);
62
+ if (hasFloatRescale || hasNegativeRescale) {
63
+ scalarData = allocateScalarData('Float32Array', niiBuffer);
64
+ }
65
+ else {
66
+ pixelRepresentation = 0;
67
+ scalarData = allocateScalarData('Uint16Array', niiBuffer);
68
+ }
69
+ break;
70
+ case NIFTICONSTANTS.NIFTI_TYPE_UINT32:
71
+ niiBuffer = new Uint32Array(niftiImageBuffer);
72
+ scalarData = allocateScalarData('Float32Array', niiBuffer);
73
+ break;
74
+ default:
75
+ throw new Error(`NIFTI datatypeCode ${datatypeCode} is not yet supported`);
76
+ }
77
+ const nVox = scalarData.length;
78
+ if (slope !== 1 && inter !== 0) {
79
+ for (let i = 0; i < nVox; i++) {
80
+ scalarData[i] = intensityRaw2Scaled(scalarData[i], slope, inter);
81
+ }
82
+ }
83
+ niftiHeader.numBitsPerVoxel = (scalarData.byteLength / scalarData.length) * 8;
84
+ return {
85
+ scalarData,
86
+ pixelRepresentation,
87
+ };
88
+ }
89
+ function intensityRaw2Scaled(raw, scl_slope, scl_inter) {
90
+ return raw * scl_slope + scl_inter;
91
+ }
92
+ function checkCacheAvailable(bitsAllocated, length) {
93
+ const sizeInBytes = (bitsAllocated / 8) * length;
94
+ const isCacheable = cache.isCacheable(sizeInBytes);
95
+ if (!isCacheable) {
96
+ throw new Error(Enums.Events.CACHE_SIZE_EXCEEDED);
97
+ }
98
+ cache.decacheIfNecessaryUntilBytesAvailable(sizeInBytes);
99
+ return sizeInBytes;
100
+ }
101
+ function allocateScalarData(types, niiBuffer) {
102
+ let bitsAllocated;
103
+ let scalarData;
104
+ const useSharedArrayBuffer = getShouldUseSharedArrayBuffer();
105
+ const nVox = niiBuffer.length;
106
+ switch (types) {
107
+ case 'Float32Array':
108
+ bitsAllocated = 32;
109
+ checkCacheAvailable(bitsAllocated, nVox);
110
+ scalarData = useSharedArrayBuffer
111
+ ? createFloat32SharedArray(nVox)
112
+ : new Float32Array(nVox);
113
+ break;
114
+ case 'Int16Array':
115
+ bitsAllocated = 16;
116
+ checkCacheAvailable(bitsAllocated, nVox);
117
+ scalarData = useSharedArrayBuffer
118
+ ? createInt16SharedArray(nVox)
119
+ : new Int16Array(nVox);
120
+ break;
121
+ case 'Int8Array':
122
+ bitsAllocated = 8;
123
+ checkCacheAvailable(bitsAllocated, nVox);
124
+ scalarData = useSharedArrayBuffer
125
+ ? createInt16SharedArray(nVox)
126
+ : new Int16Array(nVox);
127
+ break;
128
+ case 'Uint16Array':
129
+ bitsAllocated = 16;
130
+ checkCacheAvailable(bitsAllocated, nVox);
131
+ scalarData = useSharedArrayBuffer
132
+ ? createUint16SharedArray(nVox)
133
+ : new Uint16Array(nVox);
134
+ break;
135
+ case 'Uint8Array':
136
+ bitsAllocated = 8;
137
+ checkCacheAvailable(bitsAllocated, nVox);
138
+ scalarData = useSharedArrayBuffer
139
+ ? createUint8SharedArray(nVox)
140
+ : new Uint8Array(nVox);
141
+ break;
142
+ default:
143
+ throw new Error(`TypedArray ${types} is not yet supported`);
144
+ }
145
+ scalarData.set(niiBuffer);
146
+ return scalarData;
10
147
  }
11
148
  //# sourceMappingURL=modalityScaleNifti.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"modalityScaleNifti.js","sourceRoot":"","sources":["../../../src/helpers/modalityScaleNifti.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,OAAO,UAAU,kBAAkB,CACxC,KAA6C,EAC7C,WAAW;IAEX,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC;IACjC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC;IAE7C,IAAI,CAAC,SAAS,IAAI,SAAS,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;QAE5D,OAAO;KACR;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;QACpC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,SAAS,CAAC;KAC7C;AACH,CAAC"}
1
+ {"version":3,"file":"modalityScaleNifti.js","sourceRoot":"","sources":["../../../src/helpers/modalityScaleNifti.ts"],"names":[],"mappings":"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"}