@cornerstonejs/dicom-image-loader 2.0.0-beta.2 → 2.0.0-beta.20

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.
Files changed (256) hide show
  1. package/dist/920.bundle.min.js +3 -0
  2. package/dist/920.bundle.min.js.LICENSE.txt +5 -0
  3. package/dist/920.bundle.min.js.map +1 -0
  4. package/dist/cornerstoneDICOMImageLoader.bundle.min.js +1 -1
  5. package/dist/cornerstoneDICOMImageLoader.bundle.min.js.map +1 -1
  6. package/dist/dynamic-import/{65916ef3def695744bda.wasm → 031089e563a18ada8441.wasm} +0 -0
  7. package/dist/dynamic-import/20fc4c659b85ccd2a9c0.wasm +0 -0
  8. package/dist/dynamic-import/584.min.js +2 -0
  9. package/dist/dynamic-import/584.min.js.map +1 -0
  10. package/dist/dynamic-import/610.min.js +2 -0
  11. package/dist/dynamic-import/610.min.js.map +1 -0
  12. package/dist/dynamic-import/918.min.js +2 -0
  13. package/dist/dynamic-import/918.min.js.map +1 -0
  14. package/dist/dynamic-import/958.min.js +3 -0
  15. package/dist/dynamic-import/958.min.js.LICENSE.txt +5 -0
  16. package/dist/dynamic-import/958.min.js.map +1 -0
  17. package/dist/dynamic-import/cornerstoneDICOMImageLoader.min.js +1 -1
  18. package/dist/dynamic-import/cornerstoneDICOMImageLoader.min.js.map +1 -1
  19. package/dist/esm/codecs/jpeg.d.ts +10 -0
  20. package/dist/esm/codecs/jpeg.js +890 -0
  21. package/dist/esm/codecs/jpegLossless.d.ts +7 -0
  22. package/dist/esm/codecs/jpegLossless.js +1219 -0
  23. package/dist/esm/src/constants/transferSyntaxes.d.ts +46 -0
  24. package/dist/esm/src/constants/transferSyntaxes.js +46 -0
  25. package/dist/esm/src/decodeImageFrameWorker.d.ts +1 -0
  26. package/dist/esm/src/decodeImageFrameWorker.js +266 -0
  27. package/dist/esm/src/externalModules.d.ts +5 -0
  28. package/dist/esm/src/externalModules.js +44 -0
  29. package/dist/esm/src/imageLoader/colorSpaceConverters/convertPALETTECOLOR.d.ts +3 -0
  30. package/dist/esm/src/imageLoader/colorSpaceConverters/convertPALETTECOLOR.js +77 -0
  31. package/dist/esm/src/imageLoader/colorSpaceConverters/convertRGBColorByPixel.d.ts +2 -0
  32. package/dist/esm/src/imageLoader/colorSpaceConverters/convertRGBColorByPixel.js +21 -0
  33. package/dist/esm/src/imageLoader/colorSpaceConverters/convertRGBColorByPlane.d.ts +2 -0
  34. package/dist/esm/src/imageLoader/colorSpaceConverters/convertRGBColorByPlane.js +28 -0
  35. package/dist/esm/src/imageLoader/colorSpaceConverters/convertYBRFull422ByPixel.d.ts +2 -0
  36. package/dist/esm/src/imageLoader/colorSpaceConverters/convertYBRFull422ByPixel.js +44 -0
  37. package/dist/esm/src/imageLoader/colorSpaceConverters/convertYBRFullByPixel.d.ts +2 -0
  38. package/dist/esm/src/imageLoader/colorSpaceConverters/convertYBRFullByPixel.js +33 -0
  39. package/dist/esm/src/imageLoader/colorSpaceConverters/convertYBRFullByPlane.d.ts +2 -0
  40. package/dist/esm/src/imageLoader/colorSpaceConverters/convertYBRFullByPlane.js +35 -0
  41. package/dist/esm/src/imageLoader/colorSpaceConverters/index.d.ts +7 -0
  42. package/dist/esm/src/imageLoader/colorSpaceConverters/index.js +7 -0
  43. package/dist/esm/src/imageLoader/configure.d.ts +3 -0
  44. package/dist/esm/src/imageLoader/configure.js +11 -0
  45. package/dist/esm/src/imageLoader/convertColorSpace.d.ts +1 -0
  46. package/dist/esm/src/imageLoader/convertColorSpace.js +40 -0
  47. package/dist/esm/src/imageLoader/createImage.d.ts +4 -0
  48. package/dist/esm/src/imageLoader/createImage.js +248 -0
  49. package/dist/esm/src/imageLoader/decodeImageFrame.d.ts +3 -0
  50. package/dist/esm/src/imageLoader/decodeImageFrame.js +63 -0
  51. package/dist/esm/src/imageLoader/decodeJPEGBaseline8BitColor.d.ts +4 -0
  52. package/dist/esm/src/imageLoader/decodeJPEGBaseline8BitColor.js +64 -0
  53. package/dist/esm/src/imageLoader/getImageFrame.d.ts +3 -0
  54. package/dist/esm/src/imageLoader/getImageFrame.js +26 -0
  55. package/dist/esm/src/imageLoader/getInstanceModule.d.ts +3 -0
  56. package/dist/esm/src/imageLoader/getInstanceModule.js +40 -0
  57. package/dist/esm/src/imageLoader/getMinMax.d.ts +4 -0
  58. package/dist/esm/src/imageLoader/getMinMax.js +15 -0
  59. package/dist/esm/src/imageLoader/getScalingParameters.d.ts +6 -0
  60. package/dist/esm/src/imageLoader/getScalingParameters.js +15 -0
  61. package/dist/esm/src/imageLoader/imageIdToURI.d.ts +1 -0
  62. package/dist/esm/src/imageLoader/imageIdToURI.js +4 -0
  63. package/dist/esm/src/imageLoader/index.d.ts +94 -0
  64. package/dist/esm/src/imageLoader/index.js +36 -0
  65. package/dist/esm/src/imageLoader/internal/index.d.ts +8 -0
  66. package/dist/esm/src/imageLoader/internal/index.js +8 -0
  67. package/dist/esm/src/imageLoader/internal/options.d.ts +3 -0
  68. package/dist/esm/src/imageLoader/internal/options.js +23 -0
  69. package/dist/esm/src/imageLoader/internal/rangeRequest.d.ts +9 -0
  70. package/dist/esm/src/imageLoader/internal/rangeRequest.js +121 -0
  71. package/dist/esm/src/imageLoader/internal/streamRequest.d.ts +2 -0
  72. package/dist/esm/src/imageLoader/internal/streamRequest.js +92 -0
  73. package/dist/esm/src/imageLoader/internal/xhrRequest.d.ts +3 -0
  74. package/dist/esm/src/imageLoader/internal/xhrRequest.js +102 -0
  75. package/dist/esm/src/imageLoader/isColorConversionRequired.d.ts +1 -0
  76. package/dist/esm/src/imageLoader/isColorConversionRequired.js +22 -0
  77. package/dist/esm/src/imageLoader/isJPEGBaseline8BitColor.d.ts +3 -0
  78. package/dist/esm/src/imageLoader/isJPEGBaseline8BitColor.js +9 -0
  79. package/dist/esm/src/imageLoader/isNMReconstructable.d.ts +1 -0
  80. package/dist/esm/src/imageLoader/isNMReconstructable.js +3 -0
  81. package/dist/esm/src/imageLoader/registerLoaders.d.ts +2 -0
  82. package/dist/esm/src/imageLoader/registerLoaders.js +7 -0
  83. package/dist/esm/src/imageLoader/wadors/combineFrameInstance.d.ts +12 -0
  84. package/dist/esm/src/imageLoader/wadors/combineFrameInstance.js +44 -0
  85. package/dist/esm/src/imageLoader/wadors/extractMultipart.d.ts +23 -0
  86. package/dist/esm/src/imageLoader/wadors/extractMultipart.js +73 -0
  87. package/dist/esm/src/imageLoader/wadors/findIndexOfString.d.ts +2 -0
  88. package/dist/esm/src/imageLoader/wadors/findIndexOfString.js +32 -0
  89. package/dist/esm/src/imageLoader/wadors/getImageQualityStatus.d.ts +2 -0
  90. package/dist/esm/src/imageLoader/wadors/getImageQualityStatus.js +8 -0
  91. package/dist/esm/src/imageLoader/wadors/getPixelData.d.ts +26 -0
  92. package/dist/esm/src/imageLoader/wadors/getPixelData.js +35 -0
  93. package/dist/esm/src/imageLoader/wadors/getTagValue.d.ts +1 -0
  94. package/dist/esm/src/imageLoader/wadors/getTagValue.js +9 -0
  95. package/dist/esm/src/imageLoader/wadors/index.d.ts +25 -0
  96. package/dist/esm/src/imageLoader/wadors/index.js +21 -0
  97. package/dist/esm/src/imageLoader/wadors/loadImage.d.ts +25 -0
  98. package/dist/esm/src/imageLoader/wadors/loadImage.js +125 -0
  99. package/dist/esm/src/imageLoader/wadors/loadImage_test.d.ts +1 -0
  100. package/dist/esm/src/imageLoader/wadors/loadImage_test.js +41 -0
  101. package/dist/esm/src/imageLoader/wadors/metaData/NMHelpers.d.ts +5 -0
  102. package/dist/esm/src/imageLoader/wadors/metaData/NMHelpers.js +38 -0
  103. package/dist/esm/src/imageLoader/wadors/metaData/USHelpers.d.ts +19 -0
  104. package/dist/esm/src/imageLoader/wadors/metaData/USHelpers.js +46 -0
  105. package/dist/esm/src/imageLoader/wadors/metaData/extractPositioningFromMetadata.d.ts +3 -0
  106. package/dist/esm/src/imageLoader/wadors/metaData/extractPositioningFromMetadata.js +18 -0
  107. package/dist/esm/src/imageLoader/wadors/metaData/getFirstNumberValue.d.ts +2 -0
  108. package/dist/esm/src/imageLoader/wadors/metaData/getFirstNumberValue.js +6 -0
  109. package/dist/esm/src/imageLoader/wadors/metaData/getNumberString.d.ts +3 -0
  110. package/dist/esm/src/imageLoader/wadors/metaData/getNumberString.js +9 -0
  111. package/dist/esm/src/imageLoader/wadors/metaData/getNumberValue.d.ts +3 -0
  112. package/dist/esm/src/imageLoader/wadors/metaData/getNumberValue.js +9 -0
  113. package/dist/esm/src/imageLoader/wadors/metaData/getNumberValues.d.ts +3 -0
  114. package/dist/esm/src/imageLoader/wadors/metaData/getNumberValues.js +20 -0
  115. package/dist/esm/src/imageLoader/wadors/metaData/getOverlayPlaneModule.d.ts +4 -0
  116. package/dist/esm/src/imageLoader/wadors/metaData/getOverlayPlaneModule.js +38 -0
  117. package/dist/esm/src/imageLoader/wadors/metaData/getSequenceItems.d.ts +3 -0
  118. package/dist/esm/src/imageLoader/wadors/metaData/getSequenceItems.js +14 -0
  119. package/dist/esm/src/imageLoader/wadors/metaData/getValue.d.ts +3 -0
  120. package/dist/esm/src/imageLoader/wadors/metaData/getValue.js +14 -0
  121. package/dist/esm/src/imageLoader/wadors/metaData/index.d.ts +7 -0
  122. package/dist/esm/src/imageLoader/wadors/metaData/index.js +7 -0
  123. package/dist/esm/src/imageLoader/wadors/metaData/metaDataProvider.d.ts +14 -0
  124. package/dist/esm/src/imageLoader/wadors/metaData/metaDataProvider.js +261 -0
  125. package/dist/esm/src/imageLoader/wadors/metaDataManager.d.ts +14 -0
  126. package/dist/esm/src/imageLoader/wadors/metaDataManager.js +47 -0
  127. package/dist/esm/src/imageLoader/wadors/register.d.ts +1 -0
  128. package/dist/esm/src/imageLoader/wadors/register.js +6 -0
  129. package/dist/esm/src/imageLoader/wadors/retrieveMultiframeMetadata.d.ts +15 -0
  130. package/dist/esm/src/imageLoader/wadors/retrieveMultiframeMetadata.js +26 -0
  131. package/dist/esm/src/imageLoader/wadouri/combineFrameInstanceDataset.d.ts +22 -0
  132. package/dist/esm/src/imageLoader/wadouri/combineFrameInstanceDataset.js +67 -0
  133. package/dist/esm/src/imageLoader/wadouri/dataSetCacheManager.d.ts +31 -0
  134. package/dist/esm/src/imageLoader/wadouri/dataSetCacheManager.js +142 -0
  135. package/dist/esm/src/imageLoader/wadouri/dataSetCacheManager_test.d.ts +1 -0
  136. package/dist/esm/src/imageLoader/wadouri/dataSetCacheManager_test.js +10 -0
  137. package/dist/esm/src/imageLoader/wadouri/dataset-from-partial-content.d.ts +6 -0
  138. package/dist/esm/src/imageLoader/wadouri/dataset-from-partial-content.js +56 -0
  139. package/dist/esm/src/imageLoader/wadouri/fileManager.d.ts +11 -0
  140. package/dist/esm/src/imageLoader/wadouri/fileManager.js +20 -0
  141. package/dist/esm/src/imageLoader/wadouri/getEncapsulatedImageFrame.d.ts +2 -0
  142. package/dist/esm/src/imageLoader/wadouri/getEncapsulatedImageFrame.js +33 -0
  143. package/dist/esm/src/imageLoader/wadouri/getPixelData.d.ts +3 -0
  144. package/dist/esm/src/imageLoader/wadouri/getPixelData.js +13 -0
  145. package/dist/esm/src/imageLoader/wadouri/getUncompressedImageFrame.d.ts +3 -0
  146. package/dist/esm/src/imageLoader/wadouri/getUncompressedImageFrame.js +47 -0
  147. package/dist/esm/src/imageLoader/wadouri/index.d.ts +43 -0
  148. package/dist/esm/src/imageLoader/wadouri/index.js +31 -0
  149. package/dist/esm/src/imageLoader/wadouri/loadFileRequest.d.ts +2 -0
  150. package/dist/esm/src/imageLoader/wadouri/loadFileRequest.js +17 -0
  151. package/dist/esm/src/imageLoader/wadouri/loadImage.d.ts +9 -0
  152. package/dist/esm/src/imageLoader/wadouri/loadImage.js +104 -0
  153. package/dist/esm/src/imageLoader/wadouri/metaData/extractPositioningFromDataset.d.ts +6 -0
  154. package/dist/esm/src/imageLoader/wadouri/metaData/extractPositioningFromDataset.js +80 -0
  155. package/dist/esm/src/imageLoader/wadouri/metaData/getImagePixelModule.d.ts +4 -0
  156. package/dist/esm/src/imageLoader/wadouri/metaData/getImagePixelModule.js +79 -0
  157. package/dist/esm/src/imageLoader/wadouri/metaData/getLUTs.d.ts +4 -0
  158. package/dist/esm/src/imageLoader/wadouri/metaData/getLUTs.js +44 -0
  159. package/dist/esm/src/imageLoader/wadouri/metaData/getModalityLUTOutputPixelRepresentation.d.ts +3 -0
  160. package/dist/esm/src/imageLoader/wadouri/metaData/getModalityLUTOutputPixelRepresentation.js +30 -0
  161. package/dist/esm/src/imageLoader/wadouri/metaData/getNumberValues.d.ts +3 -0
  162. package/dist/esm/src/imageLoader/wadouri/metaData/getNumberValues.js +16 -0
  163. package/dist/esm/src/imageLoader/wadouri/metaData/getOverlayPlaneModule.d.ts +4 -0
  164. package/dist/esm/src/imageLoader/wadouri/metaData/getOverlayPlaneModule.js +36 -0
  165. package/dist/esm/src/imageLoader/wadouri/metaData/index.d.ts +5 -0
  166. package/dist/esm/src/imageLoader/wadouri/metaData/index.js +5 -0
  167. package/dist/esm/src/imageLoader/wadouri/metaData/metaDataProvider.d.ts +2 -0
  168. package/dist/esm/src/imageLoader/wadouri/metaData/metaDataProvider.js +210 -0
  169. package/dist/esm/src/imageLoader/wadouri/parseImageId.d.ts +8 -0
  170. package/dist/esm/src/imageLoader/wadouri/parseImageId.js +20 -0
  171. package/dist/esm/src/imageLoader/wadouri/register.d.ts +2 -0
  172. package/dist/esm/src/imageLoader/wadouri/register.js +8 -0
  173. package/dist/esm/src/imageLoader/wadouri/retrieveMultiframeDataset.d.ts +18 -0
  174. package/dist/esm/src/imageLoader/wadouri/retrieveMultiframeDataset.js +57 -0
  175. package/dist/esm/src/imageLoader/wadouri/unpackBinaryFrame.d.ts +3 -0
  176. package/dist/esm/src/imageLoader/wadouri/unpackBinaryFrame.js +14 -0
  177. package/dist/esm/src/shared/calculateMinMax.d.ts +2 -0
  178. package/dist/esm/src/shared/calculateMinMax.js +24 -0
  179. package/dist/esm/src/shared/calculateMinMax_test.d.ts +1 -0
  180. package/dist/esm/src/shared/calculateMinMax_test.js +38 -0
  181. package/dist/esm/src/shared/decoders/decodeBigEndian.d.ts +4 -0
  182. package/dist/esm/src/shared/decoders/decodeBigEndian.js +28 -0
  183. package/dist/esm/src/shared/decoders/decodeHTJ2K.d.ts +5 -0
  184. package/dist/esm/src/shared/decoders/decodeHTJ2K.js +109 -0
  185. package/dist/esm/src/shared/decoders/decodeJPEG2000.d.ts +4 -0
  186. package/dist/esm/src/shared/decoders/decodeJPEG2000.js +93 -0
  187. package/dist/esm/src/shared/decoders/decodeJPEGBaseline12Bit-js.d.ts +5 -0
  188. package/dist/esm/src/shared/decoders/decodeJPEGBaseline12Bit-js.js +34 -0
  189. package/dist/esm/src/shared/decoders/decodeJPEGBaseline12Bit-wasm-not-yet-working.d.ts +0 -0
  190. package/dist/esm/src/shared/decoders/decodeJPEGBaseline12Bit-wasm-not-yet-working.js +1 -0
  191. package/dist/esm/src/shared/decoders/decodeJPEGBaseline8Bit.d.ts +3 -0
  192. package/dist/esm/src/shared/decoders/decodeJPEGBaseline8Bit.js +62 -0
  193. package/dist/esm/src/shared/decoders/decodeJPEGLS.d.ts +4 -0
  194. package/dist/esm/src/shared/decoders/decodeJPEGLS.js +84 -0
  195. package/dist/esm/src/shared/decoders/decodeJPEGLossless.d.ts +5 -0
  196. package/dist/esm/src/shared/decoders/decodeJPEGLossless.js +39 -0
  197. package/dist/esm/src/shared/decoders/decodeLittleEndian.d.ts +4 -0
  198. package/dist/esm/src/shared/decoders/decodeLittleEndian.js +29 -0
  199. package/dist/esm/src/shared/decoders/decodeRLE.d.ts +4 -0
  200. package/dist/esm/src/shared/decoders/decodeRLE.js +128 -0
  201. package/dist/esm/src/shared/getMinMax.d.ts +6 -0
  202. package/dist/esm/src/shared/getMinMax.js +16 -0
  203. package/dist/esm/src/shared/getMinMax_test.d.ts +1 -0
  204. package/dist/esm/src/shared/getMinMax_test.js +9 -0
  205. package/dist/esm/src/shared/getPixelDataTypeFromMinMax.d.ts +2 -0
  206. package/dist/esm/src/shared/getPixelDataTypeFromMinMax.js +22 -0
  207. package/dist/esm/src/shared/isColorImage.d.ts +1 -0
  208. package/dist/esm/src/shared/isColorImage.js +10 -0
  209. package/dist/esm/src/shared/scaling/bilinear.d.ts +1 -0
  210. package/dist/esm/src/shared/scaling/bilinear.js +32 -0
  211. package/dist/esm/src/shared/scaling/replicate.d.ts +1 -0
  212. package/dist/esm/src/shared/scaling/replicate.js +20 -0
  213. package/dist/esm/src/shared/scaling/scaleArray.d.ts +2 -0
  214. package/dist/esm/src/shared/scaling/scaleArray.js +15 -0
  215. package/dist/esm/src/types/DICOMLoaderDataSetWithFetchMore.d.ts +9 -0
  216. package/dist/esm/src/types/DICOMLoaderDataSetWithFetchMore.js +1 -0
  217. package/dist/esm/src/types/DICOMLoaderIImage.d.ts +13 -0
  218. package/dist/esm/src/types/DICOMLoaderIImage.js +1 -0
  219. package/dist/esm/src/types/DICOMLoaderImageOptions.d.ts +26 -0
  220. package/dist/esm/src/types/DICOMLoaderImageOptions.js +1 -0
  221. package/dist/esm/src/types/ImageFrame.d.ts +43 -0
  222. package/dist/esm/src/types/ImageFrame.js +1 -0
  223. package/dist/esm/src/types/LoadRequestFunction.d.ts +1 -0
  224. package/dist/esm/src/types/LoadRequestFunction.js +1 -0
  225. package/dist/esm/src/types/LoaderDecodeOptions.d.ts +4 -0
  226. package/dist/esm/src/types/LoaderDecodeOptions.js +1 -0
  227. package/dist/esm/src/types/LoaderOptions.d.ts +18 -0
  228. package/dist/esm/src/types/LoaderOptions.js +1 -0
  229. package/dist/esm/src/types/LutType.d.ts +6 -0
  230. package/dist/esm/src/types/LutType.js +1 -0
  231. package/dist/esm/src/types/MetadataModules.d.ts +66 -0
  232. package/dist/esm/src/types/MetadataModules.js +1 -0
  233. package/dist/esm/src/types/PixelDataTypedArray.d.ts +2 -0
  234. package/dist/esm/src/types/PixelDataTypedArray.js +1 -0
  235. package/dist/esm/src/types/WADORSMetaData.d.ts +4 -0
  236. package/dist/esm/src/types/WADORSMetaData.js +1 -0
  237. package/dist/esm/src/types/WebWorkerTypes.d.ts +64 -0
  238. package/dist/esm/src/types/WebWorkerTypes.js +1 -0
  239. package/dist/esm/src/types/XHRRequest.d.ts +16 -0
  240. package/dist/esm/src/types/XHRRequest.js +1 -0
  241. package/dist/esm/src/types/index.d.ts +14 -0
  242. package/dist/esm/src/types/index.js +1 -0
  243. package/dist/esm/src/version.d.ts +2 -0
  244. package/dist/esm/src/version.js +1 -0
  245. package/package.json +22 -10
  246. package/dist/cornerstoneDICOMImageLoaderNoWebWorkers.bundle.min.js +0 -2
  247. package/dist/cornerstoneDICOMImageLoaderNoWebWorkers.bundle.min.js.map +0 -1
  248. package/dist/dynamic-import/610.min.worker.js +0 -2
  249. package/dist/dynamic-import/610.min.worker.js.map +0 -1
  250. package/dist/dynamic-import/75788f12450d4c5ed494.wasm +0 -0
  251. package/dist/dynamic-import/945.min.worker.js +0 -2
  252. package/dist/dynamic-import/945.min.worker.js.map +0 -1
  253. package/dist/dynamic-import/index.worker.e62ecca63f1a2e124230.worker.js +0 -2
  254. package/dist/dynamic-import/index.worker.e62ecca63f1a2e124230.worker.js.map +0 -1
  255. package/dist/index.worker.bundle.min.worker.js +0 -2
  256. package/dist/index.worker.bundle.min.worker.js.map +0 -1
