@abasb75/dicom-parser
Version:
a javascript powerfull dicom parser
152 lines (151 loc) • 8.18 kB
JavaScript
var PaletteColor = /** @class */ (function () {
function PaletteColor() {
}
Object.defineProperty(PaletteColor, "get", {
enumerable: false,
configurable: true,
writable: true,
value: function (dataset) {
var _a = dataset.pixelModule, redPaletteColorLookupTableData = _a.redPaletteColorLookupTableData, redPaletteColorLookupTableDescriptor = _a.redPaletteColorLookupTableDescriptor, segmentedRedPaletteColorLookupTableData = _a.segmentedRedPaletteColorLookupTableData, greenPaletteColorLookupTableData = _a.greenPaletteColorLookupTableData, greenPaletteColorLookupTableDescriptor = _a.greenPaletteColorLookupTableDescriptor, segmentedGreenPaletteColorLookupTableData = _a.segmentedGreenPaletteColorLookupTableData, bluePaletteColorLookupTableData = _a.bluePaletteColorLookupTableData, bluePaletteColorLookupTableDescriptor = _a.bluePaletteColorLookupTableDescriptor, segmentedAlphaPaletteColorLookupTableData = _a.segmentedAlphaPaletteColorLookupTableData, alphaPaletteColorLookupTableData = _a.alphaPaletteColorLookupTableData, alphaPaletteColorLookupTableDescriptor = _a.alphaPaletteColorLookupTableDescriptor, segmentedBluePaletteColorLookupTableData = _a.segmentedBluePaletteColorLookupTableData, bitsAllocated = _a.bitsAllocated;
if (!bitsAllocated || ![8, 16].includes(bitsAllocated)) {
return undefined;
}
var littleEndian = dataset.littleEndian;
var red = PaletteColor.getData(redPaletteColorLookupTableDescriptor, redPaletteColorLookupTableData, segmentedRedPaletteColorLookupTableData, littleEndian);
var green = PaletteColor.getData(greenPaletteColorLookupTableDescriptor, greenPaletteColorLookupTableData, segmentedGreenPaletteColorLookupTableData, littleEndian);
var blue = PaletteColor.getData(bluePaletteColorLookupTableDescriptor, bluePaletteColorLookupTableData, segmentedBluePaletteColorLookupTableData, littleEndian);
var alpha = PaletteColor.getData(alphaPaletteColorLookupTableDescriptor, alphaPaletteColorLookupTableData, segmentedAlphaPaletteColorLookupTableData, littleEndian);
return {
red: red,
green: green,
blue: blue,
alpha: alpha,
};
}
});
Object.defineProperty(PaletteColor, "getData", {
enumerable: false,
configurable: true,
writable: true,
value: function (descriptor, paletteData, segmentedPaletteData, littleEndian) {
var _a;
if (!Array.isArray(descriptor)
|| descriptor.length < 3) {
return undefined;
}
var tableDataArray = null;
var lutEntries = descriptor[0] || Math.pow(2, 16);
var firstInputValueMapped = descriptor[1];
var bitsPerEntry = descriptor[2];
if (![8, 16].includes(bitsPerEntry)) {
return undefined;
}
if (paletteData) {
tableDataArray = bitsPerEntry === 16
? PaletteColor.get16Array(paletteData, littleEndian)
: PaletteColor.get8Array(paletteData);
}
else if (segmentedPaletteData) {
var segmentedTableDataArray = bitsPerEntry === 16
? PaletteColor.get16Array(segmentedPaletteData, littleEndian)
: PaletteColor.get8Array(segmentedPaletteData);
tableDataArray = (_a = PaletteColor.segmentedDataToData(segmentedTableDataArray, lutEntries)) === null || _a === void 0 ? void 0 : _a.tableData;
}
if (!tableDataArray) {
return undefined;
}
return {
data: tableDataArray,
firstInputValueMapped: firstInputValueMapped,
lutEntries: lutEntries,
bitsPerEntry: bitsPerEntry,
littleEndian: littleEndian,
};
}
});
Object.defineProperty(PaletteColor, "get16Array", {
enumerable: false,
configurable: true,
writable: true,
value: function (paletteData, littleEndian) {
var array = [];
for (var i = 0; i < paletteData.byteLength; i += 2) {
array.push(paletteData.getUint16(i, littleEndian));
}
return array;
}
});
Object.defineProperty(PaletteColor, "get8Array", {
enumerable: false,
configurable: true,
writable: true,
value: function (paletteData) {
var array = [];
for (var i = 0; i < paletteData.byteLength; i++) {
array.push(paletteData.getUint8(i));
}
return array;
}
});
Object.defineProperty(PaletteColor, "segmentedDataToData", {
enumerable: false,
configurable: true,
writable: true,
value: function (segmentedTableData, lutEntries, segmentedTableDataOffset, valuedTableData, valuedTableDataOffset, stopIndex, prevLastValue) {
var tableData = valuedTableData
? valuedTableData : new Array(lutEntries);
var segmentedDataOffset = segmentedTableDataOffset || 0;
var tableDataOffset = valuedTableDataOffset || 0;
var lastValue = prevLastValue || undefined;
while (segmentedDataOffset < (stopIndex || segmentedTableData.length)) {
var op = segmentedTableData[segmentedDataOffset];
segmentedDataOffset++;
var len = segmentedTableData[segmentedDataOffset];
segmentedDataOffset++;
if (op === 2) {
console.log({ op: op });
}
switch (op) {
case 0:
for (var i = 0; i < len; i++) {
tableData[tableDataOffset] = segmentedTableData[segmentedDataOffset];
segmentedDataOffset++;
tableDataOffset++;
}
lastValue = tableData[segmentedDataOffset - 1] & 0xffff;
break;
case 1:
if (typeof lastValue !== "number") {
return null;
}
var newValue = segmentedTableData[segmentedDataOffset];
segmentedDataOffset++;
for (var i = 1; i <= len; i++) {
tableData[tableDataOffset] = (lastValue + ((newValue - lastValue) / len));
tableDataOffset++;
}
lastValue = newValue & 0xffff;
break;
case 2: // untested
if (typeof lastValue !== "number") {
return null;
}
var startPosition = (segmentedTableData[segmentedDataOffset] & 0xffff)
| ((segmentedTableData[segmentedDataOffset + 1] & 0xffff) << 16);
segmentedDataOffset += 2;
var res = PaletteColor.segmentedDataToData(segmentedTableData, lutEntries, startPosition, tableData, tableDataOffset, startPosition + len, lastValue);
lastValue = res === null || res === void 0 ? void 0 : res.lastValue;
tableData = res === null || res === void 0 ? void 0 : res.tableData;
segmentedDataOffset = res === null || res === void 0 ? void 0 : res.segmentedDataOffset;
tableDataOffset = res === null || res === void 0 ? void 0 : res.tableDataOffset;
break;
default:
return null;
}
}
return { tableData: tableData, lastValue: lastValue, segmentedDataOffset: segmentedDataOffset, tableDataOffset: tableDataOffset };
}
});
return PaletteColor;
}());
export default PaletteColor;