@cornerstonejs/dicom-image-loader
Version:
Cornerstone Image Loader for DICOM WADO-URI and WADO-RS and Local file
64 lines (63 loc) • 3.34 kB
JavaScript
import decodeJPEGBaseline8BitColor from './decodeJPEGBaseline8BitColor';
import { getWebWorkerManager } from '@cornerstonejs/core';
function processDecodeTask(imageFrame, transferSyntax, pixelData, srcOptions, decodeConfig) {
const options = { ...srcOptions };
delete options.loader;
delete options.streamingData;
const webWorkerManager = getWebWorkerManager();
const priority = options.priority || undefined;
const transferList = options.transferPixelData
? [pixelData.buffer]
: undefined;
return webWorkerManager.executeTask('dicomImageLoader', 'decodeTask', {
imageFrame,
transferSyntax,
pixelData,
options,
decodeConfig,
}, {
priority,
requestType: options?.requestType,
});
}
function decodeImageFrame(imageFrame, transferSyntax, pixelData, canvas, options = {}, decodeConfig) {
switch (transferSyntax) {
case '1.2.840.10008.1.2':
return processDecodeTask(imageFrame, transferSyntax, pixelData, options, decodeConfig);
case '1.2.840.10008.1.2.1':
return processDecodeTask(imageFrame, transferSyntax, pixelData, options, decodeConfig);
case '1.2.840.10008.1.2.2':
return processDecodeTask(imageFrame, transferSyntax, pixelData, options, decodeConfig);
case '1.2.840.10008.1.2.1.99':
return processDecodeTask(imageFrame, transferSyntax, pixelData, options, decodeConfig);
case '1.2.840.10008.1.2.5':
return processDecodeTask(imageFrame, transferSyntax, pixelData, options, decodeConfig);
case '1.2.840.10008.1.2.4.50':
if (imageFrame.bitsAllocated === 8 &&
(imageFrame.samplesPerPixel === 3 || imageFrame.samplesPerPixel === 4)) {
return decodeJPEGBaseline8BitColor(imageFrame, pixelData, canvas);
}
return processDecodeTask(imageFrame, transferSyntax, pixelData, options, decodeConfig);
case '1.2.840.10008.1.2.4.51':
return processDecodeTask(imageFrame, transferSyntax, pixelData, options, decodeConfig);
case '1.2.840.10008.1.2.4.57':
return processDecodeTask(imageFrame, transferSyntax, pixelData, options, decodeConfig);
case '1.2.840.10008.1.2.4.70':
return processDecodeTask(imageFrame, transferSyntax, pixelData, options, decodeConfig);
case '1.2.840.10008.1.2.4.80':
return processDecodeTask(imageFrame, transferSyntax, pixelData, options, decodeConfig);
case '1.2.840.10008.1.2.4.81':
return processDecodeTask(imageFrame, transferSyntax, pixelData, options, decodeConfig);
case '1.2.840.10008.1.2.4.90':
return processDecodeTask(imageFrame, transferSyntax, pixelData, options, decodeConfig);
case '1.2.840.10008.1.2.4.91':
return processDecodeTask(imageFrame, transferSyntax, pixelData, options, decodeConfig);
case '3.2.840.10008.1.2.4.96':
case '1.2.840.10008.1.2.4.201':
case '1.2.840.10008.1.2.4.202':
case '1.2.840.10008.1.2.4.203':
return processDecodeTask(imageFrame, transferSyntax, pixelData, options, decodeConfig);
}
return Promise.reject(new Error(`No decoder for transfer syntax ${transferSyntax}`));
}
export default decodeImageFrame;