@cornerstonejs/dicom-image-loader 2.0.0-beta.29 → 2.0.0-beta.30
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.
- package/dist/dynamic-import/cornerstoneDICOMImageLoader.min.js +1 -1
- package/dist/dynamic-import/cornerstoneDICOMImageLoader.min.js.map +1 -1
- package/dist/esm/imageLoader/colorSpaceConverters/convertPALETTECOLOR.d.ts +1 -1
- package/dist/esm/imageLoader/colorSpaceConverters/convertPALETTECOLOR.js +2 -2
- package/dist/esm/imageLoader/createImage.js +10 -11
- package/dist/esm/imageLoader/decodeImageFrame.js +2 -2
- package/dist/esm/imageLoader/getImageFrame.js +2 -3
- package/dist/esm/imageLoader/index.d.ts +3 -8
- package/dist/esm/imageLoader/index.js +3 -5
- package/dist/esm/imageLoader/init.d.ts +3 -0
- package/dist/esm/imageLoader/init.js +23 -0
- package/dist/esm/imageLoader/internal/streamRequest.js +3 -2
- package/dist/esm/imageLoader/internal/xhrRequest.js +3 -4
- package/dist/esm/imageLoader/isColorConversionRequired.js +2 -2
- package/dist/esm/imageLoader/registerLoaders.d.ts +1 -1
- package/dist/esm/imageLoader/registerLoaders.js +3 -4
- package/dist/esm/imageLoader/wadors/loadImage.d.ts +2 -2
- package/dist/esm/imageLoader/wadors/loadImage.js +5 -6
- package/dist/esm/imageLoader/wadors/metaData/metaDataProvider.d.ts +1 -1
- package/dist/esm/imageLoader/wadors/metaData/metaDataProvider.js +4 -4
- package/dist/esm/imageLoader/wadors/register.d.ts +1 -1
- package/dist/esm/imageLoader/wadors/register.js +4 -3
- package/dist/esm/imageLoader/wadouri/dataSetCacheManager.js +5 -6
- package/dist/esm/imageLoader/wadouri/dataset-from-partial-content.js +1 -2
- package/dist/esm/imageLoader/wadouri/getEncapsulatedImageFrame.js +4 -6
- package/dist/esm/imageLoader/wadouri/metaData/metaDataProvider.js +3 -3
- package/dist/esm/imageLoader/wadouri/register.d.ts +1 -2
- package/dist/esm/imageLoader/wadouri/register.js +6 -5
- package/dist/esm/index.d.ts +3 -8
- package/dist/esm/index.js +3 -5
- package/dist/esm/types/LoaderOptions.d.ts +0 -2
- package/package.json +3 -2
- package/dist/esm/externalModules.d.ts +0 -5
- package/dist/esm/externalModules.js +0 -41
- package/dist/esm/imageLoader/configure.d.ts +0 -3
- package/dist/esm/imageLoader/configure.js +0 -13
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { metaData } from '@cornerstonejs/core';
|
|
2
2
|
function convertLUTto8Bit(lut, shift) {
|
|
3
3
|
const numEntries = lut.length;
|
|
4
4
|
const cleanedLUT = new Uint8ClampedArray(numEntries);
|
|
@@ -12,7 +12,7 @@ function fetchPaletteData(imageFrame, color, fallback) {
|
|
|
12
12
|
if (data) {
|
|
13
13
|
return Promise.resolve(data);
|
|
14
14
|
}
|
|
15
|
-
const result =
|
|
15
|
+
const result = metaData.get('imagePixelModule', imageFrame.imageId);
|
|
16
16
|
if (result && typeof result.then === 'function') {
|
|
17
17
|
return result.then((module) => module ? module[`${color}PaletteColorLookupTableData`] : fallback);
|
|
18
18
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import external from '../externalModules';
|
|
2
1
|
import getMinMax from '../shared/getMinMax';
|
|
3
2
|
import getPixelDataTypeFromMinMax from '../shared/getPixelDataTypeFromMinMax';
|
|
3
|
+
import { canRenderFloatTextures, Enums, metaData, utilities, } from '@cornerstonejs/core';
|
|
4
4
|
import convertColorSpace from './convertColorSpace';
|
|
5
5
|
import isColorConversionRequired from './isColorConversionRequired';
|
|
6
6
|
import decodeImageFrame from './decodeImageFrame';
|
|
@@ -47,14 +47,13 @@ function createImage(imageId, pixelData, transferSyntax, options = {}) {
|
|
|
47
47
|
if (!pixelData?.length) {
|
|
48
48
|
return Promise.reject(new Error('The pixel data is missing'));
|
|
49
49
|
}
|
|
50
|
-
const {
|
|
51
|
-
const { MetadataModules } = cornerstone.Enums;
|
|
50
|
+
const { MetadataModules } = Enums;
|
|
52
51
|
const canvas = document.createElement('canvas');
|
|
53
52
|
const imageFrame = getImageFrame(imageId);
|
|
54
53
|
imageFrame.decodeLevel = options.decodeLevel;
|
|
55
|
-
options.allowFloatRendering =
|
|
54
|
+
options.allowFloatRendering = canRenderFloatTextures();
|
|
56
55
|
if (options.preScale.enabled) {
|
|
57
|
-
const scalingParameters = getScalingParameters(
|
|
56
|
+
const scalingParameters = getScalingParameters(metaData, imageId);
|
|
58
57
|
if (scalingParameters) {
|
|
59
58
|
options.preScale = {
|
|
60
59
|
...options.preScale,
|
|
@@ -105,11 +104,11 @@ function createImage(imageId, pixelData, transferSyntax, options = {}) {
|
|
|
105
104
|
if (!alreadyTyped) {
|
|
106
105
|
setPixelDataType(imageFrame);
|
|
107
106
|
}
|
|
108
|
-
const imagePlaneModule =
|
|
109
|
-
const voiLutModule =
|
|
110
|
-
const modalityLutModule =
|
|
111
|
-
const sopCommonModule =
|
|
112
|
-
const calibrationModule =
|
|
107
|
+
const imagePlaneModule = metaData.get(MetadataModules.IMAGE_PLANE, imageId) || {};
|
|
108
|
+
const voiLutModule = metaData.get(MetadataModules.VOI_LUT, imageId) || {};
|
|
109
|
+
const modalityLutModule = metaData.get(MetadataModules.MODALITY_LUT, imageId) || {};
|
|
110
|
+
const sopCommonModule = metaData.get(MetadataModules.SOP_COMMON, imageId) || {};
|
|
111
|
+
const calibrationModule = metaData.get(MetadataModules.CALIBRATION, imageId) || {};
|
|
113
112
|
const { rows, columns } = imageFrame;
|
|
114
113
|
if (isColorImage) {
|
|
115
114
|
if (isColorConversionRequired(imageFrame)) {
|
|
@@ -138,7 +137,7 @@ function createImage(imageId, pixelData, transferSyntax, options = {}) {
|
|
|
138
137
|
imageFrame.smallestPixelValue = minMax.min;
|
|
139
138
|
imageFrame.largestPixelValue = minMax.max;
|
|
140
139
|
}
|
|
141
|
-
const voxelManager =
|
|
140
|
+
const voxelManager = utilities.VoxelManager.createImageVoxelManager({
|
|
142
141
|
scalarData: imageFrame.pixelData,
|
|
143
142
|
width: imageFrame.columns,
|
|
144
143
|
height: imageFrame.rows,
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import decodeJPEGBaseline8BitColor from './decodeJPEGBaseline8BitColor';
|
|
2
|
-
import
|
|
2
|
+
import { getWebWorkerManager } from '@cornerstonejs/core';
|
|
3
3
|
function processDecodeTask(imageFrame, transferSyntax, pixelData, srcOptions, decodeConfig) {
|
|
4
4
|
const options = { ...srcOptions };
|
|
5
5
|
delete options.loader;
|
|
6
6
|
delete options.streamingData;
|
|
7
|
-
const webWorkerManager =
|
|
7
|
+
const webWorkerManager = getWebWorkerManager();
|
|
8
8
|
const priority = options.priority || undefined;
|
|
9
9
|
const transferList = options.transferPixelData
|
|
10
10
|
? [pixelData.buffer]
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { metaData } from '@cornerstonejs/core';
|
|
2
2
|
function getImageFrame(imageId) {
|
|
3
|
-
const
|
|
4
|
-
const imagePixelModule = cornerstone.metaData.get('imagePixelModule', imageId);
|
|
3
|
+
const imagePixelModule = metaData.get('imagePixelModule', imageId);
|
|
5
4
|
return {
|
|
6
5
|
samplesPerPixel: imagePixelModule.samplesPerPixel,
|
|
7
6
|
photometricInterpretation: imagePixelModule.photometricInterpretation,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { convertRGBColorByPixel, convertRGBColorByPlane, convertYBRFullByPixel, convertYBRFullByPlane, convertPALETTECOLOR } from './colorSpaceConverters/index';
|
|
2
2
|
import { default as wadouri } from './wadouri/index';
|
|
3
3
|
import { default as wadors } from './wadors/index';
|
|
4
|
-
import { default as
|
|
4
|
+
import { default as init } from './init';
|
|
5
5
|
import { default as convertColorSpace } from './convertColorSpace';
|
|
6
6
|
import { default as createImage } from './createImage';
|
|
7
7
|
import { default as decodeJPEGBaseline8BitColor } from './decodeJPEGBaseline8BitColor';
|
|
@@ -11,7 +11,6 @@ import { default as isColorImage } from '../shared/isColorImage';
|
|
|
11
11
|
import { default as isJPEGBaseline8BitColor } from './isJPEGBaseline8BitColor';
|
|
12
12
|
import { default as getPixelData } from './wadors/getPixelData';
|
|
13
13
|
import { internal } from './internal/index';
|
|
14
|
-
import { default as external } from '../externalModules';
|
|
15
14
|
declare const cornerstoneDICOMImageLoader: {
|
|
16
15
|
convertRGBColorByPixel: typeof convertRGBColorByPixel;
|
|
17
16
|
convertRGBColorByPlane: typeof convertRGBColorByPlane;
|
|
@@ -70,7 +69,7 @@ declare const cornerstoneDICOMImageLoader: {
|
|
|
70
69
|
};
|
|
71
70
|
register: typeof import("./wadors/register").default;
|
|
72
71
|
};
|
|
73
|
-
|
|
72
|
+
init: typeof init;
|
|
74
73
|
convertColorSpace: typeof convertColorSpace;
|
|
75
74
|
createImage: typeof createImage;
|
|
76
75
|
decodeJPEGBaseline8BitColor: typeof decodeJPEGBaseline8BitColor;
|
|
@@ -85,10 +84,6 @@ declare const cornerstoneDICOMImageLoader: {
|
|
|
85
84
|
setOptions: typeof import("./internal/options").setOptions;
|
|
86
85
|
getOptions: typeof import("./internal/options").getOptions;
|
|
87
86
|
};
|
|
88
|
-
external: {
|
|
89
|
-
cornerstone: any;
|
|
90
|
-
dicomParser: any;
|
|
91
|
-
};
|
|
92
87
|
};
|
|
93
|
-
export { convertRGBColorByPixel, convertRGBColorByPlane, convertYBRFullByPixel, convertYBRFullByPlane, convertPALETTECOLOR, wadouri, wadors,
|
|
88
|
+
export { convertRGBColorByPixel, convertRGBColorByPlane, convertYBRFullByPixel, convertYBRFullByPlane, convertPALETTECOLOR, wadouri, wadors, init, convertColorSpace, createImage, decodeJPEGBaseline8BitColor, getImageFrame, getPixelData, getMinMax, isColorImage, isJPEGBaseline8BitColor, internal, };
|
|
94
89
|
export default cornerstoneDICOMImageLoader;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { convertRGBColorByPixel, convertRGBColorByPlane, convertYBRFullByPixel, convertYBRFullByPlane, convertPALETTECOLOR, } from './colorSpaceConverters/index';
|
|
2
2
|
import { default as wadouri } from './wadouri/index';
|
|
3
3
|
import { default as wadors } from './wadors/index';
|
|
4
|
-
import { default as
|
|
4
|
+
import { default as init } from './init';
|
|
5
5
|
import { default as convertColorSpace } from './convertColorSpace';
|
|
6
6
|
import { default as createImage } from './createImage';
|
|
7
7
|
import { default as decodeJPEGBaseline8BitColor } from './decodeJPEGBaseline8BitColor';
|
|
@@ -11,7 +11,6 @@ import { default as isColorImage } from '../shared/isColorImage';
|
|
|
11
11
|
import { default as isJPEGBaseline8BitColor } from './isJPEGBaseline8BitColor';
|
|
12
12
|
import { default as getPixelData } from './wadors/getPixelData';
|
|
13
13
|
import { internal } from './internal/index';
|
|
14
|
-
import { default as external } from '../externalModules';
|
|
15
14
|
const cornerstoneDICOMImageLoader = {
|
|
16
15
|
convertRGBColorByPixel,
|
|
17
16
|
convertRGBColorByPlane,
|
|
@@ -20,7 +19,7 @@ const cornerstoneDICOMImageLoader = {
|
|
|
20
19
|
convertPALETTECOLOR,
|
|
21
20
|
wadouri,
|
|
22
21
|
wadors,
|
|
23
|
-
|
|
22
|
+
init,
|
|
24
23
|
convertColorSpace,
|
|
25
24
|
createImage,
|
|
26
25
|
decodeJPEGBaseline8BitColor,
|
|
@@ -30,7 +29,6 @@ const cornerstoneDICOMImageLoader = {
|
|
|
30
29
|
isColorImage,
|
|
31
30
|
isJPEGBaseline8BitColor,
|
|
32
31
|
internal,
|
|
33
|
-
external,
|
|
34
32
|
};
|
|
35
|
-
export { convertRGBColorByPixel, convertRGBColorByPlane, convertYBRFullByPixel, convertYBRFullByPlane, convertPALETTECOLOR, wadouri, wadors,
|
|
33
|
+
export { convertRGBColorByPixel, convertRGBColorByPlane, convertYBRFullByPixel, convertYBRFullByPlane, convertPALETTECOLOR, wadouri, wadors, init, convertColorSpace, createImage, decodeJPEGBaseline8BitColor, getImageFrame, getPixelData, getMinMax, isColorImage, isJPEGBaseline8BitColor, internal, };
|
|
36
34
|
export default cornerstoneDICOMImageLoader;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { setOptions, getOptions } from './internal/index';
|
|
2
|
+
import registerLoaders from './registerLoaders';
|
|
3
|
+
import { getWebWorkerManager } from '@cornerstonejs/core';
|
|
4
|
+
const workerFn = () => {
|
|
5
|
+
const instance = new Worker(new URL('../decodeImageFrameWorker.js', import.meta.url), { type: 'module' });
|
|
6
|
+
return instance;
|
|
7
|
+
};
|
|
8
|
+
function init(options) {
|
|
9
|
+
setOptions(options);
|
|
10
|
+
registerLoaders();
|
|
11
|
+
const workerManager = getWebWorkerManager();
|
|
12
|
+
const maxWorkers = options?.maxWebWorkers || getReasonableWorkerCount();
|
|
13
|
+
workerManager.registerWorker('dicomImageLoader', workerFn, {
|
|
14
|
+
maxWorkerInstances: maxWorkers,
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
function getReasonableWorkerCount() {
|
|
18
|
+
if (typeof navigator !== 'undefined' && navigator.hardwareConcurrency) {
|
|
19
|
+
return Math.max(1, Math.floor(navigator.hardwareConcurrency / 2));
|
|
20
|
+
}
|
|
21
|
+
return 1;
|
|
22
|
+
}
|
|
23
|
+
export default init;
|
|
@@ -15,7 +15,8 @@ export default function streamRequest(url, imageId, defaultHeaders = {}, options
|
|
|
15
15
|
};
|
|
16
16
|
const loadIterator = new ProgressiveIterator('streamRequest');
|
|
17
17
|
loadIterator.generate(async (iterator, reject) => {
|
|
18
|
-
const
|
|
18
|
+
const beforeSendHeaders = globalOptions.beforeSend?.(null, url, defaultHeaders, {});
|
|
19
|
+
const headers = Object.assign({}, defaultHeaders, beforeSendHeaders);
|
|
19
20
|
Object.keys(headers).forEach(function (key) {
|
|
20
21
|
if (headers[key] === null) {
|
|
21
22
|
headers[key] = undefined;
|
|
@@ -26,7 +27,7 @@ export default function streamRequest(url, imageId, defaultHeaders = {}, options
|
|
|
26
27
|
});
|
|
27
28
|
try {
|
|
28
29
|
const response = await fetch(url, {
|
|
29
|
-
headers
|
|
30
|
+
headers,
|
|
30
31
|
signal: undefined,
|
|
31
32
|
});
|
|
32
33
|
if (response.status !== 200) {
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import external from '../../externalModules';
|
|
2
1
|
import { getOptions } from './options';
|
|
2
|
+
import { triggerEvent, eventTarget } from '@cornerstonejs/core';
|
|
3
3
|
function xhrRequest(url, imageId, defaultHeaders = {}, params = {}) {
|
|
4
|
-
const { cornerstone } = external;
|
|
5
4
|
const options = getOptions();
|
|
6
5
|
const errorInterceptor = (xhr) => {
|
|
7
6
|
if (typeof options.errorInterceptor === 'function') {
|
|
@@ -41,7 +40,7 @@ function xhrRequest(url, imageId, defaultHeaders = {}, params = {}) {
|
|
|
41
40
|
url,
|
|
42
41
|
imageId,
|
|
43
42
|
};
|
|
44
|
-
|
|
43
|
+
triggerEvent(eventTarget, 'cornerstoneimageloadstart', eventData);
|
|
45
44
|
};
|
|
46
45
|
xhr.onloadend = function (event) {
|
|
47
46
|
if (options.onloadend) {
|
|
@@ -51,7 +50,7 @@ function xhrRequest(url, imageId, defaultHeaders = {}, params = {}) {
|
|
|
51
50
|
url,
|
|
52
51
|
imageId,
|
|
53
52
|
};
|
|
54
|
-
|
|
53
|
+
triggerEvent(eventTarget, 'cornerstoneimageloadend', eventData);
|
|
55
54
|
};
|
|
56
55
|
xhr.onreadystatechange = function (event) {
|
|
57
56
|
if (options.onreadystatechange) {
|
|
@@ -2,7 +2,7 @@ export default function isColorConversionRequired(imageFrame) {
|
|
|
2
2
|
if (imageFrame === undefined) {
|
|
3
3
|
return false;
|
|
4
4
|
}
|
|
5
|
-
const { rows, columns, photometricInterpretation, pixelDataLength } = imageFrame;
|
|
5
|
+
const { rows, columns, photometricInterpretation, pixelDataLength, planarConfiguration } = imageFrame;
|
|
6
6
|
if (pixelDataLength === 4 * columns * rows) {
|
|
7
7
|
return false;
|
|
8
8
|
}
|
|
@@ -17,6 +17,6 @@ export default function isColorConversionRequired(imageFrame) {
|
|
|
17
17
|
Math.floor(rows / 2) * columns);
|
|
18
18
|
}
|
|
19
19
|
else {
|
|
20
|
-
return photometricInterpretation !== 'RGB';
|
|
20
|
+
return photometricInterpretation !== 'RGB' || planarConfiguration === 1;
|
|
21
21
|
}
|
|
22
22
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare function registerLoaders(
|
|
1
|
+
declare function registerLoaders(): void;
|
|
2
2
|
export default registerLoaders;
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
console.debug("dicom loader: link: init: 3DA675F2-86A1-41A1-9E15-A7019E085C0F");
|
|
2
1
|
import wadouriRegister from './wadouri/register';
|
|
3
2
|
import wadorsRegister from './wadors/register';
|
|
4
|
-
function registerLoaders(
|
|
5
|
-
wadorsRegister(
|
|
6
|
-
wadouriRegister(
|
|
3
|
+
function registerLoaders() {
|
|
4
|
+
wadorsRegister();
|
|
5
|
+
wadouriRegister();
|
|
7
6
|
}
|
|
8
7
|
export default registerLoaders;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { Enums as csCoreEnums, type Types } from '@cornerstonejs/core';
|
|
2
2
|
import type { DICOMLoaderImageOptions } from '../../types';
|
|
3
3
|
export declare function getTransferSyntaxForContentType(contentType: string): string;
|
|
4
4
|
export interface StreamingData {
|
|
@@ -10,7 +10,7 @@ export interface StreamingData {
|
|
|
10
10
|
rangesFetched?: number;
|
|
11
11
|
}
|
|
12
12
|
export interface CornerstoneWadoRsLoaderOptions extends DICOMLoaderImageOptions {
|
|
13
|
-
requestType?:
|
|
13
|
+
requestType?: csCoreEnums.RequestType;
|
|
14
14
|
additionalDetails?: {
|
|
15
15
|
imageId: string;
|
|
16
16
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Enums, utilities } from '@cornerstonejs/core';
|
|
2
|
-
import
|
|
1
|
+
import { Enums, imageRetrievalPoolManager, utilities, } from '@cornerstonejs/core';
|
|
2
|
+
import { Enums as csCoreEnums } from '@cornerstonejs/core';
|
|
3
3
|
import createImage from '../createImage';
|
|
4
4
|
import getPixelData from './getPixelData';
|
|
5
5
|
const { ProgressiveIterator } = utilities;
|
|
@@ -52,7 +52,7 @@ export function getTransferSyntaxForContentType(contentType) {
|
|
|
52
52
|
return defaultTransferSyntax;
|
|
53
53
|
}
|
|
54
54
|
function getImageRetrievalPool() {
|
|
55
|
-
return
|
|
55
|
+
return imageRetrievalPoolManager;
|
|
56
56
|
}
|
|
57
57
|
const mediaType = 'multipart/related; type=application/octet-stream; transfer-syntax=*';
|
|
58
58
|
function loadImage(imageId, options = {}) {
|
|
@@ -98,12 +98,11 @@ function loadImage(imageId, options = {}) {
|
|
|
98
98
|
}
|
|
99
99
|
});
|
|
100
100
|
}
|
|
101
|
-
const requestType = options.requestType ||
|
|
101
|
+
const requestType = options.requestType || csCoreEnums.RequestType.INTERACTION;
|
|
102
102
|
const additionalDetails = options.additionalDetails || { imageId };
|
|
103
103
|
const priority = options.priority === undefined ? 5 : options.priority;
|
|
104
|
-
const addToBeginning = options.addToBeginning || false;
|
|
105
104
|
const uri = imageId.substring(7);
|
|
106
|
-
imageRetrievalPool.addRequest(sendXHR.bind(this, uri, imageId, mediaType), requestType, additionalDetails, priority
|
|
105
|
+
imageRetrievalPool.addRequest(sendXHR.bind(this, uri, imageId, mediaType), requestType, additionalDetails, priority);
|
|
107
106
|
return {
|
|
108
107
|
promise: uncompressedIterator.getDonePromise(),
|
|
109
108
|
cancelFn: undefined,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as dicomParser from 'dicom-parser';
|
|
2
|
+
import { Enums, utilities } from '@cornerstonejs/core';
|
|
2
3
|
import getNumberValues from './getNumberValues';
|
|
3
4
|
import getNumberValue from './getNumberValue';
|
|
4
5
|
import getOverlayPlaneModule from './getOverlayPlaneModule';
|
|
@@ -11,8 +12,7 @@ import isNMReconstructable from '../../isNMReconstructable';
|
|
|
11
12
|
import { getInstanceModule, instanceModuleNames, } from '../../getInstanceModule';
|
|
12
13
|
import { getUSEnhancedRegions } from './USHelpers';
|
|
13
14
|
function metaDataProvider(type, imageId) {
|
|
14
|
-
const { MetadataModules } =
|
|
15
|
-
const { dicomParser } = external;
|
|
15
|
+
const { MetadataModules } = Enums;
|
|
16
16
|
if (type === MetadataModules.MULTIFRAME) {
|
|
17
17
|
const { metadata, frame } = retrieveMultiframeMetadataImageId(imageId);
|
|
18
18
|
if (!metadata) {
|
|
@@ -248,7 +248,7 @@ function metaDataProvider(type, imageId) {
|
|
|
248
248
|
}
|
|
249
249
|
export function getImageUrlModule(imageId, metaData) {
|
|
250
250
|
const { transferSyntaxUID } = getTransferSyntax(imageId, metaData);
|
|
251
|
-
const isVideo =
|
|
251
|
+
const isVideo = utilities.isVideoTransferSyntax(transferSyntaxUID);
|
|
252
252
|
const imageUrl = imageId.substring(7);
|
|
253
253
|
const thumbnail = imageUrl.replace('/frames/', '/thumbnail/');
|
|
254
254
|
let rendered = imageUrl.replace('/frames/', '/rendered/');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export default function (
|
|
1
|
+
export default function (): void;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { metaData, registerImageLoader } from '@cornerstonejs/core';
|
|
1
2
|
import loadImage from './loadImage';
|
|
2
3
|
import { metaDataProvider } from './metaData';
|
|
3
|
-
export default function (
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
export default function () {
|
|
5
|
+
registerImageLoader('wadors', loadImage);
|
|
6
|
+
metaData.addProvider(metaDataProvider);
|
|
6
7
|
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as dicomParser from 'dicom-parser';
|
|
2
2
|
import { xhrRequest } from '../internal/index';
|
|
3
3
|
import dataSetFromPartialContent from './dataset-from-partial-content';
|
|
4
4
|
import { combineFrameInstanceDataset } from './combineFrameInstanceDataset';
|
|
5
5
|
import multiframeDataset from './retrieveMultiframeDataset';
|
|
6
6
|
import { loadedDataSets, purgeLoadedDataSets } from './loadedDataSets';
|
|
7
|
+
import { eventTarget, triggerEvent } from '@cornerstonejs/core';
|
|
7
8
|
let cacheSizeInBytes = 0;
|
|
8
9
|
let promises = {};
|
|
9
10
|
function isLoaded(uri) {
|
|
@@ -29,14 +30,13 @@ function update(uri, dataSet) {
|
|
|
29
30
|
cacheSizeInBytes -= loadedDataSet.dataSet.byteArray.length;
|
|
30
31
|
loadedDataSet.dataSet = dataSet;
|
|
31
32
|
cacheSizeInBytes += dataSet.byteArray.length;
|
|
32
|
-
|
|
33
|
+
triggerEvent(eventTarget, 'datasetscachechanged', {
|
|
33
34
|
uri,
|
|
34
35
|
action: 'updated',
|
|
35
36
|
cacheInfo: getInfo(),
|
|
36
37
|
});
|
|
37
38
|
}
|
|
38
39
|
function load(uri, loadRequest = xhrRequest, imageId) {
|
|
39
|
-
const { cornerstone, dicomParser } = external;
|
|
40
40
|
if (loadedDataSets[uri]) {
|
|
41
41
|
return new Promise((resolve) => {
|
|
42
42
|
loadedDataSets[uri].cacheCount++;
|
|
@@ -88,7 +88,7 @@ function load(uri, loadRequest = xhrRequest, imageId) {
|
|
|
88
88
|
};
|
|
89
89
|
cacheSizeInBytes += dataSet.byteArray.length;
|
|
90
90
|
resolve(dataSet);
|
|
91
|
-
|
|
91
|
+
triggerEvent(eventTarget, 'datasetscachechanged', {
|
|
92
92
|
uri,
|
|
93
93
|
action: 'loaded',
|
|
94
94
|
cacheInfo: getInfo(),
|
|
@@ -105,13 +105,12 @@ function load(uri, loadRequest = xhrRequest, imageId) {
|
|
|
105
105
|
return promise;
|
|
106
106
|
}
|
|
107
107
|
function unload(uri) {
|
|
108
|
-
const { cornerstone } = external;
|
|
109
108
|
if (loadedDataSets[uri]) {
|
|
110
109
|
loadedDataSets[uri].cacheCount--;
|
|
111
110
|
if (loadedDataSets[uri].cacheCount === 0) {
|
|
112
111
|
cacheSizeInBytes -= loadedDataSets[uri].dataSet.byteArray.length;
|
|
113
112
|
delete loadedDataSets[uri];
|
|
114
|
-
|
|
113
|
+
triggerEvent(eventTarget, 'datasetscachechanged', {
|
|
115
114
|
uri,
|
|
116
115
|
action: 'unloaded',
|
|
117
116
|
cacheInfo: getInfo(),
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as dicomParser from 'dicom-parser';
|
|
2
2
|
function fixFragments(dataSet) {
|
|
3
3
|
const fragments = dataSet.elements.x7fe00010.fragments;
|
|
4
4
|
const totalLength = dataSet.byteArray.length;
|
|
@@ -12,7 +12,6 @@ function fixFragments(dataSet) {
|
|
|
12
12
|
return dataSet;
|
|
13
13
|
}
|
|
14
14
|
function parsePartialByteArray(byteArray) {
|
|
15
|
-
const { dicomParser } = external;
|
|
16
15
|
let dataSet = dicomParser.parseDicom(byteArray, {
|
|
17
16
|
untilTag: 'x7fe00010',
|
|
18
17
|
});
|
|
@@ -1,19 +1,17 @@
|
|
|
1
|
-
import { ByteStream, readSequenceItem } from 'dicom-parser';
|
|
2
|
-
import external from '../../externalModules';
|
|
1
|
+
import { ByteStream, createJPEGBasicOffsetTable, readEncapsulatedImageFrame, readSequenceItem, } from 'dicom-parser';
|
|
3
2
|
function framesAreFragmented(dataSet) {
|
|
4
3
|
const numberOfFrames = dataSet.intString('x00280008');
|
|
5
4
|
const pixelDataElement = dataSet.elements.x7fe00010;
|
|
6
5
|
return numberOfFrames !== pixelDataElement.fragments.length;
|
|
7
6
|
}
|
|
8
7
|
export default function getEncapsulatedImageFrame(dataSet, frameIndex) {
|
|
9
|
-
const { dicomParser } = external;
|
|
10
8
|
if (dataSet.elements.x7fe00010 &&
|
|
11
9
|
dataSet.elements.x7fe00010.basicOffsetTable.length) {
|
|
12
|
-
return
|
|
10
|
+
return readEncapsulatedImageFrame(dataSet, dataSet.elements.x7fe00010, frameIndex);
|
|
13
11
|
}
|
|
14
12
|
if (framesAreFragmented(dataSet)) {
|
|
15
|
-
const basicOffsetTable =
|
|
16
|
-
return
|
|
13
|
+
const basicOffsetTable = createJPEGBasicOffsetTable(dataSet, dataSet.elements.x7fe00010);
|
|
14
|
+
return readEncapsulatedImageFrame(dataSet, dataSet.elements.x7fe00010, frameIndex, basicOffsetTable);
|
|
17
15
|
}
|
|
18
16
|
const fragments = dataSet.elements.x7fe00010.fragments;
|
|
19
17
|
const byteStream = new ByteStream(dataSet.byteArrayParser, dataSet.byteArray, dataSet.elements.x7fe00010.dataOffset);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { Enums } from '@cornerstonejs/core';
|
|
2
|
+
import * as dicomParser from 'dicom-parser';
|
|
2
3
|
import getNumberValues from './getNumberValues';
|
|
3
4
|
import parseImageId from '../parseImageId';
|
|
4
5
|
import dataSetCacheManager from '../dataSetCacheManager';
|
|
@@ -13,8 +14,7 @@ import isNMReconstructable from '../../isNMReconstructable';
|
|
|
13
14
|
import { getInstanceModule, instanceModuleNames, } from '../../getInstanceModule';
|
|
14
15
|
import { getUSEnhancedRegions } from './USHelpers';
|
|
15
16
|
function metaDataProvider(type, imageId) {
|
|
16
|
-
const { MetadataModules } =
|
|
17
|
-
const { dicomParser } = external;
|
|
17
|
+
const { MetadataModules } = Enums;
|
|
18
18
|
if (Array.isArray(imageId)) {
|
|
19
19
|
return;
|
|
20
20
|
}
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export default function (cornerstone: typeof cornerstoneImport): void;
|
|
1
|
+
export default function (): void;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { metaData, registerImageLoader } from '@cornerstonejs/core';
|
|
1
2
|
import { loadImage } from './loadImage';
|
|
2
3
|
import { metaDataProvider } from './metaData/index';
|
|
3
|
-
export default function (
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
export default function () {
|
|
5
|
+
registerImageLoader('dicomweb', loadImage);
|
|
6
|
+
registerImageLoader('wadouri', loadImage);
|
|
7
|
+
registerImageLoader('dicomfile', loadImage);
|
|
8
|
+
metaData.addProvider(metaDataProvider);
|
|
8
9
|
}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { convertRGBColorByPixel, convertRGBColorByPlane, convertYBRFullByPixel, convertYBRFullByPlane, convertPALETTECOLOR } from './imageLoader/colorSpaceConverters/index';
|
|
2
2
|
import { default as wadouri } from './imageLoader/wadouri/index';
|
|
3
3
|
import { default as wadors } from './imageLoader/wadors/index';
|
|
4
|
-
import { default as
|
|
4
|
+
import { default as init } from './imageLoader/init';
|
|
5
5
|
import { default as convertColorSpace } from './imageLoader/convertColorSpace';
|
|
6
6
|
import { default as createImage } from './imageLoader/createImage';
|
|
7
7
|
import { default as decodeJPEGBaseline8BitColor } from './imageLoader/decodeJPEGBaseline8BitColor';
|
|
@@ -11,7 +11,6 @@ import { default as isColorImage } from './shared/isColorImage';
|
|
|
11
11
|
import { default as isJPEGBaseline8BitColor } from './imageLoader/isJPEGBaseline8BitColor';
|
|
12
12
|
import { default as getPixelData } from './imageLoader/wadors/getPixelData';
|
|
13
13
|
import { internal } from './imageLoader/internal/index';
|
|
14
|
-
import { default as external } from './externalModules';
|
|
15
14
|
import * as constants from './constants';
|
|
16
15
|
import type * as Types from './types';
|
|
17
16
|
declare const cornerstoneDICOMImageLoader: {
|
|
@@ -73,7 +72,7 @@ declare const cornerstoneDICOMImageLoader: {
|
|
|
73
72
|
};
|
|
74
73
|
register: typeof import("./imageLoader/wadors/register").default;
|
|
75
74
|
};
|
|
76
|
-
|
|
75
|
+
init: typeof init;
|
|
77
76
|
convertColorSpace: typeof convertColorSpace;
|
|
78
77
|
createImage: typeof createImage;
|
|
79
78
|
decodeJPEGBaseline8BitColor: typeof decodeJPEGBaseline8BitColor;
|
|
@@ -88,11 +87,7 @@ declare const cornerstoneDICOMImageLoader: {
|
|
|
88
87
|
setOptions: typeof import("./imageLoader/internal/options").setOptions;
|
|
89
88
|
getOptions: typeof import("./imageLoader/internal/options").getOptions;
|
|
90
89
|
};
|
|
91
|
-
external: {
|
|
92
|
-
cornerstone: any;
|
|
93
|
-
dicomParser: any;
|
|
94
|
-
};
|
|
95
90
|
};
|
|
96
|
-
export { constants, convertRGBColorByPixel, convertRGBColorByPlane, convertYBRFullByPixel, convertYBRFullByPlane, convertPALETTECOLOR, wadouri, wadors,
|
|
91
|
+
export { constants, convertRGBColorByPixel, convertRGBColorByPlane, convertYBRFullByPixel, convertYBRFullByPlane, convertPALETTECOLOR, wadouri, wadors, init, convertColorSpace, createImage, decodeJPEGBaseline8BitColor, getImageFrame, getPixelData, getMinMax, isColorImage, isJPEGBaseline8BitColor, internal, };
|
|
97
92
|
export type { Types };
|
|
98
93
|
export default cornerstoneDICOMImageLoader;
|
package/dist/esm/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { convertRGBColorByPixel, convertRGBColorByPlane, convertYBRFullByPixel, convertYBRFullByPlane, convertPALETTECOLOR, } from './imageLoader/colorSpaceConverters/index';
|
|
2
2
|
import { default as wadouri } from './imageLoader/wadouri/index';
|
|
3
3
|
import { default as wadors } from './imageLoader/wadors/index';
|
|
4
|
-
import { default as
|
|
4
|
+
import { default as init } from './imageLoader/init';
|
|
5
5
|
import { default as convertColorSpace } from './imageLoader/convertColorSpace';
|
|
6
6
|
import { default as createImage } from './imageLoader/createImage';
|
|
7
7
|
import { default as decodeJPEGBaseline8BitColor } from './imageLoader/decodeJPEGBaseline8BitColor';
|
|
@@ -11,7 +11,6 @@ import { default as isColorImage } from './shared/isColorImage';
|
|
|
11
11
|
import { default as isJPEGBaseline8BitColor } from './imageLoader/isJPEGBaseline8BitColor';
|
|
12
12
|
import { default as getPixelData } from './imageLoader/wadors/getPixelData';
|
|
13
13
|
import { internal } from './imageLoader/internal/index';
|
|
14
|
-
import { default as external } from './externalModules';
|
|
15
14
|
import * as constants from './constants';
|
|
16
15
|
const cornerstoneDICOMImageLoader = {
|
|
17
16
|
constants,
|
|
@@ -22,7 +21,7 @@ const cornerstoneDICOMImageLoader = {
|
|
|
22
21
|
convertPALETTECOLOR,
|
|
23
22
|
wadouri,
|
|
24
23
|
wadors,
|
|
25
|
-
|
|
24
|
+
init,
|
|
26
25
|
convertColorSpace,
|
|
27
26
|
createImage,
|
|
28
27
|
decodeJPEGBaseline8BitColor,
|
|
@@ -32,7 +31,6 @@ const cornerstoneDICOMImageLoader = {
|
|
|
32
31
|
isColorImage,
|
|
33
32
|
isJPEGBaseline8BitColor,
|
|
34
33
|
internal,
|
|
35
|
-
external,
|
|
36
34
|
};
|
|
37
|
-
export { constants, convertRGBColorByPixel, convertRGBColorByPlane, convertYBRFullByPixel, convertYBRFullByPlane, convertPALETTECOLOR, wadouri, wadors,
|
|
35
|
+
export { constants, convertRGBColorByPixel, convertRGBColorByPlane, convertYBRFullByPixel, convertYBRFullByPlane, convertPALETTECOLOR, wadouri, wadors, init, convertColorSpace, createImage, decodeJPEGBaseline8BitColor, getImageFrame, getPixelData, getMinMax, isColorImage, isJPEGBaseline8BitColor, internal, };
|
|
38
36
|
export default cornerstoneDICOMImageLoader;
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import type { LoaderDecodeOptions } from './LoaderDecodeOptions';
|
|
2
2
|
import type { LoaderXhrRequestError, LoaderXhrRequestParams } from './XHRRequest';
|
|
3
3
|
export interface LoaderOptions {
|
|
4
|
-
cornerstone?: unknown;
|
|
5
|
-
dicomParser?: unknown;
|
|
6
4
|
maxWebWorkers?: number;
|
|
7
5
|
open?: (xhr: XMLHttpRequest, url: string, defaultHeaders: Record<string, string>, params: LoaderXhrRequestParams) => void;
|
|
8
6
|
beforeSend?: (xhr: XMLHttpRequest, imageId: string, defaultHeaders: Record<string, string>, params: LoaderXhrRequestParams) => Record<string, string> | void;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cornerstonejs/dicom-image-loader",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.30",
|
|
4
4
|
"description": "Cornerstone Image Loader for DICOM WADO-URI and WADO-RS and Local file",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"DICOM",
|
|
@@ -114,6 +114,7 @@
|
|
|
114
114
|
"@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2",
|
|
115
115
|
"@cornerstonejs/codec-openjpeg": "^1.2.2",
|
|
116
116
|
"@cornerstonejs/codec-openjph": "^2.4.5",
|
|
117
|
+
"@cornerstonejs/core": "^2.0.0-beta.30",
|
|
117
118
|
"comlink": "^4.4.1",
|
|
118
119
|
"dicom-parser": "^1.8.9",
|
|
119
120
|
"pako": "^2.0.4",
|
|
@@ -131,5 +132,5 @@
|
|
|
131
132
|
"path": "./node_modules/cz-conventional-changelog"
|
|
132
133
|
}
|
|
133
134
|
},
|
|
134
|
-
"gitHead": "
|
|
135
|
+
"gitHead": "e56a9df570b820968e23b35f0526700989ae1e3c"
|
|
135
136
|
}
|