UNPKG

@abasb75/dicom-parser

Version:

a javascript powerfull dicom parser

152 lines (151 loc) 8.18 kB
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;