@@ -0,0 +1,4 @@
1
+ import { MetadataImagePixelModule } from '../../../types';
2
+ import { DataSet } from 'dicom-parser';
3
+ declare function getImagePixelModule(dataSet: DataSet): MetadataImagePixelModule;
4
+ export default getImagePixelModule;
@@ -0,0 +1,79 @@
1
+ function getLutDescriptor(dataSet, tag) {
2
+ if (!dataSet.elements[tag] || dataSet.elements[tag].length !== 6) {
3
+ return;
4
+ }
5
+ return [
6
+ dataSet.uint16(tag, 0),
7
+ dataSet.uint16(tag, 1),
8
+ dataSet.uint16(tag, 2),
9
+ ];
10
+ }
11
+ function getLutData(lutDataSet, tag, lutDescriptor) {
12
+ const lut = [];
13
+ const lutData = lutDataSet.elements[tag];
14
+ for (let i = 0; i < lutDescriptor[0]; i++) {
15
+ if (lutDescriptor[2] === 16) {
16
+ lut[i] = lutDataSet.uint16(tag, i);
17
+ }
18
+ else {
19
+ lut[i] = lutDataSet.byteArray[i + lutData.dataOffset];
20
+ }
21
+ }
22
+ return lut;
23
+ }
24
+ function populatePaletteColorLut(dataSet, imagePixelModule) {
25
+ imagePixelModule.redPaletteColorLookupTableDescriptor = getLutDescriptor(dataSet, 'x00281101');
26
+ imagePixelModule.greenPaletteColorLookupTableDescriptor = getLutDescriptor(dataSet, 'x00281102');
27
+ imagePixelModule.bluePaletteColorLookupTableDescriptor = getLutDescriptor(dataSet, 'x00281103');
28
+ if (imagePixelModule.redPaletteColorLookupTableDescriptor[0] === 0) {
29
+ imagePixelModule.redPaletteColorLookupTableDescriptor[0] = 65536;
30
+ imagePixelModule.greenPaletteColorLookupTableDescriptor[0] = 65536;
31
+ imagePixelModule.bluePaletteColorLookupTableDescriptor[0] = 65536;
32
+ }
33
+ const numLutEntries = imagePixelModule.redPaletteColorLookupTableDescriptor[0];
34
+ const lutData = dataSet.elements.x00281201;
35
+ const lutBitsAllocated = lutData.length === numLutEntries ? 8 : 16;
36
+ if (imagePixelModule.redPaletteColorLookupTableDescriptor[2] !==
37
+ lutBitsAllocated) {
38
+ imagePixelModule.redPaletteColorLookupTableDescriptor[2] = lutBitsAllocated;
39
+ imagePixelModule.greenPaletteColorLookupTableDescriptor[2] =
40
+ lutBitsAllocated;
41
+ imagePixelModule.bluePaletteColorLookupTableDescriptor[2] =
42
+ lutBitsAllocated;
43
+ }
44
+ imagePixelModule.redPaletteColorLookupTableData = getLutData(dataSet, 'x00281201', imagePixelModule.redPaletteColorLookupTableDescriptor);
45
+ imagePixelModule.greenPaletteColorLookupTableData = getLutData(dataSet, 'x00281202', imagePixelModule.greenPaletteColorLookupTableDescriptor);
46
+ imagePixelModule.bluePaletteColorLookupTableData = getLutData(dataSet, 'x00281203', imagePixelModule.bluePaletteColorLookupTableDescriptor);
47
+ }
48
+ function populateSmallestLargestPixelValues(dataSet, imagePixelModule) {
49
+ const pixelRepresentation = dataSet.uint16('x00280103');
50
+ if (pixelRepresentation === 0) {
51
+ imagePixelModule.smallestPixelValue = dataSet.uint16('x00280106');
52
+ imagePixelModule.largestPixelValue = dataSet.uint16('x00280107');
53
+ }
54
+ else {
55
+ imagePixelModule.smallestPixelValue = dataSet.int16('x00280106');
56
+ imagePixelModule.largestPixelValue = dataSet.int16('x00280107');
57
+ }
58
+ }
59
+ function getImagePixelModule(dataSet) {
60
+ const imagePixelModule = {
61
+ samplesPerPixel: dataSet.uint16('x00280002'),
62
+ photometricInterpretation: dataSet.string('x00280004'),
63
+ rows: dataSet.uint16('x00280010'),
64
+ columns: dataSet.uint16('x00280011'),
65
+ bitsAllocated: dataSet.uint16('x00280100'),
66
+ bitsStored: dataSet.uint16('x00280101'),
67
+ highBit: dataSet.uint16('x00280102'),
68
+ pixelRepresentation: dataSet.uint16('x00280103'),
69
+ planarConfiguration: dataSet.uint16('x00280006'),
70
+ pixelAspectRatio: dataSet.string('x00280034'),
71
+ };
72
+ populateSmallestLargestPixelValues(dataSet, imagePixelModule);
73
+ if (imagePixelModule.photometricInterpretation === 'PALETTE COLOR' &&
74
+ dataSet.elements.x00281101) {
75
+ populatePaletteColorLut(dataSet, imagePixelModule);
76
+ }
77
+ return imagePixelModule;
78
+ }
79
+ export default getImagePixelModule;
@@ -0,0 +1,4 @@
1
+ import { Element } from 'dicom-parser';
2
+ import { LutType } from '../../../types';
3
+ declare function getLUTs(pixelRepresentation: number, lutSequence: Element): LutType[];
4
+ export default getLUTs;
@@ -0,0 +1,44 @@
1
+ function getLUT(pixelRepresentation, lutDataSet) {
2
+ let numLUTEntries = lutDataSet.uint16('x00283002', 0);
3
+ if (numLUTEntries === 0) {
4
+ numLUTEntries = 65535;
5
+ }
6
+ let firstValueMapped = 0;
7
+ if (pixelRepresentation === 0) {
8
+ firstValueMapped = lutDataSet.uint16('x00283002', 1);
9
+ }
10
+ else {
11
+ firstValueMapped = lutDataSet.int16('x00283002', 1);
12
+ }
13
+ const numBitsPerEntry = lutDataSet.uint16('x00283002', 2);
14
+ const lut = {
15
+ id: '1',
16
+ firstValueMapped,
17
+ numBitsPerEntry,
18
+ lut: [],
19
+ };
20
+ for (let i = 0; i < numLUTEntries; i++) {
21
+ if (pixelRepresentation === 0) {
22
+ lut.lut[i] = lutDataSet.uint16('x00283006', i);
23
+ }
24
+ else {
25
+ lut.lut[i] = lutDataSet.int16('x00283006', i);
26
+ }
27
+ }
28
+ return lut;
29
+ }
30
+ function getLUTs(pixelRepresentation, lutSequence) {
31
+ if (!lutSequence || !lutSequence.items || !lutSequence.items.length) {
32
+ return;
33
+ }
34
+ const luts = [];
35
+ for (let i = 0; i < lutSequence.items.length; i++) {
36
+ const lutDataSet = lutSequence.items[i].dataSet;
37
+ const lut = getLUT(pixelRepresentation, lutDataSet);
38
+ if (lut) {
39
+ luts.push(lut);
40
+ }
41
+ }
42
+ return luts;
43
+ }
44
+ export default getLUTs;
@@ -0,0 +1,3 @@
1
+ import { DataSet } from 'dicom-parser';
2
+ declare function getModalityLUTOutputPixelRepresentation(dataSet: DataSet): number;
3
+ export default getModalityLUTOutputPixelRepresentation;
@@ -0,0 +1,30 @@
1
+ function getMinStoredPixelValue(dataSet) {
2
+ const pixelRepresentation = dataSet.uint16('x00280103');
3
+ const bitsStored = dataSet.uint16('x00280101');
4
+ if (pixelRepresentation === 0) {
5
+ return 0;
6
+ }
7
+ return -1 << (bitsStored - 1);
8
+ }
9
+ function getModalityLUTOutputPixelRepresentation(dataSet) {
10
+ const sopClassUID = dataSet.string('x00080016');
11
+ if (sopClassUID === '1.2.840.10008.5.1.4.1.1.2' ||
12
+ sopClassUID === '1.2.840.10008.5.1.4.1.1.2.1') {
13
+ return 1;
14
+ }
15
+ const rescaleIntercept = dataSet.floatString('x00281052');
16
+ const rescaleSlope = dataSet.floatString('x00281053');
17
+ if (rescaleIntercept !== undefined && rescaleSlope !== undefined) {
18
+ const minStoredPixelValue = getMinStoredPixelValue(dataSet);
19
+ const minModalityLutValue = minStoredPixelValue * rescaleSlope + rescaleIntercept;
20
+ if (minModalityLutValue < 0) {
21
+ return 1;
22
+ }
23
+ return 0;
24
+ }
25
+ if (dataSet.elements.x00283000 && dataSet.elements.x00283000.length > 0) {
26
+ return 0;
27
+ }
28
+ return dataSet.uint16('x00280103');
29
+ }
30
+ export default getModalityLUTOutputPixelRepresentation;
@@ -0,0 +1,3 @@
1
+ import { DataSet } from 'dicom-parser';
2
+ declare function getNumberValues(dataSet: DataSet, tag: string, minimumLength: number): number[];
3
+ export default getNumberValues;
@@ -0,0 +1,16 @@
1
+ function getNumberValues(dataSet, tag, minimumLength) {
2
+ const values = [];
3
+ const valueAsString = dataSet.string(tag);
4
+ if (!valueAsString) {
5
+ return;
6
+ }
7
+ const split = valueAsString.split('\\');
8
+ if (minimumLength && split.length < minimumLength) {
9
+ return;
10
+ }
11
+ for (let i = 0; i < split.length; i++) {
12
+ values.push(parseFloat(split[i]));
13
+ }
14
+ return values;
15
+ }
16
+ export default getNumberValues;
@@ -0,0 +1,4 @@
1
+ import { DataSet } from 'dicom-parser';
2
+ export default function getOverlayPlaneModule(dataSet: DataSet): {
3
+ overlays: any[];
4
+ };
@@ -0,0 +1,36 @@
1
+ export default function getOverlayPlaneModule(dataSet) {
2
+ const overlays = [];
3
+ for (let overlayGroup = 0x00; overlayGroup <= 0x1e; overlayGroup += 0x02) {
4
+ let groupStr = `x60${overlayGroup.toString(16)}`;
5
+ if (groupStr.length === 4) {
6
+ groupStr = `x600${overlayGroup.toString(16)}`;
7
+ }
8
+ const data = dataSet.elements[`${groupStr}3000`];
9
+ if (!data) {
10
+ continue;
11
+ }
12
+ const pixelData = [];
13
+ for (let i = 0; i < data.length; i++) {
14
+ for (let k = 0; k < 8; k++) {
15
+ const byte_as_int = dataSet.byteArray[data.dataOffset + i];
16
+ pixelData[i * 8 + k] = (byte_as_int >> k) & 0b1;
17
+ }
18
+ }
19
+ overlays.push({
20
+ rows: dataSet.uint16(`${groupStr}0010`),
21
+ columns: dataSet.uint16(`${groupStr}0011`),
22
+ type: dataSet.string(`${groupStr}0040`),
23
+ x: dataSet.int16(`${groupStr}0050`, 1) - 1,
24
+ y: dataSet.int16(`${groupStr}0050`, 0) - 1,
25
+ pixelData,
26
+ description: dataSet.string(`${groupStr}0022`),
27
+ label: dataSet.string(`${groupStr}1500`),
28
+ roiArea: dataSet.string(`${groupStr}1301`),
29
+ roiMean: dataSet.string(`${groupStr}1302`),
30
+ roiStandardDeviation: dataSet.string(`${groupStr}1303`),
31
+ });
32
+ }
33
+ return {
34
+ overlays,
35
+ };
36
+ }
@@ -0,0 +1,5 @@
1
+ export { default as getImagePixelModule } from './getImagePixelModule';
2
+ export { default as getLUTs } from './getLUTs';
3
+ export { default as getModalityLUTOutputPixelRepresentation } from './getModalityLUTOutputPixelRepresentation';
4
+ export { default as getNumberValues } from './getNumberValues';
5
+ export { default as metaDataProvider } from './metaDataProvider';
@@ -0,0 +1,5 @@
1
+ export { default as getImagePixelModule } from './getImagePixelModule';
2
+ export { default as getLUTs } from './getLUTs';
3
+ export { default as getModalityLUTOutputPixelRepresentation } from './getModalityLUTOutputPixelRepresentation';
4
+ export { default as getNumberValues } from './getNumberValues';
5
+ export { default as metaDataProvider } from './metaDataProvider';
@@ -0,0 +1,2 @@
1
+ declare function metaDataProvider(type: any, imageId: any): object;
2
+ export default metaDataProvider;
@@ -0,0 +1,210 @@
1
+ import external from '../../../externalModules';
2
+ import getNumberValues from './getNumberValues';
3
+ import parseImageId from '../parseImageId';
4
+ import dataSetCacheManager from '../dataSetCacheManager';
5
+ import getImagePixelModule from './getImagePixelModule';
6
+ import getOverlayPlaneModule from './getOverlayPlaneModule';
7
+ import getLUTs from './getLUTs';
8
+ import getModalityLUTOutputPixelRepresentation from './getModalityLUTOutputPixelRepresentation';
9
+ import { getDirectFrameInformation } from '../combineFrameInstanceDataset';
10
+ import multiframeDataset from '../retrieveMultiframeDataset';
11
+ import { getImageTypeSubItemFromDataset, extractOrientationFromDataset, extractPositionFromDataset, extractSpacingFromDataset, extractSliceThicknessFromDataset, } from './extractPositioningFromDataset';
12
+ import isNMReconstructable from '../../isNMReconstructable';
13
+ import { getInstanceModule, instanceModuleNames, } from '../../getInstanceModule';
14
+ function metaDataProvider(type, imageId) {
15
+ const { MetadataModules } = external.cornerstone.Enums;
16
+ const { dicomParser } = external;
17
+ if (Array.isArray(imageId)) {
18
+ return;
19
+ }
20
+ const parsedImageId = parseImageId(imageId);
21
+ if (type === MetadataModules.MULTIFRAME) {
22
+ const multiframeData = multiframeDataset.retrieveMultiframeDataset(parsedImageId.url);
23
+ if (!multiframeData.dataSet) {
24
+ return;
25
+ }
26
+ const multiframeInfo = getDirectFrameInformation(multiframeData.dataSet, multiframeData.frame);
27
+ return multiframeInfo;
28
+ }
29
+ let url = parsedImageId.url;
30
+ if (parsedImageId.frame) {
31
+ url = `${url}&frame=${parsedImageId.frame}`;
32
+ }
33
+ const dataSet = dataSetCacheManager.get(url);
34
+ if (!dataSet) {
35
+ return;
36
+ }
37
+ if (type === MetadataModules.GENERAL_STUDY) {
38
+ return {
39
+ studyDescription: dataSet.string('x00081030'),
40
+ studyDate: dicomParser.parseDA(dataSet.string('x00080020')),
41
+ studyTime: dicomParser.parseTM(dataSet.string('x00080030') || ''),
42
+ accessionNumber: dataSet.string('x00080050'),
43
+ };
44
+ }
45
+ if (type === MetadataModules.GENERAL_SERIES) {
46
+ return {
47
+ modality: dataSet.string('x00080060'),
48
+ seriesInstanceUID: dataSet.string('x0020000e'),
49
+ seriesNumber: dataSet.intString('x00200011'),
50
+ studyInstanceUID: dataSet.string('x0020000d'),
51
+ seriesDate: dicomParser.parseDA(dataSet.string('x00080021')),
52
+ seriesTime: dicomParser.parseTM(dataSet.string('x00080031') || ''),
53
+ acquisitionDate: dicomParser.parseDA(dataSet.string('x00080022')),
54
+ acquisitionTime: dicomParser.parseTM(dataSet.string('x00080032') || ''),
55
+ };
56
+ }
57
+ if (type === MetadataModules.GENERAL_IMAGE) {
58
+ return {
59
+ sopInstanceUID: dataSet.string('x00080018'),
60
+ instanceNumber: dataSet.intString('x00200013'),
61
+ lossyImageCompression: dataSet.string('x00282110'),
62
+ lossyImageCompressionRatio: dataSet.floatString('x00282112'),
63
+ lossyImageCompressionMethod: dataSet.string('x00282114'),
64
+ };
65
+ }
66
+ if (type === MetadataModules.PATIENT) {
67
+ return {
68
+ patientID: dataSet.string('x00100020'),
69
+ patientName: dataSet.string('x00100010'),
70
+ };
71
+ }
72
+ if (type === MetadataModules.PATIENT_STUDY) {
73
+ return {
74
+ patientAge: dataSet.intString('x00101010'),
75
+ patientSize: dataSet.floatString('x00101020'),
76
+ patientSex: dataSet.string('x00100040'),
77
+ patientWeight: dataSet.floatString('x00101030'),
78
+ };
79
+ }
80
+ if (type === MetadataModules.NM_MULTIFRAME_GEOMETRY) {
81
+ const modality = dataSet.string('x00080060');
82
+ const imageSubType = getImageTypeSubItemFromDataset(dataSet, 2);
83
+ return {
84
+ modality,
85
+ imageType: dataSet.string('x00080008'),
86
+ imageSubType,
87
+ imageOrientationPatient: extractOrientationFromDataset(dataSet),
88
+ imagePositionPatient: extractPositionFromDataset(dataSet),
89
+ sliceThickness: extractSliceThicknessFromDataset(dataSet),
90
+ pixelSpacing: extractSpacingFromDataset(dataSet),
91
+ numberOfFrames: dataSet.uint16('x00280008'),
92
+ isNMReconstructable: isNMReconstructable(imageSubType) && modality.includes('NM'),
93
+ };
94
+ }
95
+ if (type === MetadataModules.IMAGE_PLANE) {
96
+ const imageOrientationPatient = extractOrientationFromDataset(dataSet);
97
+ const imagePositionPatient = extractPositionFromDataset(dataSet);
98
+ const pixelSpacing = extractSpacingFromDataset(dataSet);
99
+ const sliceThickness = extractSliceThicknessFromDataset(dataSet);
100
+ let columnPixelSpacing = null;
101
+ let rowPixelSpacing = null;
102
+ if (pixelSpacing) {
103
+ rowPixelSpacing = pixelSpacing[0];
104
+ columnPixelSpacing = pixelSpacing[1];
105
+ }
106
+ let rowCosines = null;
107
+ let columnCosines = null;
108
+ if (imageOrientationPatient) {
109
+ rowCosines = [
110
+ parseFloat(imageOrientationPatient[0]),
111
+ parseFloat(imageOrientationPatient[1]),
112
+ parseFloat(imageOrientationPatient[2]),
113
+ ];
114
+ columnCosines = [
115
+ parseFloat(imageOrientationPatient[3]),
116
+ parseFloat(imageOrientationPatient[4]),
117
+ parseFloat(imageOrientationPatient[5]),
118
+ ];
119
+ }
120
+ return {
121
+ frameOfReferenceUID: dataSet.string('x00200052'),
122
+ rows: dataSet.uint16('x00280010'),
123
+ columns: dataSet.uint16('x00280011'),
124
+ imageOrientationPatient,
125
+ rowCosines,
126
+ columnCosines,
127
+ imagePositionPatient,
128
+ sliceThickness,
129
+ sliceLocation: dataSet.floatString('x00201041'),
130
+ pixelSpacing,
131
+ rowPixelSpacing,
132
+ columnPixelSpacing,
133
+ };
134
+ }
135
+ if (type === MetadataModules.CINE) {
136
+ return {
137
+ frameTime: dataSet.floatString('x00181063'),
138
+ };
139
+ }
140
+ if (type === MetadataModules.IMAGE_PIXEL) {
141
+ return getImagePixelModule(dataSet);
142
+ }
143
+ if (type === MetadataModules.VOI_LUT) {
144
+ const modalityLUTOutputPixelRepresentation = getModalityLUTOutputPixelRepresentation(dataSet);
145
+ return {
146
+ windowCenter: getNumberValues(dataSet, 'x00281050', 1),
147
+ windowWidth: getNumberValues(dataSet, 'x00281051', 1),
148
+ voiLUTSequence: getLUTs(modalityLUTOutputPixelRepresentation, dataSet.elements.x00283010),
149
+ };
150
+ }
151
+ if (type === MetadataModules.MODALITY_LUT) {
152
+ return {
153
+ rescaleIntercept: dataSet.floatString('x00281052'),
154
+ rescaleSlope: dataSet.floatString('x00281053'),
155
+ rescaleType: dataSet.string('x00281054'),
156
+ modalityLUTSequence: getLUTs(dataSet.uint16('x00280103'), dataSet.elements.x00283000),
157
+ };
158
+ }
159
+ if (type === MetadataModules.SOP_COMMON) {
160
+ return {
161
+ sopClassUID: dataSet.string('x00080016'),
162
+ sopInstanceUID: dataSet.string('x00080018'),
163
+ };
164
+ }
165
+ if (type === MetadataModules.PET_ISOTOPE) {
166
+ const radiopharmaceuticalInfo = dataSet.elements.x00540016;
167
+ if (radiopharmaceuticalInfo === undefined) {
168
+ return;
169
+ }
170
+ const firstRadiopharmaceuticalInfoDataSet = radiopharmaceuticalInfo.items[0].dataSet;
171
+ return {
172
+ radiopharmaceuticalInfo: {
173
+ radiopharmaceuticalStartTime: dicomParser.parseTM(firstRadiopharmaceuticalInfoDataSet.string('x00181072') || ''),
174
+ radionuclideTotalDose: firstRadiopharmaceuticalInfoDataSet.floatString('x00181074'),
175
+ radionuclideHalfLife: firstRadiopharmaceuticalInfoDataSet.floatString('x00181075'),
176
+ },
177
+ };
178
+ }
179
+ if (type === MetadataModules.OVERLAY_PLANE) {
180
+ return getOverlayPlaneModule(dataSet);
181
+ }
182
+ if (type === 'transferSyntax') {
183
+ let transferSyntaxUID;
184
+ try {
185
+ transferSyntaxUID = dataSet.string('x00020010');
186
+ }
187
+ catch (error) {
188
+ }
189
+ return {
190
+ transferSyntaxUID,
191
+ };
192
+ }
193
+ if (type === MetadataModules.PET_SERIES) {
194
+ return {
195
+ correctedImage: dataSet.string('x00280051'),
196
+ units: dataSet.string('x00541001'),
197
+ decayCorrection: dataSet.string('x00541102'),
198
+ };
199
+ }
200
+ if (type === MetadataModules.PET_IMAGE) {
201
+ return {
202
+ frameReferenceTime: dataSet.floatString(dataSet.string('x00541300') || ''),
203
+ actualFrameDuration: dataSet.intString(dataSet.string('x00181242')),
204
+ };
205
+ }
206
+ if (type === 'instance') {
207
+ return getInstanceModule(imageId, metaDataProvider, instanceModuleNames);
208
+ }
209
+ }
210
+ export default metaDataProvider;
@@ -0,0 +1,8 @@
1
+ export interface CornerstoneImageUrl {
2
+ scheme: string;
3
+ url: string;
4
+ frame: number;
5
+ pixelDataFrame: number;
6
+ }
7
+ declare function parseImageId(imageId: string): CornerstoneImageUrl;
8
+ export default parseImageId;
@@ -0,0 +1,20 @@
1
+ function parseImageId(imageId) {
2
+ const firstColonIndex = imageId.indexOf(':');
3
+ let url = imageId.substring(firstColonIndex + 1);
4
+ const frameIndex = url.indexOf('frame=');
5
+ let frame;
6
+ if (frameIndex !== -1) {
7
+ const frameStr = url.substring(frameIndex + 6);
8
+ frame = parseInt(frameStr, 10);
9
+ url = url.substring(0, frameIndex - 1);
10
+ }
11
+ const scheme = imageId.substring(0, firstColonIndex);
12
+ const adjustedFrame = frame !== undefined ? frame - 1 : undefined;
13
+ return {
14
+ scheme,
15
+ url,
16
+ frame,
17
+ pixelDataFrame: adjustedFrame,
18
+ };
19
+ }
20
+ export default parseImageId;
@@ -0,0 +1,2 @@
1
+ import * as cornerstoneImport from '@cornerstonejs/core';
2
+ export default function (cornerstone: typeof cornerstoneImport): void;
@@ -0,0 +1,8 @@
1
+ import { loadImage } from './loadImage';
2
+ import { metaDataProvider } from './metaData/index';
3
+ export default function (cornerstone) {
4
+ cornerstone.registerImageLoader('dicomweb', loadImage);
5
+ cornerstone.registerImageLoader('wadouri', loadImage);
6
+ cornerstone.registerImageLoader('dicomfile', loadImage);
7
+ cornerstone.metaData.addProvider(metaDataProvider);
8
+ }
@@ -0,0 +1,18 @@
1
+ /// <reference types="dicom-parser" />
2
+ declare function _get(uri: any): {
3
+ dataSet: import("dicom-parser").DataSet;
4
+ cacheCount: number;
5
+ };
6
+ declare function isMultiframeDataset(uri: any): boolean;
7
+ declare function retrieveMultiframeDataset(uri: any): {
8
+ dataSet: any;
9
+ frame: number;
10
+ };
11
+ declare function generateMultiframeWADOURIs(uri: any): any[];
12
+ declare const _default: {
13
+ _get: typeof _get;
14
+ generateMultiframeWADOURIs: typeof generateMultiframeWADOURIs;
15
+ retrieveMultiframeDataset: typeof retrieveMultiframeDataset;
16
+ isMultiframeDataset: typeof isMultiframeDataset;
17
+ };
18
+ export default _default;
@@ -0,0 +1,57 @@
1
+ import { loadedDataSets } from './dataSetCacheManager';
2
+ function _get(uri) {
3
+ if (!loadedDataSets[uri]) {
4
+ return;
5
+ }
6
+ return loadedDataSets[uri];
7
+ }
8
+ function isMultiframeDataset(uri) {
9
+ const dataSet = _get(uri);
10
+ return _isMultiframeDataset(dataSet);
11
+ }
12
+ function _isMultiframeDataset(dataSet) {
13
+ if (!dataSet) {
14
+ return false;
15
+ }
16
+ const numberOfFrames = dataSet.intString('x00280008');
17
+ return numberOfFrames && numberOfFrames > 1;
18
+ }
19
+ function retrieveFrameParameterIndex(uri) {
20
+ return uri.indexOf('&frame=');
21
+ }
22
+ function retrieveMultiframeDataset(uri) {
23
+ const frameParameterIndex = retrieveFrameParameterIndex(uri);
24
+ const multiframeURI = frameParameterIndex === -1 ? uri : uri.slice(0, frameParameterIndex);
25
+ const frame = parseInt(uri.slice(frameParameterIndex + 7), 10) || 1;
26
+ let dataSet;
27
+ if (loadedDataSets[multiframeURI]) {
28
+ dataSet = loadedDataSets[multiframeURI].dataSet;
29
+ }
30
+ else {
31
+ dataSet = undefined;
32
+ }
33
+ return {
34
+ dataSet,
35
+ frame,
36
+ };
37
+ }
38
+ function generateMultiframeWADOURIs(uri) {
39
+ const listWADOURIs = [];
40
+ const dataSet = _get(uri);
41
+ if (_isMultiframeDataset(dataSet)) {
42
+ const numberOfFrames = dataSet.intString('x00280008');
43
+ for (let i = 1; i <= numberOfFrames; i++) {
44
+ listWADOURIs.push(`${uri}&frame=${i}`);
45
+ }
46
+ }
47
+ else {
48
+ listWADOURIs.push(uri);
49
+ }
50
+ return listWADOURIs;
51
+ }
52
+ export default {
53
+ _get,
54
+ generateMultiframeWADOURIs,
55
+ retrieveMultiframeDataset,
56
+ isMultiframeDataset,
57
+ };
@@ -0,0 +1,3 @@
1
+ import { ByteArray } from 'dicom-parser';
2
+ declare function unpackBinaryFrame(byteArray: ByteArray, frameOffset: number, pixelsPerFrame: number): Uint8Array;
3
+ export default unpackBinaryFrame;
@@ -0,0 +1,14 @@
1
+ function isBitSet(byte, bitPos) {
2
+ return byte & (1 << bitPos);
3
+ }
4
+ function unpackBinaryFrame(byteArray, frameOffset, pixelsPerFrame) {
5
+ const pixelData = new Uint8Array(pixelsPerFrame);
6
+ for (let i = 0; i < pixelsPerFrame; i++) {
7
+ const bytePos = Math.floor(i / 8);
8
+ const byte = byteArray[bytePos + frameOffset];
9
+ const bitPos = i % 8;
10
+ pixelData[i] = isBitSet(byte, bitPos) ? 1 : 0;
11
+ }
12
+ return pixelData;
13
+ }
14
+ export default unpackBinaryFrame;
@@ -0,0 +1,2 @@
1
+ import { ImageFrame } from '../types';
2
+ export default function calculateMinMax(imageFrame: ImageFrame, strict?: boolean): void;
@@ -0,0 +1,24 @@
1
+ import getMinMax from './getMinMax';
2
+ export default function calculateMinMax(imageFrame, strict = true) {
3
+ const minMax = imageFrame.minAfterScale !== undefined ||
4
+ imageFrame.maxAfterScale !== undefined
5
+ ? { min: imageFrame.minAfterScale, max: imageFrame.maxAfterScale }
6
+ : getMinMax(imageFrame.pixelData);
7
+ const mustAssign = !(isNumber(imageFrame.smallestPixelValue) &&
8
+ isNumber(imageFrame.largestPixelValue));
9
+ if (strict === true && !mustAssign) {
10
+ if (imageFrame.smallestPixelValue !== minMax.min) {
11
+ console.warn('Image smallestPixelValue tag is incorrect. Rendering performance will suffer considerably.');
12
+ }
13
+ if (imageFrame.largestPixelValue !== minMax.max) {
14
+ console.warn('Image largestPixelValue tag is incorrect. Rendering performance will suffer considerably.');
15
+ }
16
+ }
17
+ else {
18
+ imageFrame.smallestPixelValue = minMax.min;
19
+ imageFrame.largestPixelValue = minMax.max;
20
+ }
21
+ }
22
+ function isNumber(numValue) {
23
+ return typeof numValue === 'number';
24
+ }
@@ -0,0 +1 @@
1
+ export {};