@cornerstonejs/dicom-image-loader
Version:
Cornerstone Image Loader for DICOM WADO-URI and WADO-RS and Local file
45 lines (44 loc) • 2.1 kB
JavaScript
import getTagValue from './getTagValue';
function getFrameInformation(PerFrameFunctionalGroupsSequence, SharedFunctionalGroupsSequence, frameNumber) {
const shared = (SharedFunctionalGroupsSequence
? Object.values(SharedFunctionalGroupsSequence[0])
: [])
.map((it) => it['Value']?.[0])
.filter((it) => it !== undefined && typeof it === 'object');
const perFrame = (PerFrameFunctionalGroupsSequence
? Object.values(PerFrameFunctionalGroupsSequence[frameNumber - 1])
: [])
.map((it) => it['Value']?.[0])
.filter((it) => it !== undefined && typeof it === 'object');
return {
shared,
perFrame,
};
}
function getMultiframeInformation(metaData) {
let { 52009230: PerFrameFunctionalGroupsSequence, 52009229: SharedFunctionalGroupsSequence, '00280008': NumberOfFrames, ...rest } = metaData;
PerFrameFunctionalGroupsSequence = getTagValue(PerFrameFunctionalGroupsSequence, false);
SharedFunctionalGroupsSequence = getTagValue(SharedFunctionalGroupsSequence, false);
NumberOfFrames = getTagValue(NumberOfFrames);
return {
PerFrameFunctionalGroupsSequence,
SharedFunctionalGroupsSequence,
NumberOfFrames,
rest,
};
}
function combineFrameInstance(frameNumber, instance) {
const { PerFrameFunctionalGroupsSequence, SharedFunctionalGroupsSequence, NumberOfFrames, rest, } = getMultiframeInformation(instance);
if (PerFrameFunctionalGroupsSequence || NumberOfFrames > 1) {
const { shared, perFrame } = getFrameInformation(PerFrameFunctionalGroupsSequence, SharedFunctionalGroupsSequence, frameNumber);
const newInstance = Object.assign(instance, { frameNumber });
[...shared, ...perFrame].forEach((item) => {
Object.entries(item).forEach(([key, value]) => {
newInstance[key] = value;
});
});
return Object.assign(rest, { '00280008': NumberOfFrames }, newInstance);
}
return instance;
}
export { combineFrameInstance, getMultiframeInformation, getFrameInformation